XML Schema可在element和#PCDATA之间进行选择

时间:2015-03-12 00:24:18

标签: xsd

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

您要定义的语言(字符序列或一系列bar元素,但不是混合)不能在XSD 1.0中定义(或者在XML DTD中定义;您的DTD符号会使感觉,但在XML DTD中是不合法的。)

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

实现大致相同效果的一种简单方法是,bars元素包含一系列bar元素或一个stringvalue元素(无论你喜欢什么,都可以调用它) ,stringvalue元素包含 - 顾名思义 - 只是一串字符。