Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在XSD中针对xml节点值进行验证';s邻居xml节点值_Xml_Xsd - Fatal编程技术网

如何在XSD中针对xml节点值进行验证';s邻居xml节点值

如何在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&

假设在XSD中定义了一个元素“answer”:

                <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验证它。