0

我正在尝试使用 NMatrix 的 Schematron 来验证 C# 中的 XML。如果我将“f”命名空间留在命名空间管理器 (nsManager) 之外,则会出现异常:未声明的命名空间前缀 - f执行此代码时。

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

对于 Schematron 线:

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

添加“f”命名空间后,“规则”行完成,但 执行相同代码时出现异常:无法识别的扩展函数命名空间:前缀='',命名空间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 是否有效

4

1 回答 1

0

这是一次学习经历!NMatrix-Schematron 已完全过时。它不再工作,仅支持 Schematron 1.5 - 非常旧。

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

示例代码

于 2014-04-02T19:44:04.630 回答