RELAX NG

Поделись знанием:
Перейти к: навигация, поиск

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="relaxng.org/ns/structure/1.0">
   <oneOrMore>
      <element name="page">
         <text/>
      </element>
   </oneOrMore>
</element>

Вложенная структура может очень сильно разрастаться и с её помощью невозможно описать рекурсивные элементы. Этот недостаток преодолевается с помощью именованных паттернов, которые располагаются в схеме отдельно:

<grammar xmlns="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, поддерживает много возможностей: типизация данных, регулярные выражения, пространства имен и возможность ссылаться на сложные определения.

См. также

Напишите отзыв о статье "RELAX NG"

Ссылки

  • [relaxng.org/ Официальный сайт проекта]  (англ.)
  • [books.xmlschemata.org/relaxng/ Книга о RELAX NG] (англ.) Эрика ван дер Влиста, выпущенная под лицензией GNU Free Documentation License
  • [www.zvon.org/xxl/RelaxNG/Output/ Справочник по Relax NG] (англ.) на zvon.org

Примечания

  1. [www.oasis-open.org/committees/relax-ng/compact-20021121.html RELAX NG Compact Syntax]
  2. ISO. [www.iso.org/iso/iso_catalogue/catalogue_ics/catalogue_detail_ics.htm?csnumber=37605 ISO/IEC 19757-2:2003 - Information technology -- Document Schema Definition Language (DSDL) -- Part 2: Regular-grammar-based validation -- RELAX NG]. ISO. [www.webcitation.org/677vORsW0 Архивировано из первоисточника 23 апреля 2012].

Отрывок, характеризующий RELAX NG

Через неделю князь вышел и начал опять прежнюю жизнь, с особенной деятельностью занимаясь постройками и садами и прекратив все прежние отношения с m lle Bourienne. Вид его и холодный тон с княжной Марьей как будто говорил ей: «Вот видишь, ты выдумала на меня налгала князю Андрею про отношения мои с этой француженкой и поссорила меня с ним; а ты видишь, что мне не нужны ни ты, ни француженка».
Одну половину дня княжна Марья проводила у Николушки, следя за его уроками, сама давала ему уроки русского языка и музыки, и разговаривая с Десалем; другую часть дня она проводила в своей половине с книгами, старухой няней и с божьими людьми, которые иногда с заднего крыльца приходили к ней.
О войне княжна Марья думала так, как думают о войне женщины. Она боялась за брата, который был там, ужасалась, не понимая ее, перед людской жестокостью, заставлявшей их убивать друг друга; но не понимала значения этой войны, казавшейся ей такою же, как и все прежние войны. Она не понимала значения этой войны, несмотря на то, что Десаль, ее постоянный собеседник, страстно интересовавшийся ходом войны, старался ей растолковать свои соображения, и несмотря на то, что приходившие к ней божьи люди все по своему с ужасом говорили о народных слухах про нашествие антихриста, и несмотря на то, что Жюли, теперь княгиня Друбецкая, опять вступившая с ней в переписку, писала ей из Москвы патриотические письма.
«Я вам пишу по русски, мой добрый друг, – писала Жюли, – потому что я имею ненависть ко всем французам, равно и к языку их, который я не могу слышать говорить… Мы в Москве все восторжены через энтузиазм к нашему обожаемому императору.
Бедный муж мой переносит труды и голод в жидовских корчмах; но новости, которые я имею, еще более воодушевляют меня.
Вы слышали, верно, о героическом подвиге Раевского, обнявшего двух сыновей и сказавшего: «Погибну с ними, но не поколеблемся!И действительно, хотя неприятель был вдвое сильнее нас, мы не колебнулись. Мы проводим время, как можем; но на войне, как на войне. Княжна Алина и Sophie сидят со мною целые дни, и мы, несчастные вдовы живых мужей, за корпией делаем прекрасные разговоры; только вас, мой друг, недостает… и т. д.
Преимущественно не понимала княжна Марья всего значения этой войны потому, что старый князь никогда не говорил про нее, не признавал ее и смеялся за обедом над Десалем, говорившим об этой войне. Тон князя был так спокоен и уверен, что княжна Марья, не рассуждая, верила ему.
Весь июль месяц старый князь был чрезвычайно деятелен и даже оживлен. Он заложил еще новый сад и новый корпус, строение для дворовых. Одно, что беспокоило княжну Марью, было то, что он мало спал и, изменив свою привычку спать в кабинете, каждый день менял место своих ночлегов. То он приказывал разбить свою походную кровать в галерее, то он оставался на диване или в вольтеровском кресле в гостиной и дремал не раздеваясь, между тем как не m lle Bourienne, a мальчик Петруша читал ему; то он ночевал в столовой.