RELAX NG
RELAX NG (англ. REgular LAnguage for XML Next Generation — регулярна мова для XML, наступне покоління) — мова написання схем XML документів.[1] Схеми RELAX NG є XML документами, однак, існує, також, компактний варіант мови, який не є XML документом, і має назву англ. RELAX NG Compact Syntax.[2]
Приклади схем
Припустімо, що ми бажаємо означити дуже просту XML розмітку для книги: книга — це послідовність з однієї чи більше сторінок; кожна сторінка містить лише текст. Приклад такого XML документа може бути таким:
<book>
<page>Це сторінка один.</page>
<page>Це сторінка два.</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-відповідник і назад, зберігаючи один-в-один відповідність структури і значення, по суті так само як і SOX відноситься до XML. Він має багато спільного із синтаксисом DTD. Ось стисла форма схеми згори:
element book {
element page { text }+
}
Із іменованими взірцями це можна розгладити в:
start = element book { page+ }
page = element page { text }
Парсер стислого RELAX NG вважатиме ці два варіанти тим самим взірцем.
Див. також
- XML schema
- Document Type Definition
- Document Structure Description
- SXML
Джерела
- RELAX NG home page. Процитовано 1 травня 2020.
- Michael Fitzgerald. RELAX NG's Compact Syntax. Процитовано 1 травня 2020.
Посилання
- RELAX NG домашня сторінка.
- «The Design of RELAX NG», James Clark.
- RELAX NG tutorial for the XML syntax.
- RELAX NG tutorial for the compact syntax.
- Design patterns for structuring XML documents.
- RELAX NG Book, Eric van der Vlist, розповсюджується Free Documentation License.
- Relax NG Reference, ZVON.
- RELAX NG Java community projects на java.net.
- Sun Multi-Schema Validator (MSV) інструментарій Java XML з відкритими текстами.