【问题标题】:How can I restrict the number of elements with a given attribute value using XSD?如何使用 XSD 限制具有给定属性值的元素数量?
【发布时间】:2014-01-22 13:49:30
【问题描述】:

我有一个为流程定义“规则”的 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>

我想为我的 XSD 添加一个限制,允许每个资源仅分配给一个“活动”规则集;即'rule_set[@active="true"]'。 (每个资源都可以分配给任意数量的非活动规则集。)

这在 XSD 中可行吗?

到目前为止,我刚刚向“rule_sets”元素(它是“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>

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

【问题讨论】:

  • 能否让rule_set 成为resource 的从属元素,然后将max_occurs 设置为1?

标签: xml xpath xsd


【解决方案1】:

您可以在 XSD 中定义两种类型的规则集(如果在您的情况下这是可能的),它们具有相同的一切(使用 xs:group 在一个地方定义并在两个规则集定义中重用)但属性 active 有不同的限制(请参阅XML Schema How to Restrict Attribute by Enumeration 以限制 XSD 中的属性值)。然后你可以在 rule_sets 中有两个元素,一个 maxoccurs 限制为 1,另一个无限制。

【讨论】:

    猜你喜欢
    • 2018-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-09
    • 2023-03-23
    • 1970-01-01
    • 2011-12-23
    • 1970-01-01
    相关资源
    最近更新 更多