2010-06-30 17 views
5

Estoy tratando de agregar la validación de schematron a mi xsd. Este es mi nuevo xsd:validación de xsd con schematron

<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> 

Esta es mi prueba xml:

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

Usando el xml I, siempre que no entiendo error de validación.

Supuse que obtendría el mensaje "Todos los libros que están en préstamo deben tener una fecha de devolución" Y que el xml no será válido. Sugerencias sobre por qué?

Actualización Me las arreglé para hacerlo funcionar usando la validación de schematron en el editor xml de xXgen. Sin embargo, ¿cómo se supone que debo usar en mi código? ¿Debo instalar algo especial? enlace a otra biblioteca?

Update2 Al parecer here en la sección "Tratamiento", todos los pasos necesarios se detallan.

Respuesta

8

Su segunda actualización es probablemente la mejor referencia sobre el tema. XSD en sí mismo no le permite un mecanismo para validar contra un schematron así como el esquema mismo. El elemento xsd:appinfo le permite insertar información de validación para un lenguaje de esquema diferente, pero es específicamente para el uso de la aplicación (de ahí el nombre).

Eso significa que debe hacer algo para habilitarlo. El documento al que hizo referencia da el mejor enfoque que se reduce a:

  1. Uso XSLT para extraer el schematron reglas de su XSD
  2. Uso del XSLT referencia aplicación de schematron.com para convertir el esquema a XSLT
  3. validar su documento de instancia contra el XSD
  4. validar su documento de instancia contra la schematron mediante el procesamiento de XSLT creado en 2.

Dependiendo de su entorno es posible que desee considerar la búsqueda de una aplicación XProc (calabash o calumet) para lograr que el oleoducto.

Cuestiones relacionadas