具有恒定字段值的XSD keyref

时间:2018-09-26 10:52:11

标签: xpath xsd xpath-1.0 xsd-1.0

以下XML文档包含许多元素a,每个元素都有一个类型和一个ID。元素typeid的组合是唯一的。它还包含元素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。如果我正确理解这一点,那么我真的很走运。谁能确认?

0 个答案:

没有答案