Какой механизм использует MarkLogic для проверки XML-документов на соответствие XML-схеме версии 1.1? - PullRequest
0 голосов
/ 30 апреля 2018

Меня попросили изучить использование XML-схем версии 1.1 в среде MarkLogic для объединения утверждений Schematron в XML-схему.

Одна вещь, которую XSD 1.1 не указывает, - это использование пользовательских сообщений об ошибках в том виде, в каком они находятся в файлах Schematron.

Я обнаружил, что и Saxonica, и Xerces имеют расширения для решения этой проблемы.

Вот как Саксоника решает проблему:

<xs:element name="date">
  <xs:simpleType>
     <xs:restriction base="xs:date" xmlns:saxon="http://saxon.sf.net/">
       <xs:assertion test=". lt current-date()"
                  saxon:message="The date must not be in the future"/>
       <xs:pattern value="[^Z:]*" 
                  saxon:message="The date must not have a timezone"/>
     </xs:restriction>   
  </xs:simpleType>
</xs:element>

Вот как Xerces решает проблему:

  <xs:simpleType name="myPrecisionDecimal">
    <xs:restriction base="xs:decimal" xmlns:xerces="http://xerces.apache.org">
       <xs:totalDigits value="6" />
       <xs:fractionDigits value="4" />
       <xs:assertion test="string-length(substring-after(string($value), '.')) ge 2" 
              xerces:message="minScale of this decimal number should be 2" />
    </xs:restriction>
  </xs:simpleType>

Также: Обрабатывает ли какое-либо из этих расширений что-либо вроде тегов <sch:name/> или <sch:value-of/> в Schematron assert tag <sch:assert test="..."/>?

1 Ответ

0 голосов
/ 01 мая 2018

Что касается саксонцев, то нет способа параметризовать сообщение. Однако вы можете попросить Saxon сгенерировать отчет в формате XML, содержащий всю информацию о недействительности с контекстной информацией о том, где они появляются, и вы можете выполнить преобразование этого отчета, чтобы собрать информацию в любую форму, которая вам нравится (включая, например, интерактивное представление, которое показывает исходный документ с недопустимыми элементами, выделенными красным).

...