Regular Language for XML Next Generation
RelaxNG (REgular LAnguage for XML Next Generation) est un langage de schéma XML.
RelaxNG est une alternative aux DTD et à W3C XML Schema, qui combine les avantages de ces deux autres langages.
RelaxNG est un standard OASIS et une norme ISO/CEI.
Deux syntaxes : une syntaxe XML (alternative à W3C Schema) et une syntaxe compacte (alternative aux DTD).
RelaxNG ne définit que la structure (comme les DTD) et utilise W3C XML Schema pour le typage des données.
Complément :
Le standard est porté par James Clark depuis ses travaux sur Trex (il est issu de la fusion de Trex et Relax de Murata Makoto).
Exemple : Exemple de schémas publics définis en Relax NG
OpenDocument (format bureautique)
DocBook (format documentaire)
Atom (syndication)
Exemple : Exemple de DTD
Exemple : Exemple de schéma RelaxNG correspondant (syntaxe XML)
CTRL+C pour copier, CTRL+V pour coller
1
2
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
3
<start>
4
<element name="document">
5
<attribute name="type"/>
6
<oneOrMore>
7
<element name="paragraphe">
8
<text/>
9
</element>
10
</oneOrMore>
11
</element>
12
</start>
13
</grammar>
<?xml version="1.0" encoding="UTF-8"?> <grammar xmlns="http://relaxng.org/ns/structure/1.0"> <start> <element name="document"> <attribute name="type"/> <oneOrMore> <element name="paragraphe"> <text/> </element> </oneOrMore> </element> </start> </grammar>
Exemple : Exemple de schéma RelaxNG correspondant (syntaxe compacte)
Exemple : Autre exemple de schéma RelaxNG correspondant (syntaxe XML, patterns nommés)
CTRL+C pour copier, CTRL+V pour coller
1
2
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
3
<start>
4
<ref name="document"/>
5
</start>
6
<define name="document">
7
<element name="document">
8
<attribute name="type"/>
9
<oneOrMore>
10
<ref name="paragraphe"/>
11
</oneOrMore>
12
</element>
13
</define>
14
<define name="paragraphe">
15
<element name="paragraphe">
16
<text/>
17
</element>
18
</define>
19
</grammar>
<?xml version="1.0" encoding="UTF-8"?> <grammar xmlns="http://relaxng.org/ns/structure/1.0"> <start> <ref name="document"/> </start> <define name="document"> <element name="document"> <attribute name="type"/> <oneOrMore> <ref name="paragraphe"/> </oneOrMore> </element> </define> <define name="paragraphe"> <element name="paragraphe"> <text/> </element> </define> </grammar>
Exemple : Autre exemple de schéma RelaxNG correspondant (syntaxe compacte, patterns nommés)
CTRL+C pour copier, CTRL+V pour coller
1
start = document
2
document = element document {attribute type {text}, paragraphe+ }
3
paragraphe = element paragraphe {text}
start = document document = element document {attribute type {text}, paragraphe+ } paragraphe = element paragraphe {text}