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 }