XPath を使用したスタイルプロパティ

www.altova.com すべてを展開/折りたたむ このトピックを印刷 前のページ 1つ上のレベル 次のページ

ホーム >  SPS ファイル: 表示方法 > CSS スタイルを使用する >

XPath を使用したスタイルプロパティ

XPath 条件式を使用することでもスタイルを割り当てることができます。この機能により、スタイルプロパティの値を XML データや、XPath 条件式から与えることができます。更に、XPath 2.0/3.0 の doc() 関数を使用することで、アクセス可能な XML ドキュメントにあるノードへのアクセスを行うことが可能になります。スタイルの定義を XML データから取得するだけではなく、XML データのコンテンツや構造により、異なるスタイルを与えることも可能になります。例えば XPath 2.0/3.0 の if...else ステートメントを使用することで、シーケンスにおける要素の位置に従って、異なる背景色を選択することが可能になります。これにより、これらの要素がテーブルで表示される時に、偶数番号と奇数番号の背景色がそれぞれ別の色となります(以下の例を参照)。また、ノードのコンテンツに従うかたちでスタイル値を変更することもできます。

 

XPath 条件式を使用することができるスタイルプロパティ

XPath 条件式は、以下のスタイルプロパティに対して入力することができます:

 

スタイルサイドバーに表示されている全てのプロパティ
プロパティサイドバーの共通イベントHTML グループ内にあるプロパティ

 

プロパティ値に対する静的モードと動的 (XPath) モード

XPath 式の有効化プロパティには、2つのモードが用意されています:

 

静的モード: サイドバーの値カラムにプロパティの値が直接入力されます。例えば、デザインコンポーネントの背景色に対して red という値をサイドバーに直接入力します。
動的モード(または XPath モード): XPath 条件式が入力されます。条件式はランタイムにて評価され、その結果がプロパティの値として入力されます。例えば、デザインコンポーネントの背景色に /root/colors/color1 という XPath 条件式を入力することができます。ランタイムでは、/root/colors/color1 ノードのコンテンツが背景色プロパティの値として使用されます。

 

静的モードと動的 (XPath) モードの切り替え

XPath 条件式を使用することができるプロパティでは、静的モードがデフォルトで選択されています。プロパティを動的 (XPath) モードに切り替えるには、そのプロパティを選択してサイドバーのツールバーにある XPath アイコンをクリックします(以下のスクリーンショットを参照)。

 

EH_Styles_ViaXPath

 

静的な値がそのプロパティに対して既に入力されている場合、その値がクリアされ、動的モードへの切り替えが行われます。 XPath 式 の編集ダイアログ が表示されるので、そのプロパティで使用される XPath 条件式を入力します。「OK」 をクリックすることで編集を完了します。

 

プロパティに対して XPath 条件式が入力されると、そのプロパティの値カラムに XPath 条件式の編集ボタンが表示されます(上のスクリーンショットを参照)。このボタンをクリックすることで、既に定義された XPath 条件式を編集することができます。静的モードへの切り替えを行うには、ツールバーにある XPath アイコンをクリックしてください。定義された XPath 条件式がクリアされ、静的モードへの切り替えが行われます。

 

メモ:静的モードと動的モードのうち、同時にアクティブにすることができるのは1つに限られるという点に注意してください。モードの切り替えを行うと、それまでに入力された値がクリアされるため、再度モードの切り替えを行なってもフィールドは空になります(過去に入力した値 / 条件式を取り戻すには、 元に戻すコマンドコマンドを使用してください)。SPS を編集した後に再度プロパティを選択しても、過去に選択されたモードにてプロパティは開かれます。

 

XPath 条件式の作成と編集

XPath の定義は、 XPath 式 の編集ダイアログ にて作成ならびに編集することができます。2つの方法によりこのダイアログへアクセスすることができます:

 

(サイドバーのツールバーにあえる XPath アイコンをクリックすることで)静的モードから動的モードへの切り替えを行うと、 XPath 式 の編集ダイアログ が表示されます。プロパティが既に動的モードになっている時にツールバーの XPath アイコンをクリックすると、静的モードへの切り替えが行われ、XPath 条件式の編集ダイアログは表示されないことに注意してください。
プロパティに対して XPath 条件式が既に定義されている場合、値フィールドにある XPath 条件式の編集ボタンをクリックすることで XPath 式 の編集ダイアログ へアクセスすることができます。ダイアログには、そのプロパティに対して既に定義されている XPath 条件式が表示され、そのまま編集を行うことができます。

 

XPath 条件式の入力または編集を行った後は、「OK」 をクリックして完了してください。

 

XPath 式により得られる値

XPath 条件式を使用することで、(i) XML ファイルから取得された値をプロパティの値として使用することができるようになり、(ii) 処理されている XML ドキュメントのコンテンツや構造を条件に対して使用することで、適切な値を選択することができるようになります。XPath 条件式からは、以下にある2種類のカテゴリーにより値が返されます:

 

XML ノードコンテンツ

XPath 条件式により、(i) SPS により処理されている XML ドキュメント内のノード、または (ii) アクセス可能な任意の XML ドキュメント内にあるノードへアクセスすることができます。例えば、Format/@color という条件式により、コンテキストノードの子要素である Formatcolor 属性にある値を、この XPath 条件式が定義されたプロパティの値としてセットすることができます。XPath 2.0 の doc() 関数を使用することで、その他の XML ドキュメントにあるノードへもアクセスすることができます。例えば、doc('Styles.xml')//colors/color-3 という XPath 条件式により、Style.xml という XML ドキュメントにある color-3 という要素内の値をプロパティの値として使用することができます。

 

XPath 式

XML ドキュメントではなく、XPath 条件式そのものにプロパティの値を入力することもできます。例えば、テーブルの行として出力される要素の背景色を、奇数番目と偶数番目により変更する例を考えてみましょう。このような処理は if (positikon() mod 2 = 0) then 'red' else 'green' といった XPath 2.0 の条件式により実現することができます。この条件式の戻り値は、'red' という文字列か、'green' という文字列になり、これらの文字列(のうちのどちらか)が、この XPath 条件式が定義されたプロパティの値として使用されることになります。この例では文字列リテラルとしてプロパティの値が入力されています。文字列リテラルを使う以外にも、if (position() mod 2 = 0) then doc('Styles.xml')//colors/color-1 else doc('Styles.xml')//colors/color-2 といった条件式を使用することで、XML ドキュメントから値を取得することもできます。'green' という XPath 条件式を定義することで、文字列をそのまま与えることもできますが、その結果は green という静的な値を与えた場合と変わりません。

 

制約

XPath 機能をスタイルプロパティに対して使用する場合、以下の様な制約があることに留意してください:

 

1.StyleVision により入力される RTF 出力の場合、RTF ドキュメント内部にあるテーブルに色が入力されることになります。このテーブルは、XSLT-for-RTF が生成された際に(RTF プレビューとともに)作成され、ほとんどのブラウザーでサポートされている標準的な140の色がデフォルトで含まれます。XML データや XPath 条件式から色のプロパティが与えられ、これら140の色には無い色が使用された場合、最も近い色が代わりに使用されます。例えば、#FF0001 という色は標準的な140の色に含まれていないため、最も近い #FF0000 (red) の値が代わりに使用されます。
2.RTF、PDF、Word 2007+ の出力では、クラスプロパティに対して XML データならびに XPath 条件式内のリテラルから得られた値が、: 自動計算(コンテンツ)プレースホルダ段落(ブロック)コンポーネントテーブルセルに対して適用されます。.

 

 

 


(C) 2019 Altova GmbH