Oracle® Fusion Middleware Oracle Business Intelligence Publisherレポート・デザイナーズ・ガイド 12c (12.2.1.4.0) E96099-04 |
|
前 |
次 |
ここでは、XSLサブ・テンプレートの作成方法、およびRTFテンプレート用の再利用可能な拡張機能の作成方法について説明します。
XSLサブ・テンプレートは、1つ以上の<xsl:template>定義で構成されたXSLファイルであり、各定義には書式設定または処理コマンドのブロックが含まれています。
カタログ内のサブ・テンプレート・オブジェクトとしてBI Publisherにアップロードすると、このXSLファイルを別のRTFテンプレートからコールして書式設定または処理コマンドを実行できます。
XSLサブ・テンプレートは、データやレイアウトの複雑な要件に対処できます。XSLサブ・テンプレートを使用して、レポートの特定のセクション(たとえばチャート)のデータ構造を変換したり、複雑なレイアウトを管理するスタイルシートを作成します。
XSLサブ・テンプレートをメインRTFサブ・テンプレート内からコールするときは、XSLコマンドを使用します。
このコードは、BI Publisherフィールド内に入力します(またはMicrosoft Wordフォーム・フィールド内)。XSLコードは直接RTFテンプレートの本文に入力できません。
RTFテンプレートでのフォーム・フィールドの挿入の詳細は、「フィールドの挿入」を参照してください。
XSLサブ・テンプレートを使用して作業する際には、このプロセスに従う必要があります。
XSLサブ・テンプレートの作成および実装ステップは次のとおりです。
.xsl形式でファイルを保存できるエディタに命令を入力します。XSLサブ・テンプレートは、1つ以上のXSLテンプレート定義で構成されます。これらのテンプレートには、指定したノードに一致したときに適用するルールを含めます。
サブ・テンプレート定義の構造は次のとおりです。
<xsl:template name="name" match="pattern" mode="mode" priority="number"> <!--Content:(<xsl:param>*,template) --> </xsl:template>
次の表に、テンプレート宣言のコンポーネントの説明を示します。
コンポーネント | 説明 |
---|---|
xsl:template |
xsl:template要素は、必要な出力表示を生成するノードに適用するテンプレートを定義するために使用します。 |
name="name" |
オプションです。テンプレートの名前を指定します。 この属性を省略する場合は、match属性が必須になります。 |
match="pattern" |
オプションです。テンプレートの一致パターンです。 この属性を省略する場合は、name属性が必須になります。 |
priority="number" |
オプションです。テンプレートの数値の優先度を示す数値です。ノードには、複数のテンプレートを適用できます。常に優先度の値が最も高いテンプレートが選択されます。この値の範囲は、-9.0から9.0までです。 |
例:
<xsl:template match="P|p"> <fo:block white-space-collapse="false" padding-bottom="3pt" linefeed-treatment="preserve"> <xsl:apply-templates select="text()|*|@*"/> </fo:block> </xsl:template> <xsl:template match="STRONG|B|b"> <fo:inline font-weight="bold"> <xsl:apply-templates/> </fo:inline> </xsl:template>
サブテンプレートをメイン・テンプレートに実装するには、メイン・テンプレートに2つのエントリを作成します。
最初に、メイン・テンプレートにサブ・テンプレートをインポートします。インポートの構文で、カタログ内のサブ・テンプレートを検出するBI Publisherエンジンを指定します。
次に、サブ・テンプレートの内容をレンダリングするコール・コマンドを必要な位置に入力します。
次に示すように、メイン・テンプレート内のコール・テンプレート・コマンドより前の任意の位置にインポート・コマンドを入力します。
<?import:xdoxsl:///{path to subtemplate.xsb}?>
説明
path to subtemplate.xsbは、カタログ内のサブ・テンプレート.xsbオブジェクトへのパスです。
次に例を示します。
<?import:xdoxsl:///Executive/Financial Reports/mySubtemplate.xsb?>
XSLサブ・テンプレート・ファイル内で定義されたテンプレート文はデータ要素に適用されます。インポートしたXSLサブテンプレート内のテンプレート定義は、2種類の方法でコールできます。
データの内容を一致基準と照合します。
<xsl:apply-templates select="data_element"/>
このメソッドでは、XSLサブ・テンプレートで定義されたすべてのテンプレートが、指定されたdata_elementに適用されます。data_elementのデータの内容に従って、それらのテンプレートの適切な機能が適用されます。詳細な例は、「HTML書式によるXMLデータの処理」に示すユースケースを参照してください。
テンプレートを名前でコールします。
<xsl:call-template name="templateName"/>
このメソッドでは、テンプレートが名前でコールされ、テンプレートが関数コールと同様に実行されます。また、RTFサブ・テンプレートと同様にテンプレート・コールにパラメータを渡すことができます。「XSLサブ・テンプレートへのパラメータの引渡し」を参照してください。
詳細な例は、「データの一部に対する書式設定の動的な適用」に示すユースケースを参照してください。
サブ・テンプレート・ファイルをアップロードするには、次のステップに従います。
サブ・テンプレート・ファイルをアップロードするには:
サブ・テンプレート・オブジェクトは、拡張子.xsbで保存されます。レポートにサブ・テンプレートをインポートするときは、ここで指定した名前に.xsbが付加されたものを使用します(例: MySubtemplate.xsb)。
XSLサブ・テンプレートでは、翻訳はサポートされていません。
次に、XSLサブテンプレートを使用してレポートで実現可能な書式設定の例を示します。
すでにHTML書式設定を含んだXMLデータがあり、その書式設定をレポートで維持する場合は、XSLサブテンプレートを使用してHTMLの書式設定コマンドをBI Publisherで処理可能なXSLの同等要素にマップします。
HTMLはXHTML書式で記述されている必要があります。つまり、データ内のすべてのHTMLタグに開始および終了タグが必要です。たとえば、データで改行に単純な<BR>
を使用している場合は、このソリューションを使用する前に終了タグの</BR>
を追加する必要があります。
次に、HTML書式設定のサンプル・データを示します。
<DATA> <ROW> <PROJECT_NAME>Project Management</PROJECT_NAME> <PROJECT_SCOPE> <p>Develop an application to produce <i>executive-level summaries</i> and detailed project reports. The application will allow users to: </p> <p>Import existing MS Project files </p> <p>Allow the user to map file-specific resources to a central database entities (i.e., people) and projects; </p> <p>Provide structured output that can be viewed by staff and executives. </p> </PROJECT_SCOPE> <PROJECT_DEFINITION><b>Information about current projects is not readily available to executives.</b> Providing this information creates a reporting burden for IT staff, who may already maintain this information in Microsoft Project files. </PROJECT_DEFINITION> </ROW> </DATA>
このサンプルで使用されているHTMLタグは次のとおりです。
<p>
- 段落タグ
<i>
- 斜体タグ
<b>
- 太字タグ
次の図に示すように、これらのタグで指定された書式設定を保持してこれを表示することがレポートの要件だとします。
次のサブ・テンプレートは、XSL構文を使用してXMLデータ内の3つのHTMLタグを対応付けています。次にテンプレートで、対応するHTML文字列がXSLFOの同等要素に置換されます。
<xsl:template match="P|p"> <fo:block white-space-collapse="false" padding-bottom="3pt" linefeed-treatment="preserve"> <xsl:apply-templates select="text()|*|@*"/> </fo:block> </xsl:template> <xsl:template match="STRONG|B|b"> <fo:inline font-weight="bold"> <xsl:apply-templates/> </fo:inline> </xsl:template> <xsl:template match="EM|I|i"> <fo:inline font-style="italic"> <xsl:apply-templates/> </fo:inline> </xsl:template>
このサブ・テンプレートの使用例は、化学式、数値計算または上付きおよび下付き文字を必要とするドキュメントで役立ちます。
たとえば、次のXMLデータでは、CO2をCO2として表示し、H2OをH2Oとして表示することが予期されます。
<ROWSET> <ROW> <FORMULA>CO2</FORMULA> </ROW> <ROW> <FORMULA>H2O</FORMULA> </ROW> </ROWSET>
これはXSLサブ・テンプレートを使用することによって実現可能です。XSL構文を使用することで、任意の名前のテンプレートを定義できます。たとえば、chemical_formatterは、FORMULAフィールドをパラメータとして取得し、文字を1つずつ読み取ります。これは、文字を0 - 9の数字と比較し、一致がある場合は次のXSL FO構文を使用して下付き文字にします。
<fo:inline baseline-shift="sub" font-size="75%">
XSLテンプレート文のサンプル・コードは次のとおりです。
<xsl:template name="chemical_formatter"> <! - accepts a parameter e.g. H2O - > <xsl:param name="formula"/> <! - Takes the first character of the string and tests it to see if it is a number between 0-9 - > <xsl:variable name="each_char" select="substring($formula,1,1)"/> <xsl:choose> <xsl:when test="$each_char='1' or $each_char='2' or $each_char='3' or $each_char='4' or $each_char='5' or $each_char='6' or $each_char='7' or $each_char='8' or $each_char='9' or $each_char='0'"> <! - if it is numeric it sets the FO subscripting properties - > <fo:inline baseline-shift="sub" font-size="75%"> <xsl:value-of select="$each_char"/> </fo:inline> </xsl:when> <xsl:otherwise> <! - otherwise the charater is left as is - > <fo:inline baseline-shift="normal"> <xsl:value-of select="$each_char"/> </fo:inline> </xsl:otherwise> </xsl:choose> <! - test if there are other chars in the string, if so the recall the template - > <xsl:if test="substring-after($formula,$each_char) !=''"> <xsl:call-template name="chemical_formater"> <xsl:with-param name="formula"> <xsl:value-of select="substring-after($formula,$each_char)"/> </xsl:with-param> </xsl:call-template> </xsl:if> </xsl:template>
これは、書式設定テンプレートとH2OのFORMULA値をコールします。レンダリングを実行すると、式が予期どおりにH2Oと表示されます。