我正在尝试使用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 <= 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中是否有效
答案 0 :(得分:0)
这是一次学习经历! NMatrix-Schematron完全过时了。它不再工作,只支持Schematron 1.5 - 很老。
我很难找到完整的演示。我已经使用Saxon-HE包含了一个完整演示解决方案的链接。