XML Sapiens 2
10 ноября 2006
Текущая версия:
www.xmlsapiens.org/spec/ (доступно в PDF)
Автор:
Дмитрий Шейко, Red Graphic Systems <d@redgraphic.com>
Корректоры:
Максим Барышников, Red Graphic Systems <mb@redgraphic.com>
Павел Левкович, Red Graphic Systems <pl@redgraphic.com>
Статус документа
Version 2.0
Доступные форматы
Спецификацию XML Sapiens 2.0 можно также получить в следующих форматах:
› Текстовый файл:
http://xmlsapiens.org/spec/sapi20.txt (106 Кб).
› Файл gzip tar, содержащий документы в формате MS WORD:
http://xmlsapiens.org/spec/sapi20.tgz (319 Кб).
› Файл zip, содержащий документы в формате MS WORD (файл '.zip'):
http://xmlsapiens.org/spec/sapi20.zip (319 Кб).
› Файл в формате PDF:
http://xmlsapiens.org/spec/sapi20.pdf (703 Мб).
В случае расхождений электронной и печатной форм спецификации следует
использовать электронную версию.
Языки
Единственной нормативной версией является английская версия данного документа.
Переводы этого документа на другие языки можно найти по адресу
www.xmlsapiens.org/spec/
Ошибки
Список ошибок, обнаруженных в спецификации, можно найти по адресу
www.xmlsapiens.org/spec/error/
Об ошибках, найденных в этом документе, Вы можете сообщить по адресу
editor@xmlsapiens.org.
1 Введение
XML Sapiens - декларативный язык описания композиции данных, представления и
функциональности веб-приложения.
Ссылки
Список нормативных и информативных документов.
2.3 Благодарности
Спасибо всем, кто помог в создании спецификации XML Sapiens.
Выражаем особую благодарность выражается руководству компании Red Graphic
Systems (www.redgraphic.ru) за поддержку проекта, финансовую и техническую
помощь.
Спасибо рабочей группе проекта:
Автор спецификации: Дмитрий Шейко <d@redgraphic.com>
3.1 Введение
Исходный XML
Сформированный XML
3.2.1 Шаблон
Для любого документа или группы документов можно назначить шаблон, который
определяет, как будет выглядеть документ на сайте. Шаблон содержит код
представления и указатели на объекты XML Sapiens.
<?xml version="1.0"?>
<sapi version="2.0" xmlns:sapi="http://www.xmlsapiens.org/spec/sapi.dtd">
<sapi:qc type="inputtext" state="admin" title="text">
<tr>
<td class="name">&this.title.value;</td>
<td class="field"><input class="itext" type="text"
name="&this.name.value;" value="&this.data.value;" />
</td>
</tr>
</sapi:qc>
<sapi:qc type="inputtext" state="delivery" title="text">
&this.data.value;
</sapi:qc>
</sapi>
Пример вывода содержания узла из набора узлов приложения CMS (п.3.8.5.7) в теле
контейнера динамических данных (имя контейнера подразумевает this, имя
перечисления подразумевает this, имя переменной перечисления envar):
<sapi:apply name="this.this.envar.value" />
<sapi:apply name="ddc.obj1.value">
<sapi:param name="pvar1">Value of param 1</sapi:param>
<sapi:param name="pvar2">Value of param 2</sapi:param>
</sapi:apply>
валидаторы администраторы
Функциональн
ый дизайн Уровень представления
XML, HTML, WM L, SVG, PDF
Уровень управления
Функциональный уровень
Структурный
Веб-сайт
Уровень данных
вание
View Структура
Ответ Процессор
XSL Шаблон
XML Sapiens
Запрос
Ответ
Model CMS API
Декларации
XML Sapiens
3.8.5.1 get_infochannel()
Использование
Параметры:
3.8.5.2 get_tree()
Использование
Параметры:
Переменные перечисления:
3.8.5.3 get_recorddata()
Использование
Параметры:
Переменные перечисления:
• this.this.id.value - ID записи
• this.this.level.value - уровень вложенности
• this.this.type.value - тип документа (record/recset)
• this.this.cdate.value - время создания в DATETIME
• this.this.cdatetime.value - время создания в UNIX TIMESTAMP
• this.this.mdate.value - время модификации в DATETIME
• this.this.href.value - адрес документа
• this.this.поле.value - данные поля
3.8.5.4 get_documentdata()
Использование
Переменные перечисления:
• this.this.id.value - ID документа
• this.this.level.value - уровень вложенности
• this.this.type.value - тип документа (item/recset)
• this.this.cdate.value - время создания в DATETIME
• this.this.cdatetime.value - время создания в UNIX TIMESTAMP
• this.this.mdate.value - время модификации в DATETIME
• this.this.href.value - адрес документа
• this.this.поле.value - данные поля
3.8.5.5 get_track()
Использование
Параметры:
нет
Переменные перечисления:
• this.this.item_id.value - ID документа
• this.this.item_level.value - уровень вложенности
• this.this.item_type.value - тип документа (item/recset)
• this.this.item_var.value - переменная документа
• this.this.cdate.value - время создания в DATETIME
• this.this.cdatetime.value - время создания в UNIX TIMESTAMP
• this.this.mdate.value - время модификации в DATETIME
• this.this.href.value - адрес документа
• this.this.name.value - название документа
• this.this.currentpage.value - указывает активный (выбранный) раздел
3.8.5.6 get_related()
Использование
Параметры:
Переменные перечисления:
• this.this.id.value - ID документа
• this.this.level.value - уровень вложенности
• this.this.type.value - тип документа (record/recset)
• this.this.cdate.value - время создания в DATETIME
• this.this.cdatetime.value - время создания в UNIX TIMESTAMP
• this.this.mdate.value - время модификации в DATETIME
• this.this.href.value - адрес документа/записи
• this.this.поле.value - данные поля
Элемент SAPI:EXP (п. 6.3.2.11) может содержать только текст и содержать ссылки на
символы (п. 4.2.3) – это определяется типом данных SGML CDATA.
Некоторые типы элементов XML Sapiens используют дополнительную функцию
SGML для исключения элементов из модели содержимого. Исключенным элементам
предшествует символ переноса. Явные исключения имеют приоритет по отношению
к допустимым элементам.
Определения атрибутов
version = %Text [CN]
Обязателен. Значение этого атрибута указывает версию DTD XML Sapiens,
которой подчиняется этот документ.
xmlns:sapi = %URI [CN]
Необязателен. Формальное определение XML NS
encoding = %Charset [CI]
Желателен. Значение этого атрибута указывает на используемую в документе
языковую кодировку.
cache = %Charset [CI]
Необязателен. Значение этого атрибута парсеру, на то допустимо ли
кеширование текущего документа или нет.
mdate = %Datetime [CN]
Необязателен. Данный атрибут содержит дату и время последней
модификации документа
После объявления типа документа остальная часть документа XML Sapiens
содержится в элементе SAPI. Таким образом, типичный репозиторий XML Sapiens
имеет такую структуру:
<?xml version="1.0"?>
<sapi version=«2.0" xmlns:sapi="http://www.xmlsapiens.org/spec/sapi.ns"
encoding="UTF-8">
...
</sapi>
<sapi:namespaces>
<sapi:namespace name="site1">
<sapi:site id="569" />
<sapi:site-lang id="" />
<sapi:site-item id="" />
<sapi:container name="" />
</sapi:namespace>
</sapi:namespaces>
...
</sapi>
Определения атрибутов
name = %Text [CN]
Обязателен. Значение этого атрибута содержит имя контейнера данных.
title = %Text [CI]
Желателен. Значение этого атрибута содержит заголовок контейнера данных,
характеризующий контейнер в общем списке.
category = %Text [CI]
Желателен. Значение этого атрибута указывает на принадлежность
контейнера категории контейнеров динамических данных (п. ).
ns = %Text [CN]
Необязателен. Значение этого атрибута содержит указатель на пространство
имен к которому отнесен данный контейнер данных.
mdate = %Datetime [CN]
Необязателен. Данный атрибут содержит время и дату последней
модификации контейнера
<sapi:choose>
<sapi:when title="Main page selection condition"
exp="eq(args.0.value, '')">
Hello world! It's the home page!
</sapi:when>
<sapi:when exp="true">
<sapi:for-each select="get_recorddata()" name="enum"
title="Get channel">
<sapi:params>
<sapi:param name="sources">1024</sapi:param>
</sapi:params>
<sapi:ifempty>Records was not found</sapi:ifempty>
<sapi:fallback>CMS-application error</sapi:fallback>
<sapi:choose>
<sapi:when exp="true">
<sapi:code>
<sapi:include href="myfieldset.xml"
parse="fieldset" state="&this.this.state.value" />
</sapi:code>
</sapi:when>
</sapi:choose>
</sapi:for-each>
</sapi:when>
</sapi:choose>
</sapi:ddc>
</sapi>
Определения атрибутов
select = %Text [CN]
Обязателен. Значение этого атрибута содержит указатель на приложение
CMS.
name = %Text [CN]
Обязателен. Значение этого атрибута содержит имя перечисления.
title = %Text [CI]
Определения атрибутов
type = %Text [CN]
Обязателен. Значение этого атрибута содержит тип набора полей.
title = %Text [CI]
Желателен. Значение этого атрибута содержит заголовок набора полей.
ns = %Text [CN]
Необязателен. Значение этого атрибута содержит указатель на пространство
имен к которому отнесен набор полей.
state = %Text [CN]
Необязателен. При наличии в элементе данного атрибута, значение его
указывает состояние среды, для которой актуально данное описание.
mdate = %Datetime [CN]
Наборы полей используются для задания структуры данных документа для заданных
состояний среды.
Пример определения набора полей:
<?xml version="1.0"?>
<sapi version="2.0" xmlns:sapi="http://www.xmlsapiens.org/spec/sapi.dtd">
<sapi:fieldset type="default" state="NewsInTheList">
<sapi:body>
<sapi:apply name="qc.title.value" type="inputtext" title="Title" />
<sapi:apply name="qc.resume.value" type="inputtext" title="Short
Description" />
</sapi:body>
</sapi:fieldset>
<sapi:fieldset type="default" state="NewOnThePage">
<sapi:body>
<sapi:apply name="qc.title.value" type="inputtext" title="Title" />
<sapi:apply name="qc.content.value" type="article" title="Description" />
<sapi:apply name="qc. table.value" type="article" title="Specification" />
<sapi:apply name="qc.price.value" type="inputtext" title="Cost"
index="yes" />
</sapi:body>
</sapi:fieldset>
</sapi>
6.4 Указатели
Указатели XML Sapiens служат для обращения к содержанию объектов в коде
представления данных или же теле контейнеров данных. Указатели на данные
возвращают значения переменных окружения CMS (п. 3.8.4). Обращение к значению
переменной может быть достигнуто путем использования элемента SAPI:APPLY или
же атрибута SAPI:%Attrib. Указатели на контейнеры возвращают содержание
контейнера данных.
6.4.1 Указатель (элемент SAPI:APPLY)
<!ELEMENT sapi:apply ( sapi:param* )>
<!ATTLIST sapi:apply -- обращение к указателю --
name %Text #REQUIRED – указатель на свойства объекта –
Определения атрибутов
name = %Text [CN]
Обязателен. Значение этого атрибута содержит имя указателя на свойства
объекта (п. 3.3.4).
exp = %Text [CN]
Значение этого атрибута содержит выражение.
Определение атрибута
%Attrib = %Text [CN]
Обязателен. Значение этого атрибута содержит имя атрибута родительского
элемента, в которое парсер интегрирует значение переменной окружения
CMS.
В том случае, когда требуется подставить значение переменной окружения CMS в
атрибут элемента, используется дополнительный атрибут в следующем синтаксисе:
SAPI:имя_атрибута_для_подстановки:
<input name="feedback" value="" sapi:value="var.value" />
Определения атрибутов
href = %Text [CN]
Обязателен. Данный атрибут указывает на расположение файла.
parse = %Text [CN]
Данный атрибут указывает на тип обработки файла (fieldset, html, php, java и
т.д.)
8 Ссылки
8.1 Нормативные ссылки
[CSS1]
Ли, Х. В., Бос, Б. «Каскадные таблицы стилей, уровень 1». 1996. Находится по
адресу http://www.w3.org/TR/REC-CSS1-961217
[DATETIME]
Вольф, М., и Уикстед, К. «Форматы дат и времени». Замечание W3C.
Сентябрь 1997. Находится по адресу http://www.w3.org/TR/NOTE-datetime
[IANA]
Рейнольдс, Дж., Постел, Дж. «Назначенные номера». STD 2, RFC 1700,
USC/ISI. Октябрь 1994.
Подробнее см. http://www.iso.ch/cate/d4766.html. См. также
http://www.sil.org/sgml/iso639a.html.
[ISO639]
«Коды для представления названий языков», ISO 639:1988.
[ISO3166]
«Коды представления названий стран», ISO 3166:1993.
[ISO8601]
«Элементы данных и форматы обмена – Обмен информацией –
Представление дат и времени», ISO 8601:1988.
[ISO8879]
«Обработка информации – Текстовые и офисные системы – Стандартный
обобщенный язык разметки (SGML)», ISO 8879:1986. Информацию о
стандарте см. по адресу http://www.iso.ch/cate/d16387.html
[ISO10646]
«Информационные технологии – Универсальный набор символов с
кодированием несколькими октетами (UCS) – Часть 1: Архитектура и
[URI]
Бернерс-Ли, Т., Филдинг, Р., Масинтер, Л. «Универсальные идентификаторы
ресурсов (URI): Общий синтаксис и семантика». Ноябрь 1997.
[WEBSGML]
Голдфарб, К. А. «Предложение TC для адаптации WebSGML для SGML», ed.
Июнь, 1997.
9 Заключение
Мы надеемся, что данная спецификация позволит Вам сэкономить время разработки
CMS и обеспечит переносимость Ваших функциональных решений. Также Вы
сможете воспользоваться опытом прочих участников открытого проекта поддержки
XML Sapiens (http://xmlsapiens.org).