Oracle Fusion Middleware Oracle Business Intelligence Publisherレポート・デザイナーズ・ガイド リリース11g (11.1.1) 部品番号 B63038-01 | 目次 | 前 | 次 |
この章では、次のトピックについて説明します。
XSLサブテンプレートは、1つ以上の<xsl:template>定義で構成されたXSLファイルであり、各定義には書式設定または処理コマンドのブロックが含まれています。
XSLファイルは、カタログ内のサブ・テンプレート・オブジェクトとしてBI Publisherにアップロードするとき、書式設定または処理コマンドを実行するために他のXSLテンプレートからコールすることができます。
XSLサブテンプレートによって、レポートの設計者は複雑なデータやレイアウトの要件を容易に操作できるようになります。レポートの特定のセクション(たとえば、グラフ)のデータ構造を変換したり、スタイルシートを作成して、複雑なレイアウトを管理できます。
XSLサブテンプレートをメインRTFサブテンプレート内からコールするときは、XSLコマンドを使用します。このコードは、BI Publisherフィールド内に入力します(またはMicrosoft Wordフォーム・フィールド内)。XSLコードを直接RTFテンプレートの本文に入力することはできません。次の図に「BI Publisher」プロパティ・ダイアログを示します。
フォーム・フィールドの挿入の詳細は、次の章を参照してください。
「Template Builder for Wordを使用したRTFテンプレートの作成」の章の「フィールドの挿入」
または
「RTFテンプレートの作成」の章の「フォーム・フィールド方式」
XSLサブテンプレートの作成および実装手順は次のとおりです。
他のテンプレート内に含める、共通コンポーネントまたは処理命令を含んだXSLファイルを作成します。
XSLサブ・テンプレートは、1つ以上の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のデータの内容に従って、それらのテンプレートの適切な機能が適用されます。詳細な例は、次のユースケースを参照してください。
テンプレートを名前でコールします。
<xsl:call-template name=”templateName”/>
これは単純にテンプレートを名前でコールし、テンプレートが関数コールと同様に実行されます。また、この方法では、RTFサブテンプレートと同様にテンプレート・コールにパラメータを渡すことができます。次の「XSLサブテンプレートへのパラメータの引渡し」の項を参照してください。
詳細な例は、次のユースケースを参照してください。
XSLサブテンプレートにパラメータを渡すには、次のように最初に<xsl:template>でパラメータを宣言します。
<xsl:template name="templateName" match="/">
<xsl:param name="name" />
</xsl:template>
このテンプレートを次の構文を使用してコールします。
<xsl:call-template name=”templateName”>
<xsl:with-param name="name" select="expression">
<?--- Content:template -->
</xsl:with-param>
</xsl:call-template>
サブテンプレート・ファイルをアップロードするには:
グローバル・ヘッダーで、「新規」をクリックし、「サブ・テンプレート」をクリックします。サブ・テンプレートページが表示されます。
「テンプレート」リージョンで、「アップロード」をクリックし、「テンプレート・ファイルのアップロード」ダイアログを起動します。
サブテンプレート・ファイルを参照および選択します。
タイプ: XSLサブテンプレート・ファイルのxslを選択します。
ロケール: サブテンプレート・ファイルの該当するロケールを選択します。
「アップロード」をクリックします。
サブテンプレート・ファイルが、「テンプレート」リージョンに選択したロケール名で表示されます(例: en_US)。
「保存」をクリックします。「別名保存」ダイアログで、サブ・テンプレートを保存するカタログ・フォルダを選択します。「名前」に名前を入力し、「保存」をクリックします。次の図は、My Subtemplateと命名されたサブ・テンプレートを示しています。
重要: XSLサブ・テンプレートの翻訳はサポートされていません。
サブ・テンプレート・オブジェクトは、.xsbの拡張子で保存されます。レポートにサブ・テンプレートをインポートするときは、ここで指定した名前に.xsbが付加されたものを使用します(例: MySubtemplate.xsb)。
次に、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>
このXSLサブテンプレート・ファイルをBI Publisherカタログの場所である、Shared Folders/Projectsにアップロードします。このサブテンプレート・ファイルをhtmlmarkup.xsbの名前で保存します。
メイン・テンプレートで、サブテンプレート・ファイルをインポートする次の文を入力します。
<?import:xdoxsl:///Projects/htmlmarkup.xsb?>
HTMLマークアップを含むフィールドごとに、xsl apply-templateコマンドをコールします。この例では、2つのフィールドがあります。
<xsl:apply-templates select="PROJECT_SCOPE"/>
<xsl:apply-templates select="PROJECT_DEFINITION"/>
次の図は、テンプレート内のフィールド定義を示しています。
このコマンドは、PROJECT_SCOPEおよびPROJECT_DEFINITION要素の値をすべてのテンプレートに適用するようにプロセッサに命令します。次に、サブテンプレートの関数を循環実行して、一致を検索します。
このサブテンプレートの使用例は、化学式、数値計算または上付きおよび下付き文字を必要とするドキュメントで役立ちます。
たとえば、次のXMLデータでは、CO2をCO2として表示し、H2OをH2Oとして表示することが予期されます。
<ROWSET>
<ROW>
<FORMULA>CO2</FORMULA>
</ROW>
<ROW>
<FORMULA>H2O</FORMULA>
</ROW>
</ROWSET>
これはXSLサブテンプレートを使用することによって実現可能です。XSL構文を使用することで、任意の名前のテンプレートを定義できます。たとえば、FORMULAフィールドをパラメータに取り、文字を1つずつ読み取るchemical_formatterなどです。これは、文字を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>
このファイルをchemical.xslの名前で保存します。
「カタログでのサブ・テンプレート・オブジェクトの作成」の項の手順に従って、カタログ内にサブ・テンプレート・オブジェクトを作成します。サブ・テンプレートの名前をChemicalとし(Chemical.xsbの名前で保存されます)、Shared Folders/Subtemplatesの場所に保存します。
メインRTFテンプレートで、インポート構文を入力します。
<?import:xdoxsl:///Subtemplates/Chemical.xsb?>
レポートでXSLコードをレンダリングするには、データのループを作成し、VALUEフィールドで次の文を使用します。
<xsl:call-template name="chemical_formatter">
<xsl:with-param name="formula" select="VALUE"/> </xsl:call-template>
これは、書式設定テンプレートとH2OのFORMULA値をコールします。レンダリングを実行すると、式が予期されたH2Oと表示されます。
Copyright © 2010, 2011, Oracle and/or its affiliates. All rights reserved.