目次へ

9.Namespaceの構造

本章では、Namespaceの内部構造について記述します。

9.1 Global とLocal

Namespaceは、要素や属性の名前の集合です。この「名前」には、2種類あります。GlobalなものとLocalなものです。

Global

schema要素の直下で宣言される要素、属性、および型

  1. スキーマ全体より参照可能
  2. ルート要素に使用可能
  3. ref属性を持たない
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要素になります。

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp