Schematron
En langage de balisage, Schematron est un langage permettant de valider la structure d'un document XML par une liste d'assertions. Schematron permet de définir des contraintes complexes, que d'autres langages de validation XML ne permettent pas. Cependant, contrairement aux langages de validation par grammaire, comme DTD, XML Schema ou RELAX NG, tout ce qui n'est pas spécifié est considéré comme valide. Aussi, Schematron est utilisé en complément d'un de ces langages.
Versions et standard
[modifier | modifier le code]Schematron a été inventé par Rick Jelliffe à l'Academia Sinica Computing Centre de Taiwan.
Les versions les plus remarquables sont :
- Schematron 1.0 (1999)
- Schematron 1.3 (2000): Cette version utilise l'espace de nommage
http://xml.ascc.net/schematron/
. - Schematron 1.5 (2001)
- Schematron 1.6 (2002)
- ISO Schematron (2006): Cette version utilise l'espace de nommage
http://purl.oclc.org/dsdl/schematron
. Elle fait partie de la norme ISO/CEI 19757[1]. Cette version introduit également un format de rapport de validation, SVRL.
Fonctionnement
[modifier | modifier le code]Format
[modifier | modifier le code]Schematron est un langage se conformant lui-même au balisage XML. Il permet de définir un ensemble d'assertions en XPath liées à des métadonnées, tel qu'un message d'erreur en texte libre. Le code ci-dessous est un exemple de fichier Schematron :
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://purl.oclc.org/dsdl/schematron">
<pattern>
<title>Contraintes sur les dates</title>
<rule context="Contract">
<assert test="ContractDate < current-date()">La date des contrats, ContractDate, doit être passée.</assert>
</rule>
</pattern>
</schema>
L'assertion vérifie que, pour chaque élément Contract
, il existe un élément fils ContractDate
dont la valeur est inférieure à la date actuelle.
Il est également possible d'embarquer les règles directement dans un fichier XSD ou RELAX NG. Le code ci-dessous est un exemple de règles embarquées dans un schéma XSD :
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:sch="http://purl.oclc.org/dsdl/schematron">
<xs:element name="adresse">
<xs:annotation>
<xs:appinfo>
<sch:pattern>
<sch:rule context="adresse">
<sch:assert test="(@ville and @codePostal) or not @ville">Dans une adresse,
si l'attribut ville est renseigné, alors le code postal doit également être renseigné.</sch:assert>
</sch:rule>
</sch:pattern>
</xs:appinfo>
</xs:annotation>
<xs:complexType>
<xs:attribute name="ville" type="xs:string" use="optional"/>
<xs:attribute name="codePostal" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
</xs:schema>
Validation
[modifier | modifier le code]Plusieurs implémentations consistent à convertir les fichiers Schematron en feuilles XSLT, un simple processeur XSLT permet alors de valider les fichiers XML.
Certains outils commerciaux, par exemple Oxygen XML Editor et XMLBlueprint XML Editor, vérifient nativement les contraintes Schematron.
Voir aussi
[modifier | modifier le code]Liens externes
[modifier | modifier le code]- http://www.schematron.com Site officiel de Schematron
- Ancien site officiel de Schematron
Références
[modifier | modifier le code]- ISO/CEI 19757 - Document Schema Definition Languages (DSDL) - Part 3: Rule-based validation - Schematron