ローカル宣言とグローバル宣言
DTDでは、全ての要素がグローバルに宣言されます。つまり、すべての要素の名前は一意であり、1回しか定義で機内ということです。1つの要素はほかのいくつの要素からでも参照できるので、XML文書内では複数回使われることもありますが、XML文書内の何処で柄おいと、同じ定義が参照されることになります。
XML Schemaでは、グローバルとローカルの区別があります。要素や属性、名前付き単純/複雑型(後述するグループおよび属性グループ)などのスキーマコンポーネントがスキーマのトップレベル(xsd:schema要素のすぐした)で宣言されている場合、そのコンポーネントはグローバルとみなされ、スキーマ全体で利用できます。ただし、グローバル宣言によって、XML文書内のどこでその要素を使用できるかが決まるわけではありません。要素の定義が決まるだけです。対応するXML文書内で実際にその要素を使うには、グローバル要素宣言を明示的に参照しなければなりません。
ただし、ルート要素はこの規則の例外です。ルート要素はどこで宣言しても自動的に参照されます。
複雑型を宣言する際には、既存のグローバル宣言要素を参照することも、新しい要素を宣言して定義することもできます。
これらの新しいローカル宣言要素は、宣言した複雑型定義内でしか使用できません。スキーマ内の別の場所では使用できません。さらに、これらの要素の名前は同じ種類(グローバルまたはローカル)の要素間だけで一意であれば構いません。このようなローカル宣言要素は自動的に参照されます。つまり、それを定義した位置によって、XML文書内でその要素を使う場所も決まります。
XSDコード <?xml version="1.0" encoding="Shift_JIS" ? >
<xsd:schema xmlns:xsd="http://www.w3c.org/2000/10/XMLSchema" >
<xsd:element name="section" type="endType" / >
<xsd:element name="name" type="xsd:string" / >
<xsd:complexType name="endType" >
<xsd:sequence>
<xsd:element name="patient">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="name" minOccurs="2" / >
<xsd:element name="source" type="sourceType" / >
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
</xsd:complexType>
<xsd:complexType name="habitatType" >
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="name" minOccurs="1" maxOccurs="unbounded"/ >
<xsd:element name="source" type="sourceType" / >
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
</xsd:complexType>
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・このスキーマでは4つのコンポーネントをグローバル宣言しています。これらはxsd:schema要素hの下の第1レベルに記述しています。ルート要素(sedction)は自動的に参照されますが、name要素はルートではないので手作業で参照しなければなりません。source要素は、同じ名前で異なる定義を含む複数の要素をローカル宣言する例です。両者はコンテキストによって区別されます。グローバル要素宣言の名前は一意でなければなりません。