Xml 基于测试元素类型属性值的参数验证
下面给出了两个xml文件Xml 基于测试元素类型属性值的参数验证,xml,xsd,Xml,Xsd,下面给出了两个xml文件 <!-- First XML --> <?xml version="1.0"?> <test type="survey"> <parameter name="surveyname">Survey</parameter> </test> <!-- Second XML --> <?xml version="1.0"?> <test type="test">
<!-- First XML -->
<?xml version="1.0"?>
<test type="survey">
<parameter name="surveyname">Survey</parameter>
</test>
<!-- Second XML -->
<?xml version="1.0"?>
<test type="test">
<parameter name="mode">Normal</parameter>
<parameter name="rdttype"></parameter>
</test>
调查
正常的
下面是我关于使用xml模式验证上述xml文件的问题
任何人都可以帮助我编写验证这些xml文件的模式。对于此类规则,您需要XSD 1.1或XSD 1.0的一些扩展,如Schematron 下面的XSD 1.1模式验证了您提供的示例XML,并考虑了使用XSD 1.1断言列出的规则。如果删除
,它将在XSD 1.0中工作,但是您必须提供一些其他方法来强制执行规则
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" vc:minVersion="1.1">
<xs:element name="test">
<xs:complexType>
<xs:sequence>
<xs:element name="parameter" maxOccurs="2">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="name">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="mode" />
<xs:enumeration value="surveyname" />
<xs:enumeration value="rdttype" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="type" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="test" />
<xs:enumeration value="survey" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:assert test="(@type = 'survey'
and count(parameter) = 1
and parameter/@name = 'surveyname'
and parameter = 'Survey')
or (@type = 'test'
and count(parameter) = 2
and parameter[1]/@name = 'mode'
and parameter[1] = 'Normal'
and parameter[2]/@name = 'rdttype'
and parameter[2] = '')"/>
</xs:complexType>
</xs:element>
</xs:schema>