1

XML ドキュメントを検証するために、属性値を参照できるかどうかを知りたいです。

ID属性に数値を持つ州があります。これらの状態では、別の状態に移行するために息子がここにいます。この息子に指定されたIDが、ある状態で存在するIDであることを確認するために、ここで参考にしたいと思います。

主な目標は、すべての 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 ノードの値は、ノード STATE の id 属性の値への参照であってほしいと思います。

有効なドキュメントの例 (2 つの状態、既存の ID への 1 つの遷移):

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

無効なドキュメントの例 (2 つの状態、存在しない ID への遷移) :

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

それが可能かどうか知っていますか?

答えてくれてありがとう:)

4

1 に答える 1

1

nextstate 属性が既存の状態を参照していることを検証できます。の代わりにと組み合わせて<unique>使用​​します。例: http://www.w3.org/TR/xmlschema-0/#re​​port.xsd<key><keyref>

ただし、すべての状態が nextstate 属性によって参照されていることを XML スキーマで検証することはできません。それが「すべての ID がドキュメントで指定されている場合にのみドキュメントを検証することが主な目的」で達成したい場合です。

于 2011-09-07T12:17:08.890 に答える