2010-06-30 5 views
5

J'essaie d'ajouter une validation schematron à mon xsd. Ceci est mon nouveau xsd:validation xsd en utilisant 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> 

Ceci est mon xml test:

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

Utilisation du xml I à condition que je ne reçois pas d'erreur de validation.

J'ai supposé que j'obtiendrais le message "Chaque livre qui est prêté doit avoir une date de retour" Et que le xml ne sera pas valide. Suggestions sur pourquoi?

Mise à jour J'ai réussi à le faire fonctionner en utilisant la validation schematron dans l'éditeur xml d'oXygen. Cependant, comment dois-je l'utiliser dans mon code? Dois-je installer quelque chose de spécial? lien vers une autre bibliothèque?

Update2 Apparemment here dans la section "Traitement", toutes les étapes nécessaires sont détaillées.

Répondre

8

Votre deuxième mise à jour est probablement la meilleure référence au sujet. XSD lui-même ne vous permet pas un mécanisme de validation contre un schematron ainsi que le schéma lui-même. L'élément xsd:appinfo vous permet d'intégrer des informations de validation pour un langage de schéma différent, mais il est spécifique à l'utilisation de l'application (d'où le nom).

Cela signifie que vous devez faire quelque chose pour l'activer. Le document que vous avez mentionné donne la meilleure approche qui se résume à:

  1. Utilisez XSLT pour extraire le schematron règles de votre XSD
  2. Utilisez la mise en œuvre à partir de XSLT de référence schematron.com pour convertir le schéma XSLT
  3. valider votre document d'instance contre la XSD
  4. valider votre document d'instance contre le schematron par le traitement XSLT créée en 2.

En fonction de votre environnement, vous voudrez peut-être envisager de regarder un pipeline pour atteindre cet XProc mise en œuvre (ou calabashcalumet).