RELAX NG

Из Википедии, бесплатной энциклопедии

RELAX NG
Официальный сайт relaxng.org

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> 

Синтаксис XML[править | править код]

Схема в формате 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 } 

Сравнение с другими схемами XML[править | править код]

На данный момент RELAX NG, разработанный примерно в то же самое время, что и XML Schema, обладает довольно широкой поддержкой в XML-редакторах и парсерах. RELAX NG используется как первичная схема для некоторых документо-центрических языков разметки, таких как DocBook и OpenDocument.

RELAX NG, как и XML Schema, поддерживает много возможностей: типизация данных, регулярные выражения, пространства имен и возможность ссылаться на сложные определения.

См. также[править | править код]

Ссылки[править | править код]

Примечания[править | править код]

  1. RELAX NG Compact Syntax. Дата обращения: 12 апреля 2010. Архивировано 16 июня 2010 года.
  2. ISO. ISO/IEC 19757-2:2003 - Information technology -- Document Schema Definition Language (DSDL) -- Part 2: Regular-grammar-based validation -- RELAX NG. ISO. Архивировано из оригинала 23 апреля 2012 года.