【问题标题】:XML Schema for choice between element and #PCDATA用于在元素和#PCDATA 之间进行选择的 XML 模式
【发布时间】:2015-03-12 00:24:17
【问题描述】:

我有一个预先存在的 XML 文档类型,它的元素可以有两种内容类型:一些元素,或者只是文本。将其建模为混合内容是多余的,因此 JAXB 的 XJC 创建了一个非常丑陋的绑定。

<bars><bar .../><bar .../></bars>

<bars>Just a bunch of #PCDATA</bars>

xs:choice 似乎只针对复杂类型(而不是像 xs:string 这样的简单类型)。有没有办法使用 XML 模式在元素或文本之间表达这种选择?在 DTD 中,这类似于

<!ELEMENT bars (#PCDATA | bar*)>

【问题讨论】:

    标签: xsd


    【解决方案1】:

    您要定义的语言(字符序列或bar 元素序列,但不是混合)不能在 XSD 1.0 中定义(或者在 XML DTD 中;您的 DTD 表示法是有意义的,但是在 XML DTD 中是不合法的)。

    在 XSD 1.1 中,您可以使用断言来确保如果任何 bar 元素作为子元素存在,则不会出现文本节点(或仅包含仅包含空格的文本节点)。

    实现大致相同效果的一种简单方法是说bars 元素包含bar 元素的序列或单个stringvalue 元素(随便你怎么称呼它),其中stringvalue元素包含——顾名思义——只是一个字符串。

    【讨论】:

    • 感谢您的快速响应,并确认我没有遗漏 XML Schema 的某些方面,这些方面可以使此类文档比混合内容更好地建模。
    猜你喜欢
    • 1970-01-01
    • 2017-06-01
    • 2012-04-17
    • 1970-01-01
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-21
    相关资源
    最近更新 更多