RELAX NG
- RELAX NG (Regular Language description
for XML Next Generation)
(.rng)
- Easier to implement and learn than XSD
- Can be combined with XML Datatype Schema
- Has both an XML syntax and a compact
non-XML syntax
- Supports XML namespaces
Syntax
Default namespace
<?xml version="1.0" encoding="UTF-8"?>
<element name="root-element-name"
xmlns="http://relaxng.org/ns/structure/1.0">
<element name="element-name">
...
</element>
</element>
Specified namespace
<?xml version="1.0" encoding="UTF-8"?>
<rng:element name="root-element-name"
xmlns:rng="http://relaxng.org/ns/structure/1.0">
<rng:element name="element-name">
...
</rng:element>
</rng:element>
Datatypes
<element name="root-element-name"
xmlns:rng="http://relaxng.org/ns/structure/1.0"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<element name="element-name">
<data type="type-name"/>
</element>
...
</element>
Grammar
<?xml version="1.0" encoding="UTF-8"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
...
</start>
<define>
...
</define>
...
</grammar>
References
<?xml version="1.0" encoding="UTF-8"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
<ref name="Ref-Name"/>
</start>
<define name="Ref-Name">
<element name="element-name">
..
</element>
</define>
...
</grammar>
Sample RELAX NG files
Default namespace
<?xml version="1.0" encoding="UTF-8"?>
<element name="catalog"
xmlns="http://relaxng.org/ns/structure/1.0">
<zeroOrMore>
<element name="cd">
<element name="title"><text/></element>
<element name="artist"><text/></element>
</element>
</zeroOrMore>
</element>
Specified namespace
<?xml version="1.0" encoding="UTF-8"?>
<rng:element name="catalog"
xmlns:rng="http://relaxng.org/ns/structure/1.0">
<rng:zeroOrMore>
<rng:element name="cd">
<rng:element name="title"><rng:text/></rng:element>
<rng:element name="artist"><rng:text/></rng:element>
</rng:element>
</rng:zeroOrMore>
</rng:element>
Datatypes
<element name="point"
xmlns:rng="http://relaxng.org/ns/structure/1.0"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<element name="x">
<data type="double"/>
</element>
<element name="y">
<data type="double"/>
</element>
</element>
Grammar
<?xml version="1.0" encoding="UTF-8"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
...
</start>
<define>
...
</define>
...
</grammar>
References
<?xml version="1.0" encoding="UTF-8"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<start>
<ref name="Catalog"/>
</start>
<define name="Catalog">
<element name="catalog">
<zeroOrMore>
<ref name="CD"/>
</zeroOrMore>
</element>
</define>
<define name="CD">
<element name="cd">
<ref name="Title"/>
<ref name="Artist"/>
</element>
</define>
<define name="Title">
<element name="title">
<text/>
</element>
</define>
<define name="Artist">
<element name="artist">
<text/>
</element>
</define>
</grammar>
Sample usage in XML files
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<cd>
<title>...</title>
<artist>...</artist>
</cd>
...
</catalog>