Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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
Xml 如何在xsd文件中使用带xpath的谓词?_Xml_Xpath_Xsd - Fatal编程技术网

Xml 如何在xsd文件中使用带xpath的谓词?

Xml 如何在xsd文件中使用带xpath的谓词?,xml,xpath,xsd,Xml,Xpath,Xsd,我正试图为下面的xml文件编写XSD文件:(它实际上是A2L文件特定部分的xml表示) 此表达式有效,并返回“M2”和“M1”。但是当我把它放在我的xsd文件中时,xsd验证器不接受它并返回这种错误: The value 'PROJECT/MODULE/CHARACTERISTIC/AXIS_DESCR/InputQuantity[. !="NO_INPUT_QUANTITY"]' of attribute 'PROJECT/MODULE/CHARACTERISTIC/AXIS_DESCR/I

我正试图为下面的
xml
文件编写
XSD
文件:(它实际上是A2L文件特定部分的
xml
表示)

此表达式有效,并返回“M2”和“M1”。但是当我把它放在我的
xsd
文件中时,
xsd
验证器不接受它并返回这种错误:

The value 'PROJECT/MODULE/CHARACTERISTIC/AXIS_DESCR/InputQuantity[. !="NO_INPUT_QUANTITY"]' 
of attribute 'PROJECT/MODULE/CHARACTERISTIC/AXIS_DESCR/InputQuantity[. !="NO_INPUT_QUANTITY"]' of identity constraint definition 'reference_InputQuantity' 
is not a valid restricted XPath expression.
这是我的
xsd
文件:

    <?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <!-- file root -->
    <xs:element name="A2lFile" type="A2lFileType">
        <xs:unique name="MEASUREMENT_Name">
            <xs:selector xpath="PROJECT/MODULE/MEASUREMENT/Name"/>
            <xs:field xpath="."/>
        </xs:unique>
        <xs:keyref name="reference_InputQuantity" refer="MEASUREMENT_Name">
            <xs:selector xpath="PROJECT/MODULE/CHARACTERISTIC/AXIS_DESCR/InputQuantity[. !=&quot;NO_INPUT_QUANTITY&quot;]"/>
            <xs:field xpath="."/>
        </xs:keyref>
    </xs:element>

    <xs:complexType name="A2lFileType">
        <xs:sequence>
            <xs:element name="PROJECT" type="projectType" maxOccurs="1"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="projectType">
        <xs:sequence>
            <xs:element name="MODULE" type="moduleType" maxOccurs="1"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="moduleType">
        <xs:sequence>
            <xs:element name="MEASUREMENT" type="measurementType" maxOccurs="unbounded"/>
            <xs:element name="CHARACTERISTIC" type="characteristicType" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="measurementType">
        <xs:sequence>
            <xs:element name="Name" type="xs:string" maxOccurs="1"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="characteristicType">
        <xs:sequence>
            <xs:element name="AXIS_DESCR" type="axis_descType"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="axis_descType">
        <xs:sequence>
            <xs:element name="InputQuantity" type="xs:string" maxOccurs="1"/>
        </xs:sequence>
    </xs:complexType>
</xs:schema>

XML模式将可用于非常简单子集的XPath表达式限制在一个范围内,并且不允许使用筛选器

我认为最直接的规避方法是将“无输入量”作为度量名称

<MEASUREMENT>
  <Name>NO_INPUT_QUANTITY</Name>
</MEASUREMENT>

无输入量

这样,过滤器就变得不必要,XPath表达式满足XML模式的约束。

可以在
元素的
XPath
属性中使用的XPath表达式受到限制。这称为XPath的选择器子集

特别是,这意味着XPath表达式:

  • 不能包含测试
  • 只能选择子体元素

感谢您的回复,但很遗憾,我无法修改xml文件的内容,另外,NO\u INPUT\u QUANTITY表达式仅与“InputQuantity”标记一起使用。那么,让我们假设xml是好的,有什么方法可以用xml或类似的东西来做这个测试吗?
    <?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <!-- file root -->
    <xs:element name="A2lFile" type="A2lFileType">
        <xs:unique name="MEASUREMENT_Name">
            <xs:selector xpath="PROJECT/MODULE/MEASUREMENT/Name"/>
            <xs:field xpath="."/>
        </xs:unique>
        <xs:keyref name="reference_InputQuantity" refer="MEASUREMENT_Name">
            <xs:selector xpath="PROJECT/MODULE/CHARACTERISTIC/AXIS_DESCR/InputQuantity[. !=&quot;NO_INPUT_QUANTITY&quot;]"/>
            <xs:field xpath="."/>
        </xs:keyref>
    </xs:element>

    <xs:complexType name="A2lFileType">
        <xs:sequence>
            <xs:element name="PROJECT" type="projectType" maxOccurs="1"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="projectType">
        <xs:sequence>
            <xs:element name="MODULE" type="moduleType" maxOccurs="1"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="moduleType">
        <xs:sequence>
            <xs:element name="MEASUREMENT" type="measurementType" maxOccurs="unbounded"/>
            <xs:element name="CHARACTERISTIC" type="characteristicType" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="measurementType">
        <xs:sequence>
            <xs:element name="Name" type="xs:string" maxOccurs="1"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="characteristicType">
        <xs:sequence>
            <xs:element name="AXIS_DESCR" type="axis_descType"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="axis_descType">
        <xs:sequence>
            <xs:element name="InputQuantity" type="xs:string" maxOccurs="1"/>
        </xs:sequence>
    </xs:complexType>
</xs:schema>
<MEASUREMENT>
  <Name>NO_INPUT_QUANTITY</Name>
</MEASUREMENT>