DTD->;XSD转换:两个元素的混合列表,一个受约束

DTD->;XSD转换:两个元素的混合列表,一个受约束,xsd,dtd,Xsd,Dtd,我试图在XSD中表示以下DTD片段:- (A | B)*|(A | C)*|(A | D)*| i、 e.任意数量的As和任意数量的B、C、D、1的混合列表 CastorConverter吐出:- <choice> <choice minOccurs="0" maxOccurs="unbounded"> <element ref="tns:A" /

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

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

i、 e.任意数量的As和任意数量的B、C、D、1的混合列表

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中表示此序列?

使用序列,如下所示:

<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>


您好,非常感谢您的回答。序列“A”应该通过。是否可以将minOccurs=“0”添加到一级嵌套序列:-否(如果我理解正确),在这种情况下,我宁愿使用make,这样您就可以允许任意数量的单个A,但不允许任何B/C/D元素。