Schematron检查多个元素之间的唯一值

时间:2013-04-16 16:49:15

标签: xml schematron

我需要检查siteId是否包含整个文档中的唯一记录ID。例如:站点11111提交id为1&的记录。 2和3& 4.网站2222提交记录3& 4。

GOOD:

<submission>
<site>
<siteId>11111</siteId>
<record><id>1</id></record>
<record><id>2</id></record>
</site>
<site>
<siteId>2222</siteId>
<record><id>3</id></record>
<record><id>4</id></record>
</site>
<site>
<siteId>1111</siteId>
<record><id>3</id></record>
<record><id>4</id></record>
</site>
</submission>

BAD:

<submission>
<site>
<siteId>11111</siteId>
<record><id>1</id></record>
<record><id>2</id></record>
</site>
<site>
<siteId>2222</siteId>
<record><id>3</id></record>
<record><id>4</id></record>
</site>
<site>
<siteId>1111</siteId>
<record><id>3</id></record>
<record><id>4</id></record>
<record><id>4</id></record>
</site>
</submission>

2 个答案:

答案 0 :(得分:0)

使用count()和disting-values()从这里获取的测试模式:http://xml-buddy.com/xmltribune/?p=274应该是您正在寻找的。

答案 1 :(得分:0)

您的问题可以通过以下代码解决: -

 <iso:pattern id="site">
   <iso:rule context="id">
       <iso:assert test="count(id) != count(distinct-values(ancestor::site/record/id))">BAD</iso:assert>
   </iso:rule>
</iso:pattern>