Как мне сделать проверку 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 (я не пробовал)