如何在XSD中针对xml节点值进行验证';s邻居xml节点值
假设在XSD中定义了一个元素“answer”:如何在XSD中针对xml节点值进行验证';s邻居xml节点值,xml,xsd,Xml,Xsd,假设在XSD中定义了一个元素“answer”: <xs:element name="answer" minOccurs="1" maxOccurs="1"> <xs:complexType> <xs:attribute name="name" use="required"> <xs:simpleType&
<xs:element name="answer" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:attribute name="name" use="required">
<xs:simpleType>
<xs:restriction base="answer"/>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
在同一文档中,我们有一个元素“语言”定义为:
<xs:element name="language" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:attribute name="name" use="required">
<xs:simpleType>
<xs:restriction base="answer"/>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
它们都有一个条目
其中“答案”是预定义值的枚举
因此,我需要验证是否存在名为'some_answer'的“answer”节点
还存在名为'some_answer'的“answer”节点
例如:
<answer name="some_answer"/>
<language name="some_answer"/>
您不能在XML模式中执行此类验证-您不能引用其他节点的值,也不能在存在(或缺少)同级节点时要求一个节点存在
这类验证可能由其他验证检查器处理,例如-但常规XML模式无法做到这一点。我还没有尝试过,但使用XML模式中的key和keyref元素应该可以做到这一点。不过,您需要在两个方向上定义键/键引用关系 语言->答案之间的关系定义如下:
<xs:key name="answerKey">
<xs:selector xpath="/answer"/>
<xs:field xpath="@name"/>
</xs:key>
<xs:keyref name="languageRef" refer="answerKey">
<xs:selector xpath="/language"/>
<xs:field xpath="@name"/>
</xs:keyref>
然后在另一个方向定义它:
<xs:key name="languageKey">
<xs:selector xpath="/language"/>
<xs:field xpath="@name"/>
</xs:key>
<xs:keyref name="answerRef" refer="languageKey">
<xs:selector xpath="/answer"/>
<xs:field xpath="@name"/>
</xs:keyref>
请参见和谢谢。我将使用XNavigator验证它。