Pull to refresh

Что такое XML Sapiens

Reading time5 min
Views1.9K
В 1995 году компания Vignette представила на рынке первую коммерческую систему класса CMS (систем управления контентом). С тех пор число коммерческих CMS неустанно растет и ныне сам термин CMS прижился на рынке и, как правило, не требует расшифровки. За последние годы было утверждено множество открытых стандартов, позволяющих структурировать информацию на сайтах, отделить ее от дизайна, но, по-прежнему, большинство CMS не следует им. Так уже много лет существует стандарт XSLT, позволяющий формирование документов из разделенных источников: XML-файла со структурированным содержанием документа и XSL-шаблона с описанием того, как документ будет представлен на сайте.

Причем само формирование документа, может происходить на стороне клиента. Достаточно передать браузеру XML-структуру данных, содержащую ссылку на XSL-шаблон и браузер сам «нарисует» страницу в том виде, как это предполагалось дизайнерами. Содержание каждой страницы сайта различается, однако форма подачи этого содержания, обычно, ограниченна небольшим числом шаблонов. Таким образом, XSLT позволяет нам одиножды написанный шаблон представления данных на сайте использовать многократно. Казалось бы, вот она идеальная технология для CMS. Однако повсеместное применение данной технологии сдерживает ряд факторов. Из них психологическая инерция — не главенствующий фактор. Описание функциональности сайта с помощью XSLT — весьма трудоемкая задача. Кроме того, XSL-шаблон слишком зависим от XML-документа с данными, что ограничивает гибкость решений на основе данной технологии.

Таким образом, XSLT представляет собой концептуально безупречное, но на практике трудоемкое решение. Данное обстоятельство побуждает разработчиков искать новые решения, включающие преимущества утвержденных открытых стандартов и, в то же время, относительно удобные в использовании. Одно из таких решений – декларативный язык XML Sapiens (www.xmlsapiens.org).

Как устроен XML Sapiens



Так же как и XSLT, с каждым документом сайта должен быть связан определенный шаблон. Шаблон может содержать любой код представления (например, HTML) и инструкции XML Sapiens. В шаблон могут быть, включены несколько файлов. Для этого используется инструкция sapi:include, близкая к аналогу в открытом стандарте xInclude.

<sapi:include href="адрес_файла_шаблона" parse="template" />

Прочие инструкции XML Sapiens позволяют доставить в документ содержание и функциональные блоки.

Цель этого решения разделить описание структур содержания и функциональности. Это позволяет единожды создать некоторый набор каркасов структур содержания и функциональности и в дальнейшем использовать его как конструктор при построении сайта.

XML Sapiens и данные



XML Sapiens включает такое понятие как состояние интерфейса. Это позволяет определить для одной и той же страницы сайта различные наборы данных в зависимости от внешних или заданных условий. Допустим, если пользователь авторизован на сайте, страница может содержать одни поля содержания, если не авторизован другие. Состояния набора полей содержания страницы определяется в отдельном XML-документе. Для того чтобы применить набор достаточно выполнить включение набора для указанного состояния:

<sapi:include href="адрес_файла_набора_полей" parse="fieldset" state="a2" />

Набор полей содержит инструкции доставки данных. Эти инструкции связывают указанный идентификатор данных с типом поля, описанным во внешнем XML-документе.

<sapi:apply name=«qc.идентификатор.value» type=«тип» href=«адрес_описания_типа» />

XML документ типа поля, как и в случае набора полей, может содержать описания типа для различных состояний интерфейса. Если в системе определены состояния «администрирование» и «доставка содержания», то в первом случае данные могут быть представлены в форме запроса содержания, во втором «как есть».

Разметка содержания

XML Sapiens и функциональность



В шаблоне страницы также могут содержаться инструкции запроса сценария функциональности. Алгоритм этого сценария описан в заданном XML-файле.

<sapi:apply name="ddc.menu.value" href="адрес_сценария" />

Документ описания функционального алгоритма (DDC) содержит инструкции анализа условий, аналогично XSLT. Синтаксис DDC также позволяет ссылаться на приложения CMS, которые, согласно переданным параметрам, возвращают потоки данных для дальнейшего анализа условий.

<sapi version="2.0" xmlns:sapi="http://www.xmlsapiens.org/spec/sapi.dtd">
<sapi:ddc name="sample">
<sapi:choose>
  <sapi:when exp="eq(this_record_id.value,0)">
  <sapi:for-each select="cms_application()" name="enum">
    <sapi:params>
        <sapi:param name="param1">value1</sapi:param>
        <sapi:param name="param2">value2</sapi:param>
    </sapi:params>
    <sapi:ifempty>Records not found</sapi:ifempty>
    <sapi:fallback>CMS-application error</sapi:fallback>

    <sapi:choose>
      <sapi:when exp="gt(this.this.переменная_из_потока_данных.value,0)">
        <sapi:code>
        Sample code, &this.this.переменная_из_потока_данных.value;
        </sapi:code>
      </sapi:when>
    </sapi:choose>
  </sapi:when>
</sapi:choose>
</sapi:ddc>
</sapi>


При запросе функционального сценария допускается указание параметров запроса, позволяет многократное использование функциональных сценариев.

<sapi:apply name="ddc.menu.value" href="http://site.com/ddc/menu.xml">
  <sapi:param name="param1">value1</sapi:param>
  <sapi:param name="param2">value2</sapi:param>
</sapi:apply>


Разметка функциональности

Как видите, XML Sapiens позволяет подготовить набор описаний структур данных, типов полей содержания и функциональность и в дальнейшем использовать при конструировании сайта. Возможность многократного использования этих составных элементов снижает время разработки веб-проектов, позволяет избежать системного программирования. Причем, XML Sapiens универсален. Он может применяться в CMS, написанной на любом программном языке.

Язык существует более года, а недавно была опубликована вторая версия языка. Это внушает надежду на то, что язык будет и далее развиваться и использоваться. На сегодня на базе этого языка функционируют всего несколько CMS. Однако если это число увеличится, обмен функциональными решениями между разработчиками, использующими различные CMS может стать обычным делом.
Tags:
Hubs:
Total votes 25: ↑21 and ↓4+17
Comments31

Articles