【问题标题】:XSD: How to restrict enumeration values of a derived complex type?XSD:如何限制派生复杂类型的枚举值?
【发布时间】:2011-01-16 23:34:56
【问题描述】:

举个例子:

<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>

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

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

【问题讨论】:

    标签: xsd enumeration restriction


    【解决方案1】:

    不,很遗憾,您不能这样做。没有办法限制这样的枚举,而且您在同时扩展和限制复杂类型时也会遇到麻烦。有一篇很好的文章,您可以用枚举here 做些什么。

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

    【讨论】:

    • 感谢您提供指向 ibm 站点的链接。太糟糕了,它不能在“限制”下正常工作。不管怎样,谢谢你的回答。
    • 我认为你可以在 XSD 1.1 中使用 xpath:stackoverflow.com/questions/6472264/…
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-03-26
      • 1970-01-01
      • 1970-01-01
      • 2015-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多