The elementFormDefault
attribute must have the value
qualified to indicate that the locally defined elements—i.e.,
TITLE
,
PHOTO
, COMPOSER
, PRODUCER
, PUBLISHER
,
YEAR
, and ARTIST
but not
SONG
—are
qualified.
Globally defined elements such as SONG
are always
qualified by the target namespace
The default value of elementFormDefault
is unqualified.
This is exactly backwards from what it should be.
The default value of attributeFormDefault
is unqualified.
This is correct.
This mess was caused by an misguided attempt to make local elements and attributes equivalent.
Simplest approach: either don't use namespaces at all
or make sure all elements are namespace qualified and set
elementFormDefault="qualified"
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.cafeconleche.org/namespace/song"
xmlns="http://www.cafeconleche.org/namespace/song"
elementFormDefault="qualified"
attributeFormDefault="unqualified"
>
<xsd:element name="SONG" type="SongType"/>
<xsd:complexType name="SongType">
<xsd:sequence>
<xsd:element name="TITLE" type="xsd:string"/>
<xsd:element name="PHOTO" type="PhotoType"
minOccurs="0"/>
<xsd:element name="COMPOSER" type="xsd:string"
maxOccurs="unbounded"/>
<xsd:element name="PRODUCER" type="xsd:string"
minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="PUBLISHER" type="xsd:string"
minOccurs="0"/>
<xsd:element name="YEAR" type="xsd:gYear"/>
<xsd:element name="ARTIST" type="xsd:string"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="PhotoType">
<xsd:complexContent>
<xsd:restriction base="xsd:anyType">
<xsd:attribute name="ALT" type="xsd:string"/>
<xsd:attribute name="WIDTH" type="xsd:positiveInteger"/>
<xsd:attribute name="HEIGHT" type="xsd:positiveInteger"/>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</xsd:schema>