也許我一直在盯着這個問題太久,也許沒有答案;無論哪種方式,我現在在這裏。模式中的內容模型歧義
我想在XSD中允許一組可能的組合,但我似乎無法找到一種不會導致含糊不清的方法。
快速regexy respresentation:
foo+ (bar baz* | bar? baz+ qux*)
foo
需要(一個或更多的)- 如果
bar
存在,baz
是可選的(零或更多的) - 如果
baz
存在,bar
是可選的(零或一)和qux
是可選的(零或更多的)如果baz
不存在
歧義發生給定foo bar baz
qux
不可能存在。 曖昧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
和baz
的條件相關性顯然是問題,但我想不出有任何其他方式來做到這一點。
非常感謝人們。
編輯:目前在讀,試圖找到一個循環洞「Schema Component Constraint: Unique Particle Attribution」。任何其他建議閱讀歡迎。
謝謝@MichaelKay,您建議的表達完美地工作! (*也許我的分析技能在我昨晚做過之前已經上牀睡覺了*)我相信我會對消除歧義策略進行一些評論,強行回憶一下XSD中的合成器可以擁有基數的事實。 – Dan