XSD 元素和属性的枚举
XSD enumerations on both element and attribute
我有一个 XML 标签,其中包含属性和内容。
而我想查看几个可能的属性和内容。
我的XML:
<Filter>
<Value type="!NULL">AAA.BBB</Value>
<Value type="!BLANK">XXX.YYY</Value>
<Value type="!EMPTY">AAA.BBB</Value>
<Value type="!Content">XXX.YYY</Value>
</Filter>
我的XSD:
<xs:complexType name="ValueType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="type" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="!NULL" />
<xs:pattern value="!BLANK" />
<xs:pattern value="!EMPTY" />
<xs:pattern value="!Content" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
有了这个 XSD 我验证了属性...但是我怎样才能扩展它并强制它验证像 "AAA.BBB" 和 "XXX.YYY" 这样的内容?
下面的XSD演示了如何在属性和元素内容上使用枚举,
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Filter">
<xs:complexType>
<xs:sequence>
<xs:element name="Value" maxOccurs="unbounded" type="ValueType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="ValueType">
<xs:simpleContent>
<xs:extension base="ValueContentType">
<xs:attribute name="type" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="!NULL" />
<xs:pattern value="!BLANK" />
<xs:pattern value="!EMPTY" />
<xs:pattern value="!Content" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:simpleType name="ValueContentType">
<xs:restriction base="xs:string">
<xs:pattern value="AAA.BBB" />
<xs:pattern value="XXX.YYY" />
<xs:pattern value="AAA.BBB" />
<xs:pattern value="XXX.YYY" />
</xs:restriction>
</xs:simpleType>
</xs:schema>
并将验证您的 XML,
<?xml version="1.0" encoding="UTF-8"?>
<Filter xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="try2.xsd">
<Value type="!NULL">AAA.BBB</Value>
<Value type="!BLANK">XXX.YYY</Value>
<Value type="!EMPTY">AAA.BBB</Value>
<Value type="!Content">XXX.YYY</Value>
</Filter>
成功,按要求对属性和元素内容强制枚举。
我有一个 XML 标签,其中包含属性和内容。 而我想查看几个可能的属性和内容。
我的XML:
<Filter>
<Value type="!NULL">AAA.BBB</Value>
<Value type="!BLANK">XXX.YYY</Value>
<Value type="!EMPTY">AAA.BBB</Value>
<Value type="!Content">XXX.YYY</Value>
</Filter>
我的XSD:
<xs:complexType name="ValueType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="type" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="!NULL" />
<xs:pattern value="!BLANK" />
<xs:pattern value="!EMPTY" />
<xs:pattern value="!Content" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
有了这个 XSD 我验证了属性...但是我怎样才能扩展它并强制它验证像 "AAA.BBB" 和 "XXX.YYY" 这样的内容?
下面的XSD演示了如何在属性和元素内容上使用枚举,
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Filter">
<xs:complexType>
<xs:sequence>
<xs:element name="Value" maxOccurs="unbounded" type="ValueType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="ValueType">
<xs:simpleContent>
<xs:extension base="ValueContentType">
<xs:attribute name="type" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="!NULL" />
<xs:pattern value="!BLANK" />
<xs:pattern value="!EMPTY" />
<xs:pattern value="!Content" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:simpleType name="ValueContentType">
<xs:restriction base="xs:string">
<xs:pattern value="AAA.BBB" />
<xs:pattern value="XXX.YYY" />
<xs:pattern value="AAA.BBB" />
<xs:pattern value="XXX.YYY" />
</xs:restriction>
</xs:simpleType>
</xs:schema>
并将验证您的 XML,
<?xml version="1.0" encoding="UTF-8"?>
<Filter xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="try2.xsd">
<Value type="!NULL">AAA.BBB</Value>
<Value type="!BLANK">XXX.YYY</Value>
<Value type="!EMPTY">AAA.BBB</Value>
<Value type="!Content">XXX.YYY</Value>
</Filter>
成功,按要求对属性和元素内容强制枚举。