代码之家  ›  专栏  ›  技术社区  ›  rtenhove

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

xsd
  •  1
  • rtenhove  · 技术社区  · 10 年前

    我有一个预先存在的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 回复  |  直到 10 年前
        1
  •  2
  •   C. M. Sperberg-McQueen    10 年前

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

    在XSD 1.1中,可以使用断言来确保 酒吧 元素作为子元素出现,不出现文本节点(或仅包含空格的文本节点)。

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