XSD:如何限制派生复杂类型的枚举值?

XSD:如何限制派生复杂类型的枚举值?,xsd,enumeration,restriction,Xsd,Enumeration,Restriction,给出以下示例: <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: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的可能值为“平装本”


“None”、“Liporello”和“Hardcover”不再是“Lyric”的有效值。这可以在xsd中完成吗?

不,很遗憾,您不能这样做。没有办法限制这样的枚举,同时扩展和限制复杂类型也会有困难。有一篇关于如何使用枚举的好文章


也许可以考虑用自下而上的方法来定义一个基本的图书类型,几乎没有任何内容;然后定义一个LyricType,它是基本类型和其他一些值的并集;在子类型中携带图书代码。这并不理想,但遗憾的是,XSD并不总是与面向对象语言保持一致。

最终。。您正在尝试使用另一个(父节点或同级节点等)的值验证节点。。这当然是不可能的。

感谢您提供到ibm站点的链接。太糟糕了,它不能与“限制”一起正常工作。无论如何,感谢您的回答。我认为您可以在XSD 1.1中使用xpath实现这一点: