我试图在 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 中表示这个序列?