目次へ

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

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp