En informatique , RELAX NG ( REgular LAnguage for XML Next Generation ) est un langage de schéma pour XML : un schéma RELAX NG spécifie un modèle pour la structure et le contenu d'un document XML. Un schéma RELAX NG est lui-même un document XML , mais RELAX NG propose également une syntaxe compacte non XML très répandue. Comparé à d'autres langages de schéma XML, RELAX NG est considéré comme relativement simple.
Elle a été définie par une spécification du comité technique OASIS RELAX NG en 2001 et 2002, basée sur RELAX de Murata Makoto et TREX de James Clark , et également par la deuxième partie de la norme internationale ISO / IEC 19757 : Langages de définition de schéma de document ( DSDL ). L'ISO/IEC 19757-2 a été développée par l'ISO/IEC JTC 1/SC 34 et publiée dans sa première version en 2003.
Exemples de schémas
Supposons que nous souhaitons définir un schéma de balisage XML extrêmement simple pour un livre : un livre est défini comme une séquence d'une ou plusieurs pages ; chaque page ne contient que du texte. Un exemple d'instance de document XML pourrait être :
<book> <page> Ceci est la page un. </page> <page> Ceci est la page deux. </page> </book>
Syntaxe XML
Un schéma RELAX NG peut être écrit dans une structure imbriquée en définissant un élément racine qui contient d'autres définitions d'éléments, qui peuvent elles-mêmes contenir des définitions intégrées. Un schéma pour notre livre dans ce style, utilisant la syntaxe XML complète, serait écrit :
<element name= "livre" xmlns= "http://relaxng.org/ns/structure/1.0" > <oneOrMore> <element name= "page" > <text/> </element> </oneOrMore> </element>
La structure imbriquée devient difficile à manier avec de nombreux sous-niveaux et ne peut pas définir d'éléments récursifs, c'est pourquoi la plupart des schémas RELAX NG complexes utilisent des références à des définitions de modèles nommés situées séparément dans le schéma. Ici, un « schéma aplati » définit exactement le même balisage de livre que l'exemple précédent :
<grammar xmlns= "http://relaxng.org/ns/structure/1.0" > <start> <element name= "book" > <oneOrMore> <ref name= "page" /> </oneOrMore> </element> </start> <define name= "page" > <element name= "page" > <text/> </element> </define> </grammar>
Syntaxe compacte
La syntaxe compacte RELAX NG est un format non XML inspiré de la forme étendue Backus-Naur et des expressions régulières , conçu pour pouvoir être traduit sans ambiguïté vers son équivalent XML, et inversement, avec une correspondance biunivoque en termes de structure et de signification, de la même manière que Simple Outline XML (SOX) se rapporte à XML . Il partage de nombreuses caractéristiques avec la syntaxe des DTD . Voici la forme compacte du schéma ci-dessus :
élément livre { élément page { texte } + }
Avec des modèles nommés, cela peut être aplati en :
début = élément livre { page+ } page = élément page { texte }
Un analyseur RELAX NG compact traitera ces deux éléments comme le même modèle.
Comparaison avec le schéma XML du W3C
Bien que la spécification RELAX NG ait été développée à peu près au même moment que la spécification XML Schema du W3C , cette dernière était sans doute plus connue et plus largement implémentée dans les analyseurs et éditeurs XML open source et propriétaires lorsqu'elle est devenue une recommandation du W3C en 2001. Depuis lors, cependant, le support RELAX NG a de plus en plus trouvé sa place dans les logiciels XML, et son acceptation a été facilitée par son adoption comme schéma principal pour les langages de balisage centrés sur les documents populaires tels que DocBook , les directives TEI , OpenDocument et EPUB .
RELAX NG partage avec le schéma XML W3C de nombreuses fonctionnalités qui les distinguent des DTD traditionnelles : typage des données , prise en charge des expressions régulières , prise en charge des espaces de noms , possibilité de référencer des définitions complexes.
Extensions de noms de fichiers
Par convention informelle, les schémas RELAX NG dans la syntaxe standard sont généralement nommés avec l' extension de nom de fichier « .rng ». Pour les schémas dans la syntaxe compacte, l'extension « .rnc » est utilisée.
Déterminisme
Les schémas Relax NG ne sont pas nécessairement « déterministes » ou « sans ambiguïté ».
Conversion de Relax NG en DTD
Les schémas Relax NG peuvent être convertis en DTD en appliquant Trang, disponible à l'adresse suivante : [1]. Le manuel de Trang se trouve à l'adresse suivante : [2]. Notez que Trang ne parvient pas à convertir le schéma OASIS DITA 1.3 en DTD, et échoue avec des messages tels que :
désolé, la combinaison de définitions avec combine="choice" n'est pas prise en charge