Xml 在xsd:all中有xsd:sequence行为的替代方案是什么?
我不明白该如何定义我的复杂类型 今天我要说的是:Xml 在xsd:all中有xsd:sequence行为的替代方案是什么?,xml,xsd,xsd-validation,Xml,Xsd,Xsd Validation,我不明白该如何定义我的复杂类型 今天我要说的是: <xsd:element name="batch_requests_callbacks"> <xsd:complexType> <xsd:sequence> <xsd:element ref="document_id" minOccurs="1" maxOccurs="1"/> <xsd:choice minOccurs="0
<xsd:element name="batch_requests_callbacks">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="document_id" minOccurs="1" maxOccurs="1"/>
<xsd:choice minOccurs="0" maxOccurs="1">
<xsd:element ref="filename"/>
<xsd:element ref="error"/>
</xsd:choice>
<xsd:element ref="author" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="version" default="1.0"/>
</xsd:complexType>
</xsd:element>
但是,标签在xsd:sequence
中的顺序很重要,我不希望出现这种行为
如果我使用xsd:all
我没有标记顺序,但不能将maxocurs
设置为在一个xsd:all
中使用xsd:choice
以取消绑定的更多
我的备选方案是什么?您可以使用
而不是xsd:sequence
来模拟非有序元素验证。这绕过了xsd 1.0中xsd:all
的限制,您的备选方案是(如果您希望保持简单),正如您所确定的:
- 序列,它需要特定的顺序
- 所有,但事实并非如此李>
- 在XSD 1.1中,所有组中maxOccurs上的约束都已解除(尽管不是所有组上的其他约束)李>
- 由于所需的语言显然是常规语言,因此可以使用嵌套的选项和序列为其编写内容模型。XSD的“唯一粒子属性”(unique particle Attributes)约束让这变得有点乏味,这意味着您必须避免任何可能使内容模型不确定性的事情,但这是可行的。具体示例如所示
xsd:all
;特别是,它不会强制存在文档id或最多存在一个文件名或错误元素。它通过定义不同的语言“规避”了all
的限制。