РАССЛАБЬТЕСЬ
Расширение имени файла |
.rng |
---|---|
Тип интернет-СМИ |
приложение/xml, текст/xml |
Тип формата | язык схемы XML |
Расширено с | XML |
В вычислительной технике RELAX NG ( REgular LAnguage for XML Next Generation ) — это схемы язык XML . Схема RELAX NG определяет шаблон структуры и содержимого XML-документа. Схема RELAX NG сама по себе является XML- документом, но RELAX NG также предлагает популярный компактный синтаксис, отличный от XML. [1] По сравнению с другими языками схем XML RELAX NG считается относительно простым.
Он был определен спецификацией технического комитета OASIS RELAX NG в 2001 и 2002 годах на основе Мураты Макото RELAX и Джеймса Кларка TREX . [2] [3] [4] а также частью второй международного стандарта ISO / IEC 19757: Языки определения схемы документа ( DSDL ). [5] [6] ISO/IEC 19757-2 был разработан ISO/IEC JTC 1/SC 34 и опубликован в своей первой версии в 2003 году. [7]
Примеры схем [ править ]
Предположим, мы хотим определить чрезвычайно простую схему разметки XML для книги: книга определяется как последовательность из одной или нескольких страниц; каждая страница содержит только текст. Пример экземпляра XML-документа может быть следующим:
<book>
<page>This is page one.</page>
<page>This is page two.</page>
</book>
Синтаксис XML [ править ]
Схема RELAX NG может быть записана во вложенной структуре путем определения корневого элемента, который содержит дальнейшие определения элементов, которые сами могут содержать встроенные определения. Схема нашей книги в этом стиле с использованием полного синтаксиса XML будет выглядеть следующим образом:
<element name="book" xmlns="http://relaxng.org/ns/structure/1.0">
<oneOrMore>
<element name="page">
<text/>
</element>
</oneOrMore>
</element>
Вложенная структура становится громоздкой из-за большого количества подуровней и не может определять рекурсивные элементы, поэтому в наиболее сложных схемах RELAX NG используются ссылки на определения именованных шаблонов, расположенные отдельно в схеме. Здесь «плоская схема» определяет точно такую же разметку книги, как и в предыдущем примере:
<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 и обратно, с однозначным соответствием по структуре и значению. во многом так же, как Simple Outline XML (SOX) относится к XML . Он имеет много общего с синтаксисом DTD . Вот компактная форма приведенной выше схемы:
element book {
element page { text }+
}
С помощью именованных шаблонов это можно свести к:
start = element book { page+ }
page = element page { text }
Компактный парсер RELAX NG будет обрабатывать эти два шаблона как один и тот же.
Сравнение с XML-схемой W3C [ править ]
Хотя спецификация RELAX NG была разработана примерно в то же время, что и спецификация W3C XML Schema , последняя, возможно, была более известна и более широко реализована как в открытых, так и в частных синтаксических анализаторах и редакторах XML, когда в 2001 году она стала Рекомендацией W3C. затем, однако, поддержка RELAX NG все чаще нашла свое применение в программном обеспечении XML, и ее принятию способствовало ее принятие в качестве основной схемы для популярных языков разметки, ориентированных на документы, таких как DocBook , TEI Guidelines, OpenDocument и EPUB .
RELAX NG разделяет с W3C XML Schema многие функции, которые отличают их от традиционных DTD : типизация данных , поддержка регулярных выражений , поддержка пространства имен , возможность ссылаться на сложные определения.
Расширения имен файлов [ править ]
По неофициальному соглашению схемы RELAX NG в обычном синтаксисе обычно имеют расширение имени файла «.rng». Для схем с компактным синтаксисом используется расширение «.rnc».
Детерминизм [ править ]
Схемы Relax NG не обязательно являются «детерминированными» или «однозначными».
Преобразование Relax NG в DTD [ править ]
Схемы Relax NG можно преобразовать в DTD, применив Trang , который можно найти по адресу: [1] . Руководство по Трангу находится по адресу [2] . Обратите внимание, что Транг не может преобразовать схему OASIS DITA 1.3 в DTD, из-за чего возникают такие сообщения:
sorry, combining definitions with combine="choice" is not supported
См. также [ править ]
- XML-схемы
- DTD (Определение типа документа)
- Описание структуры документа
- XML-схема (W3C)
- схематрон
- ODD (Один документ делает все)
- SXML
Ссылки [ править ]
- ^ РАССЛАБЛЕНИЕ компактного синтаксиса
- ^ Джеймс Кларк. «TREX — Регулярные выражения дерева для XML — «TREX был объединен с RELAX для создания RELAX NG». « . Проверено 28 декабря 2009 г.
- ^ Мурата Макото (3 апреля 2002 г.). «RELAX (описание XML на обычном языке) — «RELAX NG OASIS. Это язык схем, созданный путем объединения RELAX Core и TREX." " . Проверено 28 декабря 2009 г.
- ^ «TREX и RELAX объединены в RELAX NG, облегченную спецификацию проверки языка XML» . Обложки. 05.06.2001 . Проверено 28 декабря 2009 г.
- ^ ОСЛАБЛЕНИЕ СПЕЦИФИКАЦИИ
- ^ РАССЛАБЛЕНИЕ ТЕХНИЧЕСКОГО КОМИТЕТА
- ^ ИСО. «ISO/IEC 19757-2:2008. Информационные технологии. Язык определения схемы документа (DSDL). Часть 2. Проверка на основе регулярной грамматики. RELAX NG» . ИСО . Проверено 28 декабря 2009 г.
Внешние ссылки [ править ]
- RELAX OF домашняя страница
- «Дизайн RELAX NG» Джеймса Кларка
- Учебник RELAX NG по синтаксису XML
- Учебник RELAX NG по компактному синтаксису
- Шаблоны проектирования для структурирования XML-документов
- Книга RELAX NG Эрика ван дер Влиста, выпущенная под лицензией свободной документации GNU.
- Relax NG Reference by ZVON
- RELAX OF Java-проекты сообщества на java.net
- Sun Multi-Schema Validator (MSV) набор инструментов Java XML с открытым исходным кодом
- валидации синтаксиса Relax NG Compact Syntax на языке C с открытым исходным кодом Программа
- Конвертер XSD в Relax NG Веб-конвертер
- https://github.com/relaxng/jing-trang