ヘッダーをスキップ

Oracle Fusion Middleware Oracle Business Intelligence Publisherレポート・デザイナーズ・ガイド
リリース11g (11.1.1)
部品番号 B63038-01
目次へ移動
目次
前のページへ移動
次のページへ移動

XSLサブテンプレートの設計

この章では、次のトピックについて説明します。

XSLサブテンプレートの理解

XSLサブテンプレートは、1つ以上の<xsl:template>定義で構成されたXSLファイルであり、各定義には書式設定または処理コマンドのブロックが含まれています。

XSLファイルは、カタログ内のサブ・テンプレート・オブジェクトとしてBI Publisherにアップロードするとき、書式設定または処理コマンドを実行するために他のXSLテンプレートからコールすることができます。

XSLサブテンプレートによって、レポートの設計者は複雑なデータやレイアウトの要件を容易に操作できるようになります。レポートの特定のセクション(たとえば、グラフ)のデータ構造を変換したり、スタイルシートを作成して、複雑なレイアウトを管理できます。

RTFメイン・テンプレート内でXSLコードを配置する位置

XSLサブテンプレートをメインRTFサブテンプレート内からコールするときは、XSLコマンドを使用します。このコードは、BI Publisherフィールド内に入力します(またはMicrosoft Wordフォーム・フィールド内)。XSLコードを直接RTFテンプレートの本文に入力することはできません。次の図に「BI Publisher」プロパティ・ダイアログを示します。

この図についてはドキュメントのテキストで説明しています

フォーム・フィールドの挿入の詳細は、次の章を参照してください。

「Template Builder for Wordを使用したRTFテンプレートの作成」の章の「フィールドの挿入

または

「RTFテンプレートの作成」の章の「フォーム・フィールド方式

XSLサブテンプレートの作成と実装処理の概要

XSLサブテンプレートの作成および実装手順は次のとおりです。

  1. 他のテンプレート内に含める、共通コンポーネントまたは処理命令を含んだXSLファイルを作成します。

    XSLサブ・テンプレートは、1つ以上のXSLテンプレート定義で構成されます。これらのテンプレートには、指定したノードに一致したときに適用するルールを含めます。

  2. コールまたはメインのレイアウトを作成し、メイン・テンプレートにサブテンプレートをインポートするコマンドおよびXSLサブテンプレートを該当するデータ要素に適用するコマンドを含めます。

  3. メイン・テンプレートをレポート定義にアップロードして、カタログ内にサブ・テンプレート・オブジェクトを作成します。

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>

メイン・テンプレートからのXSLサブテンプレートのコール

サブテンプレートをメイン・テンプレートに実装するには、メイン・テンプレートに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サブテンプレートへのパラメータの引渡し

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>

カタログでのサブ・テンプレート・オブジェクトの作成

サブテンプレート・ファイルをアップロードするには:

  1. グローバル・ヘッダーで、「新規」をクリックし、「サブ・テンプレート」をクリックします。サブ・テンプレートページが表示されます。

  2. テンプレート」リージョンで、「アップロード」をクリックし、「テンプレート・ファイルのアップロード」ダイアログを起動します。

  3. サブテンプレート・ファイルを参照および選択します。

  4. アップロード」をクリックします。

    サブテンプレート・ファイルが、「テンプレート」リージョンに選択したロケール名で表示されます(例: en_US)。

  5. 保存」をクリックします。「別名保存」ダイアログで、サブ・テンプレートを保存するカタログ・フォルダを選択します。「名前」に名前を入力し、「保存」をクリックします。次の図は、My Subtemplateと命名されたサブ・テンプレートを示しています。

    この図についてはドキュメントのテキストで説明しています

重要: XSLサブ・テンプレートの翻訳はサポートされていません。

サブ・テンプレート・オブジェクトは、.xsbの拡張子で保存されます。レポートにサブ・テンプレートをインポートするときは、ここで指定した名前に.xsbが付加されたものを使用します(例: MySubtemplate.xsb)。

XSLサブテンプレートの使用例

次に、XSLサブテンプレートを使用してレポートで実現可能な書式設定の例を示します。

HTML書式によるXMLデータの処理

すでに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タグは次のとおりです。

このデータがレポートに表示されると仮定した場合、これらのタグで指定された書式設定は次の図のように維持されます。

この図についてはドキュメントのテキストで説明しています

次のサブテンプレートは、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>
  1. このXSLサブテンプレート・ファイルをBI Publisherカタログの場所である、Shared Folders/Projectsにアップロードします。このサブテンプレート・ファイルをhtmlmarkup.xsbの名前で保存します。

  2. メイン・テンプレートで、サブテンプレート・ファイルをインポートする次の文を入力します。

    <?import:xdoxsl:///Projects/htmlmarkup.xsb?>
  3. 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>
  1. このファイルをchemical.xslの名前で保存します。

  2. カタログでのサブ・テンプレート・オブジェクトの作成」の項の手順に従って、カタログ内にサブ・テンプレート・オブジェクトを作成します。サブ・テンプレートの名前をChemicalとし(Chemical.xsbの名前で保存されます)、Shared Folders/Subtemplatesの場所に保存します。

  3. メインRTFテンプレートで、インポート構文を入力します。

    <?import:xdoxsl:///Subtemplates/Chemical.xsb?>
  4. レポートでXSLコードをレンダリングするには、データのループを作成し、VALUEフィールドで次の文を使用します。

    <xsl:call-template name="chemical_formatter">
    <xsl:with-param name="formula" select="VALUE"/> </xsl:call-template>

これは、書式設定テンプレートとH2OのFORMULA値をコールします。レンダリングを実行すると、式が予期されたH2Oと表示されます。