HomeXML Page 5 - Doing More With XML Schemas (part 4)
Old Friends And New - XML
In this concluding article, find out all about namespaces - what they are, how they work, and how you can use schemas to make sure that they're enforced in a consistent manner.
The XML Schema specification also notes the existence of an "attributeFormDefault" attribute of the <xsd:schema> element, which lets schema authors do to attributes what the "elementFormDefault" attribute does for elements - force qualification of each attribute with a namespace prefix. Here's an example that demonstrates how this works:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="http://www.somedomain.com/ns/sw/"
xmlns:sw="http://www.somedomain.com/ns/sw/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
attributeFormDefault="qualified">
<!-- define a complex type -->
<xsd:complexType
name="starWarsEntity">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
<xsd:element
name="species" type="xsd:string"/>
<xsd:element name="language" type="xsd:string"/>
<xsd:element
name="home" type="xsd:string"/>
</xsd:sequence>
<xsd:attribute name="episode"
type="xsd:string" />
</xsd:complexType>
<!-- define the root element
and its contents -->
<xsd:element name="gallery">
<xsd:complexType>
<xsd:sequence>
<xsd:element
name="character"
type="sw:starWarsEntity" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
I've introduced a new attribute here for the <character> element - "episode"
- which lists the Star Wars episode in which the character first appeared. My use of the "attributeFormDefault" attribute ensures that every occurrence of this attribute in an XML document instance will be prefixed with a namespace - as you can see in the following XML document: