XML 元素和#PCDATA 之间选择的模式

XML Schema for choice between element and #PCDATA

我有一个预先存在的 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.0(或 XML DTD,要么;您的 DTD 符号是有意义的,但在 XML DTD 中是不合法的。

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

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