XMLでの名前空間の使用
ここでは、自分の文書をほかの誰かの文書と組み合わせる場合について考えます。
相手側のスキーマ内では、自分がグローバルに宣言した要素と同じ名前がいくつか使われています。このような場合は、2つのスキーマの要素を区別するためのスーパーラベルを作成します。例えば、自分のスキーマにはすべての要素名に「Riko」とコロンを追加し、相手の要素には「your」とコロンを追加します。これでRiko:source要素とyour:source要素を区別できるようになります。
「Riko」は一意な単語ではありません。そこでスーパーラベルの名前は、ドメイン名に基づいてURLに似た形で指定することにします。こうすれば一意性と永続性を保証できます。このスーパーラベルのことを「名前空間」名と呼びます。名前空間は、互いに関連するようその集まりのことで名前空間名によって区別されます。
ローカル宣言要素は周囲の状況によって一意に識別できるので、空間名前名を追加することはほとんどありません。
XSDコード ・・・・・・・・・・・・・・・・・・・・・
<xsd:element name="name" type="xsd:string" / >
<xsd:element name="source" type="xsd:string" / >
・・・・・・・・・・・・・・・・・・・・・
<xsd:element name="doctor">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="name"/ >
</xsd:element ref="source" / >
・・・・・・・・・・・・・・・・・・・・・
</xsd:element>
・・・・・・・・・・・・・・・・・・・・・この架空のスキーマ「MSML」では、各要素を文書のトップレベルでグローバルに宣言し、その後それらを実際に使う場所で要素の複数型定義を参照しています。
XSDコード ・・・・・・・・・・・・・・・・・・・・・
<xsd:element name="name" type="xsd:string" / >
<xsd:element name="source" type="xsd:string" / >
・・・・・・・・・・・・・・・・・・・・・
<xsd:complexType name="familyType">
<xsd:sequence>
<xsd:element ref="name" minOccurs="1" maxOccurs="unbounded />
・・・・・・・・・・・・・・・・・・・・・
<xsd:element ref="source" >
・・・・・・・・・・・・・・・・・・・・・
この怜では、すべての要素をグローバルに宣言しています。このスキーマ文書を上のスキーマ文書を組み合わせると、name要素とsource要素のデータが区別できなくなります。