0

I need to check that siteId contains unique record id's throughout the document. For example: site 11111 submits record with id 1 & 2 and 3 & 4. site 2222 submits records 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>
mzjn
  • 48,958
  • 13
  • 128
  • 248
jorge
  • 1
  • 1

2 Answers2

0

The test pattern using count() and disting-values() taking from here: http://xml-buddy.com/xmltribune/?p=274 should be what you are looking for.

Clemens
  • 1,744
  • 11
  • 20
0

Your problem can be solved by below code:-

 <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>
Prateek
  • 77
  • 4