Я пытаюсь спроектировать XSD для двух разных XML-сообщений, поступающих:
<message>
<common1>value1</common1>
<common2>value2</common2>
<common3>
<unique1>hello</unique1>
</common3>
<common4>
<unique2>bye</unique2>
</common4>
</message>
или
<message>
<common1>value1</common1>
<common2>value2</common2>
<common3>
<unique3>hey</unique3>
</common3>
<common4>
<unique4>goodbye</unique4>
</common4>
</message>
Поскольку я вижу, что они имеют общие элементы и только уникальные вложенные элементыЯ хочу создать родителя-родителя, который xsd может расширять, чтобы я мог просто беспокоиться об уникальных полях, но у меня все еще нет идеи о том, как определить common3 или 4 на родительском уровне, поэтому я определил его на дочернем xsdsчто я считаю неправильным, может кто-нибудь проверить и пролить свет на это?
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>
и
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>
и
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>