using xml type attribute for derived complex types
Posted
by David Michel
on Stack Overflow
See other posts from Stack Overflow
or by David Michel
Published on 2010-05-13T12:45:28Z
Indexed on
2010/05/13
12:54 UTC
Read the original article
Hit count: 419
Hi All,
I'm trying to get derived complex types from a base type in an xsd schema.
it works well when I do this (inspired by this):
xml file:
<person
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:type="Employee">
<name>John</name>
<height>59</height>
<jobDescription>manager</jobDescription>
</person>
xsd file:
<xs:element name="person" type="Person"/>
<xs:complexType name="Person" abstract="true">
<xs:sequence>
<xs:element name= "name" type="xs:string"/>
<xs:element name= "height" type="xs:double" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="Employee">
<xs:complexContent>
<xs:extension base="Person">
<xs:sequence>
<xs:element name="jobDescription" type="xs:string" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
However, if I want to have the person element inside, for example, a sequence of another complex type, it doesn't work anymore:
xml:
<staffRecord>
<company>mycompany</company>
<dpt>sales</dpt>
<person
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:type="Employee">
<name>John</name>
<height>59</height>
<jobDescription>manager</jobDescription>
</person>
</staffRecord>
xsd file:
<xs:element name="staffRecord">
<xs:complexType>
<xs:sequence>
<xs:element name="company" type="xs:string"/>
<xs:element name="dpt" type="xs:string"/>
<xs:element name="person" type="Person"/>
<xs:complexType name="Person" abstract="true">
<xs:sequence>
<xs:element name= "name" type="xs:string"/>
<xs:element name= "height" type="xs:double" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="Employee">
<xs:complexContent>
<xs:extension base="Person">
<xs:sequence>
<xs:element name="jobDescription" type="xs:string" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:sequence>
</xs:complexType>
</xs:element>
When validating the xml with that schema with xmllint (under linux), I get this error message then:
config.xsd:12: element complexType: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}sequence': The content is not valid. Expected is (annotation?, (element | group | choice | sequence | any)*). WXS schema config.xsd failed to compile
Any idea what is wrong ?
David
© Stack Overflow or respective owner