Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 在xsd:all中有xsd:sequence行为的替代方案是什么?_Xml_Xsd_Xsd Validation - Fatal编程技术网

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

的限制,您的备选方案是(如果您希望保持简单),正如您所确定的:

  • 序列,它需要特定的顺序
  • 所有,但事实并非如此
如果排序没有意义(因此序列文档id、文件名、作者和序列作者、文档id、文件名携带相同的信息),则在修复序列时不会丢失表达能力。或者,您也可以使用predi建议的无界选择,并将部分验证逻辑(检查基数)放在应用程序的另一层中。在这种情况下,我认为最受推崇的词汇设计者通常会推荐一个序列

另外两种方法值得一提:

  • 在XSD 1.1中,所有组中maxOccurs上的约束都已解除(尽管不是所有组上的其他约束)
  • 由于所需的语言显然是常规语言,因此可以使用嵌套的选项和序列为其编写内容模型。XSD的“唯一粒子属性”(unique particle Attributes)约束让这变得有点乏味,这意味着您必须避免任何可能使内容模型不确定性的事情,但这是可行的。具体示例如所示

可能的重复我不认为它是重复的。但是,它的工作与
xsd:all
;特别是,它不会强制存在文档id或最多存在一个文件名或错误元素。它通过定义不同的语言“规避”了
all
的限制。