9.Namespaceの構造
本章では、Namespaceの内部構造について記述します。
- 9.1 Global とLocal
- 9.2 XML 文書内のNamespace指定
- 9.3 名前の衝突
- 9.4 qualify、unqualify
- 9.5 まとめ
9.1 Global とLocal
Namespaceは、要素や属性の名前の集合です。この「名前」には、2種類あります。GlobalなものとLocalなものです。
Global |
schema要素の直下で宣言される要素、属性、および型 |
|
---|---|---|
Local | 型定義や、ModelGroup、属性グループ定義の内容で宣言される要素、属性 | 存在するComplex Type内でのみ有効な名前 |
C言語を知っている方であれば、NamespaceのGlobalやLocalを考えるときに、C言語の「グローバル変数、ローカル変数」を思い浮かべていただければわかりやすいと思います。Globalな名前は、スキーマのどこからも参照可能ですが、スキーマ内で「唯一」の名前である必要があります。逆に、Localな名前は、存在するComplex Typeの範囲内のみで有効です。しかし、有効「範囲」が異なれば、同じ名前を複数回、使用することも可能です。C言語のローカル変数が、関数内からのみ参照可能であり、関数が異なれば、同じ名前で異なる型の変数も定義可能なのところが似ています。
注意してほしいのは「型」の存在です。XML Schemaでは、Namespaceの範囲を拡張しています。XML Namespaceの勧告では、Namespaceに含まれるのは、要素と属性の名前のみでした。XML Schemaでは、「型」の名前もNamespaceに含めました。「型」に名前をつけることにより、他のスキーマより参照することを可能にしました。
以下に例を示します。
<?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" elementFormDefault="unqualified" attributeFormDefault="unqualified"> <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> <!-- etc --> </complexType> <complexType name="USAddress> <sequence> <element name"name" type="string" /> <element name="street" type="string"/> </sequence> </complexType> <!-- etc --> </xsd:schema>
上のXML Schema文書では、6つの要素を宣言しています。purchaseOrder要素とcomment要素はschema要素の直下で宣言されています。よって、これら2つの要素はGlobal要素です。comment要素はPurchaseOrderType型定義の中で参照されています。参照することが出来るのは、comment要素がGlobal要素であるからです。また、shipTo要素とbillTo要素は、PurchaseOrderTypeの定義内で宣言されています。name要素とstreet要素もUSAddress型の定義の中で宣言されています。これより、shipTo、billTo、name、street要素はすべてLocal要素になります。