XML Inclusions
XML Inclusions(XInclude)は、ひとつの XML 文書の中へ別の XML 文書(またはテキストファイル)を取り込み、複数の XML 文書を一つに統合する言語構文である。XInclude 自体も XML に準拠した埋め込み式のマークアップ言語である。
米国時間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 の要素 <xi:include> の先祖ノードで、予約属性 xmlns:xi を用いて以下のような名前空間宣言が必要となる。
<先祖ノード名 xmlns:xi="http://www.w3.org/2001/XInclude" >
要素と属性
[編集]XML Inclusions Version 1.0 では、2つの要素と6つの属性が定義されている。
<xi:include>
要素- XInclude の必須要素である。他の文書を取り込み、この要素と置き換える。xi:fallback 要素を高々1つ含んでもよい。parse 属性が "xml" の場合は、href 属性またはxpointer 属性のどちらかを記述しなければならない。
href
属性(省略可能)- 取り込む文書の URL を指定する。省略した場合には空文字列が指定された場合と同じように扱われ、この xi:include 要素を含む文書自身を指す。フラグメント識別子を含んでいてはいけない。
parse
属性(省略可能)- 文書を XML として取り込む場合は "xml" を、プレーンテキストとして取り込む場合は "text" を指定する。省略時は "xml" となる。
xpointer
属性(省略可能)- parse 属性が "xml" の場合、文書の内取り込む部分を指定する XPointer を指定する。parse 属性が "text" の場合は指定してはならない。
encoding
属性(省略可能)- parse 属性が "text" の場合に取り込む文書の文字エンコード形式を指定する。parse 属性が "xml"の場合は無視される。外部からエンコード形式が指定されている場合や、メディアタイプが text/xml などの場合でエンコード形式が指定されている場合はそちらが優先される[1]。省略された場合は UTF-8 が使われる。
accept
属性(省略可能)- 文書を取得する際に HTTP リクエストの Accept ヘッダに指定するメディアタイプのリストを指定する。
accept-language
属性 (省略可能)- 文書を取得する際に HTTP リクエストの Accept-Language ヘッダに指定するIETF言語タグのリストを指定する。
<xi:fallback>
要素- xi:include 要素の子としてのみ出現できる。任意の内容を含められる。文書の取得ができない場合にこの要素の中身で親の xi:include 要素を置き換える。親の xi:include 要素の parse 属性で "text" が指定してあっても、要素の中身は XML として扱われる。
構文の例
[編集]テキストファイルを合併する
[編集]wikipedia.txt
として保存された (1) の文書を、(2) の XML 文書の中へ取り込む例。
(1) wikipedia.txt
<p>ウィキペディアはオープンコンテントの百科事典です。</p>
(2) XML 文書
<?xml version="1.0"?>
<root xmlns="..."
xmlns:xi="http://www.w3.org/2001/XInclude">
...
<body>
<p><xi:include href="wikipedia.txt" parse="text"/></p>
</body>
</root>
この XML 文書を処理すると、以下のような結果となる。
<?xml version="1.0"?>
<root xmlns="..."
xmlns:xi="http://www.w3.org/2001/XInclude">
...
<body>
<p><p>ウィキペディアはオープンコンテントの百科事典です。</p></p>
</body>
</root>
XML文書を合併する
[編集]wikipedia.xml
として保存された (1) の文書を、(2) の XML 文書の中へ取り込む例。
(1) wikipedia.xml
<?xml version="1.0"?>
<p>ウィキペディアはオープンコンテントの百科事典です。</p>
(2)XML 文書
<?xml version="1.0"?>
<root xmlns="..."
xmlns:xi="http://www.w3.org/2001/XInclude">
...
<body>
<xi:include href="wikipedia.xml" parse="xml" />
</body>
</root>
この XML 文書を処理すると、以下のような結果となる。
<?xml version="1.0"?>
<root xmlns="..."
xmlns:xi="http://www.w3.org/2001/XInclude">
<head>...</head>
<body>
<p>ウィキペディアはオープンコンテントの百科事典です。</p>
</body>
</root>
XML文書の一部を合併する
[編集]XPointer と組み合わせて、別の XML 文書の一部を取り込むこともできる。wikipedia.xml
として保存された (1) の文書のテキスト部分のみを、(2) の XML 文書の中へ取り込む例。
(1) wikipedia.xml
<?xml version="1.0"?>
<p>ウィキペディアはオープンコンテントの百科事典です。</p>
(2) XML 文書
<?xml version="1.0"?>
<root xmlns="..."
xmlns:xi="http://www.w3.org/2001/XInclude">
...
<body>
<p><xi:include href="wikipedia.xml" xpointer="xpointer(//p/text())" parse="xml" /></p>
</body>
</root>
この XML 文書を処理すると、以下のような結果となる。
<?xml version="1.0"?>
<root xmlns="..."
xmlns:xi="http://www.w3.org/2001/XInclude">
...
<body>
<p>ウィキペディアはオープンコンテントの百科事典です。</p>
</body>
</root>
再帰処理
[編集]取り込んだ XML 文書にさらに xi:include 要素があれば、その xi:include 要素も再帰的に処理される。この処理は xpointer が解釈される前に実行される[2]。ただし href 属性が自分自身を差している場合は xi:include が処理される前に xpointer は解釈される[3]。
再帰処理の中で既に処理した xi:include 要素と同じ文書を指定し、なおかつ同じ xpointer を指定した xi:include 要素を処理しようとした場合、エラーとなる。
ベースURI、言語、ID参照の扱い
[編集]文書を取得する際、xml:base などで指定されたベース URI は考慮される。
取り込まれた文書のベース URI、言語(xml:lang で指定されるもの)は保存される。つまり取り込む文書と取り込まれた文書でベース URI や言語が違う場合は、xml:base 属性や xml:lang 属性が付加される。ただし、この動作はユーザによって抑制できるように実装してもよい。
一方、ID による参照は保存されない。ID は文書を取り込んだ後に解釈される。複数の参照先がある場合は、どれも参照しない[4]。
他の技術との比較
[編集]![]() | この節の加筆が望まれています。 |
XInclude は (X)HTML の<object> 要素や、show 属性として "embed" を指定した XLink とは異なる[5]。object 要素や XLink は、文中に埋め込んで表示すべきリソースを差し示すのみであり、その具体的な処理方法はアプリケーションに委ねられている。Firefox 3 等の既存の Web ブラウザでの実装や、HTML5 のドラフトで示されている処理方法では、object 要素は DOM ツリー上では置き換えられず、表示上置き換えられるのみである。一方 XInclude では XML infoset の一部を他の XML 文書またはテキストから作成した XML infoset で置き換えた新しい XML infoset を作成する具体的な処理モデルが定められている。取り込まれた文書は取り込まれた先の文書の一部として扱われ、元の文書中での位置などの情報は失われる。
XSLT は XML を変換するための汎用的な機構であり、2009年10月現在 Internet Explorer, Firefox, Opera, Safari, Google Chromeなどの主要なブラウザでサポートされている。document 関数を使うことで、XInclude に似た効果が得られる。
サポートしているブラウザの例
[編集]![]() | この節の加筆が望まれています。 |
2009年10月現在、主要なWeb ブラウザはXInclude をサポートしていない。
脚注
[編集]- ^ J. Marsh, Microsoft, D. Orchard, BEA Systems, Daniel Veillard. “Included Items when parse="text": XML Inclusions (XInclude) Version 1.0 (Second Edition)”. World Wide Web Consortium. 2009年10月10日閲覧。
- ^ J. Marsh, Microsoft, D. Orchard, BEA Systems, Daniel Veillard. “Definition: acquired infoset: XML Inclusions (XInclude) Version 1.0 (Second Edition)”. World Wide Web Consortium. 2009年10月10日閲覧。
- ^ J. Marsh, Microsoft, D. Orchard, BEA Systems, Daniel Veillard. “Creating the Result: Infoset XML Inclusions (XInclude) Version 1.0 (Second Edition)”. World Wide Web Consortium. 2009年10月10日閲覧。
- ^ J. Marsh, Microsoft, D. Orchard, BEA Systems, Daniel Veillard. “references Property Fixup: Infoset XML Inclusions (XInclude) Version 1.0 (Second Edition)”. World Wide Web Consortium. 2009年10月10日閲覧。
- ^ J. Marsh, Microsoft, D. Orchard, BEA Systems, Daniel Veillard. “Relationship to XLink: XML Inclusions (XInclude) Version 1.0 (Second Edition)”. World Wide Web Consortium. 2009年10月10日閲覧。