- 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パーサが区別できなくなるからです。