I am trying to design a XSD for 2 different XML message coming in:
<message>
<common1>value1</common1>
<common2>value2</common2>
<common3>
<unique1>hello</unique1>
</common3>
<common4>
<unique2>bye</unique2>
</common4>
</message>
or
<message>
<common1>value1</common1>
<common2>value2</common2>
<common3>
<unique3>hey</unique3>
</common3>
<common4>
<unique4>goodbye</unique4>
</common4>
</message>
Since i see that they have common elements and only unique nested elements, i want to create a generic parent that an xsd can extend so i can just worry about the unique fields but i still don't have an idea on how to define common3 or 4 in parent level so i have defined it on the child xsds which i think is wrong, can anyone verify and also shed any light on this?
parent.xsd:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="message">
<xs:complexType>
<xs:sequence>
<xs:element name="common1" type="xs:string"/>
<xs:element name="common2" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
and
child1.xsd:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:include schemaLocation="parent.xsd"/>
<xs:complexType>
<xs:complexContent>
<xs:extension base="message">
<xs:sequence>
<xs:element name="common3" type="common3Type" />
<xs:element name="common4" type="common4Type" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="common3Type">
<xs:sequence>
<xs:element name="unique1" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="common4Type">
<xs:sequence>
<xs:element name="unique2" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
and
child2.xsd:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:include schemaLocation="parent.xsd"/>
<xs:complexType>
<xs:complexContent>
<xs:extension base="message">
<xs:sequence>
<xs:element name="common3" type="common3Type" />
<xs:element name="common4" type="common4Type" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="common3Type">
<xs:sequence>
<xs:element name="unique3" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="common4Type">
<xs:sequence>
<xs:element name="unique4" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>