3.3 Global vs. Local DeclarationsGlobal vs. Local Declarations
Another authoring style, applicable when all element names are
unique within a namespace, is to create schemas in which
all elements are global. This is similar in effect to the
use of <!ELEMENT> in a DTD. In the example below, we
have modified the original po1.xsd
such that all the elements are declared globally. Notice
that we have omitted the
elementFormDefault and
attributeFormDefault attributes in this example
to emphasize that their values are irrelevant when there
are only global element and attribute declarations.
NOTE:
Modified version of po1.xsd
using only global element declarations
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:po="http://www.example.com/PO1"
targetNamespace="http://www.example.com/PO1">
<element name="purchaseOrder" type="po:PurchaseOrderType"/>
<element name="shipTo" type="po:USAddress"/>
<element name="billTo" type="po:USAddress"/>
<element name="comment" type="string"/>
<element name="name" type="string"/>
<element name="street" type="string"/>
<complexType name="PurchaseOrderType">
<sequence>
<element ref="po:shipTo"/>
<element ref="po:billTo"/>
<element ref="po:comment" minOccurs="0"/>
<!-- etc. -->
</sequence>
</complexType>
<complexType name="USAddress">
<sequence>
<element ref="po:name"/>
<element ref="po:street"/>
<!-- etc. -->
</sequence>
</complexType>
<!-- etc. -->
</schema>
This "global" version of po1.xsd
will validate the instance document
po2.xml which, as we described previously, is also
schema valid against the "qualified" version of po1.xsd. In other words, both schema
approaches can validate the same, namespace defaulted,
document. Thus, in one respect the two schema approaches
are similar, although in another important respect the two
schema approaches are very different. Specifically, when
all elements are declared globally, it is not possible to
take advantage of local names. For example, you can only
declare one global element called "title". However, you can
locally declare one element called "title" that has a
string type, and is a subelement of "book". Within the same
schema (target namespace) you can declare a second element
also called "title" that is an enumeration of the values
"Mr Mrs Ms".
|