【发布时间】:2018-05-24 02:00:15
【问题描述】:
我正在尝试为 2 个不同的 XML 消息设计一个 XSD:
<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>
【问题讨论】:
-
使用选择而不是扩展,会更简单。 w3schools.com/xml/el_choice.asp