Understanding XML Schema - Dealing With The Ref (
Page 8 of 12 )
Now, while it's certainly possible
to build a schema in the manner just described, with the schema definition following
the structure of the document instance, such a schema can prove difficult to maintain
and read with long and complex documents. Consequently, the XML Schema specification
allows for an alternative method of schema construction, whereby elements and
attributes can be defined separately and then referenced wherever required.
An example might help to make this clearer - consider the following revision
of the previous example:
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element
name="title" type="xsd:string"/>
<xsd:element name="release_date" type="xsd:date"/>
<xsd:element
name="rating" type="xsd:integer"/>
<xsd:attribute name="genre" type="xsd:string"/>
<xsd:attribute
name="sex" type="xsd:string"/>
<xsd:element name="person">
<xsd:complexType>
<xsd:simpleContent>
<xsd:restriction
base="xsd:string">
<xsd:attribute ref="sex" />
</xsd:restriction>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
<xsd:element
name="cast">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="person"
maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<!--
it all comes together here -->
<xsd:element name="movie">
<xsd:complexType>
<xsd:sequence>
<xsd:element
ref="title"/>
<xsd:element ref="cast"/>
<xsd:element ref="release_date"
maxOccurs="1" minOccurs="0"/>
<xsd:element ref="rating"/>
</xsd:sequence>
<xsd:attribute
ref="genre"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>
In this form of construction, each element and attribute is defined separately
and can be referenced by any other element definition via the "ref" attribute.
This type of schema definition is much easier to read than the previous one.