用于具有多种结构的XML的XSD架构
问题描述:
我正在尝试编写一个XML架构来涵盖我可能遇到的许多XML条件。我有不同的子元素相同的根元素(serviceRequest)。我试图使用xs:扩展元素来定义多个版本,但它抱怨意外的元素orderInclusionCriteria等。用于具有多种结构的XML的XSD架构
我正在以正确的方式去做,还是有更好的方法来定义它?
我想过的另一种方式是在它内部有一个单一的xs:choice选项,但这看起来有点不雅。
这些XSD文件在XMLBeans中使用,如果有任何区别的话。
我已经给XML的以下2个例子:
1)
<?xml version="1.0" encoding="utf-8"?>
<serviceRequest method="GOO" debug="NO">
<sessionId sID="ABC1234567" />
<orderInclusionCriteria accountId="1234567" accountNum="1234567890" />
</serviceRequest>
2)
<?xml version="1.0" encoding="utf-8"?>
<serviceRequest method="GOO" debug="NO">
<sessionId sID="ABC1234567" />
<action aType='MakePayment'>
<makePayment accountID='CH91015165S' amount='5.00' />
</action>
</serviceRequest>
我以为我可以使用下面的架构文件:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="serviceRequest" type="ServiceRequestType" />
<xs:element name="session" type="SessionType" />
<xs:attribute name="method" type="xs:string" />
<xs:attribute name="debug" type="xs:string" />
<xs:complexType name="SessionType">
<xs:attribute name="sID" use="required">
<xs:simpleType>
<xs:restriction base="xs:string"/>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
<xs:complexType name="ServiceRequestType">
<xs:sequence>
<xs:element ref="session" />
</xs:sequence>
<xs:attribute ref="method" />
<xs:attribute ref="debug" />
</xs:complexType>
<xs:complexType name="OrderTrackingServiceRequest">
<xs:complexContent>
<xs:extension base="ServiceRequestType">
<xs:complexType>
<xs:sequence>
<xs:element name="OrderInclusionCriteria" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="Action">
<xs:complexContent>
<xs:extension base="ServiceRequestType">
<xs:complexType>
<xs:sequence>
<xs:element name="makePayment">
<xs:complexType>
<xs:attribute name="accountID" type="xs:string" />
<xs:attribute name="amount" type="xs:string" />
<xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="aType" type="xs:string" />
</xs:complexType>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>
答
尝试对不想出现的元素使用minOccurs =“0”。我想用这种方式你可以用版本解决你的问题。另外xs:choice可以在你的情况下工作