<?xml version="1.0" encoding="utf-8"?>
<fiche title="Relax NG" isbn="0-596-00421-4">
<authors><author>Eric ven der Vlist</author></authors>
<editor>O'Reilly</editor>
<date>2005-12-07</date>
<content>
<p>Il existe désormais trois langages courants pour écrire des schémas
<wikipedia name="Extensible Markup Language">XML</wikipedia> c'est-à-dire pour décrire les éléments
autorisés ou interdits dans un document
XML. <wikipedia>RelaxNG</wikipedia>, le plus récent, est le moins
connu des trois et méritait donc bien un livre chez O'Reilly, avec un
faisan sur la couverture, pour gagner davantage de popularité.</p>
<p>Autrefois, les schémas XML ne pouvaient s'écrire qu'avec une
<wikipedia name="Document Type Definition">DTD</wikipedia> et c'est la seule solution décrite dans la
<link url="http://www.w3.org/TR/2004/REC-xml-20040204/">norme XML</link>. Les limitations des DTD ont mené à
l'invention de nouveaux langages, le plus connu étant <link
url="http://www.w3.org/XML/Schema">W3C Schema</link>, aussi dit XSD.</p>
<p>XSD est très complexe, souffre d'une syntaxe XML verbeuse, et est en
même temps limité dans les schémas qu'il permet de décrire. Bien qu'il
bénéficie d'une présence supérieure dans les médias, il n'a pas été
choisi pour certains gros projets (<wikipedia>Docbook</wikipedia>,
<wikipedia>OpenDocument</wikipedia>, <wikipedia>Atom</wikipedia>, etc)
qui ont préféré RelaxNG.</p>
<p>C'est un signe de la simplicité de RelaxNG que le fait que ce livre
soit à la fois relativement mince et très complet : il est rare qu'un
sujet en soit absent. L'annotation d'un schéma (par exemple pour le
documenter ou pour y mettre des métadonnées) fait ainsi l'objet d'un
chapitre entier.</p>
<p>L'auteur, Eric van der Vlist, est également l'auteur du <link local="xml-schema">O'Reilly
sur XSD</link>, il connait donc bien les deux "concurrents", même si sa
préférence pour RelaxNG ne fait guère de doute. Francophone, il est
également un des piliers de la liste xml-fr, où il répond en général
très rapidement aux questions.</p>
<p>Ce livre couvre donc l'essentiel de RelaxNG : ses principes (ne
valider que la structure, pas le contenu des éléments, ne pas changer
les valeurs des éléments), puis sa syntaxe (RelaxNG a deux syntaxes, une XML
et une dite compacte, bien plus lisible).</p>
<p>Il explique ensuite comment contraindre les valeurs des éléments
grâce aux bibliothèques de types (extérieures à RelaxNG proprement
dit), puis explique en détail comment réaliser des schémas qui, au
lieu d'être des blocs monolithiques, soient extensibles ou
restrictibles facilement, de façon à ce que leurs utilisateurs
puissent n'utiliser que ce qu'ils veulent.</p>
<p>Le livre se termine sur un remarquable chapitre sur le déterminisme
dans les schémas et pourquoi RelaxNG ne l'impose pas.</p>
<p>Notez que le schéma des fichiers XML de ce blog est <link
local="blog-implementation">écrit en RelaxNG</link>.</p>
</content>
</fiche>
