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.

http://relaxng.org/

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).

ExempleExemple de schémas publics définis en Relax NG

  • OpenDocument (format bureautique)

  • DocBook (format documentaire)

  • Atom (syndication)

ExempleExemple de DTD

1
<!ELEMENT document (paragraphe+)>
2
<!ATTLIST document type CDATA #REQUIRED>
3
<!ELEMENT paragraphe (#PCDATA)>

ExempleExemple de schéma RelaxNG correspondant (syntaxe XML)

1
<?xml version="1.0" encoding="UTF-8"?>
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>

ExempleExemple de schéma RelaxNG correspondant (syntaxe compacte)

1
start = element document {
2
  attribute type {text}, 
3
  element paragraphe {text}+ 
4
}

ExempleAutre exemple de schéma RelaxNG correspondant (syntaxe XML, patterns nommés)

1
<?xml version="1.0" encoding="UTF-8"?>
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>

ExempleAutre 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}