元素具有不同父元素的XSD选择验证
是否有一种方法可以使用选项(或其他技术)进行验证,其中至少需要两个具有不同父项的值中的一个。例如元素具有不同父元素的XSD选择验证,xsd,xsd-validation,Xsd,Xsd Validation,是否有一种方法可以使用选项(或其他技术)进行验证,其中至少需要两个具有不同父项的值中的一个。例如 <?xml version="1.0" encoding="UTF-8"?> <DOC> <GROUP1> <VAL1>TEST</VAL1> <DATE1>20130306</DATE1> </GROUP1> <GROUP2>
<?xml version="1.0" encoding="UTF-8"?>
<DOC>
<GROUP1>
<VAL1>TEST</VAL1>
<DATE1>20130306</DATE1>
</GROUP1>
<GROUP2>
<VAL2>TEST2</VAL2>
<DATE2>20130405</DATE2>
</GROUP2>
</DOC>
试验
20130306
测试2
20130405
如何验证此文档是否至少包含DATE1和/或DATE2中的一个?i、 e.如果DATE1和DATE2都为空,则文档无效。无法在XSD 1.0中完成。您必须使用Schematron扩展XSD 1.0,或者移动到XSD 1.1(非常有限的支持)并使用断言 根据您的描述,下面是使用XSD 1.1的一种可能方法(空值,因此我假设DATEx是必填字段):
这在XSD 1.0中无法完成。您必须使用Schematron扩展XSD 1.0,或者移动到XSD 1.1(非常有限的支持)并使用断言 根据您的描述,下面是使用XSD 1.1的一种可能方法(空值,因此我假设DATEx是必填字段):
<?xml version="1.0" encoding="utf-8"?>
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)-->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="DOC">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="GROUP1">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="VAL1" type="xsd:string"/>
<xsd:element name="DATE1" type="date"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="GROUP2">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="VAL2" type="xsd:string"/>
<xsd:element name="DATE2" type="date"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:assert test="string-length(concat(GROUP1/DATE1, GROUP2/DATE2)) gt 0"/>
</xsd:complexType>
</xsd:element>
<xsd:simpleType name="date">
<xsd:restriction base="xsd:string">
<xsd:pattern value="|[0-9]{8}"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>