我们正试图找到一种方法来获得一个可以验证某些规则的模式,但是我们尝试了各种xs组合:all,xs:choice,xs:group和xs:sequence但没有成功。规则基本上是这样的:
我们尝试的最简单的架构是:
<?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>
这有很多问题:
对于LICAPPIN30 / 31和LICAPPIN40 / 41,我们还尝试了一种更复杂的xs:group方法,但它违反了规则6。
是否有可能满足我们所有的基本规则?在一个相对简单的Schema中。在上面的示例中,我删除了每个LICAPPINnn元素中的所有细节 - 它们每个都包含复杂类型,我们不希望在多个位置复制这些元素,理想情况下。
谢谢, 丹尼斯
答案 0 :(得分:0)
编写内容模型以满足您的所有要求并不容易,但除了最后一个之外,很容易满足所有要求。
如果元素顺序的变化对于传达必要信息至关重要,那么最好的办法是在XSD 1.1或Schematron中使用断言。如果元素顺序的变化不传达任何信息,那么您可以选择声明顺序变化不是必需的。我最尊重的词汇设计当局非常一致地说,如果孩子的序列没有传达信息,那么没有理由不修复它。
以下内容模型符合您列出的所有要求,但最后一个要求除外:
<xs:complexType>
<xs:sequence>
<xs:element name="LICAPPIN01"/>
<xs:choice maxOccurs="unbounded">
<xs:sequence>
<xs:element name="LICAPPIN30"/>
<xs:element name="LICAPPIN31"/>
</xs:sequence>
<xs:sequence>
<xs:element name="LICAPPIN40"/>
<xs:element name="LICAPPIN41"/>
</xs:sequence>
</xs:choice>
<xs:element name="LICAPPIN99"/>
</xs:sequence>
</xs:complexType>