Schematron Assert Rule在设置上下文时失败

时间:2014-02-26 05:45:33

标签: c# xpath namespaces xsd schematron

我正在尝试使用NMatrix的Schematron来验证C#中的XML。 如果我离开" f"在命名空间管理器(nsManager)之外的命名空间,我得到例外:未执行的命名空间前缀 - f 执行此代码时。

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

对于Schematron Line:

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

添加&#34; f&#34;命名空间,&#34;规则&#34;行完成,但我得到例外: 无法识别的扩展程序名称空间:prefix =&#39;&#39;,名称空间URI =&#39;&#39; 当执行相同的代码时。

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中是否有效

1 个答案:

答案 0 :(得分:0)

这是一次学习经历! NMatrix-Schematron完全过时了。它不再工作,只支持Schematron 1.5 - 很老。

我很难找到完整的演示。我已经使用Saxon-HE包含了一个完整演示解决方案的链接。

sample code

相关问题