- 9.1 Global とLocal
- 9.2 XML 文書内のNamespace指定
- 9.3 名前の衝突
- 9.4 qualify、unqualify
- 9.5 まとめ
9.3 名前の衝突
最後に、ネーミングルールについて説明します。「同じNamespaceの中で、dateという名前の属性と、dateという名前の要素、両方宣言することが出来るのか」といった問題です。それについて、説明します。
まず、要素・属性・型など、その種類が異なれば、同じ名前でも衝突は起こりません。例えば、dateという名前の属性と、dateという名前の要素、両方宣言することは可能です。しかし、USAddressという名前のComplex Typeと、USAddressという名前のSimple Typeを同じNamespace内で宣言することは出来ません。
さらに、同じ種類であっても、その「有効範囲」が異なれば、名前の衝突は起こりません。例えば、USAddress型の定義の中でnameという要素を宣言して、同時にUKAddress型の定義の中で、nameという要素を宣言することも可能です。
例えば、以下のようなスキーマです。
<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.com/Paperinfo"
xmlns:pi="http://www.example.com/PO1">
<element name="paper" type="pi:PaperType"/>
<complexType name="PaperType">
<sequence>
<element name="title" type="string"/>
<elemanet name="author" type="pi:AuthorType/>
</sequence>
</complexType>
<complexType name="AuthorType”>
<sequence>
<element name"name" type="string" />
<element name="title" />
<simpleType>
<restriction base="string">
<enumeration value="Mr"/>
<enumeration value="Miss"/>
<enumeration value="Ms"/>
</restriction>
</sequence>
</complexType>
<!-- etc -->
</schema>
上の例では、PaperinfoTypeの中で、string型のtitle要素を宣言しています.さらに、AuthorType型の中で、別のtitle要素を宣言しています。AuthorTypeの中で宣言されているtitleは、"Mr"、"Miss"、"Ms"、何れかの値をとります。このように、宣言されているComplex Typeが異なれば、同じNamespace内に同じ名前の要素を複数回宣言することも可能です。ただし、この場合は、2つのtitle Local要素がunqualifiedに設定されていなければいけません。上のスキーマもelementFormDefault属性の値がunqualifiedに設定されていることに注意してください。qualifiedに設定されていると、両方とも"http://www.example.com/PAPER" Namespaceのtitle要素と認識されてしまし、XMLパーサが区別できなくなるからです。

