計算処理分野において,"名前空間"という用語は慣用的に名前の 集合,すなわち重複を含まない集まり,を指す。しかし,XMLマーク付けの中で使う名前をこの名前空間として扱うことは,その有用性を著しく損なうことになる。XML文書の中でこれら名前を使用する主な目的は,問合せ用処理系,スタイルシートを参照するレンダリングエンジン,スキーマを参照して妥当性を検証するプロセサなどのソフトウェアモジュールによって,文書の論理的構造の識別を可能とすることにある。次に例を示す。
<section><title>Book-Signing Event</title> |
この例では,マーク付けの中にtitle
という名前が3回出現し,明らかに名前だけでは,ソフトウェアモジュールが正しい処理を行えるための充分な情報が提供されていない。
他の問題となる領域は,次の例が示すとおり,"大域的"な属性の利用に由来する。この例は,CSSスタイルシートを使って表示されるXML文書の断片である。
<RESERVATION> |
この場合,CLASS
属性は,運賃の基準を示し, "J","Y"及び"C"
という値をとり,あらゆるセマンティクスのレベルにおいて,HTML:CLASS
属性とは区別される。
HTML:CLASS
の方は,限定的な要素レパートリをサブクラス化によって克服する手段として,
HTMLにおける構文的な豊富さをシミュレートするために使用している。
XML1.0は,"大域的"属性を宣言するための組込みの方法を提供しない。HTMLのCLASS
属性などの項目は,その自然言語の記述及びHTMLアプリケーションによる解釈だけにおいて大域的となる。しかし,それらの属性は,名前が一意的であるという他とは違う重要な特徴をもち,多様なアプリケーションで共通的に出現する。
修飾された名前及び修飾されない名前の両方を,その意図する目的に見合うという点で役立つものとするために,XML名前空間の中に出現する名前を,名前空間の区画という幾つかの共通部分をもたない従来の(すなわち集合構造の)名前空間の一つに属するものとして識別する。ここで,区画は次による。
あるXML名前空間の中の要素型は,すべてこの区画の中に出現する。それぞれは,一意なローカル名をもつ。名前空間名とローカル名との組合せが,要素型を一意に識別する。
この区画は,この名前空間の中で大域的なものとして定義される属性すべての名前を含む。大域的な属性に要求されるただ一つの特徴は,その名前が大域的な属性を含む区画において一意的となることとする。この標準情報(TR)では,それら属性の適正な利用法に関して何も示さない。名前空間名と属性名との組合せは,大域的な属性を一意に識別する。
すべての要素型を含む区画における型はそれぞれ,その要素のために提供された修飾されない属性の名前が出現する一つの関連付けられた名前空間をもつ。一つの要素上に属性名が重複して出現することは,XML1.0によって禁止されるので,これは従来の名前空間となる。要素型付き属性名と名前空間名との組合せで,一意に,修飾されない各属性を識別する。
この標準情報(TR)に適合するXML文書では,すべての修飾された(接頭辞付きの)属性の名前は,大域的な属性を含む区画に割り当てられ,すべての修飾されない属性の名前は,適当な要素型ごとの区画に割り当てられる。
規則を指定し比較を行う際の便宜のために,XML文書のそれぞれの要素型及び属性名に対して,要素構文で表わされる展開形式を定義する。
展開された要素型は,型ExpEType
の内容をもたないXML要素として表現する。これは,その型のLocalPart
を与える一つの必須なtype
属性と,要素が修飾されている場合にその名前空間名を与える一つのオプションのns
属性とをもつ。
展開された属性名は,型ExpAName
の内容をもたないXML要素として表現する。これは,名前を与える一つの必須なname
属性をもつ。属性が大域的である場合には,
名前空間名を与える一つの必須なns
属性をもつ。大域的でない場合には,属性が指定された要素の型を与える一つの必須な
eltype
属性と,属性が指定された要素の名前空間名が既知の場合には,それを与える一つのオプションのelns
属性とをもつ。
前例をもとに若干の変形を行うことによって,展開された要素型及び属性名の動作を示す。次の二つのXML記述例に続けて,それぞれ名前の展開を示す表を与える。
例1
<!-- 1 --> <section xmlns='urn:com:books-r-us'> |
例1における名前は,次のとおりに展開される。
行 | 名前 | 展開後 |
1 | section | <ExpEType type="section" ns="urn:com:books-r-us" /> |
2 | title | <ExpEType type="title" ns="urn:com:books-r-us" /> |
3 | signing | <ExpEType type="signing"
ns="urn:com:books-r-us" /> |
4 | author | <ExpEType type="author" ns="urn:com:books-r-us" /> |
4 | title | <ExpAName name='title' eltype="author"
elns="urn:com:books-r-us" /> |
4 | name | <ExpAName name='name' eltype="author" elns="urn:com:books-r-us" /> |
5 | book | <ExpEType type="book" ns="urn:com:books-r-us" /> |
5 | title | <ExpAName name='title' eltype="book" elns="urn:com:books-r-us" /> |
5 | price | <ExpAName name='price' eltype="book" elns="urn:com:books-r-us" /> |
例2
<!-- 1 --> <RESERVATION xmlns:HTML="http://www.w3.org/TR/REC-html40"> |
例2における名前は,次のとおりに展開される。
行 | 名前 | 展開後 |
1 | RESERVATION | <ExpEType type="RESERVATION" /> |
2 | NAME | <ExpEType type="NAME" /> |
2 | HTML:CLASS | <ExpAName name="CLASS" ns=http://www.w3.org/TR/REC-html40 /> |
3 | SEAT | <ExpEType type="SEAT" /> |
3 | CLASS | <ExpAName name="CLASS" eltype="SEAT" /> |
3 | HTML:CLASS | <ExpAName name="CLASS" ns="http://www.w3.org/TR/REC-html40" /> |
4 | HTML:A | <ExpEType type="A" ns="http://www.w3.org/TR/REC-html40" /> |
4 | HREF | <ExpAName name="HREF" eltype="A" elns="http://www.w3.org/TR/REC-html40" /> |
5 | DEPARTURE | <ExpEType type="DEPARTURE" /> |
"5.3 属性の一意性"で示した制約は,どの要素も等価な展開名をもつ属性を二つはもたない,すなわち,属性及び値の同じ対をもたないことを要求して,実装してよい。