Проверка XML на соответствие schematron с использованием SAXON EE edition

Я оцениваю выпуск SAXON EE для проверки XML на соответствие xsd и schematron.

Может ли кто-нибудь помочь мне в решении следующих вопросов:

  1. При проверке XML-документа на соответствие xsd мы также можем получить xpath этого узла ошибки вместе с ошибками в виде простого текста. В настоящее время я получаю только ошибку.

  2. Можем ли мы проверить xml на соответствие schematron, используя версию Saxon EE? Любой пример кода будет большим подспорьем.

Спасибо.


person Pankaj Pant    schedule 09.03.2018    source источник


Ответы (1)


<сильный>1. При проверке XML-документа на соответствие xsd мы также можем получить xpath этого узла ошибки.

Да, информация об ошибке включает в себя XPath-ссылку на недопустимый узел (в большинстве случаев: в некоторых случаях, таких как повторяющиеся идентификаторы, когда нет одного конкретного узла с ошибкой).

Если вы создаете отчет о достоверности XML с помощью SchemaValidator.SetValidityReporting(), результирующий отчет будет включать информацию о пути. Вот пример:

<?xml version="1.0" encoding="UTF-8"?>
<validation-report xmlns="http://saxon.sf.net/ns/validation"
                   system-id="file:/Users/mike/repo2/samples/data/books-invalid.xml">
   <error line="3"
          column="17"
          path="/Q{}BOOKLIST[1]/Q{}BOOKS[1]/@x"
          xsd-part="1"
          constraint="cvc-complex-type.3">Attribute @x is not allowed on element &lt;BOOKS&gt;</error>
   <error line="10"
          column="17"
          path="/Q{}BOOKLIST[1]/Q{}BOOKS[1]/Q{}ITEM[1]/Q{}PRICE[1]"
          xsd-part="2"
          constraint="cvc-datatype-valid.1">The content "$0.2" of element &lt;PRICE&gt; does not match the required simple type. Cannot convert string to decimal: $0.2</error>
   <error line="21"
          column="20"
          path="/Q{}BOOKLIST[1]/Q{}BOOKS[1]/Q{}ITEM[2]/Q{}PUB-DATE[1]"
          xsd-part="2"
          constraint="cvc-datatype-valid.1">The content "2002-02-31" of element &lt;PUB-DATE&gt; does not match the required simple type. Invalid date "2002-02-31" (Non-existent date)</error>
   <error line="42"
          column="22"
          path="/Q{}BOOKLIST[1]/Q{}BOOKS[1]/Q{}ITEM[3]/Q{}REPUTATION[1]"
          xsd-part="1"
          constraint="cvc-complex-type.2.4">In content of element &lt;ITEM&gt;: The content model does not allow element &lt;REPUTATION&gt; to appear immediately after element &lt;WEIGHT&gt;. No further elements are allowed at this point. </error>
   <meta-data>
      <validator name="SAXON-EE" version="9.8.0.9"/>
      <results errors="4" warnings="0"/>
      <schema file="books.xsd" xsd-version="1.1"/>
      <run at="2018-03-07T15:22:04.847Z"/>
   </meta-data>
</validation-report>

Вы также можете получить информацию, если вы предоставите IInvalidityHandler в качестве обратного вызова для SchemaValidator, хотя это требует немного больше копания. Саксон вызывает ваш IInvalidityHandler, поставляющий объект StaticError (что немного неправильно). Объект StaticError не имеет непосредственно доступной информации о пути, но он содержит ссылку на объект XPathException, который может быть приведен к ValidationException, а ValidationException имеет метод getPath(), который возвращает эту информацию, если она доступна.

<сильный>2. Можем ли мы проверить XML на соответствие schematron.

Saxon не включает валидатор schematron как таковой, хотя многие сторонние инструменты, выполняющие валидацию schematron, используют Saxon «под капотом». Я не в курсе ситуации с .NET, но, по сути, есть два типа процессоров Schematron: те, которые генерируют XSLT-код из схемы schematron (которые обычно используют Saxon как для генерации XSLT, так и для его выполнения) , и "родные" процессоры. Поиск по слову «schematron on .NET» дает довольно много проектов, но я понятия не имею об их текущем статусе или качестве.

person Michael Kay    schedule 09.03.2018
comment
Привет Михаил, Спасибо за быстрый ответ. Не могли бы вы подтвердить, доступна ли проверка схемы только в редакции EE? - person Pankaj Pant; 12.03.2018
comment
Да, для проверки схемы требуется версия EE. - person Michael Kay; 12.03.2018