Equivalent ways to declare an element with string content and an attribute
"Costello, Roger L." <[email protected]> Tue, 18 Dec 2012 12:41:58 +0000
| Newsgroups | gmane.text.xml.schema.devel |
|---|---|
| Message-ID | <[email protected]> |
Hi Folks,
Suppose that you want to create a <comment> element. Its content is string data and it has an attribute, xml:lang.
Here is a sample instance:
<comment xml:lang="en">This is a comment</comment>
One way to declare the <comment> element is as a complexType with simpleContent:
<xs:element name="comment">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute ref="xml:lang" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
Interestingly, there is a second way. Declare the <comment> element as a complexType with mixed content:
<xs:element name="comment">
<xs:complexType mixed="true">
<xs:sequence/>
<xs:attribute ref="xml:lang" use="required" />
</xs:complexType>
</xs:element>
Those are two equivalent ways of declaring an element with string content and an attribute.
Neat!
For the second way, notice the empty <sequence> element. From my reading of section 3.4.2.3.3 (bullet 3 in the mapping summary box) it appears that anything but an empty <sequence> element is an invalid schema. Thus, an empty <choice> or <all> element is invalid. However, when I replace the <sequence/> element with <choice/> or <all/> I get no error. Is my schema validator in error, or am I misinterpreting the specification?
/Roger