XSD keyref с постоянным значением поля
Следующий документ XML содержит ряд элементов a
у каждого есть тип и идентификатор. Сочетание элементов type
а также id
уникален Он также содержит элемент a1_list
который должен содержать последовательность ссылок на идентификаторы a
элементы типа 1
,
<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-схема определяет это:
<?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
элемент в a1_list
указывает на действительный идентификатор 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:
> 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
Обновление: я также пытался создать ключ для просто a[type='1']
но это тоже не работает.
<xs:key name="a1_key">
<xs:selector xpath="a[type='1']"/>
<xs:field xpath="id"/>
</xs:key>
дает
> xmllint --noout --schema ~/test.xsd ~/test.xml
test.xsd:29: element selector: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}selector', attribute 'xpath': The XPath expression 'a[type='1']' could not be compiled.
WXS schema test.xsd failed to compile
Я также взглянул на https://www.w3.org/TR/xmlschema-1/. Если я правильно понимаю, мне действительно не повезло. Кто-нибудь может подтвердить?