我想使用下面的XSD来验证特定的XML。同时,XSD不应该验证以下XML中的少数元素,而应该验证其他元素。
例如,示例XML是:
<args src="body">
<arg name="echo1">£*138</arg>
<arg name="echo2">a-a$138</arg>
<arg name="echo3">b-b$136</arg>
<arg name="echo4">£*136</arg>
</args>我使用的XSD是:
<xs:schema attributeFormDefault="unqualified"
elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="args">
<xs:complexType>
<xs:sequence>
<xs:element name="arg" maxOccurs="9" minOccurs="1">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="argFilter">
<xs:attribute name="name" use="required" type="codeEnumeration" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="src" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="url"/>
<xs:enumeration value="body"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:simpleType name="codeEnumeration">
<xs:restriction base="xs:string">
<xs:enumeration value="echo1"/>
<xs:enumeration value="echo2"/>
<xs:enumeration value="echo3"/>
<xs:enumeration value="echo4"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="argFilter">
<xs:restriction base="xs:string">
<xs:minLength value="0"/>
<xs:maxLength value="256"/>
<xs:pattern value="[a-zA-Z0-9 ,:?.\\\-_=%+@&!@#$%^*()\[\]+={}|\/:;,?`~'"<>]*"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>从上面的XML中,我不希望echo1和echo4被验证,但是所有其他元素都应该被验证。因此,基本上它应该允许echo1和echo4中的任何值,但是限制echo2和echo3的值来匹配模式值。如何通过修改上面的XSD来实现这一点?
发布于 2018-08-14 11:17:11
如果仅限于XSD1.0,则需要更改XML设计或验证,而不是XSD。如果您可以使用XSD1.1,那么http://www.w3.org/TR/xmlschema11-1/#cTypeAlternative将允许您根据XSD中的属性值表示轻松的验证约束,而无需更改您的XML设计。
还请参见:
https://stackoverflow.com/questions/51838692
复制相似问题