3

XML スキーマ内の ID フィールドを区別できるかどうか疑問に思っていました。私は次のスキーマを持っています:

<element name="define_apple">
    <complexType>
        <attribute name="colour" type="ID"/>
    </complexType>
</element>

<element name="define_orange">
    <complexType>
        <attribute name="colour" type="ID"/>
    </complexType>
</element>

<element name="reference_apple">
    <complexType>
        <attribute name="colour" type="IDREF"/>
    </complexType>
</element>

<element name="reference_orange">
    <complexType>
        <attribute name="colour" type="IDREF"/>
    </complexType>
</element>

ただし、参照はそれぞれの定義に一意にリンクされているわけではありません。次のナンセンスだが有効な XML を記述できます。

<define_apple colour="green"/>
<define_orange colour="orange"/>

<reference_apple colour="orange"/>
<reference_orange colour="green"/>

名前空間を使用するなど、ID と IDREF を使用してフィールドを正しくリンクする方法はありますか? key と keyref を使用できることはわかっていますが、ID の方が少し魅力的です。

4

1 に答える 1

1

いいえ、これは不可能だと思います。http://www.w3.org/TR/xmlschema-2/#IDおよびhttp://www.w3.org/TR/xmlschema-2/#IDREFは、IDおよびIDREF属性タイプがXML標準に由来すると述べています、およびhttp://www.w3.org/TR/2000/WD-xml-2e-20000814#NT-TokenizedTypeは、IDREFの有効性の制約は、ドキュメント内の一部のIDとのみ一致することを示しています。IDとIDREFは、DTDとの下位互換性のために、ほとんどがXMLスキーマに含まれていると思います。

于 2011-08-31T09:58:35.760 に答える