ヘッダーをスキップ

# RTFテンプレートの作成

## はじめに

リッチ・テキスト・フォーマット（RTF）は、Microsoft Wordなどの一般的な文書処理アプリケーションで使用されている仕様です。RTFは、文書を保存するときに選択できるファイル・タイプ・オプションの1つです。

XML PublisherのRTFテンプレート・パーサーは、RTFファイル・タイプとして保存された文書をXSL-FOに変換します。これによって、標準的な文書処理アプリケーションの多くの設計機能を使用してレポート設計を作成でき、XML Publisherではその設計を認識して保守します。

設計時には、XML Publisherの簡略化されたXSL式用のタグを使用して、データ・フィールドと他のマークアップをテンプレートに追加します。これらのタグは、XMLレポート・データをレポート・レイアウトに関連付けます。XSLの知識があり、簡略化されたタグを使用しない場合のために、XML Publisherではテンプレートでの純粋なXSL要素の使用もサポートしています。

また、XML Publisherでは、使用している文書処理アプリケーションの書式設定機能に加えて、条件付き書式設定、動的データ列、総合計、チャートなどの拡張レポート機能もサポートしています。

テンプレートにコードを直接挿入する場合は、すべてのXSL要素、多くのFO要素、およびXML Publisherによって拡張された一連のSQL式を挿入できます。

## サポートされているモード

XML Publisherでは、RTFテンプレートを作成する次の2つの方式がサポートされています。

- 基本RTF方式

  XML Publisherの簡略化された構文を使用してテンプレートを設計するには、RTFバージョン1.6以上のライターをサポートしている文書処理アプリケーションを使用します。

- フォーム・フィールド方式

  Microsoft Wordのフォーム・フィールド機能を使用すると、構文をテンプレートの設計に直接配置するのではなく、非表示のフォーム・フィールドに配置できます。XML Publisherでは、Microsoft Windows 2000（以上）でのMicrosoft Word 2000（以上）をサポートしています。

  注意: 簡略化された構文ではなくXSLまたはXSL:FOコードを使用する場合は、フォーム・フィールド方式を使用する必要があります。

このマニュアルでは、これら2つの方式を使用したRTFテンプレートの作成方法を説明します。

## 前提条件

テンプレートの設計には、次の前提条件が必要です。

- データに適用するビジネス・ルールをソース・レポートから把握する。

- ソース・レポートのサンプルをXMLで生成する。

- 使用している文書処理アプリケーションの書式設定機能に関する知識がある。

## 概要

RTFテンプレート・ファイルは、次の2つの基本ステップで作成します。

1. テンプレート・レイアウトの設計

   使用している文書処理アプリケーションの書式設定機能を使用して、ファイルをRTFとして保存します。

2. テンプレート・レイアウトのマークアップ

   XML Publisherの簡略化されたタグを挿入します。

テンプレート・レイアウトを設計するときは、XML入力ファイルをレイアウトに関連付ける方法を理解する必要があります。この章では、XML入力ファイルを使用したテンプレート・レイアウトのサンプルを提示して、マークアップ・タグをテンプレートに追加するための適切な関連付けを行う方法を説明します。

## XML Publisher Template Builderの使用

Template BuilderはMicrosoft Wordの拡張機能であり、RTFテンプレートの開発を簡略化します。このビルダーによって、この章で説明する手動による多くの手順が自動化されます。このマニュアルとともにこのビルダーを使用することで、生産性を向上できます。

Template BuilderはMicrosoft Wordと緊密に統合されており、次の機能を実行できます。

- データ・フィールドの挿入

- データ・ドリブン表の挿入

- データ・ドリブン・フォームの挿入

- データ・ドリブン・チャートの挿入

- サンプルのXMLデータを使用したテンプレートのプレビュー

- フォーム・フィールドの内容のブラウズと更新

- XLIFF翻訳ファイルへのボイラープレート・テキストの抽出と翻訳のテスト

この章では、これらの機能を手動で実行する手順を説明します。Template Builderの使用方法の説明とチュートリアルは、このツールに同梱されているReadmeファイルおよびヘルプ・ファイルから入手できます。

## テンプレート・レイアウトへのXMLデータの関連付け

次に、Payables Invoice Registerのサンプル・レイアウトを示します。

サンプル・テンプレート・レイアウト

次の点に注意してください。

- テンプレートで定義されているデータ・フィールド

  例: Supplier、Invoice Number、Invoice Date

- レポートの実行時に繰り返されるテンプレートの要素

  たとえば、テンプレートのすべてのフィールドは、レポート対象の仕入先ごとに繰り返されます。また、請求書表の各行は、レポート対象の請求ごとに繰り返されます。

### XML入力ファイル

次に、このPayables Invoice Registerレポート・テンプレートへの入力として使用されるXMLファイルを示します。

注意: 次に示すXML出力の例では、簡略化のために、実際のPayablesレポート出力を変更しています。

     <?xml version="1.0" encoding="WINDOWS-1252" ?>
     - <VENDOR_REPORT>
      - <LIST_G_VENDOR_NAME>
       - <G_VENDOR_NAME>
         <VENDOR_NAME>COMPANY A</VENDOR_NAME>
       -  <LIST_G_INVOICE_NUM>
        -  <G_INVOICE_NUM>
           <SET_OF_BOOKS_ID>124</SET_OF_BOOKS_ID>
           <GL_DATE>10-NOV-03</GL_DATE>
           <INV_TYPE>Standard</INV_TYPE>
           <INVOICE_NUM>031110</INVOICE_NUM>
           <INVOICE_DATE>10-NOV-03</INVOICE_DATE>
           <INVOICE_CURRENCY_CODE>EUR</INVOICE_CURRENCY_CODE>
           <ENT_AMT>122</ENT_AMT>
           <ACCTD_AMT>122</ACCTD_AMT>
           <VAT_CODE>VAT22%</VAT_CODE>
          </G_INVOICE_NUM>
         </LIST_G_INVOICE_NUM>
         <ENT_SUM_VENDOR>1000.00</ENT_SUM_VENDOR>
         <ACCTD_SUM_VENDOR>1000.00</ACCTD_SUM_VENDOR>
        </G_VENDOR_NAME>
       </LIST_G_VENDOR_NAME>
      <ACCTD_SUM_REP>108763.68</ACCTD_SUM_REP>
      <ENT_SUM_REP>122039</ENT_SUM_REP>
     </VENDOR_REPORT>

XMLファイルは複数の要素で構成されています。各タグ・セットが1つの要素です。たとえば、<INVOICE_DATE> </INVOICE_DATE>は請求日要素です。INVOICE_DATEはタグ名です。両方のタグに囲まれたデータが要素の値です。たとえば、INVOICE_DATEの値は10-NOV-03です。

XMLファイルの要素には階層構造があります。つまり、要素には親子関係があります。前述のXMLサンプルでは、ある要素のタグの間に別の要素が含まれています。別の要素を含んでいる要素が親で、含まれている要素が子になります。

すべてのXMLファイルには、他のすべての要素を含むルート要素が1つあります。前述の例では、VENDOR_REPORTがルート要素です。LIST_G_VENDOR_NAME、ACCTD_SUM_REPおよびENT_SUM_REPの各要素はVENDOR_REPORTタグの間に含まれており、これらはVENDOR_REPORTの子要素になります。各子要素には、それ自体の子要素を指定できます。

### プレースホルダとグループの識別

テンプレートの内容とレイアウトは、XML入力ファイルの内容と階層に対応している必要があります。テンプレート内の各データ・フィールドは、XMLファイル内の要素にマッピングされます。また、テンプレート内の繰返し要素の各グループは、XMLファイル内の親子関係に対応している必要があります。

データ・フィールドをマッピングするには、プレースホルダを定義します。繰返し要素を指定するには、グループを定義します。

注意: 受信したXMLデータの階層とは異なるグループ化がレポートで必要な場合、XML Publisherはデータの再グループ化をサポートしています。この機能の詳細は、「XMLデータの再グループ化」を参照してください。

### プレースホルダ

レポート・テンプレート内の各データ・フィールドは、XMLファイル内の要素に対応している必要があります。テンプレート設計をマークアップするときは、XML要素のプレースホルダを定義します。このプレースホルダによって、テンプレートのレポート・フィールドがXML要素にマッピングされます。プレースホルダは、実行時に、XMLデータ・ファイル内にある同名の要素の値に置換されます。

たとえば、サンプルのレポート・レイアウトの「Supplier」フィールドは、XML要素のVENDOR_NAMEに対応しています。テンプレートをマークアップするときは、「Supplier」フィールドの位置にVENDOR_NAMEのプレースホルダを作成します。このプレースホルダは、実行時に、XMLファイル内の要素の値（サンプル・ファイルの値はCOMPANY A）に置換されます。

### 繰返し要素のグループの識別

サンプル・レポートには、仕入先とその請求書がリストされています。レポートには、仕入先ごとに繰り返されるフィールドがあります。その1つが仕入先の請求書です。さらに、請求書ごとに繰り返されるフィールドがあります。つまり、レポートは、次の2グループの繰返しフィールドで構成されています。

- 仕入先ごとに繰り返されるフィールド

- 請求書ごとに繰り返されるフィールド

請求書グループは仕入先グループ内にネストされています。これは、次のように表すことができます。

Suppliers

- Supplier Name

- Invoices

  - Invoice Num

  - Invoice Date

  - GL Date

  - Currency

  - Entered Amount

  - Accounted Amount

- Total Entered Amount

- Total Accounted Amount

この構造をXML入力ファイルの階層と比較します。前述の仕入先グループに属するフィールドは、要素G_VENDOR_NAMEの子になります。また、請求書グループに属するフィールドは、要素G_INVOICE_NUMの子になります。

グループを定義することによって、表示対象のフィールド（子）が含まれる要素（親）の出現を毎回XML Publisherに通知します。実行時に、XML Publisherは要素をループするたびにこのフィールドを表示します。

## テンプレート・レイアウトの設計

設計を作成するには、使用している文書処理アプリケーションの書式設定機能を使用します。

次に例を示します。

- テキストのサイズ、フォントおよび配置の選択

- 箇条書きと番号の挿入

- 段落ごとの境界線の描画

- 透かしの挿入

- イメージ（jpg、gifまたはpng）の挿入

- 表の自動書式設定機能の使用

- ヘッダーとフッターの挿入

  ヘッダーとフッターの挿入に関する追加情報は、「ヘッダーとフッターの定義」を参照してください。

Microsoft Wordでサポートされている書式設定機能の詳細は、「サポート対象のシステム固有の書式設定機能」を参照してください。その他の書式設定機能とレポート機能については、この項の最後に説明します。

## テンプレート・レイアウトへのマークアップの追加

XML Publisherは、文書処理アプリケーションで適用する書式設定をXSL-FOに変換します。マークアップを追加して、レイアウトとXMLファイル間のマッピングを作成し、書式で直接表現できない機能を挿入します。

最も基本的なマークアップ要素は、XMLデータ要素を定義するプレースホルダ、および繰返し要素を定義するグループです。

XML Publisherは、マークアップをテンプレートに追加するためのタグを提供します。

注意: XML Publisherのタグと同等のXSLについては、「XSLの同等要素」を参照してください。

## プレースホルダの作成

プレースホルダによって、テンプレート・フィールドがXML要素データ・フィールドにマッピングされます。プレースホルダは、実行時に、XMLデータ・ファイル内にある同名の要素の値に置換されます。

プレースホルダは、次の構文を使用して文書に入力します。

<?XML element tag name?>

注意: プレースホルダは、XML要素タグ名と正確に一致している必要があります。大/小文字が区別されます。

文書にプレースホルダを挿入するには、次の2つの方式があります。

1. 基本RTF方式: プレースホルダ構文をテンプレート文書に直接挿入します。

2. フォーム・フィールド方式: （Microsoft Wordが必要）プレースホルダ構文をMicrosoft Wordの「Text Form Field Options」ウィンドウに挿入します。この方式を使用すると、テンプレートの外観を維持できます。

### 基本RTF方式

XMLデータ値を表示する文書にプレースホルダ構文を入力します。

次の構文を使用して、要素のXMLタグ名を入力します。

<?XML element tag name?>

次の例では、テンプレート・フィールド「Supplier」がXML要素VENDOR_NAMEにマッピングされます。文書には次のように入力します。

<?VENDOR_NAME?>

次の図に、テンプレートへの入力を示します。

### フォーム・フィールド方式

Microsoft Wordの「Text Form Field Options」ウィンドウを使用してプレースホルダ・タグを挿入します。

1. Microsoft Wordアプリケーションで、「Forms」ツールバーを使用可能にします。

2. プレースホルダを作成する位置にカーソルを置きます。

3. 「Text Form Field」ツールバー・アイコンを選択します。この操作によって、フォーム・フィールド領域が文書に挿入されます。

4. フォーム・フィールド領域をダブルクリックして、「Text Form Field Options」ダイアログ・ボックスを起動します。

5. （オプション）「Default text」フィールドに、フィールドの説明を入力します。このフィールドに入力した内容がテンプレートのプレースホルダの位置に移入されます。

   たとえば、「Supplier 1」と入力します。

6. 「Add Help Text」ボタンを選択します。

7. 次の構文を使用して、ヘルプ・テキスト入力フィールドにXML要素のタグ名を入力します。

   <?XML element tag name?>

   テキスト入力フィールドには、複数の要素タグ名を入力できます。

   次の例では、レポート・フィールド「Supplier」がXML要素VENDOR_NAMEにマッピングされます。「Form Field Help Text」フィールドには次のように入力します。

   <?VENDOR_NAME?>

   次の図に、「Text Form Field Options」ダイアログ・ボックス、および「Supplier」フィールドに適切な入力がある「Form Field Help Text」ダイアログ・ボックスを示します。

   ヒント: XML Publisher構文の文字列が長い場合、「Status Bar」タブのかわりに「Help Key (F1)」タブを使用します。「Help Key (F1)」タブでは、より多くのテキストを入力できます。

8. 「OK」を選択して適用します。

   テンプレートのフォーム・フィールドに「Default text」の入力内容が表示されます。

   次の図に、追加のフォーム・フィールド・マークアップが表示されたテンプレートの「Supplier」フィールドを示します。

### この例のまとめ

次の表に、この例を作成するために入力したすべての内容を示します。テンプレート・フィールド名はテンプレートでの表示名です。デフォルト・テキスト入力は、「Text Form Field Options」ダイアログ・ボックスの「Default Text」フィールドに入力した値です（フォーム・フィールド方式の場合のみ）。プレースホルダ入力は、「Form Field Help Text」フィールド（フォーム・フィールド方式の場合）またはテンプレートに直接入力したXML要素タグ名です。

テンプレート・フィールド名 | デフォルト・テキスト入力（フォーム・フィールド方式） | プレースホルダ入力（XMLタグ名）
--- | --- | ---
Invoice Num | 1234566 | <?INVOICE_NUM?>
Invoice Date | 1-Jan-2004 | <?INVOICE_DATE?>
GL Date | 1-Jan-2004 | <?GL_DATE?>
Curr | USD | <?INVOICE_CURRENCY_CODE?>
Entered Amt | 1000.00 | <?ENT_AMT?>
Accounted Amt | 1000.00 | <?ACCTD_AMT?>
（Entered Amount列の合計） | 1000.00 | <?ENT_SUM_VENDOR?>
（Accounted Amount列の合計） | 1000.00 | <?ACCTD_SUM_VENDOR?>

次の図に、フォーム・フィールドのプレースホルダ・マークアップが完了したPayables Invoice Registerを示します。

完了した基本RTFマークアップについては、「基本RTFマークアップが完了したPayables Invoice Register」を参照してください。

## グループの定義

グループを定義することによって、表示対象のフィールドが含まれる要素の出現を毎回XML Publisherに通知します。実行時に、XML Publisherは要素をループするたびにこのフィールドを表示します。

次の例では、XMLファイルのG_VENDOR_NAMEが出現するたびに、その子要素であるVENDOR_NAME（仕入先名）、G_INVOICE_NUM（請求書グループ）、入力済金額合計および計上済金額合計をテンプレートで表示します。さらに、G_INVOICE_NUM（請求書グループ）が出現するたびに、請求書番号、請求日、GL記帳日、通貨、入力済金額および計上済金額をテンプレートで表示します。

繰返しフィールドのグループを指定するには、繰り返す要素の前後にグループ・タグを挿入します。

最初の要素の前に、次のタグを挿入します。

<?for-each:XML group element tag name?>

最後の要素の後に、次のタグを挿入します。

<?end for-each?>

### グループ化のシナリオ

グループ要素は、XML入力ファイルの繰返し要素の親であることが必要です。

- テキストまたは書式設定要素の前後にグループ・タグを挿入すると、グループ・タグに囲まれたテキストまたは書式設定要素が繰り返されます。

- 表の前後にタグを挿入すると、表が繰り返されます。

- 表セル内のテキストの前後にタグを挿入すると、タグに囲まれた表セル内のテキストが繰り返されます。

- 同じ表の行内にある2つの異なる表セルの前後にタグを挿入すると、その1行が繰り返されます。

- 表内の2つの異なる行の前後にタグを挿入すると、タグに囲まれた行が繰り返されます（グループ終了タグを含む行は繰り返されません）。

### 基本RTF方式

タグを文書に入力して、繰返し要素グループの開始と終了を定義します。

この例でSuppliersグループを作成するには、次のタグを挿入します。

<?for-each:G_VENDOR_NAME?>

このタグは、すでに作成してある「Supplier」フィールドの前に挿入します。

文書内の要約行の後に、<?end for-each?>を挿入します。

次の図に、基本RTFグループ化とプレースホルダ・マークアップを設定したPayables Invoice Registerを示します。

### フォーム・フィールド方式

1. フォーム・フィールドを挿入して、グループの開始を指定します。

   ヘルプ・テキスト・フィールドに、次のように入力します。

   <?for-each:group element tag name?>

   この例のSuppliersグループを作成するには、すでに作成してある「Suppliers」フィールドの前にフォーム・フィールドを挿入します。ヘルプ・テキスト・フィールドには次のように入力します。

   <?for-each:G_VENDOR_NAME?>

   この例では、デフォルト・テキスト「Group: Suppliers」を入力して、テンプレートのグループの開始を指定します。デフォルト・テキストは必須ではありませんが、テンプレートが理解しやすくなります。

2. グループ内の最後のプレースホルダの後にフォーム・フィールドを挿入します。ヘルプ・テキスト・フィールドに、<?end for-each?>と入力します。

   この例では、要約行の後にデフォルト・テキスト「End: Suppliers」を入力して、テンプレートのグループの終了を指定します。

   次の図に、Suppliersグループを指定するマークアップを追加した後のテンプレートを示します。

### この例のまとめ

この例の2番目のグループは請求書グループです。このグループの繰返し要素は表に表示されます。請求書ごとに表の行が繰り返されます。これらの要素を含むグループを表内に作成します。

注意: 請求書ごとに繰り返されるのは、表全体ではなく表の行のみです。表の行の前後にグループ・タグを配置すると、その行のみが繰り返されます。タグを表の前後に配置すると、新規の請求書ごとにヘッダーを含む表全体が繰り返されます。

この例をマークアップするには、Invoice Numberプレースホルダの前の表セルに、グループ・タグ<?for-each:G_INVOICE_NUM?>を挿入します。デフォルト・テキスト「Group: Invoices」を入力して、グループの開始を指定します。

Accounted Amountプレースホルダの後にある行の最後の表セル内に、終了タグを挿入します。デフォルト・テキスト「End: Invoices」を入力して、グループの終了を指定します。

次の図に、フォーム・フィールド方式を使用して設定した例を示します。

## ヘッダーとフッターの定義

## システム固有のサポート

XML Publisherでは、RTF固有のヘッダーとフッターの機能を使用できます。ヘッダーまたはフッターを作成するには、使用している文書処理アプリケーションのヘッダーとフッターの挿入ツールを使用します。複数のヘッダーとフッターがある場合などは、別の方法として、start:bodyタグおよびend bodyタグを使用して、ヘッダーとフッターのリージョンとレポート本体を区別できます。

### ヘッダーとフッターへのプレースホルダの挿入

このマニュアルの作成時点では、Microsoft Wordでは、ヘッダーとフッターのフォーム・フィールドをサポートしていません。したがって、プレースホルダ構文をテンプレートに直接挿入するか（基本RTF方式）、次の項で説明するstart body/end body構文を使用する必要があります。

### 複数のヘッダーとフッターまたは複雑なヘッダーとフッター

テンプレートで複数のヘッダーとフッターが必要な場合は、XML Publisherのタグを使用してヘッダーとフッターを作成し、レポートの本体部分を定義します。この方法は、フォーム・フィールドに配置する複雑なオブジェクトがヘッダーとフッターに含まれている場合にも使用できます。本体部分を定義すると、その本体部分の先頭より前にある要素によってヘッダーが構成され、本体部分の後にある要素によってフッターが構成されます。

レポートの本体部分は、次のタグを使用して囲みます。

<?start:body?>

<?end body?>

これらのタグは、テンプレートで直接使用するか、フォーム・フィールド内で使用します。

Payables Invoice Registerのヘッダーとフッターは単純であるため、start body/end bodyタグを使用する必要はありません。ただし、別のヘッダーをテンプレートに追加する場合は、次の手順で本体部分を定義します。

1. Suppliersグループのタグ<?for-each:G_VENDOR_NAME?>の前に<?start:body?>を挿入します。

2. Suppliersグループの終了タグ<?end for-each?>の後に<?end body?>を挿入します。

次の図に、start body/end bodyタグを挿入したPayables Invoice Registerを示します。

### 「Different First Page」および「Different Odd and Even Page」のサポート

レポートの先頭ページに異なるヘッダーやフッターが必要な場合、または奇数ページと偶数ページで異なるヘッダーやフッターが必要な場合は、Microsoft Wordの「Page Setup」ダイアログを使用してこの動作を定義できます。

1. 「File」メニューから「Page Setup」を選択します。

2. 「Page Setup」ダイアログで「Layout」タブを選択します。

3. ダイアログの「Headers and footers」リージョンで、該当するチェック・ボックスを選択します。

   Different odd and even

   Different first page

4. 必要に応じてテンプレートにヘッダーとフッターを挿入します。

実行時に、生成されたレポートに定義済のヘッダーとフッターの動作が表示されます。

## イメージとチャート

## イメージ

XML Publisherでは、発行文書にイメージを挿入するための複数の方法をサポートしています。

### 直接挿入

jpg、gifまたはpngイメージをテンプレートに直接挿入します。

### URL参照

URL参照

1. ダミー・イメージをテンプレートに挿入します。

2. 「Format Picture」ダイアログ・ボックスで「Web」タブを選択します。イメージURLを参照するには、次の構文を「Alternative text」リージョンに入力します。

   url:{'http://image location'}

   たとえば、url:{'http://www.oracle.com/images/ora_log.gif'}と入力します。

### OA Mediaディレクトリ参照

注意: この方法は、Oracle E-Business Suiteインストール環境にのみ適用されます。

1. ダミー・イメージをテンプレートに挿入します。

2. 「Format Picture」ダイアログ・ボックスで「Web」タブを選択します。OA_MEDIAディレクトリを参照するには、次の構文を「Alternative text」リージョンに入力します。

   url:{'${OA_MEDIA}/image name'}

   たとえば、次のように入力します。

   url:{'${OA_MEDIA}/ORACLE_LOGO.gif'}

### XMLファイルからの要素の参照

1. ダミー・イメージをテンプレートに挿入します。

2. 「Format Picture」ダイアログ・ボックスで「Web」タブを選択します。イメージURLを参照するには、次の構文を「Alternative text」リージョンに入力します。

   url:{IMAGE_LOCATION}

   IMAGE_LOCATIONは、イメージへの完全なURLを保持するXMLファイルの要素です。

   実行時に複数の要素に基づいてURLを作成することもできます。concat関数を使用してURL文字列を作成します。次に例を示します。

   url:{concat(SERVER,'/',IMAGE_DIR,'/',IMAGE_FILE)}

   この方法は、次のようにOA_MEDIA参照とともに使用することもできます。

   url:{concat('${OA_MEDIA}','/',IMAGE_FILE)}

### BLOBデータから取得したイメージのレンダリング

データ・ソースがXML Publisherのデータ・テンプレートで、結果のXMLに、BLOBとしてデータベースに保存されたイメージ・データが含まれている場合は、実行時にイメージをレンダリングするテンプレートに挿入されるフォーム・フィールドで、次の構文を使用します。

    <fo:instream-foreign-object content type="image/jpg">
    <xsl:value-of select="IMAGE_ELEMENT"/>
    </fo:instram-foreign-object>

各項目は次のとおりです。

image/jpgは、イメージのMIMEタイプです（他のオプションとしてimage/gifとimage/pngがあります）。

および

IMAGE_ELEMENTは、XMLデータのBLOBの要素名です。

イメージには、高さと幅の属性を指定して、発行レポートのイメージのサイズを設定できます。XML Publisherにより、定義したボックス・サイズにあわせてイメージが表示されます。たとえば、前述の例のサイズを3x4インチに設定するには、次のように入力します。

    <fo:instream-foreign-object content type="image/jpg" height="3 in" width="4 in">
    <xsl:value-of select="IMAGE_ELEMENT"/>
    </fo:instram-foreign-object>

次のようにピクセルを使用して指定します。

    <fo:instream-foreign-object content type="image/jpg" height="300 px" width="4 px">
    ...

cmも使用できます。

    <fo:instream-foreign-object content type="image/jpg" height="3 cm" width="4 cm">
    ...

あるいは、元のディメンションに対するパーセントで指定できます。

    <fo:instream-foreign-object content type="image/jpg" height="300%" width="300%">
    ...

## チャートのサポート

XML Publisherでは、Oracle Business Intelligence Beans（BI Beans）のグラフ機能を利用しているため、実行時にデータを移入するチャートとグラフをRTFテンプレートに定義できます。XML Publisherは、BI BeansのグラフDTDから入手できるすべてのグラフ・タイプとコンポーネント属性をサポートしています。

BI BeansのグラフDTDの詳細は、Oracle Technology Network（OTN）から入手できるテクニカル・ノート『DTD for Customizing Graphs in Oracle Reports』に記載されています。

チャートをテンプレートに追加する手順の要約は次のとおりです。これらの手順の詳細は、後述する例で説明します。

1. ダミー・イメージをテンプレートに挿入して、チャートのサイズと位置を定義します。

2. ダミー・イメージの「Alternative text」ボックスに、チャートの定義を追加します。チャートの定義にはXSLコマンドが必要です。

3. 実行時に、XML Publisherは、BI Beansアプリケーションをコールしてイメージをレンダリングします。このイメージは、最終出力文書に挿入されます。

### サンプル・チャートの追加

次の例は、会社の部門別に売上合計を表示するXMLデータの一部です。

    <sales year=2004>
     <division>
      <name>Groceries</name>
      <totalsales>3810</totalsales>
      <costofsales>2100</costofsales>
     </division>
     <division>
      <name>Toys</name>
      <totalsales>2432</totalsales>
      <costofsales>1200</costofsales>
     </division>
     <division>
      <name>Cars</name>
      <totalsales>6753</totalsales>
      <costofsales>4100</costofsales>
     </division>
     <division>
      <name>Hardware</name>
      <totalsales>2543</totalsales>
      <costofsales>1400</costofsales>
     </division>
     <division>
      <name>Electronics</name>
      <totalsales>5965</totalsales>
      <costofsales>3560</costofsales>
     </division>
    </sales>

この例では、チャートをテンプレートに挿入し、次の図に示すように垂直棒グラフとして表示する方法を示します。

このチャートの次の属性に注目してください。

- 形式は垂直棒グラフです。

- チャートの背景にはグリッドが表示されています。

- 各コンポーネントはカラーで表示されています。

- 売上合計はY軸ラベルで表示されています。

- 各部門はX軸ラベルで表示されています。

- チャートにタイトルが付いています。

- チャートに凡例が表示されています。

各プロパティは、個別のレポート要件にあわせてカスタマイズできます。

### ダミー・イメージの挿入

最初の手順では、テンプレートのチャートを表示する位置にダミー・イメージを追加します。イメージ・サイズによって、最終文書に表示するチャート・イメージのサイズが定義されます。

重要: ダミー・イメージはイメージとして挿入し、他の種類のオブジェクトとして挿入しないでください。

次の図は、ダミー・イメージの例を示します。

繰返しデータに基づいてチャートを出力に繰返し表示する場合は、他のフォーム・フィールドと同様に、イメージをfor-eachループ内に埋め込むことができます。この例では、チャートはsales yearグループ内で定義されているため、XMLファイルに存在するデータの年度ごとに生成されます。

イメージを右クリックして「Format Picture」パレットを開き、「Web」タブを選択します。「Alternative text」入力ボックスを使用して、チャート特性を定義するコードとチャートのデータ定義を入力します。

### 「Alternative Text」ボックスへのコードの追加

次の図に、「Format Picture」の「Alternative text」ボックスに入力されたXML Publisherのコード例を示します。

「Alternative text」の内容は、最終文書にレンダリングされるチャートを表します。このチャートの場合、テキストは次のとおりです。

    chart:
    <Graph graphType = "BAR_VERT_CLUST">
     <Title text="Company Sales 2004" visible="true" horizontalAlignment="CENTER"/>
     <Y1Title text="Sales in Thousands" visible="true"/>
     <O1Title text="Division" visible="true"/>
     <LocalGridData colCount="{count(//division)}" rowCount="1">
      <RowLabels>
       <Label>Total Sales $1000s</Label>
      </RowLabels>
      <ColLabels>
       <xsl:for-each select="//division">
        <Label>
          <xsl:value-of select="name"/>
        </Label>
       </xsl:for-each>
      </ColLabels>
      <DataValues>
       <RowData>
        <xsl:for-each select="//division">
          <Cell>
           <xsl:value-of select="totalsales"/>
         </Cell>
        </xsl:for-each>
       </RowData>
      </DataValues>
     </LocalGridData>
    </Graph>

チャート・テキストの最初の要素はchart:要素であることが必要です。この要素は、RTFパーサーに、後続のコードでチャート・オブジェクトが記述されていることを通知します。

次の要素は開始の<Graph>タグです。コード全体が<Graph>要素のタグ内にあることに注意してください。この要素には、チャート・タイプを定義するためのgraphType属性があります。この属性が宣言されていない場合、デフォルトのチャートは垂直棒グラフです。BI Beansでは、多数の異なるチャート・タイプをサポートしています。この項では、それ以外のタイプも使用しています。チャート・タイプの完全リストは、BI BeansのグラフDTDのドキュメントを参照してください。

次のコード・セクションは、チャート・タイプと属性を定義します。

    <Title text="Company Sales 2004" visible="true" horizontalAlignment="CENTER"/>
     <Y1Title text="Sales in Thousands" visible="true"/>
     <O1Title text="Division" visible="true"/>

これらの値をすべて宣言するか、実行時にXMLデータから値を置換できます。たとえば、次の構文を使用すると、XMLタグからチャート・タイトルを取得できます。

    <Title text="{CHARTTITLE}" visible="true" horizontalAlighment="CENTER"/>

CHARTTITLEは、チャート・タイトルを含むXMLタグ名です。タグ名が中カッコで囲まれていることに注意してください。

次のセクションは、列ラベルと行ラベルを定義します。

    <LocalGridData colCount="{count(//division)}" rowCount="1">
      <RowLabels>
       <Label>Total Sales $1000s</Label>
      </RowLabels>
      <ColLabels>
       <xsl:for-each select="//division">
        <Label>
          <xsl:value-of select="name"/>
        </Label>
       </xsl:for-each>
      </ColLabels>

LocalGridData要素には、colCountとrowCountの2つの属性があります。これらの属性は、実行時に表示する列と行の数を定義します。この例では、count関数でレンダリングする列の数を計算します。

    colCount="{count(//division)}"

rowCountは1にハードコードされています。この値は、チャートの対象になるデータのセット数を定義します。この例では1です。

その次のコードは、行と列のラベルを定義します。これらのラベルを宣言するか、または実行時にXMLデータから値を置換できます。行ラベルはチャートの凡例で使用されます（この例では「Total Sales $1000s」）。

この例では、列ラベルがGroceries、Toys、Carsなどのデータから抽出されています。これは、for-eachループを使用して実行されます。

     <ColLabels>
       <xsl:for-each select="//division">
        <Label>
          <xsl:value-of select="name"/>
        </Label>
       </xsl:for-each>
      </ColLabels>

このコードは、<division>グループをループし、<name>要素の値を<Label>タグに挿入します。これによって、実行時に次のXMLが生成されます。

    <ColLabels>
      <Label>Groceries</Label>
      <Label>Toys</Label>
      <Label>Cars</Label>
      <Label>Hardware</Label>
      <Label>Electronics</Label>
    </ColLabels>

次のセクションは、チャート対象の実際のデータ値を定義します。

    <DataValues>
       <RowData>
        <xsl:for-each select="//division">
          <Cell>
           <xsl:value-of select="totalsales"/>
         </Cell>
        </xsl:for-each>
       </RowData>
      </DataValues>

ラベルのセクションと同様に、このコードはデータをループして、BI Beansのレンダリング・エンジンに渡されるXMLを生成します。これによって、次のXMLが生成されます。

    <DataValues>
      <RowData>
        <Cell>3810</Cell>
        <Cell>2432</Cell>
        <Cell>6753</Cell>
        <Cell>2543</Cell>
        <Cell>5965</Cell>
      </RowData>
    </DataValues>

### 別のチャートのサンプル

前述のデータは、次の図に示すように、円グラフにも表示できます。

次に、実行時にこのチャートをレンダリングするためにテンプレートに追加されたコードを示します。

    chart:
    <Graph graphType="PIE">
     <Title text="Company Sales 2004" visible="true"
       horizontalAlignment="CENTER"/>
     <LocalGridData rowCount="{count(//division)}" colCount="1">
      <RowLabels>
      <xsl:for-each select="//division">
      <Label>
       <xsl:value-of select="name"/>
      </Label>
      </xsl:for-each>
      </RowLabels>
      <DataValues>
       <xsl:for-each select="//division">
        <RowData>
          <Cell>
           <xsl:value-of select="totalsales"/>
          </Cell>
        </RowData>
       </xsl:for-each>
      </DataValues>
     </LocalGridData>
    </Graph>

### 横棒グラフのサンプル

次に、売上合計と売上原価を横棒グラフで表示した例を説明します。この例では、売上原価要素（<costofsales>）のデータもチャートに追加されています。

次に、このチャートをテンプレートに定義するコードを示します。

    chart:
    <Graph graphType = "BAR_HORIZ_CLUST">
     <Title text="Company Sales 2004" visible="true" horizontalAlignment="CENTER"/>
     <LocalGridData colCount="{count(//division)}" rowCount="2">
     <RowLabels>
      <Label>Total Sales ('000s)</Label>
      <Label>Cost of Sales ('000s)</Label>
     </RowLabels>
     <ColLabels>
      <xsl:for-each select="//division">
       <Label><xsl:value-of select="name"/></Label>
      </xsl:for-each>
     </ColLabels>
     <DataValues>
      <RowData>
       <xsl:for-each select="//division">
         <Cell><xsl:value-of select="totalsales"/></Cell>
       </xsl:for-each>
      </RowData>
      <RowData>
       <xsl:for-each select="//division">
        <Cell><xsl:value-of select="costofsales"/></Cell>
        </xsl:for-each>
      </RowData>
      </DataValues>
     </LocalGridData>
    </Graph>

2番目のデータ・セットを処理するために、LocalGridData要素のrowCount属性が2に設定されています。また、DataValuesセクションでは、売上合計と売上原価の2つのデータ・セットが定義されています。

### チャートの外観の変更

チャートの外観を変更するために、BI BeansのグラフDTDの多くの属性を使用できます。たとえば、次の図に示すように、前述のチャートでは、グリッドの削除、背景のグラデーションの配置、および棒の色やフォントの変更が可能です。

この変更をサポートするコードは次のとおりです。

    chart:
    <Graph graphType = "BAR_HORIZ_CLUST">
    <SeriesItems>
     <Series id="0" color="#ffcc00"/>
     <Series id="1" color="#ff6600"/>
    </SeriesItems>
    <O1MajorTick visible="false"/>
    <X1MajorTick visible="false"/>
    <Y1MajorTick visible="false"/>
    <Y2MajorTick visible="false"/>
    <MarkerText visible="true" markerTextPlace="MTP_CENTER"/>
    <PlotArea borderTransparent="true">
     <SFX fillType="FT_GRADIENT" gradientDirection="GD_LEFT"
     gradientNumPins="300">
     <GradientPinStyle pinIndex="1" position="1"
      gradientPinLeftColor="#999999"
      gradientPinRightColor="#cc6600"/>
     </SFX>
    </PlotArea>
    <Title text="Company Sales 2004" visible="true">
     <GraphFont name="Tahoma" bold="false"/>
    </Title>
    . . .
    </Graph>

棒の色はSeriesItemsセクションに定義されています。色は、次に示すように16進形式で定義されます。

    <SeriesItems>
      <Series id="0" color="#ffcc00"/>
      <Series id="1" color="#ff6600"/>
    </SeriesItems>

次のコードは、チャートのグリッドを非表示にします。

      <O1MajorTick visible="false"/>
      <X1MajorTick visible="false"/>
      <Y1MajorTick visible="false"/>
      <Y2MajorTick visible="false"/>

MarkerTextタグは、データ値をチャートの棒上に配置します。

    <MarkerText visible="true" markerTextPlace="MTP_CENTER"/>

PlotAreaセクションは背景を定義します。SFX要素はグラデーションを設定し、borderTransparent属性はプロット境界を非表示にします。

    <PlotArea borderTransparent="true">
      <SFX fillType="FT_GRADIENT" gradientDirection="GD_LEFT"
         gradientNumPins="300">
         <GradientPinStyle pinIndex="1" position="1"
           gradientPinLeftColor="#999999"
           gradientPinRightColor="#cc6600"/>
       </SFX>
    </PlotArea>

Title textタグは、新規のフォント・タイプとサイズを指定するように更新されています。

    <Title text="Company Sales 2004" visible="true">
      <GraphFont name="Tahoma" bold="false"/>
    </Title>

## 描画、図形およびクリップアートのサポート

XML Publisherでは、Microsoft Wordの描画、図形およびクリップアート機能をサポートしています。これらのオブジェクトをテンプレートに追加し、最終的なPDF出力にレンダリングできます。

次のオートシェイプ・カテゴリがサポートされています。

- 線: 直線、矢印、双方向矢印、曲線、フリーフォーム、フリーハンドがあります。

- 双方向矢印: 直線の双方向矢印のみサポートされています。曲線の双方向矢印を作成するには、曲線を使用し、この曲線の終端スタイルを指定します。

- 基本図形: すべての図形がサポートされています。

- ブロック矢印: すべての矢印がサポートされています。

- フローチャート: すべてのフローチャート・オブジェクトがサポートされています。

- 星とリボン: すべてのオブジェクトがサポートされています。

- 吹き出し: 線の吹き出しはサポートされていません。

- クリップアート: Microsoft Clip Artライブラリを使用してイメージをテンプレートに追加します。

### フリーハンド描画

Microsoft Wordのフリーハンド描画ツールを使用して、最終的なPDF出力にレンダリングする図をテンプレートに作成します。

### ハイパーリンク

図形にハイパーリンクを追加できます。「ハイパーリンク」を参照してください。

### 重ね合せ

図形を相互に重ね合せ、Microsoft Wordの透過性設定を使用して、下位レイヤー上の図形を透かしで表示できます。次の図は、重ね合せた図形の例を示しています。

### 3-D効果

XML Publisherでは、図形の3-Dオプションは現在サポートしていません。

### Microsoft数式

数式エディタを使用して、出力に数式を生成します。次の図は、数式の例を示しています。

### 組織図

テンプレートで組織図機能を使用すると、組織図が出力にレンダリングされます。次のイメージは、組織図の例を示しています。

### WordArt

Microsoft WordのWordArt機能をテンプレートで使用できます。次の図は、WordArtの例を示しています。

注意: Microsoft WordArtの中には、現在ではSVGに変換できないビットマップ操作を使用しているものがあります。サポートされていないWordArtをテンプレートで使用するには、WordArtのスクリーンショットを取得してイメージ（gif、jpegまたはpng）として保存し、そのイメージでWordArtを置き換えることができます。

### データ制御式図形サポート

XML Publisherでは、テンプレートでの静的図形および機能のサポートだけでなく、受信データまたはパラメータに基づく図形の操作もサポートされます。次の操作がサポートされています。

- 複製

- 移動

- サイズ変更

- テキストの追加

- 傾斜

- 回転

これらの操作は1つの図形に適用されるだけでなく、Microsoft Wordのグループ機能を使用して、図形をまとめて結合し、グループとして操作できます。

### コマンドの配置

次のサンプル図に示すように、図形のプロパティ・ダイアログの「Web」タブで、図形の操作コマンドを入力します。

### 図形の複製

for-eachループでデータ要素を複製するのと同じ方法で、受信XMLデータに基づいて図形を複製できます。この場合、for-each@shapeコマンドをshape-offset宣言と組み合せて使用します。たとえば、図形をページの下方へ複製するには、次の構文を使用します。

    <?for-each@shape:SHAPE_GROUP?>
     <?shape-offset-y:(position()-1)*100?>
    <?end for-each?>

各項目は次のとおりです。

for-each@shapeは、図形コンテキストのfor-eachループを開始します。

SHAPE_GROUPは、XMLファイルの繰返し要素の名前です。要素SHAPE_GROUPの出現ごとに、新規の図形が作成されます。

shape-offset-y: y軸に沿って図形をオフセットするコマンドです。

(position()-1)*100): 出現ごとにオフセットをピクセル単位で設定します。XSL positionコマンドにより、グループ内のレコード・カウンタ（1、2、3、4）が戻されます。その数値から1が差し引かれ、その結果に100が掛け合されます。したがって、最初の出現では(1-1) * 100であるため、オフセットが0になります。2つ目の出現のオフセットでは(2-1) *100であるため、100ピクセルとなります。後続の各出現では、オフセットがページ内でもう100ピクセル下になります。

### 図形へのテキストの追加

受信したXMLデータまたはパラメータ値に基づき、図形にテキストを動的に追加できます。プロパティ・ダイアログで、次の構文を入力します。

    <?shape-text:SHAPETEXT?>

SHAPETEXTは、XMLデータ内の要素名です。実行時に、テキストが図形に挿入されます。

### パスに沿ったテキストの追加

受信したXMLデータまたはパラメータに基づき、直線または曲線に沿ってテキストを追加できます。直線を描画した後、プロパティ・ダイアログに次のように入力します。

    <?shape-text-along-path:SHAPETEXT?>

SHAPETEXTは、XMLデータ内の要素です。実行時に、要素SHAPETEXTの値が直線の上および直線沿いに挿入されます。

### 図形の移動

XMLデータに基づき、X軸とY軸の両方向に図形を移動または入替えできます。たとえば、図形をY軸方向に200ピクセル、X軸方向に300ピクセル移動するには、図形のプロパティ・ダイアログに次のコマンドを入力します。

    <?shape-offset-x:300?>
    <?shape-offset-y:200?>

### 図形の回転

受信したデータに基づいて指定された軸を中心にして図形を回転するには、次のコマンドを使用します。

    <?shape-rotate:ANGLE;'POSITION'?>

各項目は次のとおりです。

ANGLEは、図形を回転する度合いの数値です。角度が正の数である場合、回転は右回りです。負の数の場合は、回転は左回りです。

POSITIONは、回転を実行する際の軸となるポイントであり、left/topなどとなります。有効な値は、left、rightまたはcenterと、center、topまたはbottomの組合せです。デフォルトはleft/topです。次の図は、これらの有効な値を示しています。

右下角を中心として矩形を回転するには、次の構文を入力します。

    <?shape-rotate:60,'right/bottom'?>

図形自体の内部における、回転軸となるXおよびY座標を指定することもできます。

### 図形の傾斜

次のコマンドを使用して、XまたはY軸方向に図形を傾斜させることができます。

    <?shape-skew-x:ANGLE;'POSITION'?>
    <?shape-skew-y:ANGLE;'POSITION'?>

各項目は次のとおりです。

ANGLEは、図形を傾斜させる度合いの数値です。角度が正の数である場合、傾斜は右方向です。

POSITIONは、回転を実行する際の軸となるポイントであり、left/topなどとなります。有効な値は、left、rightまたはcenterと、center、topまたはbottomの組合せです。「図形の回転」の下にある図を参照してください。デフォルトはleft/topです。

たとえば、右下角を中心として図形を30度傾斜させるには、次の構文を入力します。

    <?shape-skew-x:number(.)*30;'right/bottom'?>

### 図形のサイズの変更

適切なコマンドを使用して、単一軸または両方の軸方向に図形のサイズを変更できます。両方の軸方向に図形のサイズを変更するには、次のコマンドを使用します。

    <?shape-size:RATIO?>

RATIOは、図形のサイズを増減させる比率です。したがって、値が2の場合、元のサイズの高さと幅を2倍にした図形が生成されます。値が0.5の場合、元のサイズを半分にした図形が生成されます。

X軸またはY軸方向に図形のサイズを変更するには、次のコマンドを使用します。

    <?shape-size-x:RATIO?>
    <?shape-size-y:RATIO?>

xまたはyの値のみを変更した場合、単一軸方向に図形が拡大または縮小されます。これはデータによって制御できます。

### コマンドの結合

また、これらのコマンドを結合し、図形に対して複数の変換を一度に実行できます。たとえば、図形を複製し、各複製について一定角度回転させ、同時にサイズを変更できます。

次の例では、図形を複製し、ページの下方向に50ピクセル分移動し、中心を軸にして5度回転させ、X軸方向に拡大し、さらに図形の番号をテキストとして追加する方法を示しています。

    <for-each@shape:SHAPE_GROUP?>
     <?shape-text:position()?>
     <?shape-offset-y:position()*50?>
     <?shape-rotate:5;'center/center'?>
     <?shape-size-x:position()+1?>
    <end for-each?>

このコマンドにより、次の図に示す出力が生成されます。

### CD評価の例

この例では、受信したXMLファイルのデータに基づいて星による評価を生成するテンプレートの設定方法を示しています。

次のXMLデータを受信したと想定します。

    <CATALOG>
     <CD>
      <TITLE>Empire Burlesque</TITLE>
      <ARTIST>Bob Dylan</ARTIST>
      <COUNTRY>USA</COUNTRY>
      <COMPANY>Columbia</COMPANY>
      <PRICE>10.90</PRICE>
      <YEAR>1985</YEAR>
      <USER_RATING>4</USER_RATING>
     </CD>
     <CD>
      <TITLE>Hide Your Heart</TITLE>
      <ARTIST>Bonnie Tylor</ARTIST>
      <COUNTRY>UK</COUNTRY>
      <COMPANY>CBS Records</COMPANY>
      <PRICE>9.90</PRICE>
      <YEAR>1988</YEAR>
      <USER_RATING>3</USER_RATING>
     </CD>
     <CD>
      <TITLE>Still got the blues</TITLE>
      <ARTIST>Gary More</ARTIST>
      <COUNTRY>UK</COUNTRY>
      <COMPANY>Virgin Records</COMPANY>
      <PRICE>10.20</PRICE>
      <YEAR>1990</YEAR>
      <USER_RATING>5</USER_RATING>
     </CD>
     <CD>
      <TITLE>This is US</TITLE>
      <ARTIST>Gary Lee</ARTIST>
      <COUNTRY>UK</COUNTRY>
      <COMPANY>Virgin Records</COMPANY>
      <PRICE>12.20</PRICE>
      <YEAR>1990</YEAR>
      <USER_RATING>2</USER_RATING>
     </CD>
    <CATALOG>

CDごとにUSER_RATING要素がある点に注意してください。このデータ要素および図形操作コマンドを使用して、読者が一目で評価を比較できるように評価の図による表示を作成できます。

次の図に、この処理を行うためのテンプレートを示します。

次の表に、フィールドの値を示します。

フィールド | フォーム・フィールド入力
--- | ---
F | <?for-each:CD?>
TITLE | <?TITLE?>
ARTIST | <?ARTIST?>
E | <?end for-each?>
（星型） | 「Web」タブ・エントリ: <?for-each@shape:xdoxslt:foreach_number($_XDOCTX,0,USER_RATING,1)?> <?shape-offset-x:(position()-1)*25?> <?end for-each?>

フォーム・フィールドには、単一要素の値が保持されます。このテンプレートでの唯一の相違点は、星型の値です。複製コマンドは、「オートシェイプの書式設定」ダイアログの「Web」タブにあります。

for-each@shapeコマンドでは、"for...next loop"構造を作成するコマンドを使用しています。開始番号に1、最終番号に値USER_RATING、ステップ値に1を指定します。テンプレートがCD間をループするため、USER_RATING値ごとに星型を繰り返す内部ループを作成します（つまり、値が4の場合は4つの星が生成されます）。次の図に、このテンプレートおよびXMLサンプルからの出力を示しています。

### グループ化した図形の例

この例では、図形を結合してグループにし、受信データに対して個別およびグループの両方で対応するよう設定する方法を示しています。次のXMLデータを前提としています。

    <SALES>
     <SALE>
      <REGION>Americas</REGION>
      <SOFTWARE>1200</SOFTWARE>
      <HARDWARE>850</HARDWARE>
      <SERVICES>2000</SERVICES>
     </SALE>
     <SALE>
      <REGION>EMEA</REGION>
      <SOFTWARE>1000</SOFTWARE>
      <HARDWARE>800</HARDWARE>
      <SERVICES>1100</SERVICES>
     </SALE>
     <SALE>
      <REGION>APAC</REGION>
      <SOFTWARE>900</SOFTWARE>
      <HARDWARE>1200</HARDWARE>
      <SERVICES>1500</SERVICES>
     </SALE>
    </SALES>

ユーザーがすべての地域における売上データを迅速に把握できるように、このデータの図による表示を作成できます。これには、まずMicrosoft Wordで操作する複合図形を作成します。次の図に、4つの構成要素からなる複合図形を示しています。

この図形は、赤、黄および青の3つの円柱で構成されています。これらは、ソフトウェア、ハードウェアおよびサービスというデータ要素を表します。結合オブジェクトには、受信データからテキストを受け取るために有効化された矩形も含まれます。

次のコマンドが「Web」タブに入力されています。

赤い円柱: <?shape-size-y:SOFTWARE div 1000;'left/bottom'?>

黄色の円柱: <?shape-size-y:HARDWARE div 1000;'left/bottom'?>

青い円柱: <?shape-size-y:SERVICES div 1000;'left/bottom'?>

shape-sizeコマンドを使用すると、SOFTWARE、HARDWAREおよびSERVICES要素の値に基づいて円柱が拡大または縮小されます。拡大または縮小ファクタを設定するには、この値を1000で割ります。たとえば、値が2000の場合、1000で割ってファクタ2を算出します。図形は現在の2倍の高さで生成されます。

テキスト対応の矩形は、「Web」タブに次のコマンドが含まれます。

    <?shape-text:REGION?>

実行時に、REGION要素の値が矩形に表示されます。

これらのすべての図形がグループ化され、グループ・オブジェクトの「Web」タブに次の構文が追加されます。

    <?for-each@shape:SALE?>
    <?shape-offset-x:(position()-1)*110?>
    <?end for-each?>

このコマンド・セットでは、for-each@shapeがSALEグループをループします。shape-offsetコマンドにより、ループ内の次の図形が右方向に指定ピクセル数移動します。式(position()-1)により、オブジェクトの位置が設定されます。position()関数では、ループ処理中にレコード・カウンタが戻されるため、最初の図形では、オフセットが1-1*100、すなわち0となり、オブジェクトの最初のレンダリングがテンプレートで定義された位置に配置されます。後続の出現箇所は、X軸方向（右方向）に100ピクセル分オフセットした位置でレンダリングされます。

次の図に示すように、実行時に3つの図形のセットがページ全体にレンダリングされます。

より一層視覚的にわかりやすいレポートを作成するため、これらの図形を世界地図上に重ねることができます。Microsoft Wordの「Order」ダイアログを使用して、グループ化した図形の背後にマップを重ねます。

Microsoft Word 2000ユーザー: 背景マップを追加して図形グループを重ねた後、「Grouping」ダイアログを使用して構成全体を1つのグループにします。

Microsoft Word 2002/3ユーザー: これらのバージョンのWordには、「Tools」->「Options」->「General」タブの下に「Automatically generate drawing canvas when inserting autoshapes」オプションがあります。このオプションを使用すると、マップおよび図形を最終的にグループ化する必要がありません。これで、次の図に示すように、視覚的に訴えかける出力をレポート用に生成できます。

## サポート対象のシステム固有の書式設定機能

これまでに説明した機能に加えて、XML Publisherでは、Microsoft Wordの次の機能もサポートしています。

## 一般的な機能

- テキストの大きいブロック

- 改ページ

  改ページを挿入するには、グループの終了タグの直前に[Ctrl]+[Enter]キーストロークを挿入します。たとえば、Payables Invoice Registerで、仕入先ごとに新規ページになるようにテンプレートを設定する手順は、次のとおりです。

  1. Supplierグループの終了<?end for-each?>タグの直前にカーソルを置きます。

  2. [Ctrl]+[Enter]を押して、改ページを挿入します。

  これによって、実行時には、仕入先ごとに新規ページになります。

  このMicrosoft Word固有の機能を使用すると、レポート出力の最後に空白ページが1ページ出力されます。この空白ページを出力しないようにするには、XML Publisherの改ページ別名を使用します。テンプレート機能の項の「改ページ」を参照してください。

- ページ番号

  使用している文書処理アプリケーションのページ番号付け方法を使用して、ページ番号を最終レポートに挿入します。たとえば、Microsoft Wordを使用している場合は、次の手順を実行します。

  1. 「Insert」メニューから「Page Numbers...」を選択します。

  2. 必要に応じて、「Position」、「Alignment」および「Format」を選択します。

  実行時に、選択内容に従ってページ番号が表示されます。

- 非表示テキスト

  Microsoft Wordではテキストを非表示として書式設定できます。非表示テキストはRTF出力レポートに保持されます。

## 配置

テキスト、グラフィック、オブジェクトおよび表は、ワード・プロセッサの配置機能を使用して配置します。

注意: 双方向の言語は、文書処理アプリケーションの右/左揃え機能によって自動的に処理されます。

## 表

次の表機能がサポートされています。

- ネスト表

- セル配置

  オブジェクトは、使用している文書処理アプリケーションの配置ツールを使用してテンプレートに配置できます。この配置は、最終レポート出力に反映されます。

- 行の拡張と列の拡張

  テンプレート内の列および行は、次に手順で拡張できます。

  1. マージするセルを選択します。

  2. 「Table」メニューから「Merge Cells」を選択します。

  3. マージしたセル内にデータを通常の方法で配置します。

  実行時に、セルがマージされて表示されます。

- 表の自動書式設定

  XML Publisherは、Microsoft Wordで使用可能な表の自動書式設定を認識します。

  1. 書式設定する表を選択します。

  2. 「Table」メニューから「Autoformat」を選択します。

  3. 必要な表の書式を選択します。

  実行時に、選択内容に従って表が書式設定されます。

- セルのパターンと色

  表のセルまたは行は、パターンまたは色で強調表示できます。

  1. セル（複数可）または表を選択します。

  2. 「Table」メニューから「Table Properties」を選択します。

  3. 「Table」タブから「Borders and Shading...」ボタンを選択します。

  4. 必要に応じて、罫線および網かけを追加します。

- 表ヘッダーの繰返し

  データを表に表示するときに、その表が複数ページにわたることが予想される場合は、各ページの冒頭で繰り返すヘッダー行を定義できます。

  1. 各ページで繰り返す行（複数可）を選択します。

  2. 「Table」メニューから「Heading Rows Repeat」を選択します。

- 行の途中で改ページしないようにする機能

  表の1行に含まれるデータを同じページに表示する機能は、Microsoft Wordの「Table Properties」を使用してオプションとして設定できます。

  1. 途中で改ページしないようにする行（複数可）を選択します。

  2. 「Table」メニューから「Table Properties」を選択します。

  3. 「Row」タブで、「Allow row to break across pages」チェック・ボックスの選択を解除します。

- 固定幅の列

  表の列幅を設定する手順は、次のとおりです。

  1. 列を選択し、「Table」->「Table Properties」の順に選択します。

  2. 「Table Properties」ダイアログで「Column」タブを選択します。

  3. 「Preferred width」チェック・ボックスを選択し、列幅を「Percent」または「Inches」で入力します。

  4. 「Next Column」ボタンを選択して、次の列の幅を設定します。

  列の幅の合計が表の幅の合計になることに注意してください。

  次の図に、「Table Properties」ダイアログを示します。

- 文字列の切捨て

  デフォルトでは、表のセル内に入りきらない文字列はセル内で折り返されます。折り返さずに切り捨てる場合は、「Table Properties」ダイアログを使用します。

  1. 文字列を切り捨てるセル内にカーソルを置きます。

  2. マウスを右クリックして、メニューから「Table Properties...」を選択するか、「Table」->「Table Properties...」にナビゲートします。

  3. 「Table Properties...」ダイアログから「Cell」タブを選択し、次に「Options...」を選択します。

  4. 「Wrap Text」チェック・ボックスの選択を解除します。

     次の図に、「Cell Options」ダイアログを示します。

次の図に、切捨ての例を示します。

## 日付フィールド

日付は、使用している文書処理アプリケーションの日付機能を使用して挿入します。この日付は発行日に対応しており、要求実行日ではないことに注意してください。

## 複数の列があるページのサポート

XML Publisherでは、複数の列があるページで出力を発行できるように、Microsoft Wordの列機能をサポートしています。

「Format」->「Columns」を選択して「Columns」ダイアログ・ボックスを表示し、テンプレートの列の数を定義します。次の図に、「Columns」ダイアログを示します。

複数の列があるページの例: ラベル

2列形式で所在地ラベルを生成する手順は、次のとおりです。

1. 「Columns」コマンドを使用して、ページを2列に分割します。

2. 最初の列に繰返し可能なグループを定義します。次の図に示すように、繰返し可能なグループを定義するのは最初の列のみであることに注意してください。

ヒント: 所在地ブロックが複数のページや列に分割されないようにするには、単一セルの表内にラベル・ブロックを埋め込みます。次に、行の途中で改ページしないように「Table Properties」で指定します。「行の途中で改ページしないようにする機能」を参照してください。

このテンプレートによって、次の複数の列がある出力が作成されます。

## 背景および透かしのサポート

XML Publisherでは、Microsoft Wordの背景機能をサポートしています。テンプレートに対して単一のグラデーション・カラーまたはイメージ背景を指定し、PDF出力に表示できます。この機能はPDF出力の場合のみサポートされているので注意してください。

テンプレートに背景を追加するには、「Format」->「Background」メニュー・オプションを使用します。

### Microsoft Word 2000を使用した背景の追加

「Background」ポップアップ・メニューから、次の処理を実行できます。

- カラー・パレットから単一色の背景を選択します。

- 「Fill Effects」を選択して「Fill Effects」ダイアログを開きます。「Fill Effects」ダイアログを次の図に示しています。

  このダイアログから、次のサポートされるオプションのいずれかを選択します。

  - グラデーション: 1色または2色のいずれかを選択できます。

  - テクスチャ: 提供されたテクスチャのいずれかを選択するか、独自のテクスチャをロードします。

  - パターン: パターンおよび前景/背景色を選択します。

  - 図: 背景イメージとして使用する図をロードします。

### Microsoft Word 2002以上を使用したテキストまたはイメージの透かしの追加

次のバージョンのMicrosoft Wordでは、テキストまたはイメージの透かしを追加できます。

「Format」->「Background」->「Printed Watermark」ダイアログを使用して、次のいずれかを選択します。

- 「Picture Watermark」: イメージをロードし、文書上で拡大・縮小する方法を定義します。

- 「Text Watermark」: 事前定義済のテキスト・オプションを使用するか、独自のテキストを入力し、フォント、サイズおよびテキストのレンダリング方法を指定します。

  次の図は、テキストの透かしを表示するために入力した「Printed Watermark」ダイアログを示しています。

## テンプレート機能

## 改ページ

特定要素の出現後に改ページを作成するには、split-by-page-break別名を使用します。これによって、特定要素のインスタンスごとにレポート出力に改ページが挿入されます。

グループの出現ごとに改ページを挿入するには、グループを閉じる<?end for-each?>タグの直前にあるグループ内にsplit-by-page-breakフォーム・フィールドを挿入します。このフォーム・フィールドのヘルプ・テキストに次の構文を入力します。

<?split-by-page-break:?>

次のXMLで、新規仕入先ごとに改ページを作成するとします。

    <SUPPLIER>
     <NAME>My Supplier</NAME>
     <INVOICES>
      <INVOICE>
       <INVNUM>10001-1</INVNUM>
       <INVDATE>1-Jan-2005</INVDATE>
       <INVAMT>100</INVOICEAMT>
      </INVOICE>
      <INVOICE>
       <INVNUM>10001-2</INVNUM>
       <INVDATE>10-Jan-2005</INVDATE>
       <INVAMT>200</INVOICEAMT>
      </INVOICE>
     </INVOICES>
    </SUPPLIER>
    <SUPPLIER>
     <NAME>My Second Supplier</NAME>
     <INVOICES>
      <INVOICE>
       <INVNUM>10001-1</INVNUM>
       <INVDATE>11-Jan-2005</INVDATE>
       <INVAMT>150</INVOICEAMT>
      </INVOICE>
    …

次の図に示すテンプレート・サンプルでは、PageBreakというフィールドにsplit-by-page-break構文が含まれています。

<?end for-each?>フィールドの直前に、<?split-by-page-break:?>構文を含むPageBreakフィールドを配置します。このPageBreakフィールドは、SUPPLIERループの最後に位置します。これによって、新規仕入先が出現する前に改ページが挿入されます。この方法では、グループの後にMicrosoft Word固有の改ページを使用した場合に、グループの最後に余分なページが出力されません。

## 初期ページ番号

一部のレポートでは、初期ページ番号を指定の番号に設定する必要があります。たとえば、月次レポートでは、月ごとに番号を連続する必要があります。XML Publisherでは、この要件をサポートするために、テンプレートにページ番号を設定できます。

次の構文をテンプレートで使用して、初期ページ番号を設定します。

    <?initial-page-number:pagenumber?>

pagenumberは、数値を保持するXML要素またはパラメータです。

例1: XMLデータ要素からページ番号を設定

次に、初期ページ番号を保持する要素がXMLデータに含まれている場合の例を示します。

    <REPORT>
      <PAGESTART>200<\PAGESTART>
      ....
    </REPORT>

テンプレートに次のように入力します。

    <?initial-page-number:PAGESTART?>

これで、初期ページ番号はPAGESTART要素の値（この例では200）になります。

例2: パラメータ値を渡してページ番号を設定

PAGESTARTというパラメータを定義すると、このパラメータをコールして初期値を渡すことができます。

テンプレートに次のように入力します。

    <?initial-page-number:$PAGESTART?>

注意: 最初に、テンプレートでパラメータを宣言する必要があります。「テンプレートでのパラメータの定義」を参照してください。

## 最終ページのみのコンテンツ

XML Publisherでは、先頭ページ、奇数ページおよび偶数ページに対して異なるページ・レイアウトを指定するMicrosoft Wordの機能をサポートしています。これらのオプションを実現するには、単に「File」メニューから「Page Setup」を選択して、「Layout」タブを選択します。XML Publisherでは、このダイアログの設定が認識されます。

ただし、Microsoft Wordには最終ページのみの設定が提供されていません。この機能は、最終ページにのみ特定の場所にチェックや要約などのコンテンツを必要とするような小切手、請求書または発注書などの文書に便利です。

XML Publisherには、この機能が提供されています。この機能を利用するには、次のように操作する必要があります。

1. テンプレート内にセクション区切りを作成して、最終ページの内容がレポートの残りの部分から分離されるようにします。

2. 次の構文を最終ページに挿入します。

   <?start@last-page:body?>

   <?end body?>

このページ上で、この2つのタグの上または下にくるコンテンツはレポートの最終ページにのみ表示されます。また、このコマンドは明示的に最終ページのコンテンツを指定するため、レポートに対してそれまでに定義したヘッダーやフッターを必要とする場合は最終ページに再挿入する必要があります。

この例では、最終ページの最下部に要約が表示される請求書リストを生成するレポートに対して、最終ページのみ別指定の機能を使用しています。

次のXMLを想定します。

    <?xml version="1.0" encoding="WINDOWS-1252"?>
    <INVOICELIST>
     <VENDOR>
      <VENDOR_NAME>Nuts and Bolts Limited</VENDOR_NAME>
      <ADDRESS>1 El Camino Real, Redwood City, CA 94065</ADDRESS>
      <INVOICE>
       <INV_TYPE>Standard</INV_TYPE>
       <INVOICE_NUM>981110</INVOICE_NUM>
       <INVOICE_DATE>10-NOV-04</INVOICE_DATE>
       <INVOICE_CURRENCY_CODE>EUR</INVOICE_CURRENCY_CODE>
       <ENT_AMT>122</ENT_AMT>
       <ACCTD_AMT>122</ACCTD_AMT>
       <VAT_CODE>VAT22%</VAT_CODE>
      </INVOICE>
      <INVOICE>
       <INV_TYPE>Standard</INV_TYPE>
       <INVOICE_NUM>100000</INVOICE_NUM>
       <INVOICE_DATE>28-MAY-04</INVOICE_DATE>
       <INVOICE_CURRENCY_CODE>FIM</INVOICE_CURRENCY_CODE>
       <ENT_AMT>122</ENT_AMT>
       <ACCTD_AMT>20.33</ACCTD_AMT>
       <VAT_CODE>VAT22%</VAT_CODE>
      </INVOICE>
     </VENDOR>
     <VENDOR>
      ...
    <INVOICE>
     ...
      </INVOICE>
     </VENDOR>
     <SUMMARY>
      <SUM_ENT_AMT>61435</SUM_ENT_AMT>
      <SUM_ACCTD_AMT>58264.68</SUM_ACCTD_AMT>
      <TAX_CODE>EU22%</TAX_CODE>
     </SUMMARY>
    </INVOICELIST>

レポートには、各VENDORおよびそのINVOICEデータとともに、最終ページにのみ最下部にSUMMARYセクションが表示されます。このレポートのテンプレートを次の図に示します。

テンプレート・ページ1

テンプレートの先頭ページにMicrosoft Wordのセクション区切り（タイプ: 「next page」）を挿入します。最終ページの場合は、要約表をページの最下部に配置するために複数の改行文字を挿入します。次の図に、要約表を示します。

最終ページのみのレイアウト

この例では、次のように設定されています。

- FおよびEのコンポーネントには、for-eachグループ文が含まれています。

- グレー表示のレポート・フィールドは、XML要素のプレースホルダです。

- 「Last Page Placeholder」フィールドには、次の構文が含まれます。

  <?start@last-page:body?> <?end body?>

  これは、最終ページのレイアウトを宣言するためのものです。この文の上または下のコンテンツは、すべて最終ページにのみ表示されます。文の上のコンテンツはヘッダーとみなされ、文の下のコンテンツはフッターとみなされます。

最終ページに繰り越す必要があるヘッダーおよびフッターがレポートに含まれている場合は、最終ページ上で再挿入する必要があります。ヘッダーおよびフッターの詳細は、「ヘッダーとフッターの定義」を参照してください。

最終ページのレイアウトを指定するために、文書にセクション区切り（タイプ: 「next page」）を挿入する必要があります。この例は、Oracle XML Publisher Template Builder for Word installationのサンプル・フォルダから入手できます。

レポートが1ページのみの場合は、先頭ページのレイアウトが使用されることに注意してください。単一ページのレポートはデフォルトとして最終ページのレイアウトを使用する必要がある場合（たとえば小切手印刷のケース）、最終ページで「Last Page Placeholder」のかわりに次の代替構文を使用できます。

<?start@last-page-first:body?> <?end body?>

この構文に置き換えると、1ページのみのレポートの最終ページ・レイアウトとなります。

## 偶数または奇数ページでの終了

レポートのレイアウトが奇数ページと偶数ページで異なる場合は、レポートを強制的に奇数または偶数ページで終了させることができます。たとえば、奇数/偶数フッター別指定機能を使用して、レポートのフッターに発注の条件を挿入し（「Different First Page」および「Different Odd and Even Page」のサポート」を参照）、最終ページに条件が印刷されるようにできます。

あるいは、製本要件を指定し、特定のレイアウトを使用しないで偶数ページでレポートを終了できます。

レイアウトが設定されている偶数ページで終了する場合

次の構文をテンプレートのフォーム・フィールドに挿入します。

    <?section:force-page-count;'end-on-even-layout'?>

レイアウトが設定されている奇数ページで終了する場合

    <?section:force-page-count;'end-on-odd-layout'?>

最終ページにレイアウト要件がなく、ページ数が希望する奇数または偶数となるように空白のページを出力する場合は、次の構文を使用します。

    <?section:force-page-count;'end-on-even'?>

または

    <?section:force-page-count;'end-on-odd'?>

## ハイパーリンク

XML Publisherでは、いくつか異なるタイプのハイパーリンクがサポートされています。ハイパーリンクは、固定または動的なハイパーリンクが可能で、内部または外部のいずれかの宛先にリンクできます。図形に追加することもできます。

- テキストまたは図形のいずれかに静的なハイパーリンクを挿入するには、使用している文書処理アプリケーションのハイパーリンク挿入機能を使用します。

  1. テキストまたは図形を選択します。

  2. マウスの右メニューを使用して「Hyperlink」を選択するか、「Insert」メニューから「Hyperlink」を選択します。

  3. 「Insert Hyperlink」ダイアログ・ボックスに提供されている方法のいずれかを使用してURLを入力します。

  次のスクリーンショットに、Microsoft Wordの「Insert Hyperlink」ダイアログ・ボックスを使用した静的なハイパーリンクの挿入を示します。

- 入力XMLデータに、ハイパーリンクまたはその一部を含む要素が含まれている場合は、実行時に動的なハイパーリンクを作成できます。「Insert Hyperlink」ダイアログ・ボックスの「Type the file or Web page name」フィールドに、次の構文を入力します。

  {URL_LINK}

  URL_LINKは、受信したデータ要素名です。

  XMLデータ・ファイルから要素を追加して作成する固定のURLの場合、次の構文を入力します。

  http://www.oracle.com?product={PRODUCT_NAME}

  PRODUCT_NAMEは、受信したデータ要素名です。

  いずれの場合も、実行時に動的なURLが作成されます。

  次の図に、Microsoft Wordの「Insert Hyperlink」ダイアログ・ボックスを使用した動的なハイパーリンクの挿入を示します。受信したXMLファイルのデータ要素SUPPLIER_URLには、実行時にレポートに挿入されるハイパーリンクが含まれます。

- 実行時にパラメータを渡して動的URLを作成することもできます。

  URLを作成するには、次のように{ }で囲んだパラメータおよび要素名を入力します。

      {$SERVER_URL}{REPORT}/cstid={CUSTOMER_ID}

  SERVER_URLおよびREPORTは実行時にテンプレートに渡されるパラメータで（$記号に注目してください）、CUSTOMER_IDはXMLデータ要素です。このリンクは、次のように表示されます。

  http://myserver.domain:8888/CustomerReport/cstid=1234

### 内部リンクの挿入

Microsoft Wordのブックマーク機能を使用して内部リンクを挿入します。

1. カーソルを文書内の希望する宛先に置きます。

2. 「Insert」->「Bookmark...」を選択します。

3. 「Bookmark」ダイアログで、このブックマークの名前を入力して「Add」を選択します。

4. ブックマークの宛先としてリンクする文書内のテキストまたは図形を選択します。

5. マウスの右メニューを使用して「Hyperlink」を選択するか、「Insert」メニューから「Hyperlink」を選択します。

6. 「Insert Hyperlink」ダイアログで、「Bookmark」を選択します。

7. 作成済のブックマークをリストから選択します。

実行時に、生成されたレポート内にリンクが保持されます。

## 目次

XML Publisherでは、RTF仕様の目次生成機能をサポートしています。目次を挿入するには、使用している文書処理アプリケーションの手順に従ってください。

XML Publisherでは、XMLデータから、文書内に動的なセクション・ヘッダーを作成することもできます。作成したセクション・ヘッダーは目次に組み込むことができます。

動的なヘッダーを作成する手順は、次のとおりです。

1. ヘッダーのプレースホルダを文書の本体に入力し、文書処理アプリケーションのスタイル機能を使用して、そのプレースホルダをヘッダーとして書式設定します。この機能ではフォーム・フィールドを使用できません。

   たとえば、レポート対象の会社ごとに、レポートにヘッダーを表示するとします。この場合、XMLデータ要素タグ名は<COMPANY_NAME>になります。テンプレートに、ヘッダーを表示する<?COMPANY_NAME?>を入力します。次に、テキストをヘッダーとして書式設定します。

2. 目次は、文書処理アプリケーションの目次機能を使用して作成します。

実行時に、目次のプレースホルダとヘッダー・テキストが置換されます。

## PDF出力でのしおりの生成

RTFテンプレート内に目次を定義した場合、目次の定義を使用して出力PDFのナビゲーション・ペインにある「しおり」タブにリンクを生成することができます。しおりは、静的または動的のいずれの方法でも生成できます。

目次作成の詳細は、「目次」を参照してください。

- 静的な目次のリンクを作成するには、次の手順を実行します。

  次の構文を入力します。

  <?copy-to-bookmark:?>

  （目次の直前）

  <?end copy-to-bookmark:?>

  （目次の直後）

- 動的な目次のリンクを作成するには、次の手順を実行します。

  動的な目次がある場合、次の構文を入力します。

  <?convert-to-bookmark:?>

  （目次の直前）

  <?end convert-to-bookmark:?>

  （目次の直後）

## チェック・ボックス

テンプレートにチェック・ボックスを挿入し、受信したデータの値に基づいて選択済または選択解除済として表示するように定義できます。

チェック・ボックスをテンプレートに定義する手順は、次のとおりです。

1. テンプレート内で、チェック・ボックスを表示する位置にカーソルを置き、「Forms」ツールバーから「Check Box Form Field」（次の図を参照）を選択します。

2. フィールドを右クリックして「Check Box Form Field Options」ダイアログを開きます。

3. 「Default value」で「Checked」または「Not Checked」のいずれかを指定します。

4. 「Form Field Help Text」ダイアログで、ボックスの動作を決める基準を入力します。この基準は、ブール式（つまり、結果としてtrueまたはfalseを戻す式）であることが必要です。

   たとえば、XMLデータに<population>という要素が含まれているとします。<population>の値が10,000を超える場合は、チェック・ボックスが選択されて表示されるようにします。この場合は、ヘルプ・テキスト・フィールドに次のように入力します。

       <?population>10000?>

   次の図に、この入力を示します。

   if文を作成する必要がないことに注意してください。入力した式がif文として処理されます。

   チェック・ボックスを使用したサンプル・テンプレートについては、次の項を参照してください。

## ドロップダウン・リスト

XML Publisherでは、ドロップダウン・フォーム・フィールドを使用して、XMLデータからドロップダウン・フォーム・フィールドに定義した他の値への相互参照をテンプレートに作成できます。

たとえば、次のXMLについて考えてみます。

    countries>
            <country>
                    <name>Chad</name>
                    <population>7360000</population>
                    <continentIndex>5</continentIndex>
            </country>
            <country>
                    <name>China</name>
                    <population>1265530000</population>
                    <continentIndex>1</continentIndex>
            </country>
            <country>
                    <name>Chile</name>
                    <population>14677000</population>
                    <continentIndex>3</continentIndex>
            </country>
    . . .
    </countries>

各<country>入力には<continentindex>入力が含まれています。これは、大陸を表す数値です。ドロップダウン・フォーム・フィールドを使用すると、<continentindex>値と実際の大陸名を相互参照する索引をテンプレートに作成できます。さらに、この大陸名を発行レポートに表示できます。

この大陸の例に対する索引を作成する手順は、次のとおりです。

1. テンプレート内で、ドロップダウン・リストを表示する位置にカーソルを置き、「Forms」ツールバーから「Drop-Down Form Field」（次の図を参照）を選択します。

2. フィールドを右クリックして「Drop-Down Form Field Options」ダイアログを表示します。

3. それぞれの値を「Drop-down item」フィールドに追加して「Add」をクリックすると、その値が「Items in drop-down list」グループに追加されます。索引の値は、1から順に表示されます。たとえば、大陸のリストは次のように格納されます。

   索引 | 値
   --- | ---
   1 | Asia
   2 | North America
   3 | South America
   4 | Europe
   5 | Africa
   6 | Australia

4. 「Help」テキスト・ボックスを使用して、ドロップダウン・フィールド値の索引を保持するXML要素名を入力します。

   この例の場合は、次のように入力します。

       <?continentIndex?>

   次の図に、この例での「Drop-Down Form Field Options」ダイアログを示します。

チェック・ボックスおよびドロップダウン・リスト機能を使用して、人口データを、一定の制限に到達した数値を示すチェック・ボックスとともに表示するレポートを作成できます。次の図に例を示します。

次の図に、このレポートを作成するためのテンプレートを示します。

各フィールドの値は次のとおりです。

フィールド | フォーム・フィールド入力 | 説明
--- | --- | ---
FE | <?for-each:country?> | country繰返しグループを開始します。
China | <?name?> | name要素のプレースホルダ。
1,000,000 | <?population?> | population要素のプレースホルダ。
(check box) | <?population>1000000?> | チェック・ボックスの条件を設定します。population要素の値が1,000,000を超えると、チェック・ボックスが選択されて表示されます。
Asia | <?contintentIndex?> | continentIndex要素のドロップダウン・フォーム・フィールド。内容については前述の説明を参照してください。実行時に、XML要素の値は、ドロップダウン・フォーム・フィールドで相互参照される値に置換されます。
EFE | <?end for-each?> | countryグループを終了します。

## 条件付き書式設定

条件付き書式設定は、特定の条件を満たした場合のみ書式設定要素を表示する場合に指定します。XML Publisherでは、単純なif文の他に、複雑なchoose式の使用もサポートしています。

指定できる条件付き書式設定はXSLまたはXSL:FOコードで、実際のRTFオブジェクト（表やデータなど）を指定することもできます。たとえば、特定のしきい値に達したレポート番号を赤で網かけ表示するように指定できます。また、この機能を使用すると、受信したXMLデータに基づいて表の列や行を非表示にすることもできます。

## If文

if文を使用すると、単純な条件を定義できます（たとえば、データ・フィールドが特定の値かどうか）。

1. 次の構文を挿入して、条件領域の開始を指定します。

   <?if:condition?>

2. 構文<?end if?>を条件領域の最後に挿入します。

たとえば、仕入先名が「Company A」の場合のみ請求書を表示するようにPayables Invoice Registerを設定するには、テンプレートの「Supplier」フィールドの前に、構文<?if:VENDOR_NAME='COMPANY A'?>を挿入します。

請求書表の後に<?end if?>タグを入力します。

次の図に、この例を示します。構文は、フォーム・フィールドに挿入するか、またはテンプレートに直接挿入できることに注意してください。

## ボイラープレート・テキストでのif文

if文を次の自由書式テキストに組み込むとします。

The program was (not) successful.

<SUCCESS>というXMLタグの値が「N」の場合のみ、「not」を表示する必要があります。

この要件を満たすには、XML Publisherのコンテキスト・コマンドを使用して、ブロック（デフォルトの配置）ではなくインライン・シーケンスにif文を配置する必要があります。

注意: コンテキスト・コマンドの詳細は、「コンテキスト・コマンドの使用」を参照してください。

たとえば、次のコードを作成したとします。

    The program was <?if:SUCCESS='N'?>not<?end if?> successful.

この場合は、次のような望ましくない結果となります。

    The program was
    not
    successful.

これは、XML Publisherでは、デフォルトでブロックに対して命令が適用されるためです。if文がインライン・シーケンスに挿入されるように指定するには、次のように入力します。

    The program was <?if@inlines:SUCCESS='N'?>not<?end if?>
    successful.

この結果、次のように表示されます。

    The program was successful.

これは、SUCCESSが「N」でない場合の結果です。

または

    The program was not successful.

これは、SUCCESSが「N」の場合の結果です。

## If-then-Else文

XML Publisherでは、一般的なプログラミング構造のif-then-elseをサポートしています。この文は、条件を判断し、その条件に基づいて結果を表示する必要がある場合に特に有用です。次に例を示します。

    IF X=0 THEN
     Y=2
    ELSE
     Y=3
    END IF

これらの文は、次のようにネストすることもできます。

    IF X=0 THEN
     Y=2
    ELSE
     IF X=1 THEN
       Y=10
     ELSE Y=100
    END IF

if-then-else文は、次の構文を使用してRTFテンプレートに作成します。

    <?xdofx:if element_condition then result1 else result2 end if?>

たとえば、次の文はAMOUNT要素値を判断します。値が1000を超えた場合は「Higher」、1000未満の場合は「Lower」、1000の場合は「Equal」と表示されます。

    <?xdofx:if AMOUNT > 1000 then 'Higher'
      else
      if AMOUNT < 1000 then 'Lower'
       else
       'Equal'
    end if?>

## choose文

choose、whenおよびotherwiseの各要素を使用して、複数の条件判断を表現します。受信したXMLデータで特定の条件が満たされると、テンプレートの指定セクションがレンダリングされます。これは、RTFテンプレートの強力な機能です。通常のXSLプログラミングでは、chooseコマンドである条件が満たされると、後続のXSLコードが実行されます。ただし、テンプレートでは、条件フローに視覚的なウィジェットを実際に使用できます（次の例では表を使用）。

これらの要素については、次の構文を使用します。

<?choose:?>

<?when:expression?>

<?otherwise?>

### Choose条件付き書式設定の例

次の例では、EXEMPT_FLAGフィールドとPOSTED_FLAGフィールドの値に基づいてデータ行を表示するchoose式を示します。EXEMPT_FLAGが「^」の場合、データ行は明るい灰色でレンダリングされ、POSTED_FLAGが「*」の場合、データ行は濃い灰色の網かけでレンダリングされます。それ以外の場合、データ行は網かけなしでレンダリングされます。

次の図には、フォーム・フィールドのデフォルト・テキストが表示されています。この後の表に、フォーム・フィールドのヘルプ・テキスト入力を示します。

この例のフォーム・フィールドのデフォルト・テキスト入力 | フォーム・フィールドのヘルプ・テキスト入力
--- | ---
<Grp:VAT | <?for-each:VAT?>
<Choose | <?choose?>
<When EXEMPT_FLAG='^' | <?When EXEMPT_FLAG='^'?>
End When> | <?end When?>
<When EXEMPT_FLAG='^' | <?When EXEMPT_FLAG='^'?>
End When> | <?end When?>

## 列の書式設定

データの列は、条件に基づいて、文書出力に表示したり非表示にできます。次の例では、列が要素属性の値に基づいてのみ表示されるように、表を設定する方法を示します。

この例では、次のXMLで表した価格表のレポートを示します。

    <items type="PUBLIC"> <! -  can be marked ‘PRIVATE’  - >
     <item>
      <name>Plasma TV</name>
      <quantity>10</quantity>
      <price>4000</price>
     </item>
     <item>
      <name>DVD Player</name>
      <quantity>3</quantity>
      <price>300</price>
     </item>
     <item>
      <name>VCR</name>
      <quantity>20</quantity>
      <price>200</price>
     </item>
     <item>
      <name>Receiver</name>
      <quantity>22</quantity>
      <price>350</price>
     </item>
    </items>

items要素に関連付けられているtype属性に注目してください。このXMLでは、この属性がPUBLICとマークされています。これは、リストがPRIVATEリストではなく、パブリック・リストであることを意味します。パブリック・バージョンのリストの場合、出力に数量列は表示しませんが、ここでは、リスト・タイプに基づいて両方のバージョン用に1つのテンプレートを開発します。

次の図に、条件に基づいて数量列を表示または非表示にする単純なテンプレートを示します。

次の表に、この例のテンプレートへの入力を示します。

デフォルト・テキスト | フォーム・フィールド入力 | 説明
--- | --- | ---
grp:Item | <?for-each:item?> | item要素の開始のfor-eachループを保持します。
Plasma TV | <?name?> | XMLファイルからのname要素のプレースホルダ。
IF | <?if@column: /items/@type="PRIVATE"?> | 属性値PRIVATEを判断するif文の開始を示します。この構文では、属性を判断するために、XPath式を使用してXMLのitemsレベルに戻ることに注意してください。テンプレートでのXPathの使用については、「XPathの概要」を参照してください。
Quantity | N/A | ボイラープレート・ヘッダー。
end-if | <?end if?> | if文を終了します。
20 | <?if@column: /items/@type="PRIVATE"?><?quantity?><?end if?> | quantity要素のプレースホルダで、if文に囲まれています。
1,000.00 | <?price?> | price要素のプレースホルダ。
end grp | <?end for-each?> | for-eachループの終了タグ。

条件列の構文は、@column句が追加されたif文です。この@column句によって、XML Publisherはif文の結果に基づいて列を表示または非表示にします。

@columnを含めないと、if文の結果としてデータはレポートに表示されませんが、列は表示されます。これは、テンプレートに列が描画されているためです。

注意: @column句は、コンテキスト・コマンドの例の1つです。詳細は、「コンテキスト・コマンドの使用」を参照してください。

例では、次の図に示す出力がレンダリングされます。

同じXMLデータでtype属性がPRIVATEに設定されている場合は、同じテンプレートから次の出力がレンダリングされます。

## 行の書式設定

XML Publisherでは、表の行レベルで書式設定条件を指定できます。次に、行レベルの書式設定の例を示します。

- データが特定のしきい値に達したときに行を強調表示する。

- レポートを読みやすくするために、行の背景色を変更する。

- 特定の条件を満たした行のみを表示する。

条件に基づく行の表示

特定の条件を満たした行のみを表示するには、グループのfor-eachタグ内で、行の最初と最後に<?if:condition?> <?end if?>タグを挿入します。次の図に、サンプル・テンプレートを示します。

このサンプル図のフィールドは、次のとおりです。

デフォルト・テキスト入力 | フォーム・フィールドのヘルプ・テキスト | 説明
--- | --- | ---
for-each SALE | <?for-each:SALE?> | for-eachループを開始して、SALEグループに属するデータを繰り返します。
if big | <?if:SALES>5000?> | SALES要素の値が5000を超えた場合のみ行を表示するif文。
INDUSTRY | <?INDUSTRY?> | データ・フィールド。
YEAR | <?YEAR?> | データ・フィールド。
MONTH | <?MONTH?> | データ・フィールド。
SALES end if | <?end if?> | if文を終了します。
end SALE | <?end for-each?> | SALEループを終了します。

条件に基づく行の強調表示

この例では、1行おきに背景色を設定する方法を示します。次の図に、この効果を作成するテンプレートを示します。

次の表に、このテンプレートのフォーム・フィールドの値を示します。

デフォルト・テキスト入力 | フォーム・フィールドのヘルプ・テキスト | 説明
--- | --- | ---
for-each SALE | <?for-each:SALE?> | SALEグループのfor-eachループの開始を定義します。
format; | <?if@row:position() mod 2=0?> <xsl:attribute name="background-color" xdofo:ctx="incontext">lightgray</xsl:attribute><?end if?> | 1行おきに、行のbackground color属性をgray（灰色）に設定します。
INDUSTRY | <?INDUSTRY?> | データ・フィールド。
YEAR | <?YEAR?> | データ・フィールド。
MONTH | <?MONTH?> | データ・フィールド。
SALES | <?SALES?> | データ・フィールド。
end SALE | <?end for-each?> | SALEのfor-eachループを終了します。

前述の例のformat;フィールドに注目してください。このフィールドには、行のコンテキスト（@row）を設定したif文が含まれています。これによって、現在行に適用するif文のコンテキストが設定されます。条件がtrueの場合、行の背景色の<xsl:attribute>はlight gray（明るい灰色）に設定されます。この結果、次のように出力されます。

注意: コンテキスト・コマンドの詳細は、「コンテキスト・コマンドの使用」を参照してください。

## セルの強調表示

次の例では、XMLファイルの値に基づいて、セルを強調表示するかどうかを判断する方法を示します。

この例では、次のXMLを使用します。

    <accounts>
     <account>
      <number>1-100-3333</number>
      <debit>100</debit>
      <credit>300</credit>
     </account>
     <account>
      <number>1-101-3533</number>
      <debit>220</debit>
      <credit>30</credit>
     </account>
     <account>
      <number>1-130-3343</number>
      <debit>240</debit>
      <credit>1100</credit>
     </account>
     <account>
      <number>1-153-3033</number>
      <debit>3000</debit>
      <credit>300</credit>
     </account>
    </accounts>

テンプレートには、アカウントとその貸借値がリストされます。最終レポートでは、値が1000を超えたセルは赤で強調表示する必要があります。次の図に、この場合のテンプレートを示します。

次の表に、このテンプレートのフィールド定義を示します。

デフォルト・テキスト入力 | フォーム・フィールド入力 | 説明
--- | --- | ---
FE:Account | <?for-each:account?> | account要素のfor-eachループを開始します。
1-232-4444 | <?number?> | XMLファイルからのnumber要素のプレースホルダ。
CH1 | <?if:debit>1000?><xsl:attribute xdofo:ctx="block" name="background-color">red</xsl:attribute><?end if?> | このフィールドには、借方金額が1000を超えた場合にセルを赤で強調表示するコードが保持されます。
100.00 | <?debit?> | debit要素のプレースホルダ。
CH2 | <?if:credit>1000?><xsl:attribute xdofo:ctx="block" name="background-color">red</xsl:attribute><?end if?> | このフィールドには、貸方金額が1000を超えた場合にセルを赤で強調表示するコードが保持されます。
100.00 | <?credit?> | credit要素のプレースホルダ。
EFE | <?end for-each?> | for-eachループを終了します。

この表に示すように、貸方列を強調表示するコードは次のとおりです。

    <?if:debit>1000?>
      <xsl:attribute
       xdofo:ctx="block" name="background-color">red
      </xsl:attribute>
    <?end if?>

このif文は、debitの値が1000を超えているかどうかを判断します。1000を超えた場合は、次の行が実行されます。この例では、if文内にXSL固有のコードが埋め込まれていることに注目してください。

XSLのプロパティは、attribute要素を使用して変更できます。

xdo:ctxコンポーネントはXML Publisherの機能の1つで、テンプレート内のすべてのレベルでXSL属性を調整できます。この例の場合は、background color属性がred（赤）に変更されています。

color属性の変更には、標準的なHTMLの名称（赤、白、緑など）か、16進数の色定義（#FFFFFなど）を使用できます。

次の図に、このテンプレートからの出力を示します。

## ページ・レベルの計算

## ページ合計の表示

XML Publisherでは、ページ合計を計算してレポートに表示できます。ページは発行時まで作成されないため、合計計算機能は書式設定エンジンで実行する必要があります。

注意: ページ合計計算はPDF書式設定層で実行されます。したがって、HTML、RTFおよびExcelの出力タイプではこの機能を使用できません。

ページ合計フィールドはXML入力データに存在しないため、値を保持する変数を定義する必要があります。変数を定義するときは、ページの合計を計算するXMLファイルの要素にその変数を関連付けます。合計フィールドを定義した後は、その合計フィールドのデータに対して追加の関数を実行することもできます。

ページ合計を保持する変数を宣言するには、合計する要素のプレースホルダの直後に次の構文を挿入します。

    <?add-page-total:TotalFieldName;'element'?>

各項目は次のとおりです。

TotalFieldNameは、合計に割り当てる名称（後で参照するため）です。

'element'は、合計するXML要素フィールドです。

この構文は、必要な数の合計計算の対象フィールドに追加できます。

合計フィールドを表示する場合は、次の構文を入力します。

    <?show-page-total:TotalFieldName;'Oracle-number-format'?>

各項目は次のとおりです。

TotalFieldNameは、前述のページ合計フィールドを指定する際に割り当てた名称です。

Oracle数値書式は、Oracle書式マスクを使用して表示する際に使用する書式です。Oracle書式マスクの記号のリストは、「Oracle書式マスクの使用」を参照してください。

次の例では、テンプレートにページ合計フィールドを設定し、ページに表示されている貸方と借方の合計を表示して、この2つのフィールドの差引額を計算する方法を示します。

この例では、次のXMLを使用します。

    <balance_sheet>
     <transaction>
      <debit>100</debit>
      <credit>90</credit>
     </transaction>
     <transaction>
      <debit>110</debit>
      <credit>80</credit>
     </transaction>
    …
    <\balance_sheet>

次の図に、値を保持するためにテンプレートに挿入する表を示します。

この表の例について、テンプレートのフォーム・フィールドへの入力を次の表に示します。

デフォルト・テキスト入力 | フォーム・フィールドのヘルプ・テキスト入力 | 説明
--- | --- | ---
FE | <?for-each:transaction?> | このフィールドは、transactionグループの開始のfor-eachループを定義します。
100.00 | <?debit?><?add-page-total:dt;'debit'?> | このフィールドは、XMLファイルからのdebit要素のプレースホルダです。このフィールドをページごとに合計する必要があるため、ページ合計の宣言構文が追加されています。debit要素の合計を保持するために定義されたフィールドはdtです。
90.00 | <?credit?> <?add-page-total:ct;'credit'?> | このフィールドは、XMLファイルからのcredit要素のプレースホルダです。このフィールドをページごとに合計する必要があるため、ページ合計の宣言構文が追加されています。credit要素の合計を保持するために定義されたフィールドはctです。
Net | <add-page-total:net;'debit - credit'?> | 借方値から貸方値を差し引いたページ合計差引額を作成します。
EFE | <?end for-each?> | for-eachループを終了します。

netとして定義したフィールドでは、credit要素とdebit要素の値に対して実際に計算が実行されることに注意してください。

ページ合計フィールドを宣言した後は、ページ合計を表示するフィールドをテンプレートに挿入できます。指定した名称（前述の例ではctおよびdt）を使用して、計算フィールドを参照します。ページ合計を表示するための構文は次のとおりです。

たとえば、貸方のページ合計を表示するには、次のように入力します。

<?show-page-total:dt;'C9G990D00';'(C9G990D00)'?>

最後に、テンプレート・ページの最下部またはフッターに、次のフィールドを配置します。

ページ合計借方: <?show-page-total:dt;'C9G990D00';'(C9G990D00)'?>

ページ合計貸方: <?show-page-total:ct;'C9G990D00';'(C9G990D00)'?>

ページ合計残高: <?show-page-total:net;'C9G990D00';'(C9G990D00)'?>

次の図に、このレポートの出力を示します。

このページ合計計算機能は、ソースXMLにRaw数値がある場合のみ有効です。数値は事前に書式設定できません。

## 前からの繰越合計/次への繰越合計

多くのレポートでは、レポート出力全体にわたるページ合計を保持し、各ページの最初と最後に表示する必要があります。これらの合計は、前からの繰越/次への繰越の合計と呼ばれます。

注意: 前からの繰越と次への繰越フィールドの合計計算はPDF書式設定層で実行されます。したがって、HTML、RTFおよびExcelの出力タイプではこの機能を使用できません。

次の図に、この例を示します。

最初のページの最後に、Amount要素のページ合計が次への繰越合計として表示されます。第2ページの先頭には、この値が前ページからの繰越合計として表示されます。さらに、第2ページの最後には、次への繰越値にそのページの合計を加算した金額が次のぺージへの新規繰越値として表示されます。レポート全体でこれを繰り返します。

この機能は、ページ合計機能の拡張です。次の例では、発行レポートに前からの繰越合計と次への繰越合計を表示するために必要な構文と設定について説明します。

次のXMLを使用するとします。

    <?xml version="1.0" encoding="WINDOWS-1252"?>
    <INVOICES>
     <INVOICE>
      <INVNUM>10001-1</INVNUM>
      <INVDATE>1-Jan-2005</INVDATE>
      <INVAMT>100</INVOICEAMT>
     </INVOICE>
     <INVOICE>
      <INVNUM>10001-2</INVNUM>
      <INVDATE>10-Jan-2005</INVDATE>
      <INVAMT>200</INVOICEAMT>
     </INVOICE>
     <INVOICE>
      <INVNUM>10001-1</INVNUM>
      <INVDATE>11-Jan-2005</INVDATE>
      <INVAMT>150</INVOICEAMT>
     </INVOICE>
    . . .
    </INVOICES>

次のサンプル・テンプレートでは、請求書表を作成し、ページ合計を保持するプレースホルダを宣言します。

テンプレートの各フィールドの値は次のとおりです。

フィールド | フォーム・フィールドのヘルプ・テキスト入力 | 説明
--- | --- | ---
Init PTs | <?init-page-total: InvAmt?> | InvAmtを、ページ合計を保持するプレースホルダとして宣言します。
FE | <?for-each:INVOICE?> | INVOICEグループを開始します。
10001-1 | <?INVNUM?> | 請求書番号タグのプレースホルダ。
1-Jan-2005 | <?INVDATE?> | 請求日タグのプレースホルダ。
100.00 | <?INVAMT?> | 請求金額タグのプレースホルダ。
InvAmt | <?add-page-total:InvAmt;INVAMT?> | ページ合計オブジェクトInvAmtをデータ内のINVAMT要素に割り当てます。
EFE | <?end for-each?> | INVOICEグループを終了します。
End PTs | <?end-page-total:InvAmt?> | ページ合計オブジェクトInvAmtを終了します。

各ページ（最初のページを除く）の先頭に前からの繰越合計を表示するには、次の構文を使用します。

    <xdofo:inline-total
      display-condition="exceptfirst"
      name="InvAmt">
       Brought Forward:
    <xdofo:show-brought-forward
      name="InvAmt"
      format="99G999G999D00"/>
    </xdofo:inline-total>

次の表に、前からの繰越の構文を構成する要素を説明します。

コード要素 | 説明と使用方法
--- | ---
inline-total | この要素には、次の2つのプロパティがあります。 name: フィールドに対して宣言する変数の名称。 display-condition: 表示条件を設定します。これはオプションのプロパティで、次のいずれかの値を設定します。 first: 内容が最初のページにのみ表示されます。 last: 内容が最後のページにのみ表示されます。 exceptfirst: 内容が最初のページを除く全ページに表示されます。 exceptlast: 内容が最後のページを除く全ページに表示されます。 everytime: （デフォルト）内容が全ページに表示されます。 この例では、display-conditionがexceptfirstに設定されているため、値が0（ゼロ）の最初のページには値が表示されません。
Brought Forward: | この文字列はオプションで、レポートのフィールド名として表示されます。
show-brought-forward | ページに値を表示します。次の2つのプロパティがあります。 name: 表示するフィールドの名称。この例では「InvAmt」です。このプロパティは必須です。 format: 実行時に値を表示するOracle数値書式。このプロパティはオプションですが、書式マスクを指定する場合は、Oracle書式マスクを使用する必要があります。詳細は、「Oracle書式マスクの使用」を参照してください。

前からの繰越合計を表示するテンプレートの先頭に、前からの繰越オブジェクトを挿入します。このオブジェクトをテンプレート本体に配置すると、構文をフォーム・フィールドに挿入できます。

前からの繰越合計をヘッダーに表示する場合、Microsoft Wordではヘッダーまたはフッター・リージョンでのフォーム・フィールドの使用をサポートしていないため、コード文字列全体をヘッダーに挿入する必要があります。ただし、start body/end body構文を使用すると、レポートの本体部分を定義できます。XML Publisherでは、定義した本体部分より前の内容はヘッダーとして、本体部分より後の内容はフッターとして認識されます。この場合は、フォーム・フィールドを使用できます。詳細は、「複数のヘッダーとフッターまたは複雑なヘッダーとフッター」を参照してください。

合計を表示するテンプレートの最下部に、次への繰越オブジェクトを配置します。この例の次への繰越オブジェクトは次のとおりです。

    <xdofo:inline-total
      display-condition="exceptlast"
      name="InvAmt">
       Carried Forward:
    <xdofo:show-carry-forward
      name="InvAmt"
      format="99G999G999D00"/>
    </xdofo:inline-total>

前からの繰越オブジェクトと次の点が異なることに注意してください。

- display-conditionがexceptlastに設定されているため、次への繰越合計は、最後のページを除く全ページに表示されます。

- 表示文字列は「Carried Forward」です。

- show-carry-forward要素を使用して次への繰越値を表示します。この要素には、前述のshow-brought-forwardと同じプロパティがあります。

テンプレートでは値の数に制限はありません。前からの繰越/次への繰越オブジェクトをテンプレートに複数作成して、データ内の様々な数値要素を指し示すことができます。

## 総合計

変数機能（「変数の使用」を参照）を使用して、請求書一覧レポートに総合計を追加できます。この例では、次のXML構造を使用します。

    <?xml version="1.0" encoding="WINDOWS-1252"?>
    <INVOICES>
     <INVOICE>
      <INVNUM>10001-1</INVNUM>
      <INVDATE>1-Jan-2005</INVDATE>
      <INVAMT>100</INVOICEAMT>
     </INVOICE>
     <INVOICE>
      <INVNUM>10001-2</INVNUM>
      <INVDATE>10-Jan-2005</INVDATE>
      <INVAMT>200</INVOICEAMT>
     </INVOICE>
     <INVOICE>
      <INVNUM>10001-1</INVNUM>
      <INVDATE>11-Jan-2005</INVDATE>
      <INVAMT>150</INVOICEAMT>
     </INVOICE>
    </INVOICES>

このXMLを使用して、次の図に示すような総合計を含むレポートを作成します。

「Running Total」フィールドを作成するには、合計を追跡するための変数を定義し、その変数を0（ゼロ）に初期化します。次の図に、このテンプレートを示します。

次の表に、テンプレート内のフォーム・フィールドの値を示します。

フォーム・フィールド | 構文 | 説明
--- | --- | ---
RtotalVar | <?xdoxslt:set_variable($_XDOCTX, 'RTotalVar', 0)?> | RTotalVar変数を宣言して0（ゼロ）に初期化します。
FE | <?for-each:INVOICE?> | Invoiceグループを開始します。
10001-1 | <?INVNUM?> | 請求書番号タグ。
1-Jan-2005 | <?INVDATE?> | 請求日タグ。
100.00 | <?xdoxslt:set_variable($_XDOCTX, 'RTotalVar', xdoxslt:get_variable($_XDOCTX, 'RTotalVar') + INVAMT)?> xdoxslt:get_variable($_XDOCTX, 'RTotalVar')?> | RTotalVarを、現在値に新しい請求金額を加算した値に設定します。 RTotalVarの値を取得して表示します。
EFE | <?end for-each?> | INVOICEグループを終了します。

## データ処理

## ソート

グループは、そのグループ内の任意の要素順にソートできます。次の構文をグループ・タグ内に挿入します。

<?sort:element name?>

たとえば、この章の冒頭で示したPayables Invoice Registerを仕入先順（VENDOR_NAME）にソートするには、<?for-each:G_VENDOR_NAME?>タグの後に次のように入力します。

<?sort:VENDOR_NAME?>

複数のフィールドによってグループをソートするには、第1ソート・フィールドの後にソート構文を入力します。仕入先順の後に請求書番号順にソートするには、次のように入力します。

<?sort:VENDOR_NAME?> <?sort:INVOICE_NUM?>

## nullのチェック

XMLデータ内の要素の値には、3つの可能なシナリオが考えられます。

- XMLデータ内に要素が存在し、値を持つ場合

- XMLデータ内に要素が存在するが、値を持たない場合

- XMLデータ内に要素が存在せず、したがって値もない場合

レポート・レイアウトでは、要素とその値の有無に応じて異なる動作を指定することが必要な場合があります。次の例では、if文を使用してこれらの条件のそれぞれについてチェックする方法を示します。構文は、別の条件付き書式設定構造でも使用できます。

- 要素が存在し、値がnullでない場合の動作を定義するには、次を使用します。

  <?if:element_name!=?> 要素が存在しnullでない場合に必要な動作 <?end if?>

- 要素は存在するが、値がnullの場合の動作を定義するには、次を使用します。

  <?if:element_name and element_name="?> 要素は存在するが値がnullの場合に必要な動作 <?end if?>

- 要素が存在しない場合の動作を定義するには、次を使用します。

  <?if:not(element_name)?> 要素が存在しない場合に必要な動作 <?end if?>

## XMLデータの再グループ化

RTFテンプレートでは、XSL 2.0のfor-each-group標準をサポートしているため、元のデータに存在しないXMLデータを階層に再グループ化できます。この機能を使用すると、テンプレートではソースXMLファイルの階層に従う必要がありません。このため、データ・ソースの構造による制限がなくなります。

### XMLのサンプル

for-each-group標準を示すために、CDカタログ一覧の次のXMLデータ・サンプルをテンプレートで再グループ化します。

    <CATALOG>
       <CD>
          <TITLE>Empire Burlesque</TITLE>
          <ARTIST>Bob Dylan</ARTIST>
          <COUNTRY>USA</COUNTRY>
          <COMPANY>Columbia</COMPANY>
          <PRICE>10.90</PRICE>
          <YEAR>1985</YEAR>
       </CD>
       <CD>
          <TITLE>Hide Your Heart</TITLE>
          <ARTIST>Bonnie Tylor</ARTIST>
          <COUNTRY>UK</COUNTRY>
          <COMPANY>CBS Records</COMPANY>
          <PRICE>9.90</PRICE>
          <YEAR>1988</YEAR>
       </CD>
       <CD>
          <TITLE>Still got the blues</TITLE>
          <ARTIST>Gary More</ARTIST>
          <COUNTRY>UK</COUNTRY>
          <COMPANY>Virgin Records</COMPANY>
          <PRICE>10.20</PRICE>
          <YEAR>1990</YEAR>
       </CD>
       <CD>
          <TITLE>This is US</TITLE>
          <ARTIST>Gary Lee</ARTIST>
          <COUNTRY>UK</COUNTRY>
          <COMPANY>Virgin Records</COMPANY>
          <PRICE>12.20</PRICE>
          <YEAR>1990</YEAR>
       </CD>

再グループ化構文を使用すると、CDデータを国別にグループ化し、さらに年度別にグループ化するレポートを作成できます。これにより、現在のデータ構造による制限を受けません。

### 再グループ化構文

データを再グループ化するには、次の構文を使用します。

    <?for-each-group: BASE-GROUP;GROUPING-ELEMENT?>

たとえば、CD一覧をCOUNTRY別に再グループ化するには、テンプレートに次のように入力します。

    <?for-each-group:CD;COUNTRY?>

COUNTRYと同じ階層レベルにあった要素はCOUNTRYの子要素になります。これで、グループの要素を参照して、必要な値を表示できます。

すでに定義済のグループ内にネストされたグループを作成するには、次の構文を使用します。

    <?for-each:current-group(); GROUPING-ELEMENT?>

たとえば、CDをCOUNTRY別にグループ化するように宣言した後、COUNTRY内でさらにYEAR別にグループ化するには、次のように入力します。

    <?for-each:current-group();YEAR?>

実行時に、XML Publisherは新規グループをループするたびに、テンプレートに定義したフィールドを表示します。

注意: この構文は、簡略化されたXSLのfor-each-group構文です。前述の簡略化された構文を使用しない場合は、後述するXSL構文を使用できます。XSL構文を使用できるのは、テンプレートのフォーム・フィールド内のみです。

    <xsl:for-each-group
      select=expression
      group-by="string expression"
      group-adjacent="string expression"
      group-starting-with=pattern>
      <!--Content: (xsl:sort*, content-constructor) -->
    </xsl:for-each-group>

### テンプレートの例

次の図に、CDをCountry別、Year別の順に表示して、各CDの詳細をリストするテンプレートを示します。

次の表に、このテンプレートのフォーム・フィールドに入力された、XML Publisherの構文を示します。

デフォルト・テキスト入力 | フォーム・フィールドのヘルプ・テキスト入力 | 説明
--- | --- | ---
Group by Country | <?for-each-group:CD;COUNTRY?> | <?for-each-group:CD;COUNTRY?>タグは、新規グループを宣言します。これによって、既存のCDグループがCOUNTRY要素別に再グループ化されます。
USA | <?COUNTRY?> | COUNTRYタグのデータ値を表示するプレースホルダ。
Group by Year | <?for-each-group:current-group();YEAR?> | <?for-each-group:current-group();YEAR?>タグは、現行グループ（COUNTRY）をYEAR要素別に再グループ化します。
2000 | <?YEAR?> | YEARタグのデータ値を表示するプレースホルダ。
Group: Details | <?for-each:current-group()?> | データをCOUNTRY別、YEAR別の順にグループ化した後、<?for-each:current-group()?>コマンドを使用して現行グループ（YEAR）の要素をループし、表内のデータ値（TITLE、ARTISTおよびPRICE）をレンダリングします。
My CD | <?TITLE?> | TITLEタグのデータ値を表示するプレースホルダ。
John Doe | <?ARTIST?> | ARTISTタグのデータ値を表示するプレースホルダ。
1.00 | <?PRICE?> | PRICEタグのデータ値を表示するプレースホルダ。
End Group | <?end for-each?> | <?for-each:current-group()?>タグを終了します。
End Group by Year | <?end for-each-group?> | <?for-each-group:current-group();YEAR?>タグを終了します。
End Group by Country | <?end for-each-group?> | <?for-each-group:CD;COUNTRY?>タグを終了します。

このテンプレートによって、XMLファイルとマージしたときに次の出力が作成されます。

### 式による再グループ化

式による再グループ化を使用すると、関数またはコマンドをデータ要素に適用し、戻された結果別にデータをグループ化できます。

この機能を使用するには、次のように、再グループ化構文内に式を記述する必要があります。

    <?for-each:BASE-GROUP; GROUPING-EXPRESSION?>

この機能を説明するために、簡略化したXMLデータ・サンプルを使用します。このサンプルは、月別の平均気温を保持し、平均気温が特定の範囲内にある月の数を計算するテンプレートへの入力として使用します。

次のXMLサンプルは、複数の<temp>グループで構成されています。各<temp>グループには、<month>要素と<degree>要素が含まれ、その月の平均気温が保持されています。

    <temps>
      <temp>
        <month>Jan</month>
        <degree>11</degree>
      </temp>
      <temp>
        <month>Feb</month>
        <degree>14</degree>
      </temp>
      <temp>
        <month>Mar</month>
        <degree>16</degree>
      </temp>
      <temp>
        <month>Apr</month>
        <degree>20</degree>
      </temp>
      <temp>
        <month>May</month>
        <degree>31</degree>
      </temp>
      <temp>
        <month>Jun</month>
        <degree>34</degree>
      </temp>
      <temp>
        <month>Jul</month>
        <degree>39</degree>
      </temp>
      <temp>
        <month>Aug</month>
        <degree>38</degree>
      </temp>
      <temp>
        <month>Sep</month>
        <degree>24</degree>
      </temp>
      <temp>
        <month>Oct</month>
        <degree>28</degree>
      </temp>
      <temp>
        <month>Nov</month>
        <degree>18</degree>
      </temp>
      <temp>
        <month>Dec</month>
        <degree>8</degree>
      </temp>
    </temps>

このデータを次の書式で表示します。この書式では、気温の範囲、および平均気温がその範囲内にある月の数を表示します。

for-each-groupコマンドを使用すると、気温を10度ごとに増分してグループ化する式を<degree>要素に適用できます。これで、各グループのメンバーの件数、つまり、平均気温が各範囲内にある月の数を表示できます。

次の図に、このレポートを作成するためのテンプレートを示します。

次の表に、テンプレートのフォーム・フィールドへの入力を示します。

デフォルト・テキスト入力 | フォーム・フィールドのヘルプ・テキスト入力
--- | ---
Group by TmpRng | <?for-each-group:temp;floor(degree div 10?> <?sort:floor(degree div 10)?>
Range | <?concat(floor(degree div 10)*10,' F to ',floor(degree div 10)*10+10, F')?>
Months | <?count(current-group())?>
End TmpRng | <?end for-each-group?>

フォーム・フィールド・タグについて次の点に注目してください。

- <?for-each-group:temp;floor(degree div 10)?>は再グループ化タグです。このタグは、既存の<temp>グループに対して、floor(degree div 10)式を使用して要素を再グループ化するように指定します。floor関数はXSL関数の1つで、引数より低い最大整数を戻します（たとえば、1.2の場合は1を、0.8の場合は0（ゼロ）を戻します）。

  この例では、<degree>要素の値を10で除算した値に対する関数の結果が戻されます。これによって、XMLデータから、1、1、1、2、3、3、3、3、2、2、1、0の値が生成されます。

  これらの値をソートすると、0、1、2および3の4つのグループが作成されます。

- <?concat(floor(degree div 10)*10,'F to ', floor(degree div 10)*10+10,'F'?>は、気温範囲を10度ごとに増分して行ヘッダーに表示します。この式によって、現行グループの値に10を乗算した値と、現行グループの値に10を乗算して10を加算した値が連結されます。

  したがって、最初のグループ0（ゼロ）の場合、行ヘッダーには「0 F to 10 F」（0〜(0+10)）と表示されます。

- <?count(current-group())?>は、count関数を使用して現行グループのメンバー（範囲を満たす気温の数）をカウントします。

- <?end for-each-group?>タグは、このグループを終了します。

## 変数の使用

更新可能な変数は、標準的なXSL変数<xsl:variable>とは異なります。更新可能な変数は、XMLデータに対してテンプレート・アプリケーションが実行されているときに更新できます。これによって、更新可能な変数を必要とする多くの新機能をテンプレートに作成できます。

変数では、「設定および取得」という方法を使用して、値の割当て、更新および取得を行います。

次の構文を使用して、変数値を宣言（設定）します。

    <?xdoxslt:set_variable($_XDOCTX, 'variable name', value)?>

次の構文を使用して、変数値を取得します。

    <?xdoxslt:get_variable($_XDOCTX, 'variable name')?>

この方法を使用して、計算を実行できます。次に例を示します。

    <?xdoxslt:set_variable($_XDOCTX, 'x', xdoxslt:get_variable($_XDOCTX, 'x' + 1)?>

これによって、変数'x'の値は元の値に1を加算した値に設定されます（x = x + 1を使用した場合に類似しています）。

$_XDOCTXは、変数のグローバル文書コンテキストを指定します。マルチスレッド環境では、同時に多数の変換が発生する場合があるため、変数には1つの変換のみを割り当てる必要があります。

更新可能な変数の使用例については、「総合計」を参照してください。

## パラメータの定義

テンプレートには、パラメータの値を実行時に渡すことができます。この値は、多くの機能をサポートするために、テンプレート全体で参照できます。たとえば、テンプレートでデータをフィルタ処理したり、条件付き書式設定ブロックで値を使用できます。また、セキュリティ設定などのプロパティ値を最終文書に渡すこともできます。

注意: XML Publisher Enterpriseユーザーの場合は、すべての名前とパラメータ値のペアがテンプレートに渡されます。次に説明する構文を使用して、利用するパラメータをテンプレートに登録する必要があります。

テンプレートでのパラメータの使用

1. パラメータをテンプレートで宣言します。

   次の構文を使用して、パラメータを宣言します。

       <?param@begin:parameter_name;parameter_value?>

   各項目は次のとおりです。

   parameter_nameは、パラメータの名称です。

   parameter_valueは、パラメータのデフォルト値です（parameter_valueはオプションです）。

   param@begino:は、実行時にテンプレートの先頭にパラメータ宣言をプッシュするために必要な文字列です。これによって、テンプレートでパラメータをグローバルに参照できます。

   この構文は、フォーム・フィールドの「Help Text」フィールドで宣言する必要があります。このフォーム・フィールドは、テンプレート内の任意の位置に配置できます。

2. テンプレートでパラメータを参照するには、パラメータ名の前に$文字を付けます。たとえば、パラメータ名をInvThreshと宣言した場合は、$InvThreshを使用してその値を参照します。

3. XML Publisher Enterpriseを使用せず、コア・ライブラリのみを使用している場合は、次のようにします。

   実行時に、プログラムでパラメータをXML Publisherエンジンに渡します。

   FOProcessor APIをコールする前に、次のようにパラメータ値に対してPropertiesクラスを作成し、プロパティを割り当てます。

       Properties prop = new Properties();
       prop.put("xslt.InvThresh", "1000");

例: 請求書しきい値パラメータの受渡し

次の例では、パラメータの値に基づいてデータをフィルタ処理するテンプレートで、パラメータを宣言する方法を説明します。

次のXMLサンプルには、請求書データがリストされています。

    <INVOICES>
     <INVOICE>
      <INVOICE_NUM>981110</INVOICE_NUM>
      <AMOUNT>1100</AMOUNT>
     </INVOICE>
     <INVOICE>
      <INVOICE_NUM>981111</INVOICE_NUM>
      <AMOUNT>250</AMOUNT>
     </INVOICE>
     <INVOICE>
      <INVOICE_NUM>981112</INVOICE_NUM>
      <AMOUNT>8343</AMOUNT>
     </INVOICE>
    . . .
    </INVOICES>

次の図に、パラメータ値を受け取り、そのパラメータ値に基づいて最終文書に表示する請求書を制限するテンプレートを示します。

フィールド | フォーム・フィールドのヘルプ・テキスト入力 | 説明
--- | --- | ---
InvThreshDeclaration | <?param@begin:InvThresh?> | パラメータInvThreshを宣言します。
FE | <?for-each:INVOICE?> | INVOICE要素の繰返しグループを開始します。
IF | <?if:AMOUNT>$InvThresh?> | AMOUNT要素の値を調べて、InvThreshの値より大きいかどうかを判断します。
13222-2 | <?INVOICE_NUM?> | INVOICE_NUM要素のプレースホルダ。
$100.00 | <?AMOUNT?> | AMOUNT要素のプレースホルダ。
EI | <?end if?> | if文の終了タグ。
EFE | <?end for-each?> | for-eachループの終了タグ。

このテンプレートでは、AMOUNTがInvThreshパラメータ値より大きいINVOICE要素のみが表示されます。パラメータ値1,000が渡された場合、出力は次の図のようになります。

2番目の請求書は、AMOUNTがパラメータ値より小さいため、表示されないことに注目してください。

## プロパティの設定

XML Publisherの構成ファイルで使用可能なXML Publisherプロパティは、RTFテンプレートに埋め込むこともできます。テンプレートに設定されたプロパティは、実行時にXML Publisherエンジンによって解決されます。値は、テンプレートにハードコードするか、または受信したXMLデータに埋め込むことができます。プロパティをテンプレートに埋め込む場合、構成ファイルの使用は不要になります。

注意: XML Publisher構成ファイルおよび使用可能なプロパティの詳細は、XML Publisherの構成ファイルを参照してください。

たとえば、構成ファイルにフォントの位置を指定しないで、非標準フォントをテンプレートで使用する場合は、テンプレート内にフォント・プロパティを埋め込むことができます。生成されたPDF出力を保護する必要がある場合は、XML PublisherのPDFセキュリティ・プロパティを使用して、受信したXMLデータからパスワード値を取得できます。

XML Publisherプロパティをテンプレートに追加するには、Microsoft Wordの「Propertie s」ダイアログ（「Fil e」メニューから使用可能）を使用して、次の情報を入力します。

Name: XML Publisherプロパティ名を先頭にxdo-を付けて入力します。

Type: 「Text」を選択します。

Value: プロパティ値を入力します。受信したXMLデータから要素を参照するには、XML要素へのパスを中カッコで囲んで入力します。たとえば、{/root/password}のように入力します。

次の図に、「Properties」ダイアログを示します。

フォント参照の埋込み

次の例では、XMLPScriptというフォントをテンプレートで使用するとします。このフォントは、サーバーでは通常のフォントとして使用できないため、実行時にXML Publisherに対してそのフォントの検索場所を指示する必要があります。XML Publisherにフォントの検索場所を指示するには、fontプロパティを設定します。フォントが/tmp/fontsに格納されている場合は、「Properties」ダイアログに次のように入力します。

Name: xdo-font.XMLPScript.normal.normal

Type: 「Text」

Value: truetype./tmp/fonts/XMLPScript.ttf

テンプレートがサーバーのXMLデータに適用されると、XML Publisherは/tmp/fontsディレクトリでフォントを検索します。テンプレートが複数の場所に配置されている場合は、各場所に対してパスが有効であることを確認してください。

フォント・プロパティの設定の詳細は、「フォント定義」を参照してください。

PDF出力の保護

次の例では、XMLデータからパスワードを使用して、PDF出力文書を保護するとします。XMLデータは次のとおりです。

    <PO>
     <security>true</security>
     <password>welcome</password>
     <PO_DETAILS>
     ..
    </PO>

「Properties」ダイアログでは、次の2つのプロパティを設定します。pdf-securityプロパティではセキュリティ機能を有効にするかどうかを設定し、pdf-open-passwordプロパティではパスワードを設定します。「Properties」ダイアログで次のように入力します。

Name: xdo-pdf-security

Type: 「Text」

Value: {/PO/security}

Name: xdo-pdf-open-password

Type: 「Text」

Value: {/PO/password}

XMLがシステム内に長期間保持される場合、XMLデータにパスワードを格納するのはお薦めできません。潜在的なセキュリティ・リスクを回避するには、実行時に生成してテンプレートに渡したテンプレート・パラメータ値を使用できます。

たとえば、次のパラメータを設定できます。

- PDFSec: xdo-pdf-securityプロパティの値を渡すために使用します。

- PDFPWD: パスワードの値を渡すために使用します。

次に、「Properties」ダイアログで次のように入力します。

Name: xdo-pdf-security

Type: 「Text」

Value: {$PDFSec}

Name: xdo-pdf-open-password

Type: 「Text」

Value: {$PDFPWD}

テンプレート・パラメータの詳細は、「テンプレートでのパラメータの定義」を参照してください。

## 拡張レポート・レイアウト

## バッチ・レポート

1つのPDFファイルに含まれる請求書や発注書などの文書を一括して印刷することは一般的な要件の1つです。このような文書は複数の異なる顧客向けであるため、文書ごとにページ番号をリセットし、ページ合計は文書固有であることが必要です。ヘッダーとフッターにデータのフィールド（顧客名など）を表示する場合も、同様にリセットする必要があります。

XML Publisherでは、コンテキスト・コマンドを使用してこの要件をサポートしています。このコマンドを使用すると、レポートの要素を特定のセクションに定義できます。セクションが変わると、要素がリセットされます。

次の例では、出力ファイル内のヘッダーとフッター、およびページ番号をリセットする方法を説明します。

次のXMLサンプルは、複数の請求書を含むレポートです。

    ...
    <LIST_G_INVOICE>
       <G_INVOICE>
          <BILL_CUST_NAME>Vision, Inc. </BILL_CUST_NAME>
          <TRX_NUMBER>2345678</TRX_NUMBER>
          ...
       </G_INVOICE>
       <G_INVOICE>
          <BILL_CUST_NAME>Oracle, Inc. </BILL_CUST_NAME>
          <TRX_NUMBER>2345685</TRX_NUMBER>
          ...
       </G_INVOICE>
       ...
    </LIST_G_INVOICE>
    ...

各G_INVOICE要素には、異なる顧客向けの請求書が含まれている場合があります。XML Publisherに対して、G_INVOICE要素が出現するたびに新規セクションを開始するように指示するには、次の構文を使用して、@sectionコマンドをグループの開始のfor-each文に追加します。

<?for-each@section:group name?>

group_nameは、新規セクションを開始する要素の名称です。

たとえば、この例のfor-eachグループ文は次のようになります。

<?for-each@section:G_INVOICE?>

終了の<?end for-each?>タグは変更ありません。

次の図に、サンプル・テンプレートを示します。ヘッダーはコマンドによってリセットされますが、G_INVOICEグループのfor-each宣言はレポート本体内にあることに注意してください。

次の表に、この例のフォーム・フィールドの値を示します。

デフォルト・テキスト入力 | フォーム・フィールドのヘルプ・テキスト | 説明
--- | --- | ---
for-each G_INVOICE | <?for-each@section:G_INVOICE?> | G_INVOICEグループを開始し、要素をセクションとして定義します。G_INVOICEが出現するたびに、新規セクションを開始します。
<?TRX_NUMBER?> | N/A | Microsoft Wordでは、ヘッダーでのフォーム・フィールドの使用はサポートしていないため、TRX_NUMBER要素のプレースホルダ構文はテンプレートに直接配置します。
end G_INVOICE | <?end for-each?> | G_INVOICEグループを終了します。

これで、G_INVOICE要素が新たに出現するたびに、新規セクションが開始します。ページ番号が再び開始され、ヘッダーまたはフッターの情報がデータから抽出されると、同様にリセットされます。

## クロス集計のサポート

クロス集計レポートの列は、データに依存します。設計時には、レポートされる列の数や適切な列ヘッダーは不明です。さらに、列が次のページに分割される場合は、後続のページで繰り返す行ラベル列の定義が必要になります。次の例では、これらの機能をサポートする単純なクロス集計レポートの設計方法を説明します。

この例では、次のXMLサンプルを使用します。

    <ROWSET>
                      <RESULTS>
                                     <INDUSTRY>Motor Vehicle Dealers</INDUSTRY>
                                     <YEAR>2005</YEAR>
                                     <QUARTER>Q1</QUARTER>
                                     <SALES>1000</SALES>
              </RESULTS>
        <RESULTS>
                                      <INDUSTRY>Motor Vehicle Dealers</INDUSTRY>
                                      <YEAR>2005</YEAR>
                                      <QUARTER>Q2</QUARTER>
                                      <SALES>2000</SALES>
               </RESULTS>
         <RESULTS>
                               <INDUSTRY>Motor Vehicle Dealers</INDUSTRY>
                               <YEAR>2004</YEAR>
                               <QUARTER>Q1</QUARTER>
                               <SALES>3000</SALES>
               </RESULTS>
         <RESULTS>
                               <INDUSTRY>Motor Vehicle Dealers</INDUSTRY>
                               <YEAR>2004</YEAR>
                               <QUARTER>Q2</QUARTER>
                               <SALES>3000</SALES>
               </RESULTS>
         <RESULTS>
                               <INDUSTRY>Motor Vehicle Dealers</INDUSTRY>
                               <YEAR>2003</YEAR>
                  ...
               </RRESULTS>
         <RESULTS>
                               <INDUSTRY>Home Furnishings</INDUSTRY>
                    ...
               </RESULTS>
         <RESULTS>
                               <INDUSTRY>Electronics</INDUSTRY>
                    ...
               </RESULTS>
         <RESULTS>
                               <INDUSTRY>Food and Beverage</INDUSTRY>
                    ...
         </RESULTS>

    </ROWSET>

このXMLから、次の図に示すようなレポートを生成します。このレポートには、業種別に各年度の売上合計が表示されます。

次の図に、このレポートを生成するテンプレートを示します。後続の表には、フォーム・フィールド入力を示します。

テンプレートの各フォーム・フィールドの値は次のとおりです。

デフォルト・テキスト入力 | フォーム・フィールドのヘルプ・テキスト | 説明
--- | --- | ---
header column | <?horizontal-break-table:1?> | 最初の列を、表の途中で改ページした場合に繰返し表示するヘッダーとして定義します。この構文の詳細は、「改ページ時に繰り返す列の定義」を参照してください。
for: | <?for-each-group@column:RESULTS;YEAR?> | 再グループ化構文（「XMLデータの再グループ化」を参照）を使用してデータをYEAR別にグループ化し、@columnコンテキスト・コマンドを使用して各グループ（YEAR）の表列を作成します。コンテキスト・コマンドの詳細は、「コンテキスト・コマンドの使用」を参照してください。
YEAR | <?YEAR?> | YEAR要素のプレースホルダ。
end | <?end for-each-group?> | for-each-groupループを終了します。
for: | <?for-each-group:RESULTS;INDUSTRY?> | グループを開始して、INDUSTRYごとに表の行を作成します。
INDUSTRY | <?INDUSTRY?> | INDUSTRY要素のプレースホルダ。
for: | <?for-each-group@cell:current-group();YEAR?> | 再グループ化構文（「XMLデータの再グループ化」を参照）を使用してデータをYEAR別にグループ化し、@cellコンテキスト・コマンドを使用して各グループ（YEAR）の表セルを作成します。
sum(Sales) | <?sum(current-group()//SALES) | 現行グループ（YEAR）の売上を合計します。
end | <?end for-each-group?> | for-each-group文を終了します。
end | <?end for-each-group?> | for-each-group文を終了します。

表の列の数を決定するために@columnコンテキストを使用するのは、最初の行のみであることに注意してください。残りのすべての行では、@cellコンテキストを使用して列の表セルを作成する必要があります（コンテキスト・コマンドの詳細は、「コンテキスト・コマンドの使用」を参照）。

## 動的データ列

動的データ列の作成機能は、RTFテンプレートの強力な機能の1つです。この機能を使用すると、データによって必要な列の数が変化する場合に、表を正しくレンダリングするテンプレートを設計できます。

たとえば、特定範囲内のテスト・スコアの列を表示するテンプレートを設計するとします。ただし、レポート対象のデータを表示する範囲の数は不明です。この場合は、動的データ列を定義すると、実行時に適切な数の列に分割できます。

次のタグを使用して、データの正しいレンダリングに必要な動的書式設定を設定します。

- 動的列ヘッダー

  <?split-column-header:group element name?>

  このタグを使用して、表の列ヘッダーを分割するグループを定義できます。

- 動的列<?split-column-data:group element name?>

  このタグを使用して、表の列データを分割するグループを定義できます。

- 動的列幅

  <?split-column-width:name?>または

  <?split-column-width:@width?>

  いずれかのタグを使用して、XMLデータに幅が記述されている際の列の幅を定義します。幅は、次のいずれかの方法で記述できます。

  - XML要素に幅の値が格納されます。この場合は、構文<?split-column-width:name?>を使用します。nameは、幅の値が含まれるXML要素のタグ名です。

  - 要素がsplit-column-headerタグで定義されている場合は、width属性を挿入し、構文<?split-column-width:@width?>を使用して、この属性の値を使用します。

- 動的列幅の単位値（ポイント単位）<?split-column-width-unit:value?>

  このタグを使用して、列幅の乗数を定義します。列幅が文字セルで定義されている場合は、列を正しい幅（ポイント単位）でレンダリングするために、乗数値6が必要です。乗数が定義されていない場合、列幅は表の合計幅のパーセントで計算されます。次の表にこの計算方法を示します。

  幅の定義 | 列1 （Width = 10） | 列2 （Width = 12） | 列3 （Width = 14）
  --- | --- | --- | ---
  乗数なし: %Width | 10/10+12+14*100 28% | %Width = 33% | %Width =39%
  乗数 = 6 - width | 60ポイント | 72ポイント | 84ポイント

### 改ページ時に繰り返す列の定義

表の列が拡張して複数のページにまたがる場合、毎ページごとに繰り返す行見出し列の個数を定義できます。次の構文を使用して、繰り返す列数を指定します。

<?horizontal-break-table:number?>

numberは、繰り返す列の数（左から始めます）です。

この機能はPDF出力に対してのみサポートされます。

### 動的データ列の例

学校のテストについて、スコア範囲を表示するためのテンプレートが必要であるとします。論理的には、次の表に示すようにレポートを配置します。

テスト・スコア | テスト・スコア範囲1 | テスト・スコア範囲2 | テスト・スコア範囲3 | ...テスト・スコア範囲n
--- | --- | --- | --- | ---
テスト・カテゴリ | 範囲1の生徒数 | 範囲2の生徒数 | 範囲3の生徒数 | 範囲nの生徒数

ここで、レポートに表示されるテスト・スコア範囲の数は不明です。テスト・スコア範囲列の数は、データに応じて動的に設定されます。

次のXMLデータは、テスト・スコアを記述したものです。要素<TestScoreRange>の出現回数によって、必要な列の数が決まります。この例の場合は、0-20、21-40、41-60、61-80および81-100の5つの列があります。各列には、数量要素（<NumOfStudents>）および列幅属性（<TestScore width="15">）があります。

     <?xml version="1.0" encoding="utf-8"?>
     <TestScoreTable>
      <TestScores>
        <TestCategory>Mathematics</TestCategory>
        <TestScore width ="15">
        <TestScoreRange>0-20</TestScoreRange>
        <NumofStudents>30</NumofStudents>
     </TestScore>
        <TestScore width ="20">
        <TestScoreRange>21-40</TestScoreRange>
        <NumofStudents>45</NumofStudents>
     </TestScore>
       <TestScore width ="15">
        <TestScoreRange>41-60</TestScoreRange>
        <NumofStudents>50</NumofStudents>
     </TestScore>
        <TestScore width ="20">
        <TestScoreRange>61-80</TestScoreRange>
        <NumofStudents>102</NumofStudents>
     </TestScore>
        <TestScore width ="15">
        <TestScoreRange>81-100</TestScoreRange>
       <NumofStudents>22</NumofStudents>
     </TestScore>
     </TestScores>
      <TestScoreTable>

フォーム・フィールドで動的列タグを使用して、次の図に示すような2列の表を設定します。最初の列「Test Score」は静的な列です。2番目の列「Column Header and Splitting」は動的な列です。実行時に、この列はデータに応じて分割され、列ごとにヘッダーが適切に移入されます。次の表に、各フィールドのデフォルト・テキスト入力およびフォーム・フィールドのヘルプ・テキスト入力を示します（フォーム・フィールドの使用方法の詳細は、「フォーム・フィールド方式」を参照）。

デフォルト・テキスト入力 | フォーム・フィールドのヘルプ・テキスト入力
--- | ---
Group:TestScores | <?for-each:TestScores?>
Test Category | <?TestCategory?>
Column Header and Splitting | <?split-column-header:TestScore?> <?split-column-width:@width?> <?TestScoreRange?>%
Content and Splitting | <?split-column-data:TestScore?> <?NumofStudents?>
end:TestScores | <?end for-each?>

- Test Scoreは、ボイラープレート列ヘッダーです。

- Test Categoryは<TestCategory>データ要素（この例ではMathematics）のプレースホルダで、列ヘッダーにもなります。

- 2番目の列は、動的に分割される列です。指定した幅がデータの列数で除算されます。この例では、データ列数は5です。

- 2番目の列には、動的な範囲データが含まれます。列の幅は、分割された列の幅に応じて除算されます。この例には単位値タグ（<?split-column-width-unit:value?>）が含まれていないため、列はパーセントに基づいて分割されます。必要な場合は、データの折返しが発生します。

  注意: 単位値タグ（<?split-column-width-unit:value?>）が含まれている場合、列は特定の幅（ポイント単位）になります。列幅の合計がページに割り当てられた領域より広い場合、その表は次のページに分割されます。

  horizontal-break-tableタグを使用すると、後続のページで繰り返す列の数を指定できます。たとえば、値を1に設定すると、「Test Score」列が後続のページで繰り返され、最初のページに収まらなかった残りの列とともに表示されます。

テンプレートでは、次の図に示す出力がレンダリングされます。

## 数値と日付の書式設定

### 数値の書式設定

XML Publisherでは、数値の書式を指定するために、次の2つの方法をサポートしています。

- Microsoft Word固有の数値書式マスク

- Oracleのformat-number関数

注意: XSL固有のformat-number関数を使用して、数値を書式設定することもできます。「XSL固有の数値書式設定」を参照してください。

前述の方法のいずれかを使用してください。両方の方法を使用して数値書式マスクを指定すると、データが2回書式設定されるため、予期しない動作が発生します。

グループ・セパレータと数値セパレータは、テンプレート・ロケールに基づいて実行時に設定されます。これは、Oracle書式マスクとMS書式マスクの両方に適用されます。

### データ・ソース要件

Oracle書式マスクまたはMicrosoft書式マスクを使用するには、データ・ソースの数値がRaw形式であること、つまり、書式設定が適用されていない（例: 1000.00）ことが必要です。数値が書式設定されている場合（たとえば、欧州形式に1.000,00と書式設定されている場合）、その書式は機能しません。

注意: XML Publisherパーサーでは、Java BigDecimal文字列表現が必要です。この表現は、オプション記号（-）、0（ゼロ）以上の10進数列（整数）、小数（オプション）および指数（オプション）で構成されます。たとえば、-123456.3455e-3のように設定します。

### 翻訳に関する考慮事項

翻訳可能なテンプレートを設計する場合、すべての翻訳で同じ通貨を使用したデータをレポートする場合を除いて、Microsoft書式マスクで設定した通貨を使用することはお薦めできません。MS書式マスクを使用して通貨をテンプレートに設定すると、実行時に通貨が更新されません。

かわりに、Oracle書式マスクを使用してください。たとえば、L999G999G999D99と設定すると、実行時にロケールに基づいて「L」が通貨記号に置換されます。

「%」記号は、数値表示でパーセント記号の位置を固定するため、書式マスクに含めないでください。この記号は、ロケールに基づいて、数値の先頭または後に配置できます。

### Microsoft数値書式マスクの使用

数値を書式設定するには、Microsoft Wordのフィールド書式設定機能を使用します。この機能は、「Text Form Field Options」ダイアログ・ボックスで設定できます。次の図に例を示します。

数値書式をフォーム・フィールドに適用する手順は、次のとおりです。

1. プレースホルダ・フィールドに対して「Form Field Options」ダイアログ・ボックスを開きます。

2. 「Type」を「Number」に設定します。

3. 「Number format」のオプション・リストから適切な数値書式を選択します。

### サポートされているMicrosoft書式マスク定義

次の表に、サポートされているMicrosoft書式マスク定義を示します。

記号 | 位置 | 意味
--- | --- | ---
0 | Number | 数字。他に数字が存在しない場合には、明示的に0（ゼロ）が表示されます。 例: 書式マスク: 00.0000 データ: 1.234 表示: 01.2340
# | Number | 数字。#に設定すると、受信したデータのみが表示されます。 例: 書式マスク: ##.#### データ: 1.234 表示: 1.234
. | Number | 小数セパレータの位置を決定します。使用する小数セパレータ記号は、実行時にテンプレート・ロケールに基づいて決まります。 例: 書式マスク: #,##0.00 データ: 1234.56 表示（英国ロケールの場合）: 1,234.56 表示（ドイツ・ロケールの場合）: 1.234,56
- | Number | マイナスの数値のマイナス記号の位置を決定します。
, | Number | グループ・セパレータの位置を決定します。使用するグループ・セパレータ記号は、実行時にテンプレート・ロケールに基づいて決まります。 例: 書式マスク: #,##0.00 データ: 1234.56 表示（英国ロケールの場合）: 1,234.56 表示（ドイツ・ロケールの場合）: 1.234,56
E | Number | 科学表記法で仮数および指数を区切ります。 例: 0.###E+0と指定すると、プラスの数値の場合にプラス記号が常に表示されます。 0.###E-0と指定すると、プラスの数値の場合にプラス記号が表示されません。
; | サブパターンの境界 | プラスおよびマイナスのサブパターンを区切ります。後述する「注意」を参照してください。
% | プリフィクスまたはサフィックス | 100を乗算してパーセントで表示します。
' | プリフィクスまたはサフィックス | プリフィクスまたはサフィックスに特殊文字を引用するために使用します。

注意: サブパターンの境界: パターンには、「#,##0.00;(#,##0.00)」のように、プラスおよびマイナスのサブパターンが含まれます。各サブパターンには、プリフィクス、数値部分およびサフィックスが含まれます。マイナスのサブパターンはオプションです。マイナスのサブパターンを指定しない場合、そのマイナスのサブパターンは、プラスのサブパターンの先頭にローカライズされたマイナス記号（ほとんどのロケールで「-」を使用）を付けて表します。つまり、「0.00」は「0.00;-0.00」と同じになります。明示的にマイナスのサブパターンを指定した場合、このサブパターンは単にマイナスのプリフィクスとサフィックスを指定するために使用されます。桁数、最小数字などすべての特性はプラスのパターンと同じです。つまり、「#,##0.0#;(#)」と「#,##0.0#;(#,##0.0#)」の動作は完全に同じになります。

#### Oracle書式マスクの使用

Oracle書式マスクをフォーム・フィールドに適用する手順は、次のとおりです。

1. プレースホルダ・フィールドに対して「Form Field Options」ダイアログ・ボックスを開きます。

2. 「Type」を「Regular text」に設定します。

3. 「Form Field Help Text」フィールドに、次の例に従ってマスク定義を入力します。

   <?format-number:fieldname;'999G999D99'?>

各項目は次のとおりです。

fieldnameは、書式設定するデータ要素のXMLタグ名です。

999G999D99はマスク定義です。

次の図に、データ要素empnoに関する、「Form Field Help Text」ダイアログへの入力例を示します。

次の表に、サポートされているOracle数値書式マスクの記号とその定義を示します。

記号 | 意味
--- | ---
0 | 数字。他に数字が存在しない場合には、明示的に0（ゼロ）が表示されます。 例: 書式マスク: 00.0000 データ: 1.234 表示: 01.2340
9 | 数字。指定桁数の値を戻し、正の数の場合は先頭に空白が付き、負の数の場合は先頭にマイナス記号が付きます。値がゼロの場合を除き、先頭のゼロは空白になります。値がゼロの場合、固定小数点数の整数部分についてゼロを戻します。 例: 書式マスク: 99.9999 データ: 1.234 表示: 1.234
C | 指定した位置にISO通貨記号を戻します。
D | 小数セパレータの位置を決定します。使用する小数セパレータ記号は、実行時にテンプレート・ロケールに基づいて決まります。 例: 書式マスク: 9G999D99 データ: 1234.56 表示（英国ロケールの場合）: 1,234.56 表示（ドイツ・ロケールの場合）: 1.234,56
EEEE | 科学表記法で値を戻します。
G | グループ（千単位）セパレータの位置を決定します。使用するグループ・セパレータ記号は、実行時にテンプレート・ロケールに基づいて決まります。 例: 書式マスク: 9G999D99 データ: 1234.56 表示（英国ロケールの場合）: 1,234.56 表示（ドイツ・ロケールの場合）: 1.234,56
L | 指定した位置にローカル通貨記号を戻します。
MI | マイナスの値を末尾に「-」を付けて表示します。
PR | マイナスの値を<>で囲んで表示します。
PT | マイナスの値を()で囲んで表示します。
S（数値の前） | プラスの値の場合は先頭に「+」を付け、マイナスの値の場合は先頭に「-」を付けて表示します。
S（数値の後） | プラスの値の場合は末尾に「+」を付け、マイナスの値の場合は末尾に「-」を付けて表示します。

### 日付の書式設定

XML Publisherでは、日付の書式を指定するために、次の3つの方法をサポートしています。

- Microsoft Word固有の日付書式マスクを使用して、明示的な日付書式マスクを指定します。

- Oracleのformat-date関数を使用して、明示的な日付書式マスクを指定します。

- Oracleの抽象日付書式マスクを使用して、抽象日付書式マスクを指定します（多言語テンプレートの場合に推奨）。

使用できる方法は1つのみです。OracleとMSの両方の書式マスクを指定すると、データが2回書式設定されるため、予期しない動作が発生します。

### データ・ソース要件

Microsoft書式マスクまたはOracle書式マスクを使用するには、XMLデータ・ソースの日付が標準書式であることが必要です。標準書式は次のとおりです。

YYYY-MM-DDThh:mm:ss+HH:MM

各項目は次のとおりです。

- YYYYは年です。

- MMは月です。

- DDは日です。

- Tは、日付部分と時刻部分のセパレータです。

- hhは、24時間書式の時間です。

- mmは分です。

- ssは秒です。

- +HH:MMは、世界標準時（UTC）またはグリニッジ標準時のタイムゾーン・オフセットです。

次に、この書式の例を示します。

2005-01-01T09:30:10-07:00

「T」の後のデータはオプションであるため、2005-01-01という日付はどちらの書式設定オプションを使用しても書式設定できます。タイムゾーン・オフセットを指定しない場合、時刻はUTC時間で書式設定されることに注意してください。

### 翻訳に関する考慮事項

翻訳可能なテンプレートを設計する場合、日付書式マスクを明示的に設定することはお薦めできません。日付書式マスクがテンプレートに含まれていると、そのテンプレートに基づいて発行されるすべてのレポートには、ロケールに関係なく、同じ日付書式が適用されるためです。

翻訳可能なテンプレートの場合は、Oracle抽象日付書式の使用をお薦めします。

書式マスクを明示的に指定する必要がある場合は、今後の互換性を維持するために、MS書式マスクではなくOracle書式マスクの使用をお薦めします。

### Microsoft日付書式マスクの使用

日付書式をフォーム・フィールドに適用する手順は、次のとおりです。

1. プレースホルダ・フィールドに対して「Form Field Options」ダイアログ・ボックスを開きます。

2. 「Type」を「Date」、「Current Date」または「Current Time」に設定します。

3. 「Date format」のオプション・リストから適切な日付書式を選択します。

「Date format」フィールドでマスクを指定しないと、抽象書式マスク「MEDIUM」がデフォルトで使用されます。詳細は、「Oracle抽象書式マスク」を参照してください。

次の図に、日付書式が適用された「Text Form Field Options」ダイアログ・ボックスを示します。

次の表に、サポートされているMicrosoft日付書式マスクのコンポーネントを示します。

記号 | 意味
--- | ---
d | 月の日。1桁の日の場合、先頭に0（ゼロ）は付きません。
dd | 月の日。1桁の日の場合は、先頭に0（ゼロ）が付きます。
ddd | 曜日の略称。AbbreviatedDayNamesで定義されます。
dddd | 曜日の正式名称。DayNamesで定義されます。
M | 数値で表す月。1桁の月の場合、先頭に0（ゼロ）は付きません。
MM | 数値で表す月。1桁の月の場合は、先頭に0（ゼロ）が付きます。
MMM | 月の略称。AbbreviatedMonthNamesで定義されます。
MMMM | 月の正式名称。MonthNamesで定義されます。
yy | 世紀部分を除いた年。世紀部分を除いた年が10未満の場合は、先頭に0（ゼロ）を付けて表示されます。
yyyy | 4桁の年。
gg | 時代または年号。書式設定される日付に関連する時代または年号文字列がない場合、このパターンは無視されます。
h | 12時間書式の時間。1桁の時間の場合、先頭に0（ゼロ）は付きません。
hh | 12時間書式の時間。1桁の時間の場合は、先頭に0（ゼロ）が付きます。
H | 24時間書式の時間。1桁の時間の場合、先頭に0（ゼロ）は付きません。
HH | 24時間書式の時間。1桁の時間の場合は、先頭に0（ゼロ）が付きます。
m | 分。1桁の分の場合、先頭に0（ゼロ）は付きません。
mm | 分。1桁の分の場合は、先頭に0（ゼロ）が付きます。
s | 秒。1桁の秒の場合、先頭に0（ゼロ）は付きません。
ss | 秒。1桁の秒の場合は、先頭に0（ゼロ）が付きます。
f | 1桁で表したミリ秒を表示します。
ff | 2桁で表したミリ秒を表示します。
fff | 3桁で表したミリ秒を表示します。
ffff | 4桁で表したミリ秒を表示します。
fffff | 5桁で表したミリ秒を表示します。
ffffff | 6桁で表したミリ秒を表示します。
fffffff | 7桁で表したミリ秒を表示します。
tt | AM/PMの指標。AMDesignatorまたはPMDesignatorで定義します（存在する場合）。
z | システムの現行タイムゾーンのタイムゾーン・オフセットを時間でのみ表示します（この要素は書式設定でのみ使用可能）。
zz | システムの現行タイムゾーンのタイムゾーン・オフセットを時間でのみ表示します（この要素は書式設定でのみ使用可能）。
zzz | システムの現行タイムゾーンのタイムゾーン・オフセットを時間と分で表示します。
: | デフォルトの時間セパレータ。TimeSeparatorで定義されます。
/ | デフォルトの日付セパレータ。DateSeparatorで定義されます。
' | 引用符付き文字列。文字列のリテラル値の前後を‘文字で囲んで表示します。
" | 引用符付き文字列。文字列のリテラル値の前後を“文字で囲んで表示します。

### Oracle書式マスクの使用

Oracle書式マスクを日付フィールドに適用する手順は、次のとおりです。

1. プレースホルダ・フィールドに対して「Form Field Options」ダイアログ・ボックスを開きます。

2. 「Type」を「Regular Text」に設定します。

3. 「Add Help Text...」ボタンを選択して、「Form Field Help Text」ダイアログを開きます。

4. 次の構文を挿入して、日付書式マスクを指定します。

   <?format-date:date_string; 'ABSTRACT_FORMAT_MASK';'TIMEZONE'?>

   または

   <?format-date-and-calendar:date_string; 'ABSTRACT_FORMAT_MASK';'CALENDAR_NAME';'TIMEZONE'?>

   タイムゾーンはオプションです。書式マスク、カレンダおよびタイムゾーンの使用方法の詳細は後述します。

   書式マスクを指定しないと、抽象書式マスク「MEDIUM」がデフォルトで使用されます。

   次に、フォーム・フィールドのヘルプ・テキスト入力の例を示します。

   <?format-date:hiredate;'YYYY-MM-DD'?>

次の表に、サポートされているOracle書式マスクのコンポーネントを示します。

記号 | 意味
--- | ---
- / , . ; : "text" | 記号および引用符が付いたテキストが再現されて表示されます。
AD A.D. | ADの指標。年代を伴う場合と伴わない場合があります。
AM A.M. | 午前の指標。時間を伴う場合と伴わない場合があります。
BC B.C. | BCの指標。年代を伴う場合と伴わない場合があります。
CC | 世紀。たとえば、2002の場合は21、2000の場合は20が戻されます。
DAY | 日の名称。9文字未満の場合は、9文字の長さまで空白で埋め込まれます。
D | 曜日（1〜7）。
DD | 月内の日（1〜31）。
DDD | 年内の日（1〜366）。
DL | 長い日付書式で値が戻されます。
DS | 短い日付書式で値が戻されます。
DY | 日の略称。
E | 年号の略称。
EE | 年号の正式名称。
FF[1..9] | ミリ秒。FFの後に1〜9の数字を設定して、戻される日時値のミリ秒部分の桁数を指定します。 例: 'HH:MI:SS.FF3'
HH | 時間（1〜12）。
HH12 | 時間（1〜12）。
HH24 | 時間（0〜23）。
MI | 分（0〜59）。
MM | 月（01〜12、JAN = 01）。
MON | 月の略称。
MONTH | 月の名称。9文字未満の場合は、9文字の長さまで空白で埋め込まれます。
PM P.M. | 午後の指標。時間を伴う場合と伴わない場合があります。
RR | 21世紀に、20世紀の日付を格納できます（2桁のみ）。
RRRR | 年。4桁または2桁で入力できます。2桁の場合はRRと同じ結果が戻されます。この機能が不適切な場合は、4桁で年を入力してください。
SS | 秒（0〜59）。
TZD | 夏時間情報。TZD値は、夏時間情報を含むタイムゾーンの簡略文字列です。この値は、TZRで指定する地域に対応する必要があります。 例: PST（太平洋標準時） PDT（太平洋夏時間）
TZH | タイムゾーンの時間（書式設定要素TZMを参照）。
TZM | タイムゾーンの分（書式設定要素TZHを参照）。 例: 'HH:MI:SS.FFTZH:TZM'
TZR | タイムゾーン地域情報。この値は、データベースでサポートされているタイムゾーン地域であることが必要です。例: PST（太平洋標準時）
WW | 年の週（1〜53）。週1は、その年の初日から7日目までです。
W | 月の週（1〜5）。週1は、その月の初日から7日目までです。
X | ローカル基数文字。
YYYY | 4桁の年。
YY Y | 年の最後の2桁または1桁。

### デフォルトの書式マスク

MS書式マスクまたはOracle書式マスクのいずれも指定しない場合は、マスク定義を省略してデフォルトの書式マスクを使用できます。デフォルトの書式マスクは、Oracleが提供するMEDIUM抽象書式マスクです（定義については、「Oracle抽象書式マスク」を参照）。

Microsoft書式マスクのデフォルト・オプションを使用するには、「Text Form Field Options」ダイアログで、「Type」を「Date」に設定し、「Date format」フィールドを空白のままにします。

Oracle書式マスクのデフォルト・オプションを使用するには、次のように、format-date関数コールにマスク定義を指定しないでください。

<?format-date:hiredate?>

### Oracle抽象書式マスク

抽象日付書式マスクは、I18Nライブラリの日付/時刻書式設定のデフォルト実装を反映します。いずれかのマスクを使用すると、レポートに関連付けられているロケールに基づいて出力が生成されます。

抽象書式マスクは、次の構文を使用して指定します。

    <?format-date:fieldname;'MASK'?>

fieldnameはXML要素タグです。

MASKは、Oracle抽象書式マスクの名称です。

例:

    <?format-date:hiredate;'SHORT'?>
    <?format-date:hiredate;'LONG_TIME_TZ'?>

次の表に、抽象書式マスク、および米国ロケールで生成されたサンプル出力を示します。

マスク | 米国ロケールの出力
--- | ---
SHORT | 2/31/99
MEDIUM | Dec 31, 1999
LONG | Friday, December 31, 1999
SHORT_TIME | 12/31/99 6:15 PM
MEDIUM_TIME | Dec 31, 1999 6:15 PM
LONG_TIME | Friday, December 31, 1999 6:15 PM
SHORT_TIME_TZ | 12/31/99 6:15 PM GMT
MEDIUM_TIME_TZ | Dec 31, 1999 6:15 PM GMT
LONG_TIME_TZ | Friday, December 31, 1999 6:15 PM GMT

## カレンダとタイムゾーンのサポート

### カレンダの指定

「カレンダ」という用語は、発行レポートに表示されるカレンダ日付を指します。次のタイプがサポートされています。

- GREGORIAN

- ARABIC_HIJRAH

- ENGLISH_HIJRAH

- JAPANESE_IMPERIAL

- THAI_BUDDHA

- ROC_OFFICIAL（台湾）

次のいずれかの方法で、カレンダ・タイプを設定します。

- format-date-and-calendar関数をコールして、カレンダ・タイプを宣言します。

  例: <?format-date-and-calendar:hiredate;'LONG_TIME_TZ';'ROC_OFFICIAL';?>

  次の例は、この定義を使用して生成された出力を示します（ロケールはzh-TW、タイムゾーンはAsia/Taipeiに設定）。

- プロファイル・オプション「XDO: カレンダ・タイプ」（XDO_CALENDAR_TYPE）を使用して、カレンダ・タイプを設定します。

注意: テンプレートで指定したカレンダ・タイプは、このプロファイル・オプションで設定したカレンダ・タイプより優先されます。

### タイムゾーンの指定

タイムゾーン情報は、次の2つの方法で指定します。

- Oracle書式を指定したformat-dateまたはformat-date-and-calendar関数をコールします。

- Oracle Applicationsで、ユーザー・プロファイル・オプション「クライアント・タイム・ゾーン」（CLIENT_TIMEZONE_ID）を設定します。

タイムゾーンを指定しないと、UTCが使用されます。

テンプレートでタイムゾーンを指定する場合は、America/Los Angelesのように、Javaタイムゾーン文字列として指定する必要があります。次に、テンプレートのヘルプ・テキスト・フィールドに入力する構文の例を示します。

<?format-date:hiredate;'LONG_TIME_TZ';'Asia/Shanghai'?>

## 外部フォントの使用

XML Publisherでは、通常はサーバーで使用できないフォントを出力で使用できます。新規フォントをレポート出力に設定するには、クライアント・マシンでそのフォントを使用してテンプレートを設計します。次に、そのフォントをサーバーで使用可能にし、実行時にそのフォントにアクセスできるようにXML Publisherを構成します。

1. フォントをテンプレートで使用します。

   1. フォントを<WINDOWS_HOME>/fontsディレクトリにコピーします。

   2. Microsoft Wordを開き、テンプレートを作成します。

   3. フォントをテンプレートに挿入します。テキストまたはフォーム・フィールドを選択し、任意のフォントをフォント・ダイアログ・ボックス（「Format」->「Font」）またはフォント・ドロップダウン・リストから選択します。

      次の図に、フォーム・フィールド・メソッドおよびテキスト・メソッドの例を示します。

2. フォントをサーバーに配置します。

   フォントを、実行時に書式設定エンジンがアクセス可能なディレクトリに配置します。

3. XML Publisherのfontプロパティを設定します。

   fontプロパティは、XML Publisherの構成ファイルで設定するか、またはテンプレートに直接設定できます。

   構成ファイルへのプロパティの設定

   XML Publisher構成ファイルのfontsセクションで、フォント名とサーバー上の位置を更新します。たとえば、TrueTypeを新規に設定するには、次のように入力します。

       <font family="MyFontName" style="normal" weight="normal">
           <truetype path="\user\fonts\MyFontName.ttf"/>
       </font>

   詳細は、「XML Publisher構成ファイル」を参照してください。

   テンプレートへのプロパティの設定

   「プロパティの設定」を参照してください。

ここで、レポートを実行すると、XML Publisherでは、出力で指定したフォントが使用されます。PDF出力の場合は、XML Publisherの拡張フォント処理機能によって、外部フォントの絵文字が最終出力に直接埋め込まれます。文書で必要な絵文字が含まれるのは埋め込まれたフォントのみで、フォント定義自体には含まれません。したがって、文書に必要な要素はすべて備わっているため、外部フォントをプリンタにインストールする必要はありません。

実装例については、MetaLinkから入手できるホワイト・ペーパー『Check Printing Using Oracle XML Publisher』（Note 312353.1）を参照してください。このドキュメントには、小切手の印刷で使用するMICRフォントの設定方法が説明されています。

## バーコードの拡張書式設定

XML Publisherには、バーコード・フォントを出力文書のデータに適用する前に、データに対して前処理を実行する機能があります。たとえば、データの書式を設定する前には、そのデータのチェックサム値やスタート・ビットとエンド・ビットの計算が必要な場合があります。

このソリューションには、バーコード・エンコーディング・クラスをXML Publisherに登録する必要があります。XML Publisherは、実行時にインスタンス化され、テンプレート内の書式設定を実行します。詳細は、「拡張バーコード・フォント書式設定の実装」を参照してください。

テンプレートで書式設定機能を有効にするには、テンプレート内で2つのコマンドを使用する必要があります。1つ目は、バーコード・エンコーディング・クラスをXML Publisherに登録するコマンドです。この登録は、エンコーディング・コマンドより前にテンプレートで宣言する必要があります。2つ目は、書式を設定するデータを識別するためのエンコーディング・コマンドです。

### バーコード・エンコーディング・クラスの登録

次の構文をテンプレートのフォーム・フィールドで使用して、バーコード・エンコーディング・クラスを登録します。

    <?register-barcode-vendor:java_class_name;barcode_vendor_id?>

このコマンドには、Javaクラス名（エンコーディングを実行する）と、クラス別に定義されたバーコード・ベンダーIDが必要です。このコマンドは、テンプレート内でデータをエンコーディングするコマンドの前に配置する必要があります。次に例を示します。

    <?register-barcode-vendor:’oracle.apps.xdo.template.rtf.util.barcoder.BarcodeUtil’;'XMLPBarVendor'?>

各項目は次のとおりです。

oracle.apps.xdo.template.rtf.util.barcoder.BarcodeUtilはJavaクラスを示します。

XMLPBarVendorは、クラス別に定義されたベンダーIDです。

### データのエンコード

データを書式設定するには、次の構文をテンプレートのフォーム・フィールドで使用します。

    <?format-barcode:data;'barcode_type';'barcode_vendor_id'?>

各項目は次のとおりです。

dataは、エンコーディングするXMLデータ・ソースからの要素を示します（例: LABEL_ID）。

barcode_typeは、データの書式設定に使用されるエンコーディングJavaクラスのメソッドです（例: Code128a）。

barcode_vendor_idは、エンコーディング・クラスを登録する際に使用する1つ目のコマンドのregister-barcode-vendorフィールドで定義したIDです。

例:

    <?format-barcode:LABEL_ID;'Code128a';'XMLPBarVendor'?>

実行時に、データ値の書式を設定するためにbarcode_typeメソッドがコールされ、最終出力のデータにバーコード・フォントが適用されます。

## 拡張設計オプション

さらに複雑な設計要件がある場合、XML Publisherでは、XSLおよびXSL:FO要素の使用がサポートされており、一連のSQL関数も拡張されています。

RTFテンプレートには、XML Publisherの構文を使用した非常に強力なレイアウト・オプションが用意されています。ただし、基礎となるテクノロジは、XSLやXPATHなど、W3Cのオープン標準に基づいているため、使用できる機能はこのマニュアルで説明する内容に限定されません。これらの基礎となるテクノロジで使用可能なレイアウトおよびデータ操作機能はすべて使用できます。

## XPathの概要

XPathは、World Wide Web Consortium（W3C）によって開発された業界標準です。XML文書をナビゲートするために使用される方式であり、XML文書の個々の部分を処理するための一連の構文規則です。RTFテンプレートでは、実行時に、XMLデータのナビゲートにXPathが使用されているため、ユーザーは認識していなくても、すでにXPathを使用しています。

この項では、XPathの原理の概要について説明します。詳細は、W3CのWebサイトhttp://www.w3.org/TR/xpathを参照してください。

XPathは、XML文書をノードのツリーとして解釈するDocument Object Model（DOM）に従っています。ノードは、次の7タイプのいずれかです。

- ルート

- 要素

- 属性

- テキスト

- ネームスペース

- 処理命令

- コメント

これらの要素の多くが次のサンプルXMLに示されています。このサンプルにはCDのカタログが含まれています。

    <?xml version="1.0" encoding="UTF-8"?>
    <! -  My CD Listing  - >
    <CATALOG>
     <CD cattype=Folk>
      <TITLE>Empire Burlesque</TITLE>
      <ARTIST>Bob Dylan</ARTIST>
      <COUNTRY>USA</COUNTRY>
      <PRICE>10.90</PRICE>
      <YEAR>1985</YEAR>
     </CD>
     <CD cattype=Rock>
      <TITLE>Hide Your Heart</TITLE>
      <ARTIST>Bonnie Tylor</ARTIST>
      <COUNTRY>UK</COUNTRY>
      <PRICE>9.90</PRICE>
      <YEAR>1988</YEAR>
      </CD>
    </CATALOG>

この例のルート・ノードはCATALOGです。CDは要素であり、属性cattypeが設定されています。サンプルには、コメントとしてMy CD Listingと記述されています。テキストはXML文書要素内に含まれています。

### データの検索

location-path式を使用して、XML文書内の情報を検索します。

ノードはユーザーが使用する最も一般的な検索要素です。サンプルのCATALOG XMLのノードには、CD、TITLEおよびARTISTなどがあります。XML文書内のノードを検索するには、パス式を使用します。たとえば、次のパスではすべてのCD要素が戻されます。

    //CATALOG/CD

各項目は次のとおりです。

ダブル・スラッシュ（//）は、文書内のレベルに関係なく、XML文書内で検索基準と一致する要素がすべて戻されることを示します。

スラッシュ（/）は子ノードを区切ります。パターンと一致するすべての要素が戻されます。

個々のTITLE要素を取得するには、次のコマンドを使用します。

    /CATALOG/CD/TITLE

この例では、次のXMLが戻されます。

    <CATALOG>
     <CD cattype=Folk>
      <TITLE>Empire Burlesque</TITLE>
      </CD>
     <CD cattype=Rock>
      <TITLE>Hide Your Heart</TITLE>
      </CD>
    </CATALOG>

検索内容をさらに制限するには、大カッコを使用します。大カッコを使用すると、特定の子ノードまたは指定した値を含んだ要素が検索されます。たとえば、次の式では、Bob DylanのすべてのCDが検索されます。

    /CATALOG/CD[ARTIST="Bob Dylan"]

または、各CD要素にPRICE要素が設定されていない場合は、次の式を使用してPRICE要素が含まれているCD要素のみを戻すことができます。

    /CATALOG/CD[PRICE]

大カッコを使用する表記法では、検索に属性値を利用できます。属性を示すには@記号を使用します。たとえば、次の式では、ロックのすべてのCD（cattype属性の値がRockのすべてのCD）が検索されます。

    //CD[@cattype="Rock"]

この結果、サンプルXML文書から次のデータが戻されます。

    <CD cattype=Rock>
      <TITLE>Hide Your Heart</TITLE>
      <ARTIST>Bonnie Tylor</ARTIST>
      <COUNTRY>UK</COUNTRY>
      <PRICE>9.90</PRICE>
      <YEAR>1988</YEAR>
      </CD>

また、大カッコを使用して、取得する項目の番号を指定することもできます。たとえば、次のXPath式を使用すると、XML文書から最初のCD要素が読み込まれます。

    /CATALOG/CD[1]

次のように、サンプルから最初のCD要素が戻されます。

    <CD cattype=Folk>
      <TITLE>Empire Burlesque</TITLE>
      <ARTIST>Bob Dylan</ARTIST>
      <COUNTRY>USA</COUNTRY>
      <PRICE>10.90</PRICE>
      <YEAR>1985</YEAR>
     </CD>

XPathでは、指定したノード内に含まれているすべての要素を取得するためのワイルドカードもサポートされています。たとえば、サンプルXMLからすべてのCDを取得するには、次の式を使用します。

    /CATALOG/*

さらに複雑な検索のために、文とブール演算子を組み合せることができます。次の式では、すべてのフォークおよびロックのCDが取得され、結果としてサンプルからすべての要素が取得されます。

    //CD[@cattype="Folk"]|//CD[@cattype="Rock"]

縦線（|）は、論理OR演算子と同等です。さらに、XPathでは、ORおよびANDに加え、等価演算子<=、<、>、>=、==および!=が認識されます。たとえば、次の式を使用すると、1985年以降にリリースされたすべてのCDを検索できます。

    /CATALOG/CD[YEAR >=1985]

### 参照の開始

XPath式の最初の文字で、XMLツリー内の開始位置が決まります。スラッシュ（/）で始まる文は絶対参照とみなされます。スラッシュが指定されない場合は相対参照を意味します。相対参照の例を次に示します。

    CD/*

この文では、現行の参照ポイントで検索が開始されます。つまり、この例が1つの文グループ内で使用されている場合は、その前の文で使用された参照ポイントが使用されます。

前述のように、ダブル・スラッシュ（//）を使用すると、文書内の位置に関係なく、すべての一致要素が取得されます。

### コンテキストおよび親

現行要素と親要素を選択するために、XPathでは、ディレクトリのナビゲートに通常使用されているドット表記法が認識されます。ピリオドを1つ（.）使用すると現行ノードが選択され、ピリオドを2つ（..）使用すると、現行ノードの親が戻されます。たとえば、現行ノードの親の子ノードをすべて取得するには、次の式を使用します。

    ../*

したがって、サンプルXMLからすべてのCDにアクセスするには、次の式を使用します。

    /CATALOG/CD/..

また、次の式を使用して、1988年にリリースされたすべてのCDのタイトルにアクセスすることもできます。

    /CATALOG/CD/TITLE[../YEAR=1988]

..は、要素ツリーを上にナビゲートしてTITLEと同じレベルでYEAR要素を検索し、そのYEAR要素で1988との一致をテストするために使用されます。この例では//も使用できますが、要素YEARがXML文書の他の場所でも使用されている場合は、誤った結果が戻される可能性があります。

XPathは、RTFテンプレートと組み合せた場合に非常に強力な標準であり、テンプレートで条件付き書式設定およびフィルタリングを使用できます。

## ネームスペースのサポート

XMLデータにネームスペースが含まれている場合は、プレースホルダでネームスペースを参照する前にテンプレートで宣言する必要があります。テンプレートでネームスペースを宣言するには、基本RTF方式、またはフォーム・フィールドを使用します。次の構文を入力します。

<?namespace:namespace name= namespace url?>

例:

<?namespace:fsg=http://www.oracle.com/fsg/2002-30-20/?>

一度宣言すると、プレースホルダ・マークアップにネームスペースを使用できます。例: <?fsg:ReportName?>。

## コンテキスト・コマンドの使用

XML Publisherの構文は、簡略化されたXSL命令です。この構文は、テンプレートで使用可能なXSL固有のコマンドとともに、テンプレート・マネージャへのテンプレートのアップロード時にXSL-FOに変換されます。変換されたスタイルシートにおけるこれらの命令の配置によって、テンプレートの動作が決まります。

XML PublisherのRTFプロセッサでは、最も一般的なコンテキストに従って、XSL-FOスタイルシート内にこれらの命令が配置されます。ただし、特定の動作を作成するために、命令のコンテキストを別の方法で定義する必要がある場合もあります。この要件をサポートするために、XML Publisherには、処理命令のコンテキスト（配置）を定義できる一連のコンテキスト・コマンドが用意されています。たとえば、コンテキスト・コマンドを使用すると、次の処理を実行できます。

- 表にif文を指定して、セル、行、列または表全体を参照できます。

- for-eachループを指定して、（新規ヘッダーとフッターの作成、およびページ番号付けの再開始のため）現行データまたはセクション全体のいずれかを繰り返すことができます。

- 現在のループまたは文書の先頭に変数を定義できます。

コンテキストは、XML Publisher構文を使用した処理コマンド、およびXSL固有の構文を使用した処理コマンドの両方に指定できます。

- 簡略化されたXML Publisher構文を使用した処理コマンドに対してコンテキストを指定するには、@contextを構文命令に追加します。次に例を示します。

  - <?for-each@section:INVOICE?>: グループINVOICEの出現ごとに新規セクションを開始することを指定します。sectionコンテキストを追加すると、ヘッダーとフッターおよびページ番号をリセットできます。

  - <?if@column:VAT?>: if文をVAT列にのみ適用することを指定します。

- XSLコマンドに対してコンテキストを指定するには、タグにxdofo:ctx="context"属性を追加して、命令の挿入に対するコンテキストを指定します。コンテキストの値によって、コードが配置される場所が決まります。

  例:

  <xsl:for-each xdofo:ctx="section" select ="INVOICE">

  <xsl:attribute xdofo:ctx="inblock" name="background-color">red</xsl:attribute>

XML Publisherでは、次のコンテキスト・タイプがサポートされます。

コンテキスト | 説明
--- | ---
section | 文は、ヘッダーおよびフッターを含めてセクション全体に影響を与えます。たとえば、for-each@sectionコンテキスト・コマンドでは、出現ごとに、再開始されたページ番号およびヘッダーとフッターを使用して新規セクションが作成されます。 この使用方法の例は、「バッチ・レポート」を参照してください。
column | 文は、表の列全体に影響を与えます。このコンテキストは通常、データに応じて表の列を表示または非表示にするために使用されます。 例については、「列の書式設定」を参照してください。
cell | 文は、表のセルに影響を与えます。このコンテキストは通常、動的な列数を作成するために、クロス集計表で@columnとともに使用されます。 例については、「クロス集計のサポート」を参照してください。
block | 文は、複数のfo:blocks（RTFの段落）全体に影響を与えます。このコンテキストは通常、if文およびfor-each文に対して使用されます。また、段落または表のセルに書式設定を適用するためにも使用されます。 例については、「セルの強調表示」を参照してください。
inline | コンテキストは、fo:inlineブロック内の単一の文になります。このコンテキストは変数に使用されます。
incontext | 文は、その文を囲んでいる文の直後に挿入されます。これは、その文を囲んでいるfor-eachの後に最初の要素として続く必要がある<?sort?>文に対するデフォルトです。
inblock | 文は、fo:block（RTFの段落）内の単一の文になります。これは通常、制御文（ifやfor-eachなど）には有効ではなく、call-templateなど、テキストを生成する文に有効です。
inlines | 文は、複数のインライン・セクション全体に影響を与えます。1つのインライン・セクションは、太字でレンダリングされる一続きの語など、同じ書式設定を使用するテキストです。 「ボイラープレート・テキストでのif文」を参照してください。
begin | 文は、XSLスタイルシートの先頭に配置されます。これは、グローバル変数の場合は必須です。「パラメータの定義」を参照してください。
end | 文は、XSLスタイルシートの最後に配置されます。

次の表に、各XML Publisherコマンドに対するデフォルト・コンテキストを示します。

コマンド | コンテキスト
--- | ---
apply-template | inline
attribute | inline
call-template | inblock
choose | block
for-each | block
if | block
import | begin
param | begin
sort | incontext
template | end
value-of | inline
variable | end

## XSL要素の使用

テンプレートでXSL要素を使用するには、XSL構文をフォーム・フィールドに挿入します。

基本RTF方式を使用している場合は、XSL構文をテンプレートに直接挿入することはできません。XML Publisherでは、RTFテンプレートで使用できるように次のXSL要素が拡張されています。

これらを基本方式のRTFテンプレートで使用するには、XSL要素についてXML Publisherタグ・フォームを使用する必要があります。フォーム・フィールドを使用している場合は、いずれかのオプションを使用します。

### テンプレート・ルールの適用

現行要素の子ノードにテンプレート・ルールを適用するには、この要素を使用します。

XSL構文: <xsl:apply-templates select="name">

XML Publisherタグ: <?apply:name?>

この関数は、<xsl:template-match="n">に適用されます。nは要素名です。

### 現行ノードのコピー

現行ノードのコピーを作成するには、この要素を使用します。

XSL構文: <xsl:copy-of select="name">

XML Publisherタグ: <?copy-of:name?>

### テンプレートのコール

現行のテンプレートに挿入または適用される名前付きテンプレートをコールするには、この要素を使用します。たとえば、この機能を使用すると表を複数回レンダリングできます。

XSL構文: <xsl:call-template name="name">

XML Publisherタグ: <?call-template:name?>

### テンプレートの宣言

指定したノードが一致した場合に一連のルールを適用するには、この要素を使用します。

XSL構文: <xsl:template name="name">

XML Publisherタグ: <?template:name?>

### 変数の宣言

ローカルまたはグローバル変数を宣言するには、この要素を使用します。

XSL構文: <xsl:variable name="name">

XML Publisherタグ: <?variable:name?>

例:

     <xsl:variable name="color" select="'red'"/>

"color"変数に値"red"を割り当てます。この変数をテンプレートで参照できます。

### スタイルシートのインポート

スタイルシートの内容を別のスタイルシートにインポートするには、この要素を使用します。

注意: インポート対象のスタイルシートの優先順位は、インポート先のスタイルシートより低くなります。

XSL構文: <xsl:import href="url">

XML Publisherタグ: <?import:url?>

### スタイルシートのルート要素の定義

この要素と<xsl:stylesheet>要素は完全に同じ要素です。両方とも、スタイルシートのルート要素を定義するために使用されます。

注意: 組込み対象のスタイルシートの優先順位は、組込み先のスタイルシートと同じになります。

XSL構文: <xsl:stylesheet xmlns:x="url">

XML Publisherタグ: <?namespace:x=url?>

注意: テンプレートでネームスペースを宣言する必要があります。「ネームスペースのサポート」を参照してください。

### XSL固有の数値書式設定

XSL固有のformat-number関数では、次の基本書式が使用されます。

    format-number(number,format,[decimalformat])

パラメータ | 説明
--- | ---
number | 必須。書式設定する数値を指定します。
format | 必須。書式パターンを指定します。次の文字を使用してパターンを指定します。 #（桁数を指定します。例: ####。） 0（先頭および後続の0（ゼロ）を指定します。例: 0000.00。） .（小数点の位置。例: ###.##。） ,（千単位のグループ・セパレータ文字。例: ###,###.##。） %（数値をパーセントで表示します。例: ##%。） ;（パターン・セパレータ文字。最初のパターンはプラスの数値に使用され、2番目のパターンはマイナスの数値に使用されます。）
decimalformat | オプション。10進書式の詳細は、基本的なXSLTマニュアルを参照してください。

## FO要素の使用

Microsoft Wordのフォーム・フィールド内でFO固有の構文を使用できます。

XSL-FOの詳細は、W3CのWebサイトhttp://www.w3.org/2002/08/XSLFOsummary.htmlを参照してください。

XML PublisherでサポートされるFO要素の全リストは、付録の「サポートされているXSL-FO要素」を参照してください。

Copyright © 2005, 2006, Oracle. All rights reserved.