たとえば、こんな XML インスタンス文書があったとします。
<セミナー一覧>
<セミナー>
<テーマ>XML</テーマ>
<URL>http://www.hoge.co.jp/seminar/aaa.html</URL>
<会場>
<建物名>とあるビル</建物名>
<URL>http://www.foo.co.jp/map.html</URL>
</会場>
</セミナー>
<セミナー>
<テーマ>C#</テーマ>
<URL>http://www.hoge.co.jp/seminar/bbb.html</URL>
<会場>
<建物名>とある会社</建物名>
<URL>http://www.var.co.jp/map.html</URL>
</会場>
</セミナー>
</セミナー一覧>
URL という要素が重複しているため、下記のような XML Schema を定義することができます。
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="セミナー一覧">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="セミナー" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="テーマ" type="xsd:string"/>
<xsd:element ref="URL"/>
<xsd:element name="会場">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="建物名" type="xsd:string"/>
<xsd:element ref="URL"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="URL" type="xsd:anyURI"/>
</xsd:schema>
URL という要素が重複しているため、グローバル定義して ref で参照することにより、何度も同じ要素を定義する必要がなくなります。
何度も色々なところで同じ定義の要素が出てくる場合、これは有用だと思われるかもしれません。
しかし、要素のグローバル定義は必要以上にやってはなりません。
なぜなら「要素をグローバル定義する=ルート要素にできる」からです。
つまり上述の XML Schema に対して下記の XML インスタンス文書も妥当となってしまうのです。
<URL>http://www.another.co.jp/</URL>
XML 文書の構成を厳密に定義する場合、これは好ましくないわけです。
想定していない構造の XML インスタンス文書が妥当とされたら、システムとしてはたまりません。
<xsd:documentElement ref="グローバル宣言されている要素定義名"/>
みたいなルート要素に対して定義できる仕組みが XML Schmea にあればよかったのにと思う。