也许是我盯着这个问题太久了,也许没有答案;不管怎样,我现在在这里。
我试图在 XSD 中允许一组可能的组合,但我似乎无法找到一种不会导致歧义的方法。
快速正则表达式表示:
foo+ ( bar baz* | bar? baz+ qux* )
foo
是必需的(一个或多个)- 如果
bar
存在,baz
是可选的(零个或多个) - 如果
baz
存在,bar
是可选的(零或一)并且qux
是可选的(零或更多) qux
不存在baz
就不能存在
歧义出现给定foo bar baz
。
模棱两可的 XSD 文档:
<xs:element name="parent">
<xs:complexType>
<xs:sequence>
<xs:element name="foo" minOccurs="1" maxOccurs="unbounded" />
<xs:choice>
<xs:sequence>
<xs:element name="bar" minOccurs="1" maxOccurs="1" />
<xs:element name="baz" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:sequence>
<xs:element name="bar" minOccurs="0" maxOccurs="1" />
<xs:element name="baz" minOccurs="1" maxOccurs="unbounded" />
<xs:element name="qux" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>
良好措施的屏幕截图:
现在,我开始意识到这可能只是 XSD 内容模型的一个约束。模棱两可的原因很明显;解决方案不是这样。
任何人都可以看到我可以允许这样做的方法吗?通过重新排序元素,通过使用一些模式设计模式来缓解这样的模棱两可的场景?
bar
and的条件依赖性baz
显然是问题所在,但我想不出任何其他方法来做到这一点。
非常感谢各位。
编辑:目前正在阅读“ Schema Component Constraint: Unique Particle Attribution ”,试图找到一个漏洞。欢迎任何其他建议阅读。