RELAX NG (REgular LAnguage for XML Next Generation) — один из языков описания структуры XML-документа. Являясь сама по себе XML-документом, схема в этом формате может быть записана с использованием альтернативного, более компактного синтаксиса. В сравнении с другими языками схем RELAX NG относительно прост. RELAX NG был разработан в OASIS и впервые опубликован в 2003. Файлы, содержащие схемы 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, поддерживает много возможностей: типизация данных, регулярные выражения, пространства имен и возможность ссылаться на сложные определения.
См. также DTD (Document Type Definition) XML Schema Schematron
Ссылки Официальный сайт проекта Книга о RELAX NG Эрика ван дер Влиста, выпущенная под лицензией GNU Free Documentation License Справочник по Relax NG на zvon.org
Примечания
Категория:XML Категория:Стандарты ISO Категория:Языки моделирования данных