在身份约束中,我需要选择一个具有特定属性值[@type='parse']
的元素"arg"。但是我得到了错误, 表达式"action//@type"对于 XML 架构支持的 XPath 子集无效。
对于以下声明,
<xs:selector xpath="action/arg[@type='parse']"/>
完整的 XSD 文件是,
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="test">
<xs:complexType>
<xs:sequence>
<xs:element ref="page" maxOccurs="32"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="page">
<xs:complexType>
<xs:sequence>
<xs:element ref="parse"/>
<xs:element ref="action"/>
</xs:sequence>
</xs:complexType>
<xs:keyref name="arg_key_ref" refer="assert_key">
<xs:selector xpath="action/arg[@type='parse']"/>
<xs:field xpath="."/>
</xs:keyref>
<xs:key name="assert_key">
<xs:selector xpath="parse/parameter/name"/>
<xs:field xpath="."/>
</xs:key>
</xs:element>
<xs:element name="parse">
<xs:complexType>
<xs:sequence>
<xs:element ref="parameter" maxOccurs="32"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="action">
<xs:complexType>
<xs:sequence>
<xs:element ref="arg" maxOccurs="32"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="parameter">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="arg">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="type" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:schema>
提前感谢,
基肖尔。
XML
Schema 1.0 键或 keyref 的selector
和field
仅支持架构规范中定义的 XPath 的受限子集。 对于selector
:
[1] Selector ::= Path ( '|' Path )*
[2] Path ::= ('.//')? Step ( '/' Step )*
[3] Step ::= '.' | NameTest
[4] NameTest ::= QName | '*' | NCName ':' '*'
特别是,这不支持谓词。
如果可以使用 XML Schema 1.1,则支持完整的 XPath 2.0 语言。