Проверьте один узел на основе критериев другого узла, ссылаясь на @ID критерия - PullRequest
1 голос
/ 31 мая 2011

Я пытаюсь проверить наличие дочернего элемента на основе критериев в другом элементе в документе, идентифицированном по его идентификатору.Использование ISO Schematron и XPath 2.0.

Возьмем следующий пример:

<value id="red" bits="16" />

<foo value_id="red">
    <increased_sensitivity/>
</foo>

Элемент "extended_sensitivity" должен быть разрешен, только если элемент "value" с @id "red" содержитбиты атрибута = "16" где-то в документе.

Честно говоря, я даже не уверен, что это возможно в Schematron, мой опыт работы с ним весьма ограничен.

1 Ответ

0 голосов
/ 01 июня 2011

Предполагая, что вы хотите найти элемент значения, идентификатор которого совпадает со значением идентификатора foo (в данном случае «красным»), а затем проверить значение битов там, тогда эта схема Schematron показывает один из способов, которым это можно сделать:


<?xml version="1.0"?>    
<sch:schema xmlns:sch="http://purl.oclc.org/dsdl/schematron">

  <sch:let name="root" value="/"/>

  <sch:pattern>
    <sch:rule context="increased_sensitivity">
      <sch:let name="id" value="parent::*/@value_id"/>
      <sch:let name="assoc-bits-value" value="$root//value[@id=$id]/@bits"/>
      <sch:assert test="$assoc-bits-value = 16">When the increased_sensitivity element is used, a
        corresponding value element must exist in the doucment with a bits value of
        "16".</sch:assert>
    </sch:rule>
  </sch:pattern>

</sch:schema>

...