Xsd 用于在元素和#PCDATA之间进行选择的XML模式

Xsd 用于在元素和#PCDATA之间进行选择的XML模式,xsd,Xsd,我有一个预先存在的XML文档类型,它有一个元素,可以有两种内容类型:一些元素,或者只是文本。将其建模为混合内容是过分的,因此JAXB的XJC创建了一个非常丑陋的绑定 <bars><bar .../><bar .../></bars> 对 <bars>Just a bunch of #PCDATA</bars> 只是一堆#PCDATA xs:choice似乎只针对复杂类型(而不是像xs:string这样的简单类型)构

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

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

<bars>Just a bunch of #PCDATA</bars>
只是一堆#PCDATA
xs:choice似乎只针对复杂类型(而不是像xs:string这样的简单类型)构造。有没有一种方法可以使用XML模式在元素或文本之间表达这种选择?在DTD中,这类似于

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

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

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


实现大致相同效果的一个简单方法是说
bar
元素包含一系列
bar
元素或一个
stringvalue
元素(可以随意调用),其中,
stringvalue
元素(顾名思义)只包含一个字符串。

感谢您的快速响应,并确认我没有遗漏XML模式的某些方面,这将使这种类型的文档能够更好地建模,而不是作为混合内容。