XML Inclusions (XInclude) について
XML Inclusions (XInclude) は、XML文書内に別のXML文書や
テキストファイル を取り込み、複数のXML文書を一つに統合するための言語構文です。XInclude自体もXMLに準拠した埋め込み型の
マークアップ言語 として機能します。
仕様と歴史
XIncludeは、2004年12月20日に
World Wide Web Consortium (W3C) によって「XML Inclusions Version 1.0」として仕様がリリースされ、
W3C勧告 となりました。その後、2006年11月15日に改定版である1.0 Second Editionが
W3C勧告 として公開されています。
名前空間
XIncludeでは、「xi」という名前空間接頭辞を使用し、名前空間名は `http://www.w3.org/2001/XInclude` です。したがって、XIncludeの要素である`
`を使用する際には、その先祖ノードで`xmlns:xi`属性を用いて名前空間宣言を行う必要があります。
xml
要素と属性
XInclude 1.0では、以下の2つの要素と6つの属性が定義されています。
``要素
これはXIncludeの必須要素であり、指定された外部文書をこの要素の位置に挿入します。オプションとして、最大1つの``要素を含めることができます。
href 属性 (省略可能): 取り込む文書のURLを指定します。省略した場合は、空文字列が指定された場合と同様に、この``要素を含む文書自身を指します。フラグメント識別子は含めることはできません。
parse 属性 (省略可能): 文書をXMLとして取り込む場合は`xml`、プレーンテキストとして取り込む場合は`text`を指定します。デフォルトは`xml`です。
xpointer 属性 (省略可能): `parse`属性が`xml`の場合に、取り込む文書の一部をXPointerで指定します。`parse`属性が`text`の場合は指定してはいけません。
encoding 属性 (省略可能): `parse`属性が`text`の場合に、取り込む文書の文字エンコード形式を指定します。`parse`属性が`xml`の場合は無視されます。外部からエンコード形式が指定されている場合や、メディアタイプが`text/xml`などの場合はそちらが優先されます。省略された場合はUTF-8が使用されます。
accept 属性 (省略可能): 文書を取得する際に、HTTPリクエストのAcceptヘッダに指定するメディアタイプのリストを指定します。
accept-language 属性 (省略可能): 文書を取得する際に、HTTPリクエストの Accept-Language ヘッダに指定するIETF言語タグ のリストを指定します。
``要素
``要素の子要素としてのみ使用できます。``要素で指定された文書の取得に失敗した場合、この要素の内容で``要素が置き換えられます。親の``要素の`parse`属性で`text`が指定されていても、要素の内容はXMLとして扱われます。
具体例
`wikipedia.txt`というテキストファイル の内容を、XML文書に挿入する例を以下に示します。
wikipedia.txt
text
ウィキペディアはオープンコンテントの百科事典です。
XML文書
xml
このXML文書を処理すると、以下の結果が得られます。
xml
ウィキペディアはオープンコンテントの百科事典です。
XML文書の統合
`wikipedia.xml`というXML文書を、別のXML文書に挿入する例を以下に示します。
wikipedia.xml
xml
ウィキペディアはオープンコンテントの百科事典です。
XML文書
xml
このXML文書を処理すると、以下の結果が得られます。
xml
ウィキペディアはオープンコンテントの百科事典です。
XML文書の一部分の統合
XPointerを利用して、XML文書の一部のみを取り込むことも可能です。`wikipedia.xml`のテキスト部分のみを別のXML文書に挿入する例を以下に示します。
wikipedia.xml
xml
ウィキペディアはオープンコンテントの百科事典です。
XML文書
xml
このXML文書を処理すると、以下の結果が得られます。
xml
ウィキペディアはオープンコンテントの百科事典です。
再帰処理
取り込んだXML文書にさらに``要素が含まれている場合、その``要素も再帰的に処理されます。ただし、`href`属性が自分自身を指している場合は、``要素の処理前にxpointerが解釈されます。
また、再帰処理中に既に処理済みの``要素と同じ文書とxpointerを指定した場合、エラーが発生します。
ベースURI、言語、ID参照
文書を取得する際、`xml:base`属性などで指定されたベースURIが考慮されます。
取り込まれた文書のベースURIや言語(`xml:lang`属性で指定されたもの)は保存されます。異なる場合は、`xml:base`属性や`xml:lang`属性が付加されます。この動作はユーザーが抑制できるように実装しても良いとされています。
一方、IDによる参照は保存されません。IDは文書を取り込んだ後に解釈されます。複数の参照先がある場合は、いずれも参照しません。
他の技術との比較
XIncludeは、(X)HTMLの``要素やXLink とは異なります。``要素やXLink はリソースを埋め込んで表示することのみを指し、具体的な処理はアプリケーションに依存します。XIncludeは、XML Infosetの一部を別のXML文書やテキストから生成されたXML Infosetで置き換える具体的な処理モデルを規定しています。
XSLTもXMLを変換するための強力なツールであり、`document()`関数を使うことでXIncludeと同様の効果を得ることができます。
ブラウザのサポート
主要なWebブラウザは、2009年10月現在XIncludeをネイティブにサポートしていません。
まとめ
XIncludeは、XML文書のモジュール化や再利用を促進するための重要な技術です。文書の断片を効果的に管理し、構造化されたコンテンツを扱う上で非常に便利です。