Я пытаюсь использовать 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 <= 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 <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
end</sch:assert>
</sch:rule>
Сначала я думал, что у меня какая-то проблема с пространством имен, но теперь я начинаю задаваться вопросом, действителен ли этот синтаксис даже с XPathExpression.