以下XML文档包含许多元素a
,每个元素都有一个类型和一个ID。元素type
和id
的组合是唯一的。它还包含元素a1_list
,该元素应该具有引用ID类型为a
的{{1}}个元素的ID序列。
1
以下XML模式对此进行了定义:
<root>
<a><type>1</type><id>10</id></a>
<a><type>2</type><id>10</id></a>
<a><type>2</type><id>11</id></a>
<a1_list><id>10</id><id>11</id></a1_list>
</root>
现在,有一种方法可以添加一个键引用,以强制执行以下限制:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="a" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="type" type="xs:int"/>
<xs:element name="id" type="xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="a1_list">
<xs:complexType>
<xs:sequence maxOccurs="unbounded">
<xs:element name="id" type="xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:key name="a_key">
<xs:selector xpath="a"/>
<xs:field xpath="type"/>
<xs:field xpath="id"/>
</xs:key>
</xs:element>
</xs:schema>
中的id
元素指向类型为{{1 }}?我尝试过:
a1_list
但是根据xmllint,这不是有效的键引用:
a
更新:我也尝试只为1
创建一个密钥,但这也行不通。
<xs:keyref name="a_ref" refer="a_key">
<xs:selector xpath="a1_list/id"/>
<xs:field xpath="."/>
<xs:field xpath="1"/>
</xs:keyref>
给予
> xmllint --noout --schema test.xsd test.xml
test.xsd:31: element field: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}field', attribute 'xpath': The XPath expression '1' could not be compiled.
WXS schema test.xsd failed to compile
我也看过https://www.w3.org/TR/xmlschema-1/#c-selector-xpath。如果我正确理解这一点,那么我真的很走运。谁能确认?