XML Schema で定義される要素にはグローバル要素 (Global elements) とローカル要素 (Local elements) とが存在する。まずは以下の XML Schema を見てみる。
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.yt3.info/book">
<xsd:element name="book">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="title" type="xsd:string"/>
<xsd:element name="author" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
ここで schema 要素の直下で宣言されている book 要素がグローバル要素である。対して他の title 要素と author 要素はローカル要素となる。このように XML Schema 上で xsd:element によって定義される位置により、グローバル要素とローカル要素は区別される。注意する点としてグローバル要素はデフォルトでターゲットネームスペースの資格を有しているが、ローカル要素は有していない。この点を踏まえ XML 文書のインスタンスを作成すると以下の様になる。
<?xml version="1.0"?>
<yt3:book xmlns:yt3="http://www.yt3.info/book">
<title>書籍A</title>
<author>著者A</author>
</yt3:book>
ターゲットネームスペースのプリフィックス `yt3' を付与できるのはグローバル要素である book 要素だけであり、他のローカル要素にはプリフィックスを付与できない。ただし XML Schema ではローカル要素にターゲットネームスペースの資格を与えることもでき、その場合、ローカル要素を宣言する element 要素の form 属性に `qualified' の値を指定する。また全てのローカル要素に対し、一括で資格を与えたい場合は schema 要素の elementFormDefault 属性に `qualified' の値を指定する。これらの値が省略された場合、schema 要素の elementFormDefault 属性に `unqualified' の値が指定される。
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.yt3.info/book" elementFormDefault="qualified">
<xsd:element name="book">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="title" type="xsd:string"/>
<xsd:element name="author" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
上記の様に `elementFormDefault="qualified"' が設定された場合、XML Schema のインスタンスは以下のようになる。
<?xml version="1.0"?>
<yt3:book xmlns:yt3="http://www.yt3.info/book">
<yt3:title>書籍A</yt3:title>
<yt3:author>著者A</yt3:author>
</yt3:book>
このように定義されるグローバル要素とローカル要素だが、その違いはどこにあるのだろうか。そこで今までローカル要素として宣言していた title 要素と author 要素をグローバル要素で宣言し直してみる。
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:yt3="http://www.yt3.info/book" targetNamespace="http://www.yt3.info/book">
<xsd:element name="book">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="yt3:title"/>
<xsd:element ref="yt3:author"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="title" type="xsd:string"/>
<xsd:element name="author" type="xsd:string"/>
</xsd:schema>
title 要素と author 要素を xsd:schema 要素の直下で宣言し、book 要素の中からはこれを参照することによって定義されている(ネームスペース宣言に `http://www.yt3.info/book' 自身が宣言されていることに注意しなければならない。これは xsd:element 要素の ref 属性からの参照の指定にはネームスペースを含む要素名の指定が必要なためで、自身に対しての参照を表すために必要になる)。このようにグローバル要素は XML Schema 内で自由に参照できる。実はこれは同じターゲットネームスペース内に限らず、他のターゲットネームスペースを定義する XML Schema からも参照することができる。これは他のネームスペース上で利用される際に起点となれることを意味し、逆にローカル要素は常にグローバル要素の子要素として存在することしかできないことを意味する。
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:bks="http://www.yt3.info/bookshelf"
xmlns:bk="http://www.yt3.info/book" targetNamespace="http://www.yt3.info/bookshelf">
<xsd:import namespace="http://www.yt3.info/book"/>
<xsd:element name="bookshelf">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="bk:book" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
上記の様に外部ネームスペースのグローバル要素を参照することにより、下記の様なインスタンス文書を作成できる。
<?xml version="1.0"?>
<bks:bookshelf xmlns:bks="http://www.yt3.info/bookshelf" xmlns:bk="http://www.yt3.info/book">
<bk:book>
<title>書籍A</title>
<author>著者A</author>
</bk:book>
<bk:book>
<title>書籍B</title>
<author>著者B</author>
</bk:book>
</bks:bookshelf>
このようにグローバル要素とローカル要素の特性の違いを意識することは、外部ネームスペースとの連携を意識することであり、より汎用的なサブセットを定義する点において有効となるだろう。