我想验证xml文件,以便根据元素的值,需要一组特定的元素。
例如,我有几种类型的标签打印机:CAB,Intermec等,应使用xml文件设置哪些配置。打印机可能只有很少的常用设置,但也应该具有特定于类型的设置。
这是我当前的简化xml架构(目前仅适用于2种类型):
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="printer">
<xs:complexType>
<xs:sequence>
<xs:element name="type">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="CAB"/>
<xs:enumeration value="Intermec"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="connected" type="xs:string"/>
<xs:element name="id" type="xs:string"/>
<xs:group ref="CabSettings" minOccurs="0"/>
<xs:group ref="IntermecSettings" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:group name="CabSettings">
<xs:sequence>
<xs:element name="portname" type="xs:string"/>
<xs:element name="baudrate" type="xs:int"/>
<xs:element name="parity" type="xs:string"/>
</xs:sequence>
</xs:group>
<xs:group name="IntermecSettings">
<xs:sequence>
<xs:element name="ipaddress" type="xs:string"/>
<xs:element name="port" type="xs:integer"/>
</xs:sequence>
</xs:group>
</xs:schema>
这就是我停止的地方..我怎样才能要求根据类型元素值期望类型特定的组出现在xml中?甚至可以做这样的事情吗?可以使用XSD 1.0完成吗?
XML示例:
<printer>
<type>CAB</type>
<connected>true</connected>
<id>CAB1</id>
<portname>COM2</portname>
<baudrate>57600</baudrate>
<parity>NONE</parity>
</printer>
<printer>
<type>Intermec</type>
<connected>true</connected>
<id>Intermec1</id>
<ipaddress>127.0.0.1</ipaddress>
<port>1</port>
</printer>
您必须根据元素名称区分类型。所以,不是单个printer
元素,你有单独的CABPrinter
和IntermecPrinter
元素。您可以像现在一样继续使用元素组来合并常用的定义组件。
您可以使用条件类型分配来根据属性的值区分printer
的类型,或者您可以使用断言根据元素的值约束内容模型。