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.
Next: Different Flavours >>
More XML Articles
More By Harish Kamath, (c) Melonfire