Схема XML - Уникальное значение атрибута + значение родительского атрибута - PullRequest
0 голосов
/ 30 августа 2011

Желание написать схему, которая проверяет, является ли комбинация атрибута + атрибут родительского узла уникальной.

Иметь следующее пока

<xs:unique name="specify_req_once_in_traceability_section">
    <xs:selector xpath="./artefact/doc/relationship"/>
<xs:field xpath="@parent_sec"/>
</xs:unique>    

, но если я попытаюсьвключить parent_doc, используя .. Я получаю неожиданный токен --- Я предполагаю, что родительская ось недопустима

xml выглядит следующим образом

<?xml version="1.0" encoding="UTF-8"?>
    <root>
        <artefact>
             <doc parent_doc="fred">
                   <relationship parent_sec="125"/>          
             </doc>
             <doc parent_doc="geoff">
                   <relationship parent_sec="119"/>
                   <relationship parent_sec="118"/>
                   <relationship parent_sec="117"/> 
                   <relationship parent_sec="118"/> 
             </doc>
             <doc parent_doc="fred">
                   <relationship parent_sec="125"/>
             </doc>
             <doc parent_doc="james">
                   <relationship parent_sec="125"/>
              </doc>
          </artefact>
    </root>

1 Ответ

0 голосов
/ 31 августа 2011

Я проверил свою гипотезу в комментарии, и она работает с использованием версии xerces в JDK 6. Я немного упростил схему, но общая структура та же:

Схема

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="doc" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="relationship" maxOccurs="unbounded">
                            <xs:complexType>
                                <xs:attribute name="ps" />
                            </xs:complexType>
                        </xs:element>
                    </xs:sequence>
                    <xs:attribute name="pd" />
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
    <xs:unique name="u1">
        <xs:selector xpath="doc"/>
        <xs:field xpath="@pd"/>
        <xs:field xpath="relationship/@ps" />
    </xs:unique>
</xs:element>
</xs:schema>

Экземпляр документа

<root>
<doc pd="fred">
    <relationship ps="125" />
</doc>
<doc pd="geoff">
    <relationship ps="119" />
    <relationship ps="118" />
    <relationship ps="117" />
    <relationship ps="118" />
</doc>
<doc pd="fred">
    <relationship ps="125" />
</doc>
<doc pd="james">
    <relationship ps="125" />
</doc>
</root>

При проверке xerces выдает сообщение об ошибке:

[Ошибка]: 13: 28: Дубликат уникального значения [fred, 125] объявлен для ограничения идентичности элемента «корень».

Если вы измените отношение второго Джеймса ps на 126, документ будет подтвержден без ошибок.

...