XML名前空間は、 XML文書内で一意の名前を持つ要素と属性を提供するために使用されます。これらはW3C勧告で定義されています。[1] [2] XMLインスタンスには、複数のXML語彙の要素名または属性名を含めることができます。各語彙に名前空間を与えると、同じ名前の要素または属性間の曖昧さを解決できます。
簡単な例として、顧客と注文された製品への参照を含む XML インスタンスを考えてみましょう。顧客要素と製品要素の両方に、idという名前の子要素を含めることができます。そのため、 id要素への参照はあいまいになります。異なる名前空間に配置すると、あいまいさが解消されます。
名前空間名
名前空間名は、統一リソース識別子(URI)です。通常、特定の XML ボキャブラリの名前空間に選択された URI は、作成者の Web サーバーのURLなど、そのボキャブラリを定義した作成者または組織の管理下にあるリソースを表します。ただし、名前空間の仕様では、名前空間 URI を使用して情報を取得することは要求も推奨もされていません。名前空間 URI は、XML パーサーによって文字列として扱われるだけです。たとえば、http://www.w3.org/1999/xhtml のドキュメント自体にはコードは含まれていません。これは、人間の読者にXHTML名前空間を説明するだけです。名前空間を識別するために、単純な文字列 ("xhtml" など) ではなく、URI ("http://www.w3.org/1999/xhtml" など) を使用すると、異なる名前空間で重複した識別子が使用される可能性が低くなります。
名前空間 URI という用語は広く使用されていますが、W3C 勧告ではこれを名前空間名と呼んでいます。仕様では、名前空間名の正確な規則について完全に規定されているわけではなく (名前空間名が有効なUniform Resource Identifierでない文書をパーサーが拒否しなければならないとは明示的に述べられていません)、多くの XML パーサーでは任意の文字列を使用できます。勧告のバージョン 1.1 では、名前空間名は国際化リソース識別子となり、実際にはほぼすべての XML ソフトウェアで既に受け入れられている非 ASCII 文字の使用が許可されます。ただし、名前空間 URIという用語は、一般的な用法としてだけでなく、W3C やその他の多くの仕様でも引き続き使用されています。
名前空間勧告の公開後、相対URIをどのように扱うべきかについて激しい議論が交わされました。相対URIは単純に文字列として扱うべきだと激しく主張する人もいれば、文書のベースURIに対して解決することで絶対URIに変換すべきだと確信を持って主張する人もいました。[3]議論の結果、W3Cは相対URIを非推奨とする判決を下しました。[4]
HTTP プロトコルとの正式な関係がないにもかかわらず、http スキームの URL 形式 ( http://www.w3.org/1999/xhtmlなど) の URI の使用は一般的です。名前空間仕様では、このような URL が参照解除された場合 (つまり、ソフトウェアがこの場所からドキュメントを取得しようとした場合) に何が起こるかについては規定されていません。一部のユーザーが採用している 1 つの慣例は、その場所にRDDLドキュメントを配置することです。[5]ただし、一般的に、ユーザーは名前空間 URI が Web 上のドキュメントのアドレスではなく、単なる名前であると想定する必要があります。
名前空間宣言
XML 名前空間は、予約済みの XML 属性xmlnsまたはを使用して宣言されます。その値は有効な名前空間名である必要があります。
xmlns:prefix
たとえば、次の宣言は、「xhtml:」プレフィックスを XHTML 名前空間にマップします。
xmlns:xhtml="http://www.w3.org/1999/xhtml"
名前がプレフィックス「xhtml:」で始まる要素または属性は、その要素または属性の祖先に上記の名前空間宣言がある場合、XHTML 名前空間内にあるとみなされます。
デフォルトの名前空間を宣言することもできます。例:
xmlns="http://www.w3.org/1999/xhtml"
この場合、名前空間プレフィックスのない要素は、その要素またはその祖先に上記のデフォルトの名前空間宣言がある場合、XHTML 名前空間内にあると見なされます。
スコープ内にデフォルトの名前空間宣言がない場合、名前空間名には値がありません。[6]その場合、明示的な名前空間プレフィックスを持たない要素は、どの名前空間にも存在しないものとみなされます。
属性はデフォルトの名前空間の影響を受けません。明示的な名前空間プレフィックスのない属性は、どの名前空間にも属さないものと見なされます。
API と XML オブジェクト モデルの名前空間
名前空間情報をアプリケーションに提示する方法については、仕様によって異なるアプローチが採用されています。
ほぼすべてのプログラミング モデルでは、要素または属性ノードの名前を、ローカル名、名前空間プレフィックス、および名前空間 URI の 3 つの部分からなる名前として取得できます。アプリケーションではプレフィックスの選択に意味を持たせないようにする必要がありますが、この情報は人間の読者にとって役立つ可能性があるため提供されています。名前空間 URI とローカル名が一致する場合、名前は等しいとみなされます。
さらに、ほとんどのモデルでは、特定の要素に対してどの名前空間が宣言されているかを判断する方法が用意されています。一部の XML ボキャブラリでは、名前空間プレフィックスを含む修飾名を要素または属性の名前だけでなく、その内容にも表示できるため、この情報が必要になります。この情報を提供する主な方法は 3 つあります。
- 「xmlns」または「xmlns:xxx」という名前の属性ノードとして、ソース XML ドキュメントに記述されている名前空間とまったく同じです。これがDOMによって提示されるモデルです。
- 名前空間宣言として: 属性とは区別されますが、ソース XML ドキュメント内の関連する属性と 1 対 1 で対応します。これはJDOMによって提示されるモデルです。
- スコープ内名前空間バインディングとして: このモデルでは、アプリケーションは、特定の要素のスコープ内にある名前空間を判別できますが、実際の宣言が含まれている要素を判別することはできません。これは、XPath、XSLT、およびXQueryで使用されるモデルです。
参照
参考文献
- ^ Bray, Tim; Dave Hollander; Andrew Layman; Richard Tobin; Henry S. Thompson (2009 年 12 月)。「Namespaces in XML 1.0」。W3C。2010年10 月 9 日閲覧。
- ^ 「XML およびセマンティック Web W3C 標準タイムライン (v.1.2)」(PDF)。
- ^ Dodds, Leigh (2000 年 5 月 24 日)。「戦場からのニュース」O'Reilly Media, Inc.
- ^ Connolly, Dan (2000 年 9 月 11 日)、名前空間宣言における相対 URI 参照に関する W3C XML 全体会議決定
- ^ Harold, Elliotte Rusty (2001 年 2 月 20 日). 「RDDL Me This: 名前空間 URL が特定するものは何ですか?」. 2017 年 5 月 7 日時点のオリジナルよりアーカイブ。
- ^ 「XML 1.0 の名前空間 (第3版)」。W3C 。 2017年4月28日閲覧。
外部リンク
- XML 1.0 の名前空間 (第 3 版)
- XML 1.1 の名前空間 (第 2 版)
- 名前空間クラッシュコース (Mozilla Developer Network)
