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[. !="NO_INPUT_QUANTITY"]"/>
<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 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[. !="NO_INPUT_QUANTITY"]"/>
<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>