グローバルテンプレート

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

ホーム >  SPS ファイル: 構造 > テンプレートと デザインフラグメント >

グローバルテンプレート

グローバルテンプレート は、任意のノードやスキーマ内の型、または XPath 条件式により指定されたノードに対して定義することができます。

 

グローバルテンプレートは選択されたノードや型の処理命令に対して適用され、 メインのテンプレート、 デザインフラグメント、またはその他のグローバルテンプレートから呼び出されます。あるテンプレートが定義され、複数回呼び出されるというのは宣言型の動作ですが、手続き型の処理でも使用されます。このようにして、ある定義を複数回再利用することが可能になります。グローバルテンプレートの呼び出しは、以下のような状況で発生します:

 

メインのテンプレート 内にあるノードや型が、 (デザイン内のコンポーネントを右クリックし、グローバルテンプレートを選択して)グローバルテンプレートを参照するようにセットされている。
(コンテンツ) または (その他のコンテンツ)ローカルテンプレート 内にある要素や型内に挿入され、その要素に対するその他のコンテンツや型には、 グローバルテンプレート のノードや型が含まれている。

 

様々な要素や複数の場所でノード(または型)が出現する、または特定の処理命令が全ての出現に対して必要となるような状況で、グローバルテンプレートは便利な機能となります。例えば、chaptersectionappendix、または blockquote 要素内にあるかどうかにかかわらず、para 要素の書式が常に同じものになるようにすることを考えてみましょう。para 要素に対してグローバルテンプレートを定義して、メインのテンプレート にて para 要素に対するグローバルテンプレートが適用されるように指定することができます。例えば、//chapter/para をメインテンプレート内に追加して、para がグローバルテンプレートを参照するようにし、//chapter/title を追加した後に (コンテンツ) または (その他のコンテンツ) を追加することで、chapter 要素内にあるその他のコンテンツが、利用可能なグローバルテンプレートやデフォルトテンプレートにより処理されるようになります。更に、グローバルテンプレートは複合型(例: アドレスモデルの定義)や単純型(例: xs:decimal)に対しても定義することができます。この場合、その型(複合型または単純型)により定義された出現のうち、グローバルテンプレートを呼び出す全ての出現において、グローバルテンプレートのルールに従った処理が行われます。.

 

グローバルテンプレートの作成

グローバルテンプレートは、スキーマ内にある任意のノードや型、または XPath 条件式にて指定されたノードに対して作成することができ、スキーマツリーサイドバーにて作成されます(以下のスクリーンショットを参照)。

 

SSTreeForGlobalTemplate

 

グローバルテンプレートは以下にあるいずれかの方法により作成することができます:

 

スキーマツリーに表示されているグローバルテンプレートアイテムの右側にある新しいグローバルテンプレートを追加アイコンをクリックします(上のスクリーンショットを参照)。新しいグローバルテンプレートを追加ダイアログが表示されます(以下のスクリーンショットを参照)。ダイアログに表示されているスキーマツリーから要素や属性、または型を選択することができるほか、XPath 条件式を入力することもできます。 この操作により、グローバルテンプレートとして作成されなければならないノードが決定されます。「OK」 をクリックするとテンプレートが作成され、デザインビューにすでに存在するテンプレートに追加され、編集することができるようになります。スキーマツリーでは、スキーマノードや型アイコンにプラスサインが表示されます。

 

AddNewGlobalTemplate

 

スキーマツリーのルート要素以下にあるスキーマノードや型コンポーネントを右クリックして、グローバルテンプレートの作成/削除コマンドを選択します。テンプレートが作成され、デザインビューに既に表示されている既存のテンプレート以下に追加されます。スキーマツリーでは、ノードや型のアイコンにプラスサインが表示されます。
デザインビューのメインテンプレートにあるテンプレートからグローバルテンプレートを作成することもできます。デザインビューやスキーマツリーサイドバーにあるテンプレートを右クリックして、グローバルテンプレートに設定を選択します。選択されたテンプレートからグローバルテンプレートが作成され、メインテンプレート内にあるテンプレートが、このグローバルテンプレートを使用するように自動的に定義されます(グローバルテンプレートの使用方法については、下記を参照ください)。

 

グローバルテンプレートは、メインのテンプレートの下のデザインビュー内に存在します。グローバルテンプレートのために作成されたノード名を含むバーを操作して表示されます。 : (単一) または (複合型)。 グローバルテンプレートは、下のスクリーンショットに表示されています。

 

TutQS_DesView_GTempty

 

グローバルテンプレートの処理は、ユーザー定義で、静的と動的であることができます。また、メインのテンプレートの処理のために使用することができます。

 

グローバルテンプレートの使用

作成したグローバルテンプレートは、同じ修飾名を持ったノードがドキュメントへ挿入された際に使用することができます。ノードがデザイン上にドロップされると表示されるメニューにて、グローバルテンプレートを使用を選択してください。その他にも、ローカルテンプレートがデザイン内にあり、同じ修飾名を持ったノードに対してグローバルテンプレートが存在する場合、ローカルテンプレートの代わりにグローバルテンプレートを使用することができます。ローカルテンプレートに対してグローバルテンプレートを使用するには、デザインビューにあるローカルテンプレートを右クリックして、グローバルテンプレートを使用コマンドを選択します。グローバルテンプレートが使用される場合、内部に含まれる処理命令が呼ばれ、ランタイムにてローカルテンプレートにより使用されます。

 

グローバルテンプレートがデザインにて使用される場合、グローバルテンプレートにて XPath のパターンを作成し、ノードセットのフィルタリングを行うことができます。フィルターを作成するには、デザインビューにてグローバルテンプレートのタグを右クリックして、コンテキストメニューから XPath フィルターの編集 を選択します。 XPath 式 の編集ダイアログ が表示され、目的の条件式を入力することができるようになります。

 

再帰的なグローバルテンプレート

グローバルテンプレートは再帰的に作成することも可能で、グローバルテンプレートが自分自身を呼び出すように定義することができます。 Authentic View における無限ループを回避するために、呼び出しの深さを制限するためのプロパティに値をセットすることができます。SPS のプロパティダイアログ(「ファイル | プロパティ」)にある Authentic タブ内のテンプレート呼出し階層上限プロパティにて値をセットすることができ、この値により、Authentic View 出力を処理する際に再帰的なテンプレート呼び出しの最大値が指定されます。テンプレート呼出し階層上限プロパティで指定された値を超えたテンプレートの呼び出しが行われた場合、エラーが返されます。

 

グローバルテンプレーをローカルにコピーする

グローバルテンプレートが作成されると、その処理命令をメインテンプレート内にある同名のテンプレートへ直接コピーすることができます。ローカルテンプレートを右クリックして、グローバルテンプレートをローカルにコピーを選択します。グローバルテンプレートをローカルにコピーするという処理は、処理命令が一度だけコピーされるという点で(ランタイムにおける)グローバルテンプレートの使用とは異なります。一旦ローカルにコピーされたら、グローバルテンプレートがローカルテンプレートに対して影響を及ぼすことはありません。グローバルテンプレートとローカルテンプレートのどちらか(または両方)をその後修正しても、相手に対して影響を与えることはありません。グローバルテンプレートがローカルテンプレートにより使用される場合、グローバルテンプレート側の変更が、ランタイムにてローカルテンプレートに反映されます。

 

グローバルテンプレートの有効化と無効化

スキーマツリーサイドバーに表示されているグローバルテンプレートのエントリーをチェックすることで、そのグローバルテンプレートが有効化されます。エントリーのチェックを外すことでテンプレートが無効化されます。グローバルテンプレートが有効化された場合、テンプレートが XSLT スタイルシートにて生成されます(グローバルテンプレートが作成されるとデフォルトで有効になります)。無効になっている場合、XSLT スタイルシートにて生成されることはありませんが、SPS デザインには保存されます。

 

無効になっているグローバルテンプレートを使用するローカルテンプレートでは、(存在しないグローバルテンプレートを参照することはできないため)XSLT のデフォルトテンプレートが使用され、コンテンツやテキストノードの子孫にもその影響は現れます。

 

有効化/無効化の機能を使用することで、(i) グローバルテンプレートが一時的に必要ない場合でも削除する必要は無く、必要になった時に再度有効化することができ、(ii) インポートされたスタイルシートにあるテンプレートにて名前の衝突が起こった際に、必要ないグローバルテンプレートを一時的に無効化することが可能になります。

 

グローバルテンプレートの削除

グローバルテンプレートを削除するには、削除するグローバルテンプレートをデザインビューまたはスキーマツリーサイドバーにて右クリックし、グローバルテンプレートの作成/削除コマンドを選択します。

 

単純型のグローバルテンプレートと複合型のグローバルテンプレート

グローバルテンプレートには、単純型と複合型の2種類があります。複合型グローバルテンプレートは下位互換性を保証するためのもので、バージョン 2006 より前の StyleVision にて作成された SPS のグローバルテンプレートにテーブルやリストが含まれている場合、StyleVision 2006 やそれ以降のバージョンでは、通常複合型として、そのグローバルテンプレートが開かれます。

 

複合型のグローバルテンプレートと単純型のグローバルテンプレートとの違いは、グローバルテンプレートに対して作成されたノードの処理方法にあります。ノードの最初のインスタンスがドキュメントにて見つかった場合、そのノードの直後にある全てのインスタンスが複合型のグローバルテンプレートにより処理されます。単純型のグローバルテンプレートの場合、個々のノードインスタンスが発見されるごとに処理が行われます。

 

グローバルテンプレートに対して作成された要素ノードの周りに、 定義済みのフォーマット または改行が作成されている場合、単純型のグローバルテンプレートは、自動的に複合型のグローバルテンプレートへ変換されるという点に留意してください。これにより、複合型のグローバルテンプレートと同様の処理が行われます。単純型のグローバルテンプレートへ戻したい場合は、(定義済みのフォーマットの外側へノードをドラッグし、定義済みフォーマットを削除することで) 定義済みのフォーマット を削除するか、 デザインツリー サイドバー内にあるアイテムを削除することで)改行を削除する必要があります。単純型のグローバルテンプレートから複合型のグローバルテンプレートへの自動変換を回避するには、単純型のグローバルテンプレートに対して作成された要素のノードタグ内部に 定義済みのフォーマット や改行を追加するようにしてください。

 

モジュール SPS におけるグローバルテンプレート

SPS モジュールが別の SPS モジュールへ追加された 場合、追加されたモジュール内にあるグローバルテンプレートを、参照元の SPS にて利用することができます。モジュール SPS の使用に関する詳細については、 モジュール SPS のセクションを参照ください。

 

 

 


(C) 2019 Altova GmbH