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 вважатиме ці два варіанти тим самим взірцем.

Див. також

Джерела

  1. RELAX NG home page. Процитовано 1 травня 2020.
  2. Michael Fitzgerald. RELAX NG's Compact Syntax. Процитовано 1 травня 2020.

Посилання