Сбой правила подтверждения Schematron при настройке контекста

Я пытаюсь использовать Schematron NMatrix для проверки XML на С#. Если я оставлю пространство имен "f" вне диспетчера пространства имен (nsManager), я получу исключение: Необъявленный префикс пространства имен - f при выполнении этого кода.

CompiledXPathExpression _expr;
...
_expr.SetContext(nsManager);

Для линейки Схематрон:

<sch:rule context="/f:Patient/f:identifier/f:period">

После добавления пространства имен "f" строка "rule" завершается, но я получаю исключение: Неопознанное пространство имен функций расширения: prefix='', URI пространства имен='' при выполнении того же кода.

CompiledXPathExpression _expr;
...
_expr.SetContext(nsManager);

Для следующей строки Schematron:

  <sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value &lt;= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>

После некоторых экспериментов я обнаружил, что это работает:

    <sch:rule context="/f:Patient/f:identifier/f:period">
      <sch:assert test="f:start">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
   </sch:rule>

Но это не удается:

    <sch:rule context="/f:Patient/f:identifier/f:period">
      <sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value &lt;= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
end</sch:assert>
   </sch:rule>

Сначала я думал, что у меня какая-то проблема с пространством имен, но теперь я начинаю задаваться вопросом, действителен ли этот синтаксис даже с XPathExpression.


person jlo-gmail    schedule 26.02.2014    source источник
comment
Вы используете XPath 1.0 или 2.0?   -  person Nico Kutscherauer    schedule 01.04.2014


Ответы (1)


Это был опыт обучения! NMatrix-Schematron полностью устарел. Он больше не работает и поддерживает только Schematron 1.5 - очень старый.

Мне было очень трудно найти полную демонстрацию. Я включил ссылку на полное демонстрационное решение с использованием Saxon-HE.

пример кода

person jlo-gmail    schedule 02.04.2014
comment
Теперь вы можете использовать SchemaTron XRouter для собственного (.NET) ISO Schematron (с xpath2/xslt2). github.com/gap777/SchemaTron - person gap; 17.05.2014