Nejmenší schéma
Schéma níže požaduje kořen katalog a nejméně jednu knihu. Každá má povinný atribut id a textový název. Jmenný prostor schématu není jmenným prostorem validovaného dokumentu.
<element xmlns="http://relaxng.org/ns/structure/1.0" name="katalog">
<oneOrMore><element name="kniha">
<attribute name="id"><text/></attribute>
<element name="nazev"><text/></element>
</element></oneOrMore>
</element> Dokument a ověření
Ulož schéma do katalog.rng, dokument do katalog.xml. Ve zdejším XML nástroji vyber na záložce Schéma RELAX NG. Nebo použij xmllint --noout --relaxng katalog.rng katalog.xml. Odebrání id má validaci porušit.
<katalog><kniha id="k1"><nazev>XML v praxi</nazev></kniha></katalog> Skládání vzorů
choice vybírá alternativu, optional dovoluje vynechání, zeroOrMore opakování a interleave prokládání bez pevného pořadí. Pomocí grammar, define a ref znovu použiješ vzor. Datové typy XSD se zapojují přes datatypeLibrary; samotné text nezaručuje číslo.
RNG a RNC
RNC je jiný zápis stejného modelu. Není XML a nelze jej vložit jako RNG do našeho validátoru. Pro převod použij například Trang. RELAX NG nenahrazuje obchodní pravidla typu součet částek; ta doplň Schematronem. Pořadí elementů je významové, pořadí atributů ne.
element katalog { element kniha { attribute id { text }, element nazev { text } }+ } Namespace, datové typy a opakovaně použitý vzor
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
ns="urn:knihy" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<start><element name="katalog"><oneOrMore><ref name="kniha"/></oneOrMore></element></start>
<define name="kniha"><element name="kniha">
<attribute name="id"><data type="token"/></attribute>
<interleave>
<element name="nazev"><text/></element>
<element name="cena"><data type="decimal"><param name="minInclusive">0</param></data></element>
<optional><element name="poznamka"><text/></element></optional>
</interleave>
</element></define>
</grammar> <katalog xmlns="urn:knihy"><kniha id="k1"><cena>199.50</cena><nazev>XML</nazev></kniha></katalog> Grammar sdružuje start a pojmenovanou definici. Ref dovoluje tentýž vzor opakovat bez kopírování. ns stanoví prostor elementů validovaného dokumentu, zatímco xmlns patří samotnému RNG. Neprefixovaný atribut id není v prostoru urn:knihy. Datatype library dává hodnotě cena pravidla xs:decimal a ne zápis s exponentem.
Spusť xmllint --noout --relaxng knihy.rng knihy.xml. Při změně ceny na -1 nebo text abc validace selže; po vynechání namespace také. Zaměněné pořadí názvu a ceny projde, protože interleave umožňuje obě pořadí. Optional dovoluje vynechat poznámku, nikoli přidat neznámý element.
Stejný model v kompaktní syntaxi
default namespace = "urn:knihy"
datatypes xsd = "http://www.w3.org/2001/XMLSchema-datatypes"
start = element katalog { kniha+ }
kniha = element kniha {
attribute id { xsd:token },
(element nazev { text } &
element cena { xsd:decimal { minInclusive = "0" } } &
element poznamka { text }?)
} Znak & vyjadřuje interleave, čárka pevné pořadí, svislá čára choice, otazník nepovinný vzor a plus jeden či více výskytů. RNC není XML. Pro náš validátor nejdřív vytvoř RNG například příkazem java -jar trang.jar knihy.rnc knihy.rng s knihovnou Trang; compact syntax může přímo zpracovat i Jing podle své konfigurace.
RELAX NG je vhodné pro flexibilní dokumentový model; XSD poskytuje vlastní komponentový a typový systém a často je požadováno obchodním rozhraním. Vyber jazyk schématu podle požadavků příjemce a podpory ve svém validátoru. Součty, vazby na jiný dokument či pravidla obchodu řeš Schematronem nebo aplikací. Základní vzory vysvětluje oficiální tutorial.