Ссылка на идентификатор - PullRequest
       2

Ссылка на идентификатор

1 голос
/ 07 сентября 2011

Чтобы проверить документы XML, я хотел бы знать, возможно ли сделать ссылку на значение атрибута.

У меня есть состояния с числовым значением в атрибуте ID.В этих состояниях сын находится здесь, чтобы дать переход в другое состояние.Я хотел бы поместить сюда ссылку, чтобы быть уверенным, что указанный идентификатор в этом сыне является существующим идентификатором в состоянии.

Основная цель заключается в проверке документа, только если все идентификаторы указаны в документе..

Вот мой XSD-документ:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
    xmlns:jxb="http://java.sun.com/xml/ns/jaxb" jxb:version="2.0">
    <xs:element name="scxml">
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded" name="state">
                    <xs:complexType>
                        <xs:choice maxOccurs="1">
                                <xs:element name="nextstate" type="xs:nonNegativeInteger"/>
                            </xs:sequence>
                        </xs:choice>
                        <xs:attribute name="id" use="required" type="xs:nonNegativeInteger"/>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
            <xs:attribute name="version" type="xs:string" use="optional"/>
        </xs:complexType>
        <xs:unique name="uniqueStateID">
            <xs:selector xpath="./state"/>
            <xs:field xpath="@id"/>
        </xs:unique>
    </xs:element>
</xs:schema>

Поэтому мне бы хотелось, чтобы значение узла NEXTSTATE было ссылкой на значение атрибута id из узла STATE.

Пример допустимого документа (два состояния, один переход к существующему идентификатору):

<sxml version="1.0">
    <state id="1">
        <nextstate>5</nextstate>
    </state>
    <state id="5" />
</scxml>

Пример неверного документа (два состояния, один переход к несуществующему идентификатору):

<sxml version="1.0">
    <state id="1">
        <nextstate>5</nextstate>
    </state>
</scxml>

Знаете ли вы, если это возможно?

Спасибо за ответы:)

1 Ответ

1 голос
/ 07 сентября 2011

Вы можете проверить, что атрибут nextstate ссылается на существующее состояние. Вместо <unique> используйте <key> в сочетании с <keyref>. Пример здесь: http://www.w3.org/TR/xmlschema-0/#report.xsd

Однако вы не можете проверить с помощью схемы XML, что каждое состояние указывается атрибутом nextstate, если это было тем, чего вы хотели достичь с помощью «Основная цель состоит в том, чтобы проверять документ, только если все ID указаны в документе» .

...