Další definiční nástroj se jmenuje plným názvem REgular LAnguage for XML Next Generation. Je alternativou pro XML Schema Definition a DTD. Lze konstatovat, že RelaxNG je svými definičními možnostmi mezi těmito nástroji. Jeho zápis můžeme realizovat dvěma způsoby – konvenčním (dle XML pravidel) a zkráceným (mimo konvence XML).
Dlouhý zápis pro definici základních parametrů notebooku.
<element xmlns="http://relaxng.org/ns/structure/1.0" name=„notebook">
<attribute name=„kategorie">
<text/>
</attribute>
<element name=„vyrobce">
<text/>
</element>
<element name=„model">
<text/>
</element>
<element name=„procesor">
<text/>
</element>
<element name=„architektura">
<text/>
</element>
</element>
Oproti tomuto zápisu lze použít i kratší formu. Jejich funkcionalita je stejná, závisí tedy hlavně na preferenci autora.
element notebook
{
attribute kategorie { text },
element vyrobce { text },
element model { text },
element procesor { text },
element architektura { text } }
I v RelaxNG máme možnost stanovit volitelnost elementů. Zde pomocí dlouhého zápisu.
<optional>
<element name=„dvd">
</optional>
<optional>
<attribute name=„lightscribe"/>
<text/>
</attribute>
</optional>
Stejný zápis kratší formou.
element notebook {
attribute lightscribe { text }?
element dvd { text }?,
}
Pokud je nutno realizovat evidenci více položek od jednoho elementu, pak je to delším zápisem následovně.
<oneOrMore>
<element name="telefon">
<text/>
</element>
</oneOrMore>
A opět stejný příklad za pomoci krátkého zápisu.
element student {
element telefon{ text }+,
}
Podobná dvojice pak reprezentuje volitelnost – tedy možnost zapsat více položek, ale také vůbec žádnou.
<zeroOrMore>
<element name="prostredni_jmeno">
<text/>
</element>
</zeroOrMore>
Krátká forma.
element student {
element prostredni_jmeno { text }*,
}
Výběr ze dvou variant je použitelný tam, kde nevíme, jakou značku budeme potřebovat. Například pro zadání publikace – nemůžeme vědět, zda se jedná o elektronickou nebo papírovou verzi.
Příklad XML.
<clanek>
<nazev>XML jednoduše</nazev>
<ISBN>23568-8512</ISBN>
</clanek>
<clanek>
<nazev>XML jednoduše</nazev>
<ISSN>114-964</ISSN>
</clanek>
Definice v XML podobě.
<element name=„clanek">
<element name=„nazev">
<text/>
</element>
<choice>
<element name=„ISBN">
<text/>
</element>
<element name=„ISSN">
<text/>
</element>
</choice>
</element>
Stejný zápis krátkou verzí. Výběr je realizován znakem |
Element clanek
{
Element nazev{ text },
(element ISBN { text } | element ISSN { text })
}
Autoři RelaxNG se snažili zjednodušit zápis definic, který je v XSD velmi rozsáhlý. Na druhou stranu si uvědomovali, že definovat vše znovu je zbytečné. Proto si z XSD vzali definice datových typů a za pomoci xsd namespaces jej lze použít v RelaxNG.
<element name=„rok_vyroby">
<data type=„integer"/>
</element>
<element name=„spotreba">
<data type=„decimal"/>
</element>
Krátká verze zápisu.
element cena { xsd:decimal }
Při pohledu na krátký zápis je vidět vysoká úspora znaků pro definování elementu a datového typu. Z XSD je možné použít i omezení pro zadávané hodnoty.
<element name=„rok_vyroby">
<data type=„integer">
<param name="minInclusive">1920</param>
<param name="maxExclusive">2010</param>
</data>
</element>
Krátká verze zápisu.
element rok_vyroby {
xsd:integer { minInclusive = „1920" maxExclusive = „2010" } }
I v RelaxNG je možné využívat další funkcionalitu XSD – skupiny.
XML
<element name=„personalie">
<ref name="adresa"/>
</element>
RelaxNG (XML zápis)
<define name="adresa">
<element name="ulice">
<text/>
</element>
<element name=„cislo_popisne">
<text/>
</element>
<element name="mesto">
<text/>
</element>
<element name="psc">
<text/>
</element>
</define>
Krátká verze.
adresa = element ulice { text }, element cislo_popisne { text }, element mesto { text}, element psc { text }