【发布时间】:2014-03-28 18:38:12
【问题描述】:
我正在尝试使用 NMatrix 的 Schematron 来验证 C# 中的 XML。 如果我将“f”命名空间留在命名空间管理器 (nsManager) 之外,则会在执行此代码时出现异常:未声明的命名空间前缀 - f。
CompiledXPathExpression _expr;
...
_expr.SetContext(nsManager);
对于 Schematron Line:
<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 <= 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 是否有效
【问题讨论】:
-
您使用的是 XPath 1.0 还是 2.0?
标签: c# xpath namespaces xsd schematron