XML schema language
In
computing
,
RELAX NG
(
REgular LAnguage for XML Next Generation
) is a
schema
language for
XML
?a RELAX NG schema specifies a pattern for the structure and content of an XML document. A RELAX NG schema is itself an
XML
document but RELAX NG also offers a popular compact, non-XML syntax.
[1]
Compared to other
XML schema languages
RELAX NG is considered relatively simple.
It was defined by a committee specification of the
OASIS
RELAX NG technical committee in 2001 and 2002, based on
Murata Makoto
's
RELAX
and
James Clark
's
TREX
,
[2]
[3]
[4]
and also by part two of the international standard
ISO
/
IEC
19757: Document Schema Definition Languages (
DSDL
).
[5]
[6]
ISO/IEC 19757-2 was developed by
ISO/IEC JTC 1/SC 34
and published in its first version in 2003.
[7]
Schema examples
[
edit
]
Suppose we want to define an extremely simple XML markup scheme for a book: a book is defined as a sequence of one or more pages; each page contains text only. A sample XML document instance might be:
<book>
<page>
This
is
page
one.
</page>
<page>
This
is
page
two.
</page>
</book>
XML syntax
[
edit
]
A RELAX NG schema can be written in a nested structure by defining a root element that contains further element definitions, which may themselves contain embedded definitions. A schema for our book in this style, using the full XML syntax, would be written:
<element
name=
"book"
xmlns=
"http://relaxng.org/ns/structure/1.0"
>
<oneOrMore>
<element
name=
"page"
>
<text/>
</element>
</oneOrMore>
</element>
Nested structure becomes unwieldy with many sublevels and cannot define recursive elements, so most complex RELAX NG schemas use references to
named pattern
definitions located separately in the schema. Here, a "flattened schema" defines precisely the same book markup as the previous example:
<grammar
xmlns=
"http://relaxng.org/ns/structure/1.0"
>
<start>
<element
name=
"book"
>
<oneOrMore>
<ref
name=
"page"
/>
</oneOrMore>
</element>
</start>
<define
name=
"page"
>
<element
name=
"page"
>
<text/>
</element>
</define>
</grammar>
Compact syntax
[
edit
]
RELAX NG compact syntax is a non-XML format inspired by
extended Backus?Naur form
and
regular expressions
, designed so that it can be unambiguously translated to its XML counterpart, and back again, with one-to-one correspondence in structure and meaning, in much the same way that
Simple Outline XML
(SOX) relates to
XML
. It shares many features with the syntax of
DTDs
. Here is the compact form of the above schema:
element
book
{
element
page
{
text
}
+
}
With named patterns, this can be flattened to:
start
=
element
book
{
page+
}
page
=
element
page
{
text
}
A compact RELAX NG parser will treat these two as the same pattern.
Comparison with W3C XML Schema
[
edit
]
Although the RELAX NG specification was developed at roughly the same time as the W3C
XML Schema
specification, the latter was arguably better known and more widely implemented in both open-source and proprietary XML parsers and editors when it became a W3C Recommendation in 2001. Since then, however, RELAX NG support has increasingly found its way into XML software, and its acceptance has been aided by its adoption as a primary schema for popular document-centric markup languages such as
DocBook
, the
TEI
Guidelines,
OpenDocument
, and
EPUB
.
RELAX NG shares with W3C XML Schema many features that set both apart from traditional
DTDs
:
data typing
,
regular expression
support,
namespace
support, ability to reference complex definitions.
Filename extensions
[
edit
]
By informal convention, RELAX NG schemas in the regular syntax are typically named with the
filename extension
".rng". For schemas in the compact syntax, the extension ".rnc" is used.
Determinism
[
edit
]
Relax NG schemas are not necessarily
"deterministic" or "unambiguous".
Converting Relax NG to DTD
[
edit
]
Relax NG schemas can be converted to DTDs by applying
Trang
which can be found at:
[1]
. The manual for Trang is located at
[2]
. Note that Trang is unable to convert the
OASIS
DITA
1.3 schema to DTDs, failing with messages like:
sorry, combining definitions with combine="choice" is not supported
See also
[
edit
]
References
[
edit
]
External links
[
edit
]
ISO
standards
by standard number
|
---|
|
1?9999
| |
---|
10000?19999
| |
---|
20000?29999
| |
---|
30000+
| |
---|
|