Relax NG

De nos jours, Relax NG est un sujet qui a acquis une grande importance dans la société actuelle. Son impact transcende les frontières et couvre différents aspects de la vie quotidienne. C'est pourquoi il est nécessaire d'analyser en détail les différents angles et perspectives qu'offre Relax NG, puisque son influence est palpable dans divers domaines, de la politique à la culture populaire. Dans cet article, nous allons plonger dans le monde de Relax NG pour mieux comprendre son importance et comment il affecte les gens dans leur vie quotidienne. Cette analyse nous permettra d'avoir une vision plus large et plus complète de Relax NG et de son impact sur le monde actuel.

Relax NG (Regular Language for XML Next Generation) est un langage de description de document XML issu de la fusion de TreX de James Clark et de Relax de Murata Makoto. Considéré comme une alternative à XML Schema, c'est un dialecte XML permettant de définir précisément les différentes contraintes qui déterminent la classe des documents XML qui peuvent passer l'étape de validation. Il existe également une syntaxe compacte, non-XML.

Relax NG ne spécifie que la structure des documents XML (quels éléments, comment les combiner), sans s'occuper de la valeur des éléments (par exemple le fait que le contenu d'un élément doit forcément être une date ou bien forcément être une chaîne de dix caractères). Cette vérification de la valeur des éléments est sous-traitée à la bibliothèque de types de XML Schema (ce qui est fait automatiquement par le processeur Relax NG).

Le leader sur ce projet est James Clark, déjà reconnu pour ses travaux en SGML, notamment sur le parseur nsgmls.

Relax NG est spécifié par l'OASIS et fait partie de la norme Document Schema Definition Languages (DSDL) de l'ISO/CEI 19757-2.

Relax NG est utilisé pour spécifier OpenDocument, Atom et DocBook depuis la version 5.

Exemple

Voici un exemple de fichier Relax NG (en syntaxe compacte, pour l’œil) :

start = personne
personne = element personne {nom & prenom & date_naissance?}
nom = element nom {text}
prenom = element prenom {text}
date_naissance = element date_naissance {xsd:date}

et le même en syntaxe XML (on note la référence aux types de XML Schema) :

 <?xml version="1.0" encoding="UTF-8"?>
 <grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
  <start>
    <ref name="personne"/>
  </start>
  <define name="personne">
    <element name="personne">
      <interleave>
        <ref name="nom"/>
        <ref name="prenom"/>
        <optional>
          <ref name="date_naissance"/>
        </optional>
      </interleave>
    </element>
  </define>
  <define name="nom">
    <element name="nom">
      <text/>
    </element>
  </define>
  <define name="prenom">
    <element name="prenom">
      <text/>
    </element>
  </define>
  <define name="date_naissance">
    <element name="date_naissance">
      <data type="date"/>
    </element>
  </define>
 </grammar>

Il existe des outils, comme Trang, qui permettent de convertir entre les deux syntaxes ou de Relax NG vers XML Schema ou une DTD. Il est par contre beaucoup plus difficile de convertir un XML Schema en Relax NG.

Voir aussi

Liens externes