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
1
<!ELEMENT document (paragraphe+)>
2
<!ATTLIST document type CDATA #REQUIRED>
3
<!ELEMENT paragraphe (#PCDATA)>
Exemple : Exemple de schéma RelaxNG correspondant (syntaxe XML)
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>
Exemple : Exemple de schéma RelaxNG correspondant (syntaxe compacte)
1
start = element document {
2
attribute type {text},
3
element paragraphe {text}+
4
}
Exemple : Autre exemple de schéma RelaxNG correspondant (syntaxe XML, patterns nommés)
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>
Exemple : Autre exemple de schéma RelaxNG correspondant (syntaxe compacte, patterns nommés)
1
start = document
2
document = element document {attribute type {text}, paragraphe+ }
3
paragraphe = element paragraphe {text}