blob: f2c141ecb7d003fbd4b0a45e6ed8b6053ad2a9ec [file] [log] [blame]
<xdoc>
<properties>
<title>:: Apache XmlSchema Tutorial ::</title>
</properties>
<body>
<section name="Contents">
<ul>
<li><a href="#intro">Introduction</a></li>
<li><a href="#dependencies">Structure and Dependencies</a></li>
<li><a href="#reading">Reading a Schema</a></li>
<li><a href="#navigating">Navigating the Schema Model</a></li>
<li><a href="#printing">Printing the Schema Model</a></li>
<li><a href="#conclusion">Conclusion</a></li>
</ul>
</section>
<a name="intro"></a>
<section name="Introduction">
<p>Commons XML Schema model is a general purpose schema model that can be
used when a Java object tree representation of an Xml schema is required.
This short tutorial explains how the Commons XML Schema can be utilized.</p>
<a name="dependencies"></a>
</section>
<section name="Structure and Dependencies">
<p>The core commons XML Schema classes have <strong>no</strong> third party
dependencies. However it depends on the XMLUnit and JUnit libraries for unit
testing, and the maven build uses the StAX API libraries to access the
javax.xml.namespace.QName class (which is not part of the JDK). Also the
serialization mechanism uses the DOM serialization mechanism, hence the JDK
has to be 1.4 and upwards.</p>
<p>The structure of the commons XMLSchema model is quite straightforward. It
has a strict specification bound hierarchy of classes that represents each
and every schema component. It is not based on an interface-implementation
model which allows extensions and different implementations. However, the
schema specification is quite stable and complete, hence a change is
unlikelyl, which makes the commons XmlSchema sufficient for almost all needs
of schema handling.</p>
</section>
<section name="Reading a Schema">
<a name="reading"></a>
<p>The reader for the XML Schema model is called the SchemaCollection
(org.apache.ws.commons.schema.XmlSchemaCollection). It has a
<em>read</em> method that returns a XmlSchema object which represents the
whole schema. The XmlSchema instance returned can be used to access types and
elements of the relevant schema by their qualified name.</p>
<p>The <em>read</em> method has a parameter to pass in a validating event
handler. The validating event handler can be used to pass in the custom
validating procedures. However, this particular handler has no effect on the
reading of the schema yet, and it is not a feature in this release of Commons
XML Schema. The following code fragment shows how a file can be read through
the SchemaCollection.</p>
<source><pre>
InputStream is = new FileInputStream(fileName);
XmlSchemaCollection schemaCol = new XmlSchemaCollection();
XmlSchema schema = schemaCol.read(new StreamSource(is), null);</pre></source>
<p>Note that null is passed for the validating handler since it has no effect
yet.</p>
</section>
<a name="navigating"></a>
<section name="Navigating the Schema Model">
<p>Navigation of the model once the XmlSchema model is obtained is also quite
straight forward. All top level elements and types are available through the
schema object as either
<code>org.apache.ws.commons.schema.XmlSchemaObjectTable</code> instances or
can be accessed directly if it can have a QName reference. For example, if
the qualified name of an element is known, then getElementByName method can
be used to extract the XmlSchemaElement object directly from the schema
object. The following code sample shows how such direct methods can be used
to extract schema objects</p>
<source><pre>XmlSchemaType schemaType = schema.getTypeByName(TYPE_QNAME);
XmlSchemaElement elem = schema.getElementByName(ELEMENT_QNAME);</pre></source>
<p>Note that the TYPE_QNAME and ELEMENT_QNAME represents QName objects.</p>
<a name="printing"></a>
<h2>Printing the Schema Model</h2>
<p>Printing of the model once the XmlSchema model has been modified or
constructed in-memory, is also quite straightforward. Schema object has a
<em>write</em> method that can use an output stream.</p>
<p>The following code fragment shows how to write the schema into the System
output stream.</p>
<source><pre>schema.write(System.out);</pre></source>
</section>
<!--<h2>Advanced Topics</h2>-->
<a name="conclusion"></a>
<section name="Conclusion">
<p>Commons XmlSchema is quite a versatile piece of code that can be used to
manipulate and generate XML Schemas. It has minimum dependencies and can be
used inside another project with ease.</p>
</section>
</body>
</xdoc>