Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.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
Xsd 无法找到一种方法来创建将随机顺序项与条件匹配的XML架构_Xsd - Fatal编程技术网

Xsd 无法找到一种方法来创建将随机顺序项与条件匹配的XML架构

Xsd 无法找到一种方法来创建将随机顺序项与条件匹配的XML架构,xsd,Xsd,我们试图找到一种方法来创建一个能够验证某些规则的模式,但是我们尝试了xs:all、xs:choice、xs:group和xs:sequence的各种组合,但都没有成功。规则基本上是这样的: LICAPPIN01元素只能出现一次 LICAPPIN99元素只能出现一次 应该有相同数量的LICAPPIN30和LICAPPIN31 应该有相同数量的LICAPPIN40和LICAPPIN41 需要至少有一组LICAPPIN30/31或LICAPPIN40/41(两者也可以存在) 对于上述所有情况,订单无关

我们试图找到一种方法来创建一个能够验证某些规则的模式,但是我们尝试了xs:all、xs:choice、xs:group和xs:sequence的各种组合,但都没有成功。规则基本上是这样的:

  • LICAPPIN01元素只能出现一次
  • LICAPPIN99元素只能出现一次
  • 应该有相同数量的LICAPPIN30和LICAPPIN31
  • 应该有相同数量的LICAPPIN40和LICAPPIN41
  • 需要至少有一组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

    你知道这是否能满足我们所有的基本规则吗?在一个相对简单的模式中。在上面的例子中,我删除了每个LICAPPINnn元素中的所有细节——它们都包含复杂的类型,理想情况下,我们不想在多个地方重复这些类型

    谢谢,
    Denis

    要编写一个内容模型来满足您的所有需求并不容易,但要满足除最后一个之外的所有需求却很容易

    如果元素顺序的变化对于传递必要的信息至关重要,那么最好使用XSD1.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>
    
    
    
    实际上,它不是一个简单的模式。关于相关节点的规则和它们的缺乏(即任何顺序),但没有结构所暗示的任何规则。我知道得到你们想要的东西的唯一方法就是叫做schematron的东西。你可以用它做比你想要的更多的事情。我们将使用类似于上面的东西,并让人们知道,如果他们更容易以不同的方式组织项目,我们也会接受他们的文件,但是除非他们遵循一些基本的顺序,否则不能使用模式。谢谢