Schematron en bref

(Extrait du livre publié en langue allemande "Schematron - Effiziente Business Rules für XML-Dokumente", chapitre 5)

XPath offre de nombreuses possibilités d'analyse et de vérification de documents XML selon les critères les plus divers. Nous intégrerons cette même structure XPath dans le langage Schematron, afin de signaler d'éventuelles erreurs et d'y apporter les réponses les plus adaptées. Ces pages propose une initiation à Schematron et explique de manière détaillée le mode de fonctionnement de chaque construction. 


Après la lecture de cette introduction Schematron, vous serez capables d'analyser des documents XML à partir du Schematron normalisé ISO, de comprendre son fonctionnement et de concevoir des schémas applicables.
Nous expliquerons le mode de fonctionnement des constructions Schematron les plus importantes à partir de la instance d'exemple Arche de Noé, mais tout d'abord commençons par un bref aperçu historique.

L'instance d'exemple XML – la sérialisation XML du Arche de Noé:

<?xml version="1.0" encoding="UTF-8"?>
<arche xmlns="http://www.schematron.info/arche" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.schematron.info/arche arche.xsd">
  <chargement>
    <chambre>
      <animal sexe="femelle" carnivore="non">
        <espece>zebre</espece>
        <poids>200</poids>
        <age>12</age>
      </animal>
      <animal sexe="male" carnivore="non">
        <espece>zebre</espece>
        <poids>250</poids>
        <age>13</age>
      </animal>
    </chambre>
    <chambre>
      <animal sexe="femelle" carnivore="oui">
        <espece>lion</espece>
        <poids>200</poids>
        <age>23</age>
      </animal>
      <animal sexe="male" carnivore="oui">
        <espece>lion</espece>
        <poids>180</poids>
        <age>30</age>
      </animal>
    </chambre>
    <chambre>
      <animal sexe="femelle" carnivore="non">
        <espece>elephant</espece>
        <poids>10000</poids>
        <age>20</age>
      </animal>
      <animal sexe="male" carnivore="non">
        <espece>elephant</espece>
        <poids>15000</poids>
        <age>40</age>
      </animal>
    </chambre>
  </chargement>
  <maxAgeReproduction>
    <animal_espece>
      <name>elephant</name>
      <male>80</male>
      <femelle>30</femelle>
    </animal_espece>
    <animal_espece>
      <name>lion</name>
      <male>30</male>
      <femelle>15</femelle>
    </animal_espece>
    <animal_espece>
      <name>zebre</name>
      <male>30</male>
      <femelle>20</femelle>
    </animal_espece>
  </maxAgeReproduction>
  <charge>44000</charge>
</arche>

Les conditions pour une "bonne" cohabitation sur l'Arche sont collectionnées au schéma XML suivant:

Représentation graphique du schéma d'Arche:

Représentation graphique du schéma d'Arche

Le fichier d'XML Schema:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.schematron.info/arche" xmlns="http://www.schematron.info/arche" elementFormDefault="qualified">
  <xs:element name="age" type="xs:positiveInteger"/>
  <xs:element name="arche">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="chargement"/>
        <xs:element ref="maxAgeReproduction"/>
        <xs:element ref="charge"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="espece" type="xs:string"/>
  <xs:element name="poids" type="xs:positiveInteger"/>
  <xs:element name="chargement">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="chambre" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="maxAgeReproduction">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="animal_espece" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="male" type="xs:positiveInteger"/>
  <xs:element name="nom" type="xs:string"/>
  <xs:element name="charge" type="xs:positiveInteger"/>
  <xs:element name="animal">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="espece"/>
        <xs:element ref="poids"/>
        <xs:element ref="age"/>
      </xs:sequence>
      <xs:attribute name="sexe" use="required">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="male"/>
            <xs:enumeration value="femelle"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="carnivore" use="required">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="oui"/>
            <xs:enumeration value="non"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
  <xs:element name="animal_espece">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="nom"/>
        <xs:element ref="male"/>
        <xs:element ref="femelle"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="chambre">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="animal" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="femelle" type="xs:positiveInteger"/>
</xs:schema>
  suivant>>

 

 

 


Copyright © dpunkt.verlag GmbH 2011
Vous pouvez imprimer cette version en ligne pour un usage privé. Par ailleurs, ce chapitre du livre "Schematron - Effiziente Business Rules für XML-Dokumente" est soumis aux mêmes clauses prévues pour la version papier : L'intégralité de l'oeuvre est protégée par les droits d'auteurs. Tous droits réservés y compris la copie, la traduction, la reproduction sur microfilm, tout comme l'enregistrement et le traitement dans des systèmes électroniques.

dpunkt.verlag GmbH, Ringstraße 19B, 69115 Heidelberg, téléphone + 49 (0)6221-14830, fax + 49 (0)6221-148399, hallo(at)dpunkt.de