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

标签 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: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>

歌词来源于Book。我想将复杂类型“歌词”的 BookEnum 的可能值限制为“平装书”。

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

最佳答案

不,不幸的是你不能那样做。没有办法限制这样的枚举,同时扩展和限制复杂类型也会遇到麻烦。有一篇很好的文章你可以用枚举做什么here .

也许可以考虑自下而上地工作:定义一个几乎没有内容的基本书籍类型;然后定义一个 LyricType,它是基本类型和更多值的联合;在子类型中携带 bookCode。这并不理想,但遗憾的是,XSD 并不总是与面向对象的语言保持一致。

关于XSD:如何限制派生复杂类型的枚举值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2265978/

相关文章:

string - 如何枚举具有唯一数字的字符串单元格?

Java从多次存在的config.properties文件中获取某个属性

php - 通过PHP业务逻辑限制对NGINX中静态文件的访问?

java - 'static' 关键字在类中的作用是什么?

快速不一致的通用协议(protocol)限制

xml - 如何在 XML/XSD 中定义整数范围?

xsd - 如何向 RDF 三元组添加开始和结束时间?

xml - XML Schema 1.0 中是否有 <assert> 的替代方案

xml - 如何使 Xml 模式中的元素成为可选元素

java - 如何在Java中基于节点枚举对象?