6

次の例を考えます。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:complexType name="Book" abstract="true">
        <xs:sequence>
            <xs:element name="titel" type="xs:string">
            </xs:element>
            <xs:element name="bookCode" type="BookEnum"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="Lyric">
        <xs:complexContent>
            <xs:extension base="Book">
                <xs:sequence>
                    <xs:element name="author" type="xs:string">
                    </xs:element>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:simpleType name="BookEnum">
        <xs:restriction base="xs:int">
            <xs:enumeration value="Paperback"/>
            <xs:enumeration value="Hardcover"/>
            <xs:enumeration value="Liporello"/>
            <xs:enumeration value="None"/>
        </xs:restriction>
    </xs:simpleType>
</xs:schema>

歌詞は本から派生しています。complexType"Lyric"のBookEnumの可能な値を"Paperback"に制限したいと思います。

「None」、「Liporello」、「Hardcover」は「Lyric」の有効な値ではなくなりました。これはxsdで実行できますか?

4

2 に答える 2

9

いいえ、残念ながらそれはできません。そのような列挙を制限する方法はありません。また、複合型の拡張と制限の両方を同時に行うのにも問題があります。ここに列挙で何ができるかという良い記事があります。

代わりにボトムアップで作業することを検討してください。ほとんど何も含まれていない基本的な本の種類を定義します。次に、基本型といくつかの値の和集合であるLyricTypeを定義します。サブタイプでbookCodeを実行します。これは理想的ではありませんが、残念ながら、XSDは常にオブジェクト指向言語と一致するとは限りません。

于 2010-02-15T15:54:33.703 に答える
1

最終的に..他の値(親または兄弟など)を使用してノードを検証しようとしています..これは確かに不可能です..

于 2010-02-15T16:41:49.287 に答える