проверка xsd с использованием schematron

Я пытаюсь добавить проверку schematron в свой файл xsd. Это мой новый xsd:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    xmlns:sch="http://www.ascc.net/xml/schematron"    
    elementFormDefault="qualified" &gt;

 <xs:element name="books"> 
  <xs:complextype>
   <xs:sequence>   ;P 
    <xs:element name="book" type="bookType" maxoccurs="unbounded">
      <xs:annotation>
       <xs:appinfo>
        <sch:pattern id="onLoanTests" xmlns:sch="http://purl.oclc.org/dsdl/schematron">
          <sch:rule context="book">
           <sch:report test="@on-loan and not(@return-date)">
           Every book that is on loan must have a return date
           </sch:report>
          </sch:rule>
        </sch:pattern>
       </xs:appinfo>
      </xs:annotation>
    </xs:element>
   </xs:sequence> 
  </xs:complextype>
 </xs:element>

 <xs:complextype name="bookType">
  <xs:sequence>
   <xs:element name="title" type="xs:string" />
   <xs:element name="author" type="xs:string" />
   <xs:element name="publication-date" type="xs:string" />
  </xs:sequence>
  <xs:attribute name="publisher" type="xs:string" use="required" />
  <xs:attribute name="on-loan" type="xs:string" use="required" />
  <xs:attribute name="return-date" type="xs:string" use="optional" />
 </xs:complextype>

</xs:schema>

Это мой тестовый xml:

<books>
<book publisher="ddd" on-loan="sdsd">
  <title>idan title</title> 
  <author>idan author</author> 
  <publication-date>idan date</publication-date> 
</book>
</books>

Используя предоставленный мной xml, я не получаю ошибку проверки.

Я предполагал, что получу сообщение «Каждая книга, предоставленная взаймы, должна иметь дату возврата» И что XML не будет действительным. Предложения, почему?

Обновление Мне удалось заставить его работать с помощью проверки схемы в редакторе xml oXygen. Однако как я могу использовать в своем коде? Нужно ли устанавливать что-то особенное? ссылка на другую библиотеку?

Update2 Как видно здесь в разделе "Обработка", все необходимые шаги подробно описаны.


person Idan    schedule 30.06.2010    source источник


Ответы (1)


Ваше второе обновление, вероятно, является лучшей ссылкой на эту тему. Сам XSD не позволяет вам использовать механизм проверки схемы, а также самой схемы. Элемент xsd:appinfo позволяет встраивать проверочную информацию для другого языка схемы, но он предназначен специально для использования в приложении (отсюда и название).

Это означает, что вам нужно сделать что-то, чтобы включить его. Документ, на который вы ссылаетесь, дает лучший подход, который сводится к:

  1. Используйте XSLT для извлечения правил схемы из вашего XSD.
  2. Используйте эталонную реализацию XSLT с сайта schematron.com, чтобы преобразовать схему в XSLT.
  3. Проверьте документ экземпляра на соответствие XSD.
  4. Проверьте свой экземпляр документа на соответствие схеме, обработав XSLT, созданный в шаге 2.

В зависимости от вашей среды вы можете рассмотреть реализацию XProc (калебас или calumet) для достижения этого конвейера.

person Nic Gibson    schedule 03.09.2010