動的な列

www.altova.com このトピックを印刷 前のページ 1つ上のレベル 次のページ

ホーム >  デザインオブジェクト/機能 > テーブル >

動的な列

テーブル行内で、列が繰り返されると、これらの繰り返しは、動的な列機能により表示されることができます。列はページソースの繰り返し要素と関連付けられています。テーブルが表示されると、列数は関連した要素の発生数と動的に対応します。

動的な列は、2つの種類の行コンテキスト内で発生することができます :

 

静的な行, 動的な列: このシチュエーションでは、テーブルは上下ではなく左右に広がります (下のテーブルと動的な行が存在するテーブルを比較してください )。この場合、最初の列が「ヘッダー」としての役割を果たし、行の名前を含むことができます。(最初の列は、テーブルが最初に作成された時点で追加することができますが、列は静的であるため、後に作成することも可能です)。

 

<Person>

<Person>

<Person>

<First>

 

 

 

<Last>

 

 

 

<Phone>

 

 

 

動的な行、動的な列: テーブルは上下(追加行)、および左右(追加列)に広げることができます。このような種類のテーブルを作成するには、 ページソース内の列要素の発生回数は、全ての行で同じ数量である必要があります。例えば、下のテーブル内で、 (テーブル内の行に対応する) 4つの week 要素それぞれは、3つの day 要素 (テーブルの列)を含んでいます。week 要素が3つ以外の day 要素を含んでいる場合、 テーブルを正確に作成することはできません。以下の点に注意してください: (i) ページソースとテーブルデザイン内の列要素は行要素内で発生します。 (ii) 行要素の名前は同じで、列要素の名前も同じです。しかしながら、 上記の2つの点はこの種類の動的なテーブルを作成するために必ずとも必要ではありません: (i) 列要素は、行要素外で発生することができ、 (ii) 行/列は異なる名前を持つことができます。

 

<day>

<day>

<day>

<week>

 

 

 

<week>

 

 

 

<week>

 

 

 

<week>

 

 

 

 

メモ:XPath/XQuery 式によりデータストリームを生成することができ、データソースとして使用することができます。しかしながら、この種のデータソースは、現在で使用するために作成され、ドキュメントの他の箇所で使用するためのページソースとしてはアクセスすることはできません。

 

サンプル: 週のための動的な行内の日のための 動的な列

下のスクリーンショットは、それぞれが7つの day 要素を含む 4つの week 要素を含む calendar 要素 を表示しています。 week 要素と動的な列 ( week 要素内の) の day 要素 のために動的な行が存在するテーブルを作成することができます。データ構造に注意してください (i) day 要素は、 week 要素内に存在し、 (ii) week 要素内の day 要素数量は同じです: 7つ。

MTDTablesDynamicColsEx01

 

動的な行内に動的な列を作成する

テーブルコントロールをデザインにドラッグしドロップします。新しいテーブルダイアログ内で、動的な行と動的な列を選択します (下のスクリーンショットを参照) 。行と列にそれぞれ対応するように各要素の発生のために繰り返される行と列の数量を選択します。 最初と/最後の列はヘッダー/フッター行に対応します。動的な列ではなく動的な行ためのコントロールを追加/削除することができます。

Click to expand/collapse

テーブルはデザイン内に作成されます。下のスクリーンショットでは、動的な行と列が存在するテーブルのデザインが表示されています。 以下の点に注意してください:

 

テーブルの動的な行と列を表示しているフィールドは行と列を表示するアイコンにより示されています。
これらのフィールドは、テーブルの行と列のためのデータを提供するページソースノードと関連付けられている必要があります。列に関連付けられる要素は、ページソース内では、行に関連する要素内に含まれている必要があります。 デザイン内では、しかしながら、行フィールドは列フィールド内に配置されていることに注意してください。

MTDTablesDynamicColsExDes01

ページソースノードと行と列フィールドを関連付けるために使用される XPath 式にも注意してください。行フィールドのために要素を選択する式は、対応する要素の全てのインスタンスを選択する必要があります。上のスクリーンショット内の XPath 式は、 calendar 要素の全ての week 子要素を選択します: $XML1/calendar/week。 列フィールドのための XPath 式はしかしながら、現在の行内の列要素のみを選択する必要があります。  ですから、 $XML1/calendar/week/day などの XPath 式は全ての week 要素の全ての day 子要素を選択するため、使用することはできません。列フィールドのための XPath コンテキストノードも行に関連付けられている要素であることに注意してください。 このサンプルでは、列フィールドのコンテキストノードは、 week です。 この結果、 day  の XPath 式は、現在の week 要素の day 子要素を選択します。
デザイン内では、行取れるフィールドのインターセクションには単一のセルが存在します。このセルのコンテキストノードは、行フィールドに対応する要素です (このサンプルでは、 week 要素です)。 このセル内の XPath 式は、このコンテキストで構成されている必要があります。 テーブルが作成されると、各 「行 要素」 (このサンプルでは week 要素)内で、各列のためにセルが作成されます。 XPath 式は、現在の行のコンテキスト内の各列のセルのために評価されます。 列フィールドに対応する要素のコンテンツに達成するために、特別な変数を使用することができます: $MT_TableColumnContex 、は、ランタイムで、(このサンプルでは現在の week 要素内の現在の day 要素)現在の列に対応する要素を含みます。 上のスクリーンショットでは、行と列フィールドのインターセクションにあるデザイン内のセルはラベルコントロールを含んでいます。 このコントロールには、 XPath 式により提供されたテキストが存在します: concat(@id$MT_TableColumnContext/@id)concat() 関数は2つの文字列を結合します: 現在の @id により取得された現在の週数 の ID と $MT_TableColumnContext/@id により取得された現在の週数内の現在の日数。XPath 式のコンテキストノードは、(行と関連付けられた) week 要素 @id であり、現在の week/@id 属性の値を提供しますが、 $MT_TableColumnContext/@id 式は、現在の week 要素内の現在の day/@id 属性のコンテンツを取得します。

 

上のスクリーンショットで示されているテーブルのデザインの出力は以下のようになります:

MTDTablesDynamicColsExSim01

ページソース内の各 week 要素は行 (W1 から W4)で表示されています。
week 内の各 day 要素は、対応する列 (D1 から D7)内で表示されています。
2つの ID の連結は、 W1D1 から W4D7 への28個のセルのために、個別に行われます。

 

動的な列に関する詳細は、次を参照してください:行/列のジョインとスパン

 


(C) 2019 Altova GmbH