我们试图找到一种方法来建立一个可以验证某些规则的模式,但是我们尝试了 xs:all、xs:choice、xs:group 和 xs:sequence 的各种组合,但没有成功。规则基本上是这样的:
- 应该只出现一次 LICAPPIN01 元素
- LICAPPIN99 元素应该只出现一次
- 应该有相同数量的 LICAPIN30 和 LICAPIN31
- 应该有相同数量的 LICAPIN40 和 LICAPIN41
- 至少需要一组 LICAPPIN30/31 或 LICAPPIN40/41(两者都可以)
- 对于上述所有内容,顺序无关紧要 - 任何顺序都可以接受
我们尝试过的最简单的模式是这样的:
<?xml version="1.0" standalone="yes"?>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="NewDataSet">
<xs:complexType>
<xs:choice minOccurs="1" maxOccurs="unbounded">
<xs:element name="LICAPPIN01" minOccurs="1" maxOccurs="1">
</xs:element>
<xs:element name="LICAPPIN30" minOccurs="1" maxOccurs="unbounded">
</xs:element>
<xs:element name="LICAPPIN31" minOccurs="1" maxOccurs="unbounded">
</xs:element>
<xs:element name="LICAPPIN40" minOccurs="1" maxOccurs="unbounded">
</xs:element>
<xs:element name="LICAPPIN41" minOccurs="1" maxOccurs="unbounded">
</xs:element>
<xs:element name="LICAPPIN99" minOccurs="1" maxOccurs="1">
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
这有很多问题:
- 它允许多个 LICAPPIN01 和 LICAPPIN99 (替换为 xs:all 可能会解决此问题?)
- 它不执行规则 3 和 4
- 对于规则 5,它似乎强制 LICAPPIN30/31 和 LICAPPIN40/41 当它应该只能有两组中的一组时
我们还为 LICAPPIN30/31 和 LICAPPIN40/41 尝试了使用 xs:group 的更复杂的方法,但它违反了规则 6。
知道这是否有可能满足我们所有的基本规则吗?在一个相对简单的 Schema 中。在上面的示例中,我删除了每个 LICAPPINnn 元素中的所有细节——它们每个都包含复杂类型,理想情况下,我们不希望在多个地方重复这些内容。
谢谢,丹尼斯