XML名前空間は、 XMLドキュメント内の要素と属性に一意の名前を与えるために使用されます。これらはW3C勧告で定義されています。[ 1 ] [ 2 ] XMLインスタンスには、複数のXML語彙からの要素名または属性名が含まれる場合があります。各語彙に名前空間が割り当てられている場合、同じ名前の要素または属性間の曖昧さを解消できます。
簡単な例として、顧客と注文された商品への参照を含むXMLインスタンスを考えてみましょう。顧客要素と商品要素の両方に、idという名前の子要素が存在する可能性があります。そのため、 id要素への参照は曖昧になります。これらを異なる名前空間に配置することで、曖昧さを解消できます。
名前空間名は、統一リソース識別子(URI)です。通常、特定の XML 語彙の名前空間に選択される URI は、その語彙を定義する作成者または組織が管理するリソース(作成者の Web サーバーのURLなど)を表します。ただし、名前空間仕様では、名前空間 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に変換すべきだと確信を持って主張する人もいた。[ 3 ]この議論の結果、W3Cは相対URIを非推奨とする裁定を下した。[ 4 ]
HTTP スキームの URL の形式をとる URI ( http://www.w3.org/1999/xhtmlなど) の使用は、HTTP プロトコルとの正式な関係がないにもかかわらず一般的です。名前空間仕様では、このような 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 ]その場合、明示的な名前空間プレフィックスのない要素は、どの名前空間にも属さないとみなされます。
属性はデフォルトの名前空間の影響を受けません。明示的な名前空間プレフィックスのない属性は、どの名前空間にも属さないものとみなされます。
仕様によって、アプリケーションへの名前空間情報の提示方法には異なるアプローチが取られている。
ほぼすべてのプログラミングモデルでは、要素または属性ノードの名前を、ローカル名、名前空間プレフィックス、名前空間URIの3つの部分からなる名前として取得できます。アプリケーションはプレフィックスの選択に特別な意味を持たせるべきではありませんが、人間が読みやすいように情報を提供しています。名前空間URIとローカル名が一致する場合、名前は等しいとみなされます。
さらに、ほとんどのモデルでは、特定の要素に対してどの名前空間が宣言されているかを判断する方法が提供されています。この情報は、一部のXML語彙では、修飾名(名前空間接頭辞を含む)が要素や属性の内容だけでなく、それらの名前にも含まれることを許可しているため必要です。この情報を提供する主な方法は3つあります。