Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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限制具有给定属性值的元素数量?_Xml_Xpath_Xsd - Fatal编程技术网

Xml 如何使用XSD限制具有给定属性值的元素数量?

Xml 如何使用XSD限制具有给定属性值的元素数量?,xml,xpath,xsd,Xml,Xpath,Xsd,我有一个定义流程规则的XML模式。每个规则集适用于给定的资源列表,其定义如下: <rule_sets> <rule_set name="Set 1" active="true"> <resources> <resource>Resource 1</resource> <resource>Resource 2</resource> </resources>

我有一个定义流程规则的XML模式。每个规则集适用于给定的资源列表,其定义如下:

<rule_sets>
  <rule_set name="Set 1" active="true">
    <resources>
      <resource>Resource 1</resource>
      <resource>Resource 2</resource>
    </resources>
    <rule ... />
    <rule ... />
  </rule_set>
  <rule_set name="Set 2" active="false">
    <resources>
      <resource>Resource 2</resource>
      <resource>Resource 3</resource>
    </resources>
    <rule ... />
    <rule ... />
  </rule_set>
<xs:key name="rule_set_resource_active_key">
    <xs:selector xpath="rule_set" />
    <xs:field xpath="resources/resource" />
    <xs:field xpath="@active" />
</xs:key>
我想给我的XSD添加一个限制,允许每个资源只分配给一个活动规则集;i、 e.“规则集[@active=true]”。可以将每个资源分配给任意数量的非活动规则集

这在XSD中可能吗

到目前为止,我刚刚为rule_set元素添加了一个键,它是rule_set的父元素,如下所示:

<rule_sets>
  <rule_set name="Set 1" active="true">
    <resources>
      <resource>Resource 1</resource>
      <resource>Resource 2</resource>
    </resources>
    <rule ... />
    <rule ... />
  </rule_set>
  <rule_set name="Set 2" active="false">
    <resources>
      <resource>Resource 2</resource>
      <resource>Resource 3</resource>
    </resources>
    <rule ... />
    <rule ... />
  </rule_set>
<xs:key name="rule_set_resource_active_key">
    <xs:selector xpath="rule_set" />
    <xs:field xpath="resources/resource" />
    <xs:field xpath="@active" />
</xs:key>

但这将我限制为每个资源最多使用一个活动规则集和一个非活动规则集,这并不是我真正想要的。是否可以将此扩展以满足我的要求?或者我可以重组我的文档来实现这一点吗?

您可以在XSD中定义两种类型的规则集,如果在您的情况下,这两种类型的规则集的其他所有内容都相同,请使用xs:group在一个位置进行定义,并在两个规则集定义中重复使用,但属性active具有不同的限制请参阅限制XSD中的属性值。然后,您可以在规则集内有两个元素,一个maxoccurs为1,另一个为无界。

您可以将规则集设置为资源的从属元素,然后将max occurs设置为1吗?