【问题标题】:Fail to validate XML with Schematron.NET无法使用 Schematron.NET 验证 XML
【发布时间】:2021-03-29 15:19:13
【问题描述】:

我在 C# 项目中使用 Schematron.NET 来验证 XML(格式如下):

<bpr:item xmlns:bpr="http://etcetc.com">
<bpr:name>Title</bpr:name>
<bpr:contents>
<process>Process1</process>
</bpr:contents>
</bpr:item>

sch文件包含以下代码:

<ns prefix="bpr" uri="http://etcetc.com"/>
<pattern name="Title" xmlns="http://purl.oclc.org/dsdl/schematron">
<rule context="item/contents">
<assert test="process='Process2'">Process not found.</assert>
</rule>
</pattern>

这是使用 NMatrix.Schematron.dll 的 C#:

Validator val = new Validator();
XPathDocument docnav = new XPathDocument(xmlPath);
XPathNavigator nav = docnav.CreateNavigator();
nav.MoveToRoot();
val.AddSchema(schemaFilePath);
val.ValidateSchematron(nav);

为什么它没有检索到任何结果?

【问题讨论】:

  • 欢迎 - 请提供minimal reproducible example
  • 抱歉,Daniel,让我包含 C# 供您复制。
  • 架构格式不正确,被忽略。格式良好的 XML 文件只有一个根标记。您的架构在根目录下同时具有 ns 和模式。
  • @jdweng 谢谢。你碰巧知道我如何将它们分组到一个根标签中?
  • 字符串 xml = "" + your_xml + "";

标签: c# xml schematron


【解决方案1】:

我不会说 C# 代码,但这里是 Schematron 代码中的一些内容:

  1. 如 cmets 中所述,Schematron 代码应具有单个文档元素。在 Schematron 中,它是 &lt;schema&gt; 元素。
  2. 当您引用“http://etcetc.com”命名空间中的元素时,您需要使用您在 Schematron 架构中声明的“bpr:”命名空间前缀。
  3. Schematron &lt;pattern&gt; 元素不能有 @name 属性。它可以有@id 属性或&lt;title&gt; 子元素(两者都是可选的)。

下面是 Schematron 代码的一个工作示例,它在您提供的示例 XML 文档上生成失败的断言:

<schema xmlns="http://purl.oclc.org/dsdl/schematron">
  <ns prefix="bpr" uri="http://etcetc.com"/>
  <pattern>
    <rule context="bpr:item/bpr:contents">
      <assert test="process='Process2'">Process not found.</assert>
    </rule>
  </pattern>
</schema>

【讨论】:

  • 谢谢,这对我有用。但是我相信 NMatrix.Schematron.NET 不支持 ISO Schematron,因为它只有在我将 purl.oclc.org/dsdl/schematron 切换为 ascc.net/xml/schematron 时才有效。
  • 好的。在 Schematron 的 ASCC 版本中,&lt;pattern&gt; 可以具有 @name 属性。但正如您所指出的,您必须将架构声明为位于 http://www.ascc.net/xml/schematron 命名空间,而不是 ISO 版本的 Schematron 使用的 http://purl.oclc.org/dsdl/schematron 命名空间。
猜你喜欢
  • 2012-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多