代码之家  ›  专栏  ›  技术社区  ›  Marcin Cylke

Schematron验证和唯一性

  •  0
  • Marcin Cylke  · 技术社区  · 15 年前

    我试图编写一些Schematron规则,其中一个规则应该检查元素在父元素范围内是否唯一。所以我有一个示例xml结构:

    <abc>
      <elem id="qw0">
        <a>1</a>
        <a>2</a>
        <a>3</a>
      </elem>
      <elem id="qw1">
        <a>1</a>
        <a>2</a>
        <a>3</a>
        <a>3</a>
      </elem>
    </abc>
    

    我的规则应该检查每个元素的“a”元素是否唯一。在这个特定的例子中 元素 具有 id=“qw1”

    到目前为止,我已经得出这样的规则:

    <iso:pattern id="doc.abc">
      <iso:title>checking ABC</iso:title>
      <iso:rule context="elem">
        <iso:assert test="count(a[. = current()]) = 1">TACs should be unique.</iso:assert>
      </iso:rule>
    </iso:pattern>
    

    但这不起作用,因为它可以浏览整个文档,而不仅仅是 元素

    2 回复  |  直到 15 年前
        1
  •  1
  •   alexbrn    14 年前

    如果要将Schematron处理器与基础的XSLT/XPath 2.0引擎一起使用,并希望将规则的上下文设置为可以使用的<elem>元素:

      <sch:pattern>
        <sch:rule context="elem">
          <sch:report test="count(a) != count(distinct-values(a))">
            Values not distinct</sch:report>
        </sch:rule>
      </sch:pattern>
    
        2
  •  0
  •   Marcin Cylke    15 年前

    我发现这可以通过以下规则来解决:

    <iso:pattern id="doc.abc">
      <iso:title>checking ABC</iso:title>
      <iso:rule context="a">
        <iso:assert test="count(parent::node()/a[. = current()) = 1">TACs should be unique.</iso:assert>
      </iso:rule>
    </iso:pattern>
    

    但这却为每一个 元素。

    把它烧了会更优雅 ,不

    推荐文章
    Jeff  ·  独占XPath测试
    10 年前