【问题标题】:How do I do ISO Schematron validation in .Net如何在 .Net 中进行 ISO Schematron 验证
【发布时间】:2017-09-20 09:59:35
【问题描述】:

我有一个 NMatrix.schematron.dll 来使用 Schematron(1.5) 验证 xml 文件。我使用 Linqpad 进行测试。但我发现如果我使用 ISO Schematron 标准,它没有不工作。 有我的 C# 代码

    void Main()
{
    var xmlResult = "";
    var validator = new Validator();
    var schPath2 = Path.Combine("E:\\validate", "test1.sch");
    try
    {
        validator.AddSchema(schPath2);
        validator.Validate(new XmlTextReader("E:\\validate\\Biz430381170629035686.xml"));
    }
    catch (Exception ex)        
    {
        xmlResult = ex.Message;
    }
    xmlResult.Dump();
}

这是schematron 1.5版:

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.ascc.net/xml/schematron">
  <pattern name="CheckUnique">
      <rule context="*">
          <assert test="1=1">
              OK
          </assert>
      </rule>
  </pattern>  
</schema>

这是schematron iso版本:

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://purl.oclc.org/dsdl/schematron" queryBinding="xslt2"
    xmlns:sqf="http://www.schematron-quickfix.com/validator/process">
    <pattern id="CheckUnique">
        <rule context="*">
            <assert test="1=1">
                OK
            </assert>
        </rule>
    </pattern>  
</schema>

唯一不同的是命名空间。当我将 1.5 版更改为 ISO 版时,验证不起作用。 为什么? 因为 NMatrix.Schematron.dll ? 谢谢。王。

【问题讨论】:

  • 为什么这个标题真的很烦人?呃。
  • “没用” - 怎么样?
  • 这意味着我更改 xmlns 后没有出现“OK”

标签: c# xml schematron


【解决方案1】:

好的。看起来你的基本问题是 14 岁的代码。在Schema.cs 中,我们可以看到 Schematron 的命名空间被硬编码为 pre ISO 命名空间 URI。您使用的代码并非设计用于 ISO Schematron。

如果您不能采用“自己动手”的方法并直接使用 Schematron Skeletons,那么您或许应该查看声称支持 ISO Schematron 的 https://github.com/gap777/SchemaTron(我没有尝试过)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-23
    • 2011-03-10
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    相关资源
    最近更新 更多