1

我试图在 XSD 中表示以下 DTD 片段:-

(A | B)* | (A | C)* | (A | D)* | ...

即任意数量的 As 和任意数量的B、C、D、...之一的混合列表

CastorConverter 吐出:-

              <choice>
                    <choice minOccurs="0" maxOccurs="unbounded">
                          <element ref="tns:A" />
                          <element ref="tns:B" />
                    </choice>
                    <choice minOccurs="0" maxOccurs="unbounded">
                          <element ref="tns:A" />
                          <element ref="tns:C" />
                    </choice>
                    <choice minOccurs="0" maxOccurs="unbounded">
                          <element ref="tns:A" />
                          <element ref="tns:D" />
                    </choice>
              </choice>

但这给了我一个解析器错误。使用 Visual Studio 进行调查会出现以下警告:-

“元素'A'的多重定义导致内容模型变得模糊。必须形成一个内容模型,以便在验证元素信息项序列期间,直接、间接或隐含包含在其中的粒子,以尝试验证每个项目反过来,可以唯一地确定序列中的内容,而无需检查该项目的内容或属性,也无需任何有关该序列其余部分的项目的信息。”

问题似乎是,如果解析器遇到“A”,则需要“先行”到序列的其余部分,以确定要验证的选择。

有没有另一种方法可以在 XSD 中表示这个序列?

4

1 回答 1

2

使用序列,如下所示:

<sequence minOccurs="0">
  <element minOccurs="0" maxOccurs="unbounded" ref="tns:A" />
  <choice>
    <sequence>
      <element minOccurs="1" maxOccurs="unbounded" ref="tns:B" />
      <sequence minOccurs="0" maxOccurs="unbounded">
        <element maxOccurs="unbounded" ref="tns:A" />
        <element minOccurs="0" maxOccurs="unbounded" ref="tns:B" />
      </sequence>
    </sequence>
    <sequence>
      <element minOccurs="1" maxOccurs="unbounded" ref="tns:C" />
      <sequence minOccurs="0" maxOccurs="unbounded">
        <element maxOccurs="unbounded" ref="tns:A" />
        <element minOccurs="0" maxOccurs="unbounded" ref="tns:C" />
      </sequence>
    </sequence>
    <sequence>
      <element minOccurs="1" maxOccurs="unbounded" ref="tns:D" />
      <sequence minOccurs="0" maxOccurs="unbounded">
        <element maxOccurs="unbounded" ref="tns:A" />
        <element minOccurs="0" maxOccurs="unbounded" ref="tns:D" />
      </sequence>
    </sequence>
  </choice>
</sequence>

替代文字 http://www.freeimagehosting.net/uploads/29c07bafa2.png

于 2009-07-06T11:53:53.230 回答