<сильный>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 <BOOKS></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 <PRICE> 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 <PUB-DATE> 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 <ITEM>: The content model does not allow element <REPUTATION> to appear immediately after element <WEIGHT>. 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