目次へ

9.4 qualify、unqualify

9.2節で、「なぜ、"unqualified"なんてものがあるのか」と疑問に思った方もいると思います。"unqualified"は、同じNamespace内で、同じ名前違う型の要素を使用したいために付け加えられた機能です。しかし、elementFormDefaultが"unqualified"に設定されている場合、どの要素がGlobalで、どの要素がLocalなのか、正確に把握しなければ、XML文書が記述できません。例えば、以下のようなスキーマがあったとします。

 
<?xml version="1.0"?>
<schema     xmlns="http://www.w3.org/2001/XMLSchema"
       targetNamespace="http://www.example.com/PO1"
            xmlns:po="http://www.example.com/PO1">

 <element name="purchaseOrder" type="po:PurchaseOrderType"/>
 <element name="comment" type="string"/>

 <complexType name="PurchaseOrderType">
  <sequence>
   <element name="shipTo" type="po:USAddress"/>
   <elemanet name="billTo" type="po:USAddress"/>
   <element ref="po:comment" minOccurs="0"/>
   <!-- etc -->
  </sequence>
  <attribute name="orderDate" type="date">
</complexType>

 <complexType name="USAddress”>
  <sequence>
   <element name"name" type="string" />
   <element name="street" type="string"/>
  </sequence>
 </complexType>

 <!-- etc -->

</schema>

上の文書には、elementFormDefault属性が設定されていません。よって、unqualifiedが設定されているのと同じです。このスキーマに沿って、文書を書くと以下のようになります。

 
<?xml version="1.0"?>
<apo:purchaseOrder xmlns:apo="http://www.example.com/PO1"
                   orderDate="1999-10-20>

 <shipTo>
  <name>Alice Smith</name>
  <street>123 Maple Street</street>
  <!--- etc. --->
 </shipTo>

 <billTo coutry="US">
  <name>Robert Smith</name>
  <street>8 Oak Avenue</street>
 </billTo>

 <apo:comment>Hurry,my lawn is going wild!</apo:comment>

 <!-- etc -->
</apo:purchaseOrder>

comment 要素には、必ずNamespace接頭辞がついている必要があります。これがGlobal要素だからです。逆に、shipTo要素やname要素にはNamespace接頭辞がついていてはいけません。これらがLocal要素だからです。しかし、このように、Namespace接頭辞をつけるかつけないかは、Schema文書を正確に理解しないと判断できません。

個人的な意見ですが、以下のように設定すると、他の人が使用しやすいスキーマになると思います。

  • Local要素はqualifiedに設定する、あるいは、Locall要素は宣言しない
  • Local属性はunqualifiedに設定する。さらに、Global属性は宣言しない

以上のルールを守ってスキーマを作成したとします。すると、スキーマに沿って文書を作成した場合は「すべての要素はNamespaceを指定する。すべての属性はNamespaceを指定しない」ということのみ、注意すればよくなります。

9.5 まとめ

  • Namespaceに属する名前には、GlobalなものとLocalなものがある。
  • XML 文書中の要素・属性のNamespaceを指定するかどうかは、XML Schemaで決定されている

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp