コンテキスト・コマンドを使用した命令の配置の制御

Publisher構文は、XSL命令を単純化したものです。この構文は、テンプレートで使用するネイティブのXSLコマンドとともに、実行時にXSL-FOに変換されます。変換後のスタイル・シート内でのこれらの命令の配置によって、テンプレートの動作が決定されます。

PublisherのRTFプロセッサでは、最も一般的なコンテキストに従って、XSL-FOスタイルシート内にこれらの命令が配置されます。ただし、特定の動作の生成には、別の方法による命令のコンテキストの定義が必要な場合もあります。この要件をサポートするために、Publisherには、処理命令のコンテキスト(配置)を定義できる一連のコンテキスト・コマンドが用意されています。たとえば、コンテキスト・コマンドを使用すると、次の処理を実行できます。

  • 表にif文を指定して、セル、行、列または表全体を参照できます。

  • for-eachループを指定して、(新規ヘッダーとフッターの作成、およびページ番号付けの再開始のため)現行データまたはセクション全体のいずれかを繰り返すことができます。

  • 現在のループまたは文書の先頭に変数を定義できます。

コンテキストは、Publisher構文を使用した処理コマンドと、ネイティブXSLを使用した処理コマンドの両方に指定できます。

  • 簡略化されたPublisher構文を使用した処理コマンドに対してコンテキストを指定するには、@contextを構文命令に追加します。次に例を示します。

    • <?for-each@section:INVOICE?>: グループINVOICEの出現ごとに新規セクションを開始することを指定します。sectionコンテキストを追加すると、ヘッダーとフッターおよびページ番号をリセットできます。

      ページ番号付けを再開しない場合は、@sectionコマンドの後に<?initial-page-number:'auto'?>コマンドを追加して複数のセクション間でページ番号付けを継続します。

    • <?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>

Publisherでは、次の表に示されているコンテキスト・タイプがサポートされています。

コンテキスト 説明

section

文は、ヘッダーおよびフッターを含めてセクション全体に影響を与えます。たとえば、for-each@sectionコンテキスト・コマンドでは、出現箇所ごとに、再開始されたページ番号およびヘッダーとフッターを使用して新規セクションが作成されます。<?initial-page-number:'auto'?>コマンドを使用することで、セクション全体で連続的なページ番号付けを維持できます。この使用例については、バッチ・レポートの作成を参照してください。

column

この文は、表の列全体に作用します。このコンテキストは通常、データに応じて表の列を表示または非表示にするために使用されます。例については、列の書式設定を参照してください。

cell

この文は、表のセルに作用します。このコンテキストは通常、動的な列数を作成するために、ピボット・テーブルで@columnとともに使用されます。例については、ピボット・テーブルの挿入を参照してください。

block

この文は、複数のfo:blocks(RTFの段落)全体に作用します。このコンテキストは通常、iif文およびfor-each文に対して使用されます。また、段落または表のセルに書式設定を適用するためにも使用されます。例については、セルの強調表示を参照してください。

inline

このコンテキストは、fo:inlineブロック内の単一の文になります。このコンテキストは変数に使用されます。

incontext

文は、その文を囲んでいる文の直後に挿入されます。これは、その文を囲んでいるfor-eachの後の最初の要素として続く必要がある<?sort?>文のデフォルトです。

inblock

文は、fo:block(RTFの段落)内の単一の文になります。これは通常、制御文(ifやfor-eachなど)には有効ではなく、call-templateなど、テキストを生成する文に有効です。

inlines

この文は、複数のインライン・セクション全体に作用します。1つのインライン・セクションは、太字でレンダリングされる一続きの語など、同じ書式設定を使用するテキストです。ボイラープレート・テキストでのIf文の使用を参照してください。

@inlinesif構文で使用する場合、同じ文中にあるその他すべてのif構文で、コンテキスト・コマンド@inlineを使用する必要があります。@inlinesFOR-EACH構文で使用する場合、同じ文中にあるその他すべてのif構文またはFOR-EACH構文で、コンテキスト・コマンド@inlineを使用する必要があります。

begin

この文は、XSLスタイルシートの先頭に配置されます。これは、グローバル変数の場合は必須です。パラメータの設定を参照してください。

end

この文は、XSLスタイルシートの最後に配置されます。

次の表に、各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