如何在.Net

时间:2017-09-20 09:59:36

标签: c# xml schematron

我有一个 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 ? Thanks.Wong。

1 个答案:

答案 0 :(得分:1)

行。看起来你的根本问题是14岁的代码。在Schema.cs中,我们可以看到Schematron的命名空间被硬编码到前ISO命名空间URI。您使用的代码不适用于ISO Schematron。

如果你不能自己动手推动它?接近并直接使用Schematron Skeletons然后您应该查看声称支持ISO Schematron的https://github.com/gap777/SchemaTron(我没有尝试过)