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
元素包含——顾名思义——只是一串字符。
我有一个预先存在的 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
元素包含——顾名思义——只是一串字符。