我想为以下xml提供XSD:
<root>
<tag>
<child1>value1_1</child1>
<child2 att="att1">value2_1</child2>
</tag>
</root>
使用以下XSD
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root" type="rootMeta"/>
<xs:element name="tag" type="tagMeta"/>
<xs:complexType name="rootMeta">
<xs:sequence>
<xs:element ref="tag" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="tagMeta">
<xs:sequence>
<xs:element name="child1" type="enum1"/>
<xs:element name="child2" type="enum2"/>
</xs:sequence>
</xs:complexType>`
<xs:simpleType name="enum1">
<xs:restriction base="xs:string">
<xs:enumeration value="value1_1"/>
<xs:enumeration value="value1_2"/>
</xs:restriction>
</xs:simpleType>
<!-- And here the problem comes -->
<xs:complexType name="enum2">
<xs:simpleContent>
<xs:restriction base="xs:string">
<xs:enumeration value="value2_1"/>
<xs:enumeration value="value2_2"/>
</xs:restriction>
</xs:simpleContent>
<xs:attribute name="att" type="attMeta" use="required"/>
</xs:complexType>
<xs:simpleType name="attMeta">
<xs:restriction base="xs:string">
<xs:enumeration value="att1"/>
<xs:enumeration value="att2"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
定义错误且验证无法完成,任何人都可以解释我如何定义 enum2 以将枚举作为值和属性?
答案 0 :(得分:0)
实现想要的一种方法可能是定义一个simpleType,然后可以扩展它以添加属性:
<xs:complexType name="enum2">
<xs:simpleContent>
<xs:extension base="enum2_text_values">
<xs:attribute name="att" type="attMeta" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
它依赖于已提到的 enum2_text_values simpleType,您可以定义如下:
<xs:simpleType name="enum2_text_values">
<xs:restriction base="xs:string">
<xs:enumeration value="value2_1"/>
<xs:enumeration value="value2_2"/>
</xs:restriction>
</xs:simpleType>