Как мне сделать проверку ISO Schematron в.Net

У меня есть NMatrix.schematron.dll для проверки XML-файлов с помощью Schematron(1.5). Я использую 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();
}

а это схематрон 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>

и это схематическое издание 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 ответ

ХОРОШО. Похоже, что вашей основной проблемой является 14-летний код. В Schema.cs мы можем видеть, что пространство имен для Schematron жестко закодировано в URI пространства имен до ISO. Код, который вы используете, не предназначен для работы с ISO Schematron.

Если вы не можете использовать подход " катайся сам" и использовать скелеты Schematron напрямую, то, возможно, стоит взглянуть на https://github.com/gap777/SchemaTron который утверждает, что поддерживает ISO Schematron (я не пробовал)

Другие вопросы по тегам