RELAX NG
(
REgular LAnguage for XML Next Generation
) ? один из языков описания структуры
XML
-документа. Являясь сама по себе XML-документом, схема в этом формате может быть записана с использованием альтернативного, более компактного синтаксиса
[1]
. В сравнении с другими языками схем RELAX NG относительно прост.
RELAX NG был разработан в
OASIS
и впервые опубликован в 2003
[2]
.
Файлы, содержащие схемы RELAX NG, обычно имеют расширение ".rng", а в компактном синтаксисе ? ".rnc".
Приведённый пример ? упрощённый XML, представляющий книгу: книга состоит из одной или более страниц и каждая страница содержит только текст:
<book>
<page>
Страница
первая.
</page>
<page>
Страница
вторая.
</page>
</book>
Схема в формате RELAX NG может быть записана иерархической структурой, начиная с корневого элемента, который содержит дальнейшие определения элементов, которые, в свою очередь, тоже могут содержать вложенные определения. Схема в этом стиле для приведённой выше разметки записывается следующим образом:
<element
name=
"book"
xmlns=
"http://relaxng.org/ns/structure/1.0"
>
<oneOrMore>
<element
name=
"page"
>
<text/>
</element>
</oneOrMore>
</element>
Вложенная структура может очень сильно разрастаться, и с её помощью невозможно описать рекурсивные элементы. Этот недостаток преодолевается с помощью
именованных паттернов
, которые располагаются в схеме отдельно:
<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>
Компактный синтаксис RELAX NG ? это не-XML формат, основанный на
расширенной форме Бэкуса ? Наура
и
регулярных выражениях
, спроектированный таким образом, что он может быть однозначно транслирован в и из XML. Он также напоминает синтаксис
DTD
. В компактной форме вышеприведённая схема выглядит следующим образом:
element book
{
element page { text }+
}
Или, с
именованными паттернами
:
start = element book { page+ }
page = element page { text }
На данный момент RELAX NG, разработанный примерно в то же самое время, что и
XML Schema
, обладает довольно широкой поддержкой в XML-редакторах и парсерах. RELAX NG используется как первичная схема для некоторых документо-центрических языков разметки, таких как
DocBook
и
OpenDocument
.
RELAX NG, как и XML Schema, поддерживает много возможностей:
типизация данных
,
регулярные выражения
,
пространства имен
и возможность ссылаться на сложные определения.
|
---|
|
1
по
9999
| |
---|
10000
по
19999
| |
---|
20000+
| |
---|
|