
「XML | 挿入 | XInclude」コマンドはグリッドビューでのみ使用でき、選択されたアイテムの前に新たな XInclude 要素を挿入します。属性が選択されている場合、新たに挿入される XInclude 要素は、属性の親要素に含まれている最初の子要素の前に表示されます。このコマンドにより XInclude ダイアログが表示されます(以下のスクリーンショットを参照)。

インクルードされる XML ファイルを href テキストボックスに入力します(または、テキストボックスの右側にある ... (参照)ボタンをクリックすることで、ファイルの参照を行うこともできます)。ファイル名が href 属性の値として、XML ドキュメント内に入力されます。XInclude (xi:include) 要素の parse、xpointer や encoding 属性、そして xi:include の fallback 子要素も、このダイアログにて挿入することができます。対応するチェックボックスにチェックを入れ、必要な値を選択/入力してください。fallback 要素の場合は、チェックボックスにチェックを入れることで、空要素を挿入することができます。fallback 要素のコンテンツは、編集ビューにて追加する必要があります。
parse 属性により、インクルードされるドキュメントが XML またはテキストとして解析(パース)されるかが決定されます(デフォルトでは XML という値がセットされており、指定を行う必要はありません)。xpointer 属性は、href 属性により指定されるドキュメント内フラグメント(つまり、インクルードされるフラグメント)を特定します。encoding 属性ではインクルードされるドキュメントのエンコーディングが指定され、XMLSpy により、インクルードするドキュメントの内容がインクルード元のドキュメントエンコーディングに合う形で変換されます。インクルードされるドキュメントが見つからない場合は、xi:include 要素が fallback 子要素により置換えられます。
XInclude により2つの XML ドキュメントをインクルードする XML ドキュメントのサンプルを以下に示します:
<?xml version="1.0" encoding="UTF-16"?>
<AddressBook xsi:schemaLocation="http://www.altova.com/sv/myaddresses AddressBook.xsd"
xmlns="http://www.altova.com/stylevision/tutorials/myaddresses"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include href="BusinessAddressBook.xml"/>
<xi:include href="PersonalAddressBook.xml"/>
</AddressBook>
XML ドキュメントがパースされると、上の例で2つある XInclude 要素が、href 属性により指定されたファイルの内容に置換えられます。
XMLSpy の XML バリデーターにより XML ドキュメントが読み取られ、XInclude 名前空間内の include 要素(これ以降は xi:include と表記)が発見されると、この要素 (xi:include) を、xi:include 要素の href 属性により指定された XML ドキュメントに置換えます。インクルードされた XML ドキュメントのドキュメント要素(ルート要素)や、XPointer により指定された要素にも xml:base 属性は含まれ、インクルードされたベース URI を保持します。(インクルードされた XML やツリーフラグメントを含む)結果 XML ドキュメントが、スキーマに従う形で妥当でなければならない場合、インクルードされたドキュメントのドキュメント要素(ルート要素)やツリーフラグメントのトップレベル要素を、xml:base 属性を許可するコンテンツモデルにより作成する必要があります。スキーマにより、xml:base 属性がこの要素に対して認められない場合、ドキュメントは妥当でないと評価されます。XMLSpy のスキーマビューにて要素コンテンツモデルの xml:base 属性を定義する方法は、ドキュメンテーションのスキーマビューセクション、 xml:プレフィックス属性 にて記述されます。
XMLSpy では XInclude 内における XPointer がサポートされます。関連する W3C 勧告は、XPointer Framework ならびに XPointer element() スキーマの2つです。XInclude 要素内の XPointer により、XML ドキュメント全体の代わりに、XML ドキュメント内部でインクルードする箇所を特定することができます。XPointer は、以下にあるように、XInclude 要素内部で使用されます::
<xi:include href="PersonalAddressBook.xml" xpointer="element(usa)"/>
<xi:include href="BusinessAddressBook.xml" xpointer="element(/1/1)"/>
<xi:include href="BobsAddressBook.xml" xpointer="element(usa/3/1)"/>
<xi:include href="PatsAddressBook.xml" xpointer="element(usa)element(/1/1)"/>
XPointer の element() スキーマでは、NCName や子シーケンスを使用することができます。
•上の例にある最初の xi:include 要素の xpointer 属性では usa という NCName を伴った要素スキーマが使用されています。XPointer Framework に従うと、この NCName により usa という ID を持つ要素が特定されます。
•2つ目の xi:include では、element(/1/1) という値が xpointer 属性で使用されています。最初のステップでは、ドキュメントにある最初の子要素(つまりドキュメントが整形式であえば、ドキュメント要素)が特定されます。次のステップでは、最初のステップで特定された要素から見た最初の子要素が特定され、結果としてドキュメント要素にある最初の子要素がインクルードされます。
•3番目の xi:include にある xpointer 属性では、NCName と子シーケンスの両方が使用されています。XPointer により、usa という ID を持つ要素の3番目の子要素、その子要素から見た最初の子要素がインクルードされます。.
•最初に使用した XPointer が期待通りに動作するか分からない場合、4番目の例として示されている xpointer="element(usa)element(/1/1)" という書式を使用することもできます。この方法では、たとえ usa という ID を持つ要素が存在しない場合でも、ドキュメント要素の最初の子要素が選択されます。これ以外にもバックアップとなる式を追加することができます。各 XPointer は、空白スペース以外で分けることはできず、以下のような書式に従う必要があります: xpointer="element(usa)element(addresses/1) element(/1/1)"。
| メモ: | element() スキーマは qualified name でサポートされておらず、名前空間バインディングコンテキストは、element() スキーマにて使用されません。 |