Вы находитесь на странице: 1из 65

Спецификация:

XML Sapiens 2

Red Graphic Systems

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>

© 2004-2006 Red Graphic Systems


www.redgraphic.com
www.redgraphic.ru

Страница 1 из 65 © Red Graphic Systems


Аннотация
Данная спецификация определяет XML Sapiens версии 2.0 - XML-базированный
язык описания композиции данных, представления и функциональности веб-
приложения.
XML Sapiens — это приложение SGML, соответствующее Международному
стандарту ISO 8879 (Standard Generalized Markup Language [ISO8879]).
Язык отвечает требованиям спецификации XML (http://www.w3.org/TR/2004/REC-
xml11-20040204).

Статус документа
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.

Страница 2 из 65 © Red Graphic Systems


Оглавление
1 Введение......................................................................................................... .............4
2 О спецификации XML Sapiens ....................................................... ..........................5
2.1 Организация спецификации ....................................................................................... ..........5
2.2 Соглашения, принятые в документе ........................................................................... .........5
2.2.1 Соглашения............................................................................................................... ......5
2.2.2 Элементы и атрибуты............................................................................... ..................6
2.2.3 Замечания и примеры ............................................................................................. .......6
2.3 Благодарности................................................................................................................ ........6
2.4 Информация об авторском праве ............................................................................. ...........7
3 Архитектура XML Sapiens.............................................................................. ............9
3.1 Введение................................................................................................................................ .9
3.1.1 Что такое XML Sapiens?......................................................................................... ......9
3.1.2 Что подразумевается под функциональностью веб-приложения?..........................9
3.1.3 История возникновения языка................................................................... ...................9
3.1.4 Как использовать XML Sapiens?.................................................................. .................9
3.1.5 XML Sapiens и XSLT........................................................................................ ..............10
3.1.6 XML Sapiens и языки описания интерфейсов...................................................... ......12
3.2 Модель доставки содержания XML Sapiens............................................................ ...........12
3.2.1 Шаблон ...................................................................................................................... ....13
3.2.2 Код представления..................................................................................................... ..14
3.2.3 Репозиторий XML Sapiens ............................................................................... ...........14
3.3 Объекты XML Sapiens.............................................................................................. ............14
3.3.1 Контейнеры запросов................................................................................. .................14
3.3.2 Наборы полей........................................................................................................ ........15
3.3.3 Контейнеры динамических данных........................................................................... ..15
3.3.4 Идентификация объектов...................................................................... ....................15
3.4 Параметры вызова DDC ..................................................................................... ................16
3.5 Перенаправление потока DDC..................................................................................... .......16
3.6 Выражения XML Sapiens........................................................................... ..........................17
3.7 Включения документа XML Sapiens........................................................................... .........18
3.7.1 Включения кода системного языка CMS.................................................................... 18
3.7.2 Включения файлов.................................................................................................. ......18
3.8 CMS базированные на XML Sapiens........................................................................ ...........18
3.8.1 Модель управляемого сайта ......................................................................... .............18
3.8.2 Состав CMS основанной на XML Sapiens.............................................. ....................20
3.8.3 Процессор XML Sapiens............................................................................................... .21
3.8.4 Переменные окружения .......................................................................................... .....23
3.8.5 Рекомендованные приложения CMS............................................................ ...............24
3.8.6 Пространство имен XML Sapiens............................................................................... 28
4 Структура документации........................................................................... ..............29
4.1 Введение ............................................................................................................................ ..29
4.2 Конструкции SGML, используемые в XML Sapiens............................................... .............29
4.2.1 Элементы............................................................................................. ........................29
4.2.2 Атрибуты.................................................................................................. ...................30
4.2.3 Ссылки на символы................................................................................................... ....30
4.2.4 Комментарии.................................................................................................. ..............31
4.3 Как читать XML Sapiens DTD...................................................................................... .........31
4.3.1 Комментарии DTD.................................................................................................... ....31
4.3.2 Определения комбинаций параметров................................................ ......................31
4.3.3 Объявления элементов............................................................................................. ...32
4.3.4 Объявления атрибутов................................................................................ ...............33

Страница 3 из 65 © Red Graphic Systems


4.4 Основные типы данных ............................................................................... .......................34
4.4.1 Информация о регистре............................................................................................ ..34
4.4.2 Основные типы данных................................................................................ ...............34
4.4.3 Текстовые строки...................................................................................................... ..34
4.4.4 URI.............................................................................................................................. ....34
4.4.5 Отдельные символы............................................................................... .....................35
4.4.6 Символьные данные................................................................................... ..................35
4.4.7 Дата и время........................................................................................... .....................35
5 Глобальная структура документа в формате XML Sapiens...............................36
5.1 Введение в структуру документа XML Sapiens............................................ ......................36
5.2 Информация о версии XML Sapiens............................................................... ....................36
5.3 Элемент XML Sapiens.......................................................................................... ................37
5.3.1 Атрибут “version”............................................................................................. ............38
5.3.2 Атрибут “xmlns:sapi”.................................................................................................. ..38
5.3.3 Атрибут “encoding”......................................................................................... .............38
5.3.4 Атрибут “cache”............................................................................................... ............38
5.3.5 Атрибут “mdate”.......................................................................................................... .38
5.4 Пространство имен документа XML Sapiens................................................................. .....39
5.4.1 Элемент SAPI:NAMESPACES.............................................................. .......................39
5.4.2 Элемент SAPI:NAMESPACE.................................................................................. ......39
5.4.3 Элемент SAPI:SITE ........................................................................................ .............40
5.4.4 Элемент SAPI:SITE-LANG ........................................................................... ...............40
5.4.5 Элемент SAPI:SITE-ITEM ....................................................................... ....................41
5.4.6 Элемент SAPI:CONTAINER........................................................................ .................41
6 Содержание документа XML Sapiens............................................................... ......43
6.1 Информация о владельце кода......................................................................................... ..43
6.1.1 Элемент SAPI:AUTHOR....................................................................................... ........43
6.1.2 Элемент SAPI:NAME................................................................................................... .43
6.1.3 Элемент SAPI:EMAIL .............................................................................. ....................43
6.1.4 Элемент SAPI:URI.................................................................................................. ......43
6.2 Комментарии................................................................................................... .....................44
6.2.1 Элемент SAPI:COMMENTS........................................................................... ..............44
6.3 Контейнеры данных........................................................................................ .....................44
6.3.1 Контейнер запроса (элемент SAPI:QC).............................................................. .......44
6.3.2 Контейнер динамических данных (SAPI:DDC) ............................................. .............46
6.3.3 Набор полей (элемент SAPI:FIELDSET)........................................................... ..........54
6.4 Указатели................................................................................................................. .............56
6.4.1 Указатель (элемент SAPI:APPLY).................................................................. ............56
6.4.2 Указатель (атрибут SAPI:%Attribib)..................................................... .....................59
6.5 Вспомогательные операнды............................................................................................ ....59
6.5.1 Включение файлов (элемент SAPI:INCLUDE)................................. ..........................59
7 Справочная информация XML для XML Sapiens........................... ......................61
7.1 Проверка корректности документа.................................................................. ...................61
8 Ссылки .......................................................................................... ............................61
8.1 Нормативные ссылки ............................................................................................ ..............61
8.2 Информативные ссылки .................................................................................... .................63
9 Заключение............................................................................................................ ....65

1 Введение
XML Sapiens - декларативный язык описания композиции данных, представления и
функциональности веб-приложения.

Страница 4 из 65 © Red Graphic Systems


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

2 О спецификации XML Sapiens


2.1 Организация спецификации
Спецификация состоит из следующих разделов:
Разделы 2—4: Вводная информация в XML Sapiens
Во введении рассказывается о том, что представляет собой XML Sapiens, приводится
краткая история развития языка XML Sapiens, описывается, какие возможности
предоставляет XML Sapiens разработчикам.
«Структура документации» предоставляет информацию о чтении определений
типов документов (Document Type Definition — здесь и далее DTD) XML Sapiens.
Разделы 5—6: Справочное руководство по XML Sapiens
Главным содержанием руководства является справочник по языку XML Sapiens, в
котором определены все элементы и атрибуты языка.
Данный документ упорядочен по разделам, а не по грамматике языка XML Sapiens.

Информация о языке включает следующее:


› Какие объекты составляют логическую модель документа сайта;
› Взаимодействие этих объектов;
› Описание запросов содержания;
› Описание функциональных сценариев.
› Формальное SGML-определение XML Sapiens;
› SGML-определение XML Sapiens;
› DTD: http://xmlsapiens.org/spec/sapi20.dtd.

Ссылки
Список нормативных и информативных документов.

2.2 Соглашения, принятые в документе


2.2.1 Соглашения
Цель данной спецификации — помочь широкому кругу разработчиков CMS
организовать с помощью XML Sapiens управление пользовательскими

Страница 5 из 65 © Red Graphic Systems


интерфейсами. Спецификация позволяет изучить язык XML Sapiens и использовать в
собственных проектах.
Эту спецификацию можно использовать несколькими способами:
› Прочесть от начала до конца. Эта спецификация начинается с общего
представления языка XML Sapiens, а количество технических
подробностей постепенно повышается.
› Обращаться к необходимой информации. Для обеспечения максимальной
скорости получения информации о синтаксисе и семантике в оперативную
версию спецификации включены следующие возможности:
› Каждая ссылка на элемент или атрибут связана с его определением в
спецификации.
› На первых страницах трех разделов руководства к исходному
оглавлению добавляется более подробная информация о каждом
разделе.
2.2.2 Элементы и атрибуты
Названия элементов пишутся заглавными буквами (например, SAPI:COMMENTS).
Названия атрибутов представляются строчными буквами (например, title).
Необходимо учитывать, что в XML Sapiens имена элементов и атрибутов не
учитывают регистр. Это используется для более легкого чтения.
В названиях элементов и атрибутов в этом документе используется разметка,
поэтому агентами пользователей они могут генерироваться особым образом.
В каждом определении атрибута устанавливается тип его значения. Если имеется
несколько возможных значений, приводится список значений, разделенных
вертикальной чертой (|).
После информации о типе в каждом определении атрибута в квадратных скобках
("[]") указывается, учитывается ли в значениях регистр. Подробнее см. раздел 4.4.1.

2.2.3 Замечания и примеры


Информативные замечания выделены, чтобы отличаться от остального текста, и
могут генерироваться агентами пользователей особым образом.
В примерах и замечаниях используется разметка, поэтому некоторыми агентами
пользователей они могут генерироваться особым образом.

2.3 Благодарности
Спасибо всем, кто помог в создании спецификации XML Sapiens.
Выражаем особую благодарность выражается руководству компании Red Graphic
Systems (www.redgraphic.ru) за поддержку проекта, финансовую и техническую
помощь.
Спасибо рабочей группе проекта:
Автор спецификации: Дмитрий Шейко <d@redgraphic.com>

Страница 6 из 65 © Red Graphic Systems


Корректоры: Максим Барышников <mb@redgraphic.com> и Павел Левкович
<pl@redgraphic.com>
Спасибо за дизайн проекта www.xmlsapiens.org Ирине Зносок <i@redgraphic.com>.
Спасибо за верстку проекта www.xmlsapiens.org, HTML-версии спецификации Павлу
Левковичу.
Отдельное спасибо Максиму Барышникову за написание XML Sapiens-процессора и
XML Sapiens -ориентированной CMS (SAPID) с открытым кодом.
Спасибо рабочей группе HTML 4 за пример и образец высококлассной структуры и
содержания спецификации языка (Copyright © World Wide Web Consortium,
www.w3.org/TR/html401).

2.4 Информация об авторском праве


Copyright © Red Graphic Systems, 2004-2006. Все права защищены.
Документы, находящиеся на сервере www.xmlsapiens.org, предоставляются
обладателями авторских прав по следующим условиям: получая, используя и/или
копируя этот документ или документ xmlsapiens.org, из которого имеется ссылка на
это заявление, Вы признаете, что прочли и поняли следующие условия и обязуетесь
их выполнять:
Разрешение на использование, копирование и распространение содержимого этого
документа или документа с xmlsapiens.org, из которого имеется ссылка на это
заявление, с помощью любых средств, с любыми целями и без отчисления
авторского гонорара дается при условии, что Вы включите во ВСЕ копии этого
документа или его частей следующую информацию:
› Ссылку на исходный документ xmlsapiens.org или его URI.
› Имеющуюся информацию об авторском праве исходного автора, а если
она отсутствует, информацию в форме: "Copyright © Red Graphic Systems,
2004-2006. Все права защищены."
› Статус документа, если он существует.
› Если позволяет пространство, следует включить полный текст
следующего замечания.
› Кроме того, в любое программное обеспечение, документы и пр.,
созданные вследствие применения содержимого этого документа или
любой его части, должна быть добавлена благодарность владельцам
авторского права.
Данная лицензия не дает никаких прав изменения данного документа или создания
документов, производных от него.

ДАННЫЙ ДОКУМЕНТ ПРЕДОСТАВЛЯЕТСЯ "КАК ЕСТЬ"; ОБЛАДАТЕЛИ


АВТОРСКОГО ПРАВА НЕ ДАЮТ НИКАКИХ ЯВНЫХ ИЛИ
ПОДРАЗУМЕВАЕМЫХ ГАРАНТИЙ, ВКЛЮЧАЯ ГАРАНТИИ КОММЕРЧЕСКОЙ
ВЫГОДЫ, СООТВЕТСТВИЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ, НЕНАРУШЕНИЯ
АВТОРСКОГО ПРАВА ИЛИ ОБЛАДАНИЯ ИМ, НО НЕ ОГРАНИЧИВАЯСЬ

Страница 7 из 65 © Red Graphic Systems


ТАКОВЫМИ; ТО ЕСТЬ ОБЛАДАТЕЛИ АВТОРСКОГО ПРАВА НЕ ДАЮТ
ГАРАНТИЙ ТОГО, ЧТО СОДЕРЖИМОЕ ЭТОГО ДОКУМЕНТА СООТВЕТСТВУЕТ
КАКИМ-ЛИБО ЦЕЛЯМ И ТОГО, ЧТО ПРИМЕНЕНИЕ СОДЕРЖИМОГО ЭТОГО
ДОКУМЕНТА НЕ НАРУШИТ АВТОРСКИХ ПРАВ, ТОРГОВОЙ МАРКИ,
ПАТЕНТА ИЛИ ДРУГИХ ПРАВ ТРЕТЬЕГО ЛИЦА ИЛИ ОРГАНИЗАЦИИ.

ОБЛАДАТЕЛИ АВТОРСКОГО ПРАВА НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ЗА


ЛЮБОЙ ПРЯМОЙ, КОСВЕННЫЙ, СПЕЦИАЛЬНЫЙ ИЛИ ЗАКОНОМЕРНЫЙ
УЩЕРБ, ПОНЕСЕННЫЙ В РЕЗУЛЬТАТЕ ИСПОЛЬЗОВАНИЯ ЭТОГО
ДОКУМЕНТА ИЛИ ПРИМЕНЕНИЯ ЕГО СОДЕРЖИМОГО.

Имя и торговые марки обладателей авторского права НЕ могут использоваться в


рекламе, имеющей отношение к данному документу или его содержимому без
особого письменного разрешения. Авторское право на этот документ навсегда
остается за его обладателями.

Страница 8 из 65 © Red Graphic Systems


3 Архитектура XML Sapiens

3.1 Введение

3.1.1 Что такое XML Sapiens?


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

XML Sapiens призван сократить время разработки и себестоимость веб-проектов,


минимизировать трудоемкое системное программирование при разработке сайтов.
Это достигается посредством разработки веб-приложений в трех самостоятельных
аспектах: данные, представление и функциональность.
XML Sapiens – XML-базированный язык, позволяющий управлять объектами
документа веб-приложения и их взаимодействием, отделить функциональный
уровень веб-приложения, от уровней представления и данных (п.3.8.1).
XML Sapiens – унифицирует описание пользовательских интерфейсов для CMS и
позволяет беспрепятственный обмен ими через “XML Sapiens Works Gallery”
(www.xmlsapiens.org/lib/).

3.1.2 Что подразумевается под функциональностью веб-приложения?


В данном контексте под функциональностью веб-приложения подразумевается
пользовательский интерфейс, обеспечивающий взаимодействие пользователя с
приложением. Среди наиболее типичных примеров функциональных решений для
типовых сайтов можно назвать: навигационное меню, индикатор маршрута к
документу, лента новостей, динамическая форма авторизации и другие. Любое из
функциональных решений можно описать в репозитарии XML Sapiens и
использовать в веб-приложении. Также можно импортировать функциональное
решение из “ XML Sapiens Works Gallery” (www.xmlsapiens.org/lib/), адаптировать
его под свои нужды и применить в собственном проекте.

3.1.3 История возникновения языка


В середине 2003 года перед компанией Red Graphic Systems стояла задача создания
среды разработки веб-приложений, обеспечивающей оперативное управление как
содержанием веб-проектов, так и их представлением и функциональностью (п.3.8.1).
В результате была разработана платформа Site Sapiens (www.sitesapiens.ru), основой
которой послужил прототип языка XML Sapiens.

3.1.4 Как использовать XML Sapiens?


Для использования XML Sapiens необходим XML Sapiens-процессор. Можно
воспользоваться готовым свободно распространяемым решением от Red Graphics
Systems для PHP (http://sapiprocessor.sourceforge.net/) или создать собственный
процессор, на основе рекомендаций рабочей группы XML Sapiens. Подробности
можно посмотреть в пункте 3.8.1.

Страница 9 из 65 © Red Graphic Systems


3.1.5 XML Sapiens и XSLT
Любой веб-документ может быть логически разделен на данные и их оформление.
Кроме того, документ сайта, как правило, содержит элементы пользовательского
интерфейса (навигация, формы ввода информации и прочее). В соответствии с
рекомендациями W3C оформление документа вне зависимости от его данных
управляется посредством технологии XSLT (http://www.w3.org/TR/xslt). Данные
документа помещаются в XML-файл и преобразуются на основании правил XSLT-
шаблона. С помощью XSLT можно задать оформление и для форм пользовательского
интерфейса, но для преобразования потребуются исходные данные этих форм в
XML-файле.

XML Sapiens позволяет указать источник данных для каждой формы


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

Таким образом, XML Sapiens помогает разделить абстрактные составляющие веб-


ресурса: данные, оформление и пользовательский интерфейс.

Исходный XML

<?xml version="1.0" encoding="UTF-8"?>


<?xml-stylesheet type='text/xsl' href='template.xsl'?>
<?xml-sapi type='text/xml' href='interface.sapi'?>
<content xmlns:sapi="http://www.xmlsapiens.org/spec/sapi.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink">
<data1>data1</data1>
<data2>data2</data2>
<menu><sapi:apply name="ddc.menu.value" /></menu>
<title><sapi:apply name="qc.title.value"></title>
<publication><sapi:apply name="qc.publication.value"></publication>
</content>

Сценарий XML Sapiens в файле interface.sapi

<?xml version="1.0" encoding="UTF-8"?>


<sapi version="2.0" xmlns:sapi="http://www.xmlsapiens.org/spec/sapi.dtd">
<sapi:ddc name="menu">

Страница 10 из 65 © Red Graphic Systems


<sapi:choose>
<sapi:when exp="TRUE">
<sapi:for-each select="get_tree()">
<sapi:ifempty>Menu not found</sapi:ifempty>
<sapi:fallback>CMS-application error</sapi:fallback>
<sapi:choose>
<sapi:when exp="TRUE">
<sapi:code>
<row sapi:id="this.this.id.value" sapi:activity="this.this.currentpage.value">
<link><sapi:apply name="this.this.href.value" /></link>
<item><sapi:apply name="this.this.title.value" /></item>
</row>
</sapi:code>
</sapi:when>
</sapi:choose>
</sapi:for-each>
</sapi:when>
</sapi:choose>
</sapi:ddc>
</sapi>

Сформированный XML

<?xml version="1.0" encoding="UTF-8"?>


<?xml-stylesheet type='text/xsl' href='template.xsl'?>
<content xmlns:sapi="http://www.xmlsapiens.org/spec/sapi.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink">
<data1>data1</data1>
<data2>data2</data2>
<menu>
<row id="01" activity="1">
<link>/intro/</link>
<item>Introduction</item>
</row>
<row id="02" activity="0">
<link>/chapter1/</link>

Страница 11 из 65 © Red Graphic Systems


<item>Chapter 1</item>
</row>
<row id="03" activity="0">
<link>/chapter2/</link>
<item>Chapter 2</item>
</row>
</menu>
<title><![CDATA[Introduction]]></title>
<publication><![CDATA[<p>Content</p>]]></publication>
</content>

3.1.6 XML Sapiens и языки описания интерфейсов

XML Sapiens может использоваться для декларирования рендеринга


пользовательского интерфейса, но не содержит API для доступа к какой-либо
библиотеке компонентов приложения на стороне клиента подобно языкам XAML,
XUL, MXML (Flex).

XML Sapiens может совместно использоваться с языком UIML (www.uiml.org) для


динамического формирования каркаса области приложения и списка определений
элементов (содержание элементов APP/DEFINE).

С помощью XML Sapiens также можно расширять исходные документы XUL


(http://www.mozilla.org/projects/xul/), XAML
(http://msdn.microsoft.com/library/default.asp?url=/library/en-
us/dnintlong/html/longhornch03.asp), Flex (http://www.macromedia.com/software/flex/),
Web Applications 1.0 (http://www.whatwg.org/specs/web-apps/current-work/) для
определения областей редактируемого содержания и задания моделей форм
интерфейсов.

3.2 Модель доставки содержания XML Sapiens


Для лучшего понимания технологии XML Sapiens следует разобрать процесс
генерации документа в XML Sapiens-базированной системе. При запросе документа
система идентифицирует его, получает его содержание и атрибуты. Также
определяется шаблон, связанный с данным документом. Код шаблона представления
соответствует синтаксису выбранного языка разметки (HTML, XHTML, RSS, SVG и
т.д.) и содержит инструкции XML Sapiens. Шаблон и содержание документа
передаются процессору XML Sapiens, который возвращает преобразованный
готовый к просмотру документ.

Страница 12 из 65 © Red Graphic Systems


Рисунок 1. 3.2 Модель доставки содержания XML Sapiens
В ходе преобразования документа процессор XML Sapiens анализирует код шаблона
документа, обращаясь при необходимости к репозитарию XML Sapiens (набор
объектов XML Sapiens). Указатели на контейнеры запросов XML Sapiens
преобразуются в соответствии с состоянием среды (просмотр документа,
редактирование документа и т.д.) и инструкциями контейнера: Они могут быть
преобразованы в связанный объект содержания, оформленный объект содержания
или же интерфейс запроса содержания. Указатели на наборы полей тем же образом
преобразуются в группы запросов содержания. Указатели на контейнеры
динамических данных преобразуются в код отображения, в соответствии с
алгоритмами, заданными инструкциями XML Sapiens. Включения SAPI:INCLUDE
заменяются кодом запрашиваемых файлов, преобразованных в соответствии с
заданными правилами.

3.2.1 Шаблон
Для любого документа или группы документов можно назначить шаблон, который
определяет, как будет выглядеть документ на сайте. Шаблон содержит код
представления и указатели на объекты XML Sapiens.

Страница 13 из 65 © Red Graphic Systems


3.2.2 Код представления
Для задания правил форматирования отображаемого документа в браузере
используется код выбранного языка разметки. XML Sapiens не имеет ограничений
для используемых языков разметок. Однако рекомендуется применение XML-
базированных языков или HTML.

3.2.3 Репозиторий XML Sapiens


Репозиторий XML Sapiens — это набор файлов объектов XML Sapiens, вылидных
DTD XML Sapiens.

3.3 Объекты XML Sapiens


3.3.1 Контейнеры запросов
Контейнеры запросов (п. 6.3.1) указывают на фрагменты, отображаемого на сайте
документа, содержание которых может изменяться администратором. Эти
контейнеры содержат код запросов данных у пользователя и сопутствующее им
оформление. Код запросов указывается в синтаксисе языка разметки кода
представления. Рассмотрим пример:

<?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>

Когда запрашивается контейнер запроса данного типа (inputtext)


<sapi:apply name="qc.title.value" type="inputtext" />
система выбирает подходящую случаю секцию описания (доставка содержания
state=”delivery” или администрирование state=”admin”) и далее следует ее
инструкциям.

Страница 14 из 65 © Red Graphic Systems


3.3.2 Наборы полей

Когда нам требуется, чтобы документ отображался различным образом при


различных состояниях среды, мы можем определить наборы полей документа для
заданных состояний с помощью SAPI:FIELDSET.
3.3.3 Контейнеры динамических данных
Контейнеры динамических данных (п. 6.3.4) указывают на фрагменты
отображаемого на сайте документа, содержание которых формируется на основании
некоторого функционального алгоритма. Эти контейнеры содержат описание
функциональных алгоритмов.

3.3.4 Идентификация объектов


К объекту XML Sapiens можно обратиться либо посредством указателя SAPI:APPLY,
либо непосредственно в выражении условия. Идентификаторы объектов имеют
следующий синтаксис:
имя_объекта.свойство_объекта

Объекты XML Sapiens имеют следующие свойства:


Категория Описание
value Значение, возвращаемое объектом

Пример вывода содержания статического контейнера данных, где имя контейнера


var1:
<sapi:apply name="var1.value" />

Пример вывода содержания узла из набора узлов приложения CMS (п.3.8.5.7) в теле
контейнера динамических данных (имя контейнера подразумевает this, имя
перечисления подразумевает this, имя переменной перечисления envar):
<sapi:apply name="this.this.envar.value" />

Пример условия динамического контейнера данных в теле контейнера (имя


контейнера подразумевает this, имя перечисления подразумевает this, имя
переменной перечисления envar):

<sapi:apply exp="eq('this.this.envar.value', 'curvalue') " />

Страница 15 из 65 © Red Graphic Systems


Пример вывода содержания переменной окружения CMS, где имя переменной var1:
<sapi:apply name="var1.value" />

3.3.4.1 Свойства узла из набора узлов приложения CMS


Узел набора, возвращаемый приложением CMS, содержит следующие свойства:
Команда Описание
position Возвращает позицию текущего узла в наборе узлов (начиная
с 1)
length Возвращает количество узлов в наборе узлов

Узнать количество узлов в наборе узлов приложения CMS можно следующим


образом:
<sapi:apply name="this.this.length" />

3.4 Параметры вызова DDC

Если требуется использовать в шаблонах один и тот же DDC, но различным образом


в зависимости от его положения, можно назначить параметры вызова DDC, что бы в
дальнейшем анализировать их значения в условиях DDC. Передача параметров DDC
происходит следующим образом:

<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>

Значения параметров DDC будут доступны в условиях DDC в переменных


this.param.pvar1.value и this.param.pvar2.value

3.5 Перенаправление потока DDC

Если при проектировании шаблона представления требуется стартовать CMS-


приложение определенного DDC, но не возвращать в шаблон искомый код DDC тот
час же, следует воспользоваться перенаправлением потока DDC в переменную
окружения. При этом будет создана новая переменная, которая примет код,
отработавшего DDC. Эту переменную в дальнейшем можно отобразить один или
несколько раз в шаблоне посредством элемента SAPI:APPLY.

Синтаксис перенаправления потока DDC следующий:

<sapi:apply name="ddc.obj1.value" redirect="tempvar" />

Страница 16 из 65 © Red Graphic Systems


...
<sapi:apply name="tempvar.value" />
...

3.6 Выражения XML Sapiens


Для описания логики функциональных решений в контейнерах динамических
данных могут быть использованы выражения XML Sapiens. При разработке
операндов выражений использовались конструкции языка скриптов для XML
XEXPR (http://www.w3.org/TR/2000/NOTE-xexpr-20001121/). Данная спецификация
поддерживает выражения сравнения. Эти выражения могут возвращать одно из двух
значений (0 или 1), означающих соответственно FALSE (ложь) или TRUE (истина).
В содержании атрибутов XML Sapiens допускает операнды выражений lt(A, B, C)
(меньше), leq(A, B, C) (меньше либо равно), geq(A, B, C) (больше либо равно), eq(A,
B, C) или == (равно), neq(A, B, C) или != (не равно), gt(A, B, C) (больше). Где A B C
значения, разделенные запятыми. Допускается использование круглых скобок для
группирования выражений, а также логические операнды and(A, B, C) или AND (И)
и or(A, B, C) OR (ИЛИ).
Также допустимы и математические операнды add(A, B, C) или + (сложить для чисел
и соединение для строк), subtract(A, B, C) или - (вычитание чисел), multiply(A, B, C)
или * (умножение чисел), divide(A, B, C) (деление чисел).
Выражения XML Sapiens допускают непосредственное обращение к переменным
среды CMS. Например:

<sapi:for-each select="get_tree()" >


<sapi:ifempty>Records not found</sapi:ifempty>
<sapi:fallback>CMS-application error</sapi:fallback>
<sapi:choose>
<sapi:when exp="neq(this.variable.value, last_argv.value)">
<sapi:code>
<a sapi:href="this.this.href.value">
<sapi:apply name="this.this.title.value" />
</a>
</sapi:code>
</sapi:when>
</sapi:choose>
</sapi:for-each>

Страница 17 из 65 © Red Graphic Systems


Выражения могут использоваться в атрибуте EXP элемента SAPI:WHEN, в атрибуте
SELECT элемента SAPI:FOR-EACH, в атрибуте EXP элемента SAPI:APPLY или в
атрибутах формата SAPI:%Attrib элементов HTML .

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


коде контейнера (элемент SAPI:CODE) можно использовать следующий синтаксис

<sapi:apply exp="add(http_path.value, qc.link.value)" />

3.7 Включения документа XML Sapiens


3.7.1 Включения кода системного языка CMS
В особых случаях требуется непосредственное обращение к коду языка
программирования CMS. XML Sapiens поддерживает включения кода системного
языка в следующем синтаксисе:
<?EXTERNAL код_системного_языка ?>
Когда контейнер данных XML Sapiens содержит включения кода внешнего языка,
следует сообщить об этом в атрибуте контейнера EXTERNAL.
Прибегать к включениям системного языка не рекомендуется. Потому, как при этом
теряется переносимость функциональных решений.
3.7.2 Включения файлов
Для включения и обработки файлов используется конструкция
<sapi:include href="url" />

3.8 CMS базированные на XML Sapiens


3.8.1 Модель управляемого сайта
Управляемый посредством CMS сайт можно представить четырьмя логическими
уровнями. Уровень данных обуславливает инфраструктуру поступления содержания.
Функциональный уровень описывает модели взаимодействия различных групп
пользователей с интерфейсом представления данных
. Уровень представления — это готовый пользовательский интерфейс,
обеспечивающий доставку запрашиваемых данных пользователям
интернет/интранет. Уровень управления — интерфейс административной области
CMS, позволяющий управлять уровнями данных, функциональности, представления.

Страница 18 из 65 © Red Graphic Systems


клиенты партнеры веб-аудитория операторы авторы редакторы

валидаторы администраторы

Функциональн
ый дизайн Уровень представления
XML, HTML, WM L, SVG, PDF
Уровень управления

Функциональный уровень
Структурный
Веб-сайт

Инфоканалы Электронные публикации Электронная коммерция


дизайн

Сервисы Реклама Персонификация


Администриро

Уровень данных
вание

Документы Интернет/ Базы данных Приложения Другое


Интранет

Рисунок 2. 4-х уровневая модель управляемого сайта

3.8.1.1 Уровень данных


Инфраструктура поступления данных на сайт имеет различные реализации. Однако
XML Sapiens содержит рекомендации по использованию контейнеров запросов (п.
6.3.1), которые задают интерфейс управления содержанием в административной
области CMS. Когда следует подчеркнуть, что CMS работает в режиме
администрирования сайта, то говорится об уровне администрирования или же об
области администрирования.

3.8.1.2 Функциональный уровень


Функциональный уровень сайта описывается в репозитарии XML Sapiens.

3.8.1.3 Уровень представления


В данном документе рассматривается следующая модель представления данных.
При отображении любого из разделов сайта, согласно параметрам запрашиваемого
документа (URI), CMS определяет переменные окружения, согласованные со
спецификацией XML Sapiens. Далее определяется системный идентификатор
запрашиваемого документа сайта и сопровождающее его описание, включающее
указатели на шаблон документа и репозитарий XML Sapiens. Эти параметры
передаются процессору XML Sapiens для генерации представления документа сайта.

Страница 19 из 65 © Red Graphic Systems


Рисунок 3. Модель процесса представления документа

3.8.2 Состав CMS основанной на XML Sapiens


По спецификации XML Sapiens CMS содержит предпроцессор, анализирующий
текущий URI и определяющий переменные окружения (п. 3.8.4). CMS также
содержит необходимое число шаблонов представления, репозиторий XML Sapiens (п.
), хранилище данных и процессор, осуществляющий генерацию документа.

Страница 20 из 65 © Red Graphic Systems


Браузер Запрос
Controller Среда окружения
CMS

View Структура

Ответ Процессор
XSL Шаблон
XML Sapiens

Запрос

Ответ
Model CMS API

Декларации
XML Sapiens

Рисунок 4. MVC парадигма для XML Sapiens

3.8.2.1 Хранилище данных CMS


Хранилище данных CMS, как и следует из названия, хранит содержание сайта.
Каждый документ сайта имеет свой уникальный идентификатор. Любой элемент
сайта может содержать неограниченное число контейнеров запросов, которые в ходе
представления документа являются фрагментами содержания. Содержание,
введенное в заданный контейнер запросов для заданного документа в области
администрирования, помещается в хранилище данных таким образом, чтобы по этим
же параметрам оно могло быть восстановлено при просмотре сайта в области
представления.

3.8.3 Процессор XML Sapiens


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

3.8.3.1 Преобразования XML Sapiens при просмотре сайта


На первоначальном этапе процесса в соответствии с набранным в адресной строке
URI, или же URI по ссылке, определяются переменные окружения CMS (п. 3.8.4).
Далее процессор должен обратиться к шаблону документа и проанализировать его
содержание на предмет наличия указателей объектов XML Sapiens (SAPI:APPLY п.
6.4). Для обеспечения полного соответствия спецификации XML Sapiens следует
анализировать наличие конструкций <?EXTRNAL ?>, содержание которых
передается на исполнение системному языку. По обнаруженным в шаблоне

Страница 21 из 65 © Red Graphic Systems


указателям процессор обращается к репозиторию XML Sapiens за содержанием
объектов (п. 3.3).

3.8.3.1.1 Анализ указателей на данные


При обращении процессора к репозиторию XML Sapiens по указателю на данные,
процессор возвращает в прообраз документа значение переменной окружения с
именем указанным в атрибуте NAME элемента SAPI:APPLY.

3.8.3.1.2 Анализ контейнеров запросов


При обращении парсера к репозиторию XML Sapiens по указателю на контейнер
запросов, парсер возвращает соответствующее содержание в прообраз документа.
Рассмотрим указатель на контейнер запросов:
<sapi:apply name="newsbody.value" />
В прообраз документа будет передано содержание, соответствующее в хранилище
данных контейнеру newsbody (содержание новости) документа

3.8.3.1.3 Анализ наборов полей


Когда процессор встречает включение набора полей, он принимает инструкции
соответствующего набора для текущего состояния среды и возвращает
сформированный код в прототип документа.
Пример:
<sapi:include href="article.xml" parse="fieldset" state="rubric" />

3.8.3.1.4 Анализ контейнеров динамических данных


При обращении парсера к репозиторию XML Sapiens по указателю на контейнер
динамических данных (п. 6.3.2), процессор анализирует содержание контейнера.
Прежде всего, проводится анализ условий корневого элемента SAPI:CHOOSE.
Выражения условий SAPI:EXP разбираются в синтаксисе, приведенном в разделе
3.6. Содержание условий, выражения которых «истинны», добавляются в поток
возвращаемого значения. Если условие содержит конструкцию SAPI:FOR-EACH,
производится обращение к приложению, указанному в атрибуте SELECT согласно
параметров <SAPI:PARAMS>, и аналогичный предыдущему анализ условий будет
обработан столько раз, сколько значений в возвращаемом наборе узлов. Когда
выполнены все инструкции контейнера динамических данных, парсер доставляет
поток возвращаемого значения в прообраз документа.

3.8.3.1.5 Анализ включений системного языка


При обнаружении конструкций <?EXTERNAL ?> парсер передает их содержание на
исполнение системному языку CMS. Результат выполнения инструкций
возвращается в прообраз документа.

Страница 22 из 65 © Red Graphic Systems


3.8.3.1.6 Анализ включений файлов
При обнаружении конструкций <SAPI:INCLUDE HREF=”FILE” /> процессор
принимает файл, обрабатывает его содержание и возвращает его в прообраз
документа.

3.8.3.2 Преобразования XML Sapiens при администрировании сайта


Область администрирования представляет собой интерфейс для управления
содержанием документа. Документ может содержать неограниченное число
контейнеров запросов, что будет отображено в интерфейсе соответствующими
формами. Типы форм описаны в контейнере запросов.
В области администрирования процессор функционирует, так же как и в области
представления, за исключением того, что контейнеры запросов обрабатываются
несколько иначе. Указатели на контейнеры запросов XML Sapiens преобразуются в
интерфейсные формы запросов содержания.

3.8.4 Переменные окружения


Переменные окружения — это переменные, созданные в процессе формирования
документа сайта. Большей частью переменные окружения определяются в начале
всего процесса на основании параметров адресной строки (URI). Переменные
окружения содержат всю необходимую информацию о выбранном документе и о
произведенной команде интерфейса.
Суть выражений SAPI:EXP заключена в сравнительных операциях с переменными
окружения CMS.
В спецификации XML Sapiens, начиная с версии 1.1 переменные окружения
представленны ввиде объектного дерева. Корневым элементом дерева является
абстрактный объект project. Он объявляет интерфейс всего информационного
пространства. В коллекцию объектов project входят объекты, объявляющие сайты.
Имена объектов соответствуют переменным, идентифицирующим сайты или
языковые версии сайтов в структуре информационного пространства. Каждый из
объектов сайтов содержит собственную коллекцию объектов. В результате, скажем,
для получения значения конфигурационной записи feedback_email потребуется
обращение:
project.sitea_en.config.feedback_email.value
что равносильно
sitea_en.config.feedback_email.value
Если требуется получить значение объекта текущего сайта, то синтаксис
упрощается:
config.feedback_email.value

Страница 23 из 65 © Red Graphic Systems


3.8.5 Рекомендованные приложения CMS
XML Sapiens не описывает функциональные решения на системном уровне.
Структура хранилища данных и взаимодействия с ним проектируется разработчиком
CMS на свое усмотрение. Однако для унификации описаний и возможности обмена
функциональными решениями (см. “XML Sapiens Works Gallery”
www.xmlsapiens.org/lib/) данная спецификация рекомендует список приложений, для
обращения к ним в контейнерах динамических данных.
В списке представлены приложения (функции системного программного языка
CMS), их описания, параметры и переменные возвращаемого набора узлов.
Спецификация XML Sapiens не дает рекомендаций по содержанию функций, но
рекомендует входные данные (параметры) и данные на выходе (свойства узлов
набора узлов приложения CMS).
Последняя версия списка рекомендуемых приложений для CMS основанных на XML
Sapiens доступна по адресу: http://xmlsapiens.org/spec/functionlist/.

3.8.5.1 get_infochannel()

Описание: Получить информационный канал, список записей

Использование

<sapi:for-each select="get_infochannel()" name="enum" title="Get records set">


<sapi:params>
<sapi:param name="параметр_1">значение_1</sapi:param>
<sapi:param name="параметр_N">значение_1</sapi:param>
</sapi:params>

Параметры:

• limit {A,B} – указать ограничение числа выводимых узлов


• sources {Doc/RecID канала} - указать источник информационного канала
• root {адрес_канала} - указать относительный адрес информационного канала
• orderby {struct.fieldname ASC} – указать ключ сортировки
• withdata {yes} - принимать свойства и данные списка
• levellimitation {A,B} – указать ограничение по диапазону уровней
• withpathscalculation - узнать информацию о родительских разделах
• groupby – указать ключ группировки
• filter {строка} – указать ключ фильтрации

Переменные набора узлов:

• this.length.value – число элементов перечисления

Страница 24 из 65 © Red Graphic Systems


• 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.counter.value - счетчик записей
• this.this.recsetslength.value - число элементов вложенного инфоканала
• this.this.поле.value - значение индексного поля
• this.this.parent_name.value - название родитеского раздела
• this.this.parent_href.value - ссылка на родительский раздел

3.8.5.2 get_tree()

Описание: Получить иерархическую структуру информационного пространства или


ее часть

Использование

<sapi:for-each select="get_tree()" name="enum" title="Get tree">


<sapi:params>
<sapi:param name="параметр_1">значение_1</sapi:param>
<sapi:param name="параметр_N">значение_1</sapi:param>
</sapi:params>

Параметры:

• limit {A,B} - указать ограничение числа выводимых узлов


• root {адрес ветви} – получить данные ветви структурного дерева
• orderby {struct.fieldname ASC} - указать ключ сортировки
• withdata {yes} - принимать свойства и данные списка
• levellimitation {A-B} – указать ограничение по диапазону уровней
• filterbyrelation {relation_name} – указать ограничение по связи
• filterfunction {строка} - задание собственной функции фильтрации записей

Переменные перечисления:

• this.lenght.value – число элементов перечисления


• 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.counter.value - счетчик записей

Страница 25 из 65 © Red Graphic Systems


• this.this.branchlength.value - число элементов вложенной ветви
• this.this.recsetslength.value - число элементов вложенного инфоканала
• this.this.document_id.value - ID документа, начинающего ветвь

3.8.5.3 get_recorddata()

Описание: Получить содержание записи

Использование

<sapi:for-each select="get_recorddata()" name="enum" title="Get record">


<sapi:params>
<sapi:param name="параметр_1">значение_1</sapi:param>
<sapi:param name="параметр_N">значение_1</sapi:param>
</sapi:params>

Параметры:

• sources {ID_документа} - принять запись с заданным ID

Переменные перечисления:

• 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()

Описание: Получить содержание документа

Использование

<sapi:for-each select="get_documentdata()" name="enum" title="Get document">


<sapi:params>
<sapi:param name="параметр_1">значение_1</sapi:param>
<sapi:param name="параметр_N">значение_1</sapi:param>
</sapi:params>

Страница 26 из 65 © Red Graphic Systems


Параметры:

• root {адрес_документа} - указать относительный адрес документа


• sources {ID_документа} - принять документ с заданным ID

Переменные перечисления:

• 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()

Описание: Получить маршрут к документу

Использование

<sapi:for-each select="get_track()" name="enum" title="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()

Описание: Получить список элементов группы

Использование

<sapi:for-each select="get_related()" name="enum" title="Get elements">


<sapi:params>

Страница 27 из 65 © Red Graphic Systems


<sapi:param name="параметр_1">значение_1</sapi:param>
<sapi:param name="параметр_N">значение_1</sapi:param>
</sapi:params>

Параметры:

• relation {ключ_ассоциации} - указать ассоциацию


• parent_sources {ID_родительских_элементов} - указать зависимость
• child_sources {ID_наследующих_элементов} - указать зависимость

Переменные перечисления:

• 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.7 Набор узлов приложения CMS


Когда указывается обращение к приложению системного программного языка в
элементе <FOR-EACH>, предполагается, что приложение возвратит процессору
набор узлов, элементы которого будут последовательно переданы в содержание
элемента <FOR-EACH> и послужат содержанием перечисления. Каждый узел
возвращаемого набора узлов содержит свойства, заявленные в таблице
рекомендованных приложений CMS.
Пример обращения к свойствам узлов приложения CMS:
<sapi:apply name="this.this.title.value" />

3.8.6 Пространство имен XML Sapiens


Традиционная документная структура сайта представляет собой иерархическое
дерево, в корне которого находится информационное пространство. Каждый ресурс
(сайт) пространства лежит в основании собственной структурной ветви. Следующим
уровнем в дереве представлены разделы. Спецификация XML Sapiens позволяет
описать в общей документной структуре информационного пространства область
«видимости» для объектов XML Sapiens. Для этого определяется пространство имен
элементом SAPI:NAMESPACE, на которое можно ссылаться при создании
контейнеров данных. Описание пространства имен содержит информацию о том, как
оно связано с областями общей документной структуры информационного
пространства.

Страница 28 из 65 © Red Graphic Systems


4 Структура документации
4.1 Введение
Расширяемый язык разметки (The Extensible Markup Language, XML) является
подмножеством SGML (http://www.w3.org/TR/2004/REC-xml11-20040204/).
SGML — это система определения языков разметки. Она позволяет авторам
размечать свои документы, представляя информацию о структуре, представлении и
семантике в одном документе (http://www.w3.org/MarkUp/SGML/).
XML Sapiens является одним из примеров языка разметки SGML. XML Sapiens
совместим с XML. Определения XML Sapiens приведены в настоящей документации
в синтаксисе SGML.
Названия многих элементов XML Sapiens соответствуют логически близким им
элементам XSL (http://www.w3.org/Style/XSL/).

4.2 Конструкции SGML, используемые в XML Sapiens


4.2.1 Элементы
Определение типа документа SGML объявляет типы элементов, представляющие
структуры или желательное поведение. XML SAPIENS включает типы элементов,
которые представляют контейнеры данных, комментарии, функции и т.д.
Каждое объявление типа элемента обычно включает три части: начальный тег,
содержимое и конечный тег.
Имя элемента отображается в начальном теге (пишется <имя-элемента>) и в
конечном теге (пишется </имя-элемента>); не забывайте про косую черту (slash)
перед именем элемента в конечном теге. Например, начальные и конечные теги
элемента <SAPI:AUTHOR> определяют список:
<sapi:author>
<sapi:name>Dmitry Sheiko</sapi:name>
<sapi:email>sheiko@cmsdevelopment.com</sapi:email>
<sapi:uri>www.cmsdevelopment.com</sapi:uri>
</sapi:author>

Некоторые типы элементов XML SAPIENS не имеют содержимого (SAPI:APPLY, и


др.), их следует описывать в синтаксисе «тега пустого элемента» (см.
http://www.w3.org/TR/2004/REC-xml11-20040204/#sec-starttags):
<sapi:apply name="var1.value " />

Ограничение корректности: Уникальность спецификации атрибута


В границах одного начального тега (или тега пустого элемента) одно и то же имя
атрибута не может появляться более одного раза.
Ограничение корректности: Отсутствие символов < в значениях атрибута
Символы < и > не могут содержаться в содержании атрибутов.

Страница 29 из 65 © Red Graphic Systems


Все типы элементов, объявленные в этой спецификации, перечислены в указателе
элементов.
4.2.2 Атрибуты
С элементами могут быть связаны свойства, называемые атрибутами, которые
могут иметь значения (стандартные или устанавливаемые авторами или
сценариями). Пары атрибут/значение помещаются перед закрывающей скобкой ">"
начального тега элемента. В начальном теге элемента может быть любое число
(допустимых) пар атрибут/значение, разделенных пробелами. Они могут указываться
в любом порядке.
По умолчанию в SGML необходимо, чтобы все значения атрибутов были разделены с
помощью двойных (десятичный код ASCII 34) или одинарных кавычек (десятичный
код ASCII 39). Одинарные кавычки могут включаться в значение атрибута, если
значение отделяется двойными кавычками, и наоборот. Авторы могут также
использовать цифровые ссылки на символы (п. 4.2.3) для представления двойных
(&#34;) и одинарных кавычек (&#39;). Для двойных кавычек авторы могут также
использовать комбинацию ссылок на символы &quot;.
Значение атрибута может включать только буквы (a-z и A-Z), цифры (0-9), знаки
переноса (десятичный код ASCII 45) и точки (десятичный код ASCII 46).
Рекомендуется всегда использовать кавычки.
Имена атрибутов всегда учитывают регистр
Значения атрибутов обычно учитывают регистр. Определение каждого атрибута в
списке атрибутов указывается, учитывает ли значение регистр.
Список всех атрибутов, определенных в этой спецификации, приводится в указателе
атрибутов (п. ).
4.2.3 Ссылки на символы
Ссылки на символы – это числовые или символьные имена символов, которые могут
быть включены в репозиторий XML Sapiens. Они удобны для обращения к редко
используемым символам или к символам, которые трудно или невозможно вводить в
средствах разработки документов. Вы можете встретить ссылки на символы в этом
документе, они начинаются со знака "&" и заканчиваются точкой с запятой (;). Вот
некоторые примеры:
› "&lt;" представляет знак <.
› "&gt;" представляет знак >.
› "&quot;" представляет знак ".
› "&#229;" (десятичное число) представляет букву "a" с кружком сверху.
› "&#1048;" (десятичное число) представляет кириллическую букву "I".
› "&#x6C34;" (шестнадцатеричное число) представляет китайский знак
воды.
Ссылки на символы в XML Sapiens подробно обсуждаются дальше в этом разделе
под заголовком набор символов документа XML Sapiens.
По спецификации XML не допускается использование ссылки &nbsp;. Неразрывный
пробел можно получить с помощью ссылки &#xA0;

Страница 30 из 65 © Red Graphic Systems


4.2.4 Комментарии
Комментарии в XML Sapiens имеют следующий синтаксис:
<!-- это комментарий -->
<!-- это тоже комментарий,
он занимает несколько строк -->

Пробелы между открывающим разделителем разметки ("<!") и открывающим


разделителем комментария ("--") недопустимы, но их можно использовать между
закрывающим разделителем комментария ("--") и закрывающим разделителем
разметки (">"). Распространенной ошибкой является включение строки символов
переноса ("---") в комментарий. Следует избегать использования в комментариях
двух или более символов переноса.
Информация в комментариях не имеет специального значения (например, ссылки на
символы п. 4.2.3 не интерпретируются).

4.3 Как читать XML Sapiens DTD


Каждое объявление элемента и атрибута в этой спецификации сопровождается
фрагментом его определения типа документа. Мы решили включить фрагменты DTD
в спецификацию вместо того, чтобы искать более доступные, но более длинные и
менее точные средства описания свойств элементов. При помощи следующего
учебника читатели, не знакомые с SGML, смогут научиться читать DTD и понимать
технические подробности спецификации XML Sapiens.
4.3.1 Комментарии DTD
В DTD комментарии могут занимать несколько строк. В DTD комментарии
отделяются парой меток "--", например:
<!ELEMENT SAPI:APPLY – O EMPTY – значение именованного свойства -->
Здесь комментарий "значение именованного свойства" объясняет использование
типа элемента SAPI:APPLY. Комментарии в DTD носят информативный характер.
4.3.2 Определения комбинаций параметров
DTD XML Sapiens начинается с ряда определений комбинаций параметров.
Определение комбинации параметров определяет макрос, на который можно
ссылаться в любом месте DTD. Эти макросы не отображаются в документах XML
SAPIENS, они отображаются только в DTD. Другие типы макросов, называемые
ссылками на символы (п. 4.2.3), могут использоваться в тексте документа в формате
XML SAPIENS или в значениях атрибутов.
Когда на комбинацию параметров ссылаются в DTD по имени, она разворачивается в
строку.
Определение комбинации параметров начинается с ключевого слова <!ENTITY %, за
которым следует имя entity, строка в кавычках, в которую разворачивается entity и
наконец закрывающий “>”. Экземпляры комбинаций параметров в DTD начинаются
со знака "%", затем идет имя комбинации и заканчивается необязательным символом
";".

Страница 31 из 65 © Red Graphic Systems


В следующем примере определяется, в какую строку будет разворачиваться
"%sample;".
<!ENTITY % sample "var1 | var2 | var3">
Строка, в которую разворачивается комбинация параметров, может содержать другие
имена комбинаций параметров. Эти имена разворачиваются рекурсивно.

4.3.3 Объявления элементов


DTD XML Sapiens состоит из объявлений типов элементов и их атрибутов.
Объявление начинается с ключевого слова <!ELEMENT и заканчивается символом
“>”. Между ними указываются:
1. Имя элемента.
2. Обязателен ли конечный тег элемента. Два символа переноса после имени
элемента означают, что начальный и конечный теги являются обязательными.
Один символ переноса, за которым следует буква "O", указывает, что
конечный тег можно опустить. Две буквы "O" указывают на то, что можно
опустить как начальный, так и конечный теги.
3. Содержимое элемента, если таковое имеется. Допустимым содержимым
элемента называется его модель содержимого. Типы элементов, не имеющие
содержимого, называются пустыми элементами. Модель содержимого для
таких типов элементов объявляется при помощи ключевого слова "EMPTY".
В этом примере показано объявление пустого типа элемента:
<!ELEMENT sapi:apply – O EMPTY>
› Объявляется тип элемента SAPI:APPLY.
› Знак переноса, за которым следует буква "O", указывает, что конечный тег
можно опустить, но если модель содержимого – "EMPTY", это правило
усиливается, и конечный тег должен быть опущен.
› Ключевое слово "EMPTY" означает, что экземпляры этого типа не должны
иметь содержимого.
4.3.3.1 Определения модели содержимого
Модель содержимого описывает, что может содержаться в экземпляре типа элемента.
Определения модели содержимого могут включать:
›Имена допустимых или запрещенных типов элементов.
›Комбинации DTD.
›Текстдокумента (указываемый SGML-конструкцией "#PCDATA"). Текст может
включать ссылки на символы (п. 4.2.3). Помните, что они начинаются с & и
заканчиваются точкой с запятой (например, "Herg&eacute;'s adventures of Tintin"
содержит ссылку на комбинацию символов для отображения символа "e со
знаком ударения").
Модель содержимого элемента указывается с использованием следующего
синтаксиса:
( ... ) Разделяет группы.

Страница 32 из 65 © Red Graphic Systems


A|B Происходит A или B, но не оба.
A,B Происходят A и B в указанном порядке.
A&B Происходят A и B в любом порядке.
A? A происходит ноль или один раз.
A* A происходит ноль или более раз.
A+ A происходит один или несколько раз.

Вот пример DTD XML Sapiens:


<!ELEMENT sapi:exp (CDATA)>

Элемент SAPI:EXP (п. 6.3.2.11) может содержать только текст и содержать ссылки на
символы (п. 4.2.3) – это определяется типом данных SGML CDATA.
Некоторые типы элементов XML Sapiens используют дополнительную функцию
SGML для исключения элементов из модели содержимого. Исключенным элементам
предшествует символ переноса. Явные исключения имеют приоритет по отношению
к допустимым элементам.

4.3.4 Объявления атрибутов


Объявление атрибутов, которые может иметь элемент, начинается с ключевого слова
<!ATTLIST. За ним следует имя элемента с вопросительным знаком, список
определений атрибутов и закрывающий символ “>”. Каждое определение атрибута
— это тройка, определяющая:
›Имя атрибута.
›Тип значения атрибута или явный набор допустимых значений. Значения,
определенные явным образом при помощи DTD, учитывают регистр.
›Является ли значение атрибута по умолчанию неявным (ключевое слово
"#IMPLIED"), то есть значение по умолчанию устанавливается агентом
пользователя (в некоторых случаях с использованием наследования от
родительских элементов); всегда обязательным (ключевое слово "#REQUIRED");
или фиксированным данным значением (ключевое слово "#FIXED"). Некоторые
определения атрибутов явным образом указывают значение атрибута по
умолчанию.
4.3.4.1 Комбинации DTD в определениях атрибутов
Определения атрибутов могут также содержать ссылки на комбинации параметров.
4.3.4.2 Логические атрибуты
Некоторые атрибуты играют роль логических переменных. Их наличие в начальном
теге элемента подразумевает, что значением атрибута является "истина". Их
отсутствие означает "ложь".
Логические атрибуты могут принимать только одно значение: собственно имя
атрибута.

Страница 33 из 65 © Red Graphic Systems


4.4 Основные типы данных
В этом разделе спецификации описываются основные типы данных, которые могут
быть содержимым элементов или значением атрибутов.
4.4.1 Информация о регистре
Каждое определение атрибута включает информацию об учете регистра его
значениями. Информация о регистре представляется следующими ключами:
CS Значение учитывает регистр (то есть агенты пользователя по-разному
интерпретируют "a" и "A").
CI Значение не учитывает регистр (то есть агенты пользователя одинаково
интерпретируют "a" и "A").
CN Значение не зависит от регистра, например, потому что это число или символ
из набора символов документа.
CA Само определение элемента или атрибута дает информацию о регистре.
CT Подробнее об учете регистра см. в определении типа.
Если значением атрибута является список, ключи применяются к каждому значению
в списке, если не указано обратное.
4.4.2 Основные типы данных
В определении типа данных определяется синтаксис содержимого элемента XML
Sapiens и значений атрибутов с использованием меток SGML (например, PCDATA,
CDATA, NAME, ID и т.д.). Полные определения см. в [ISO8879,
http://www.iso.ch/cate/d16387.html]. Вот обобщенная информация о ключах:
CDATA – это последовательность символов из набора символов документа, она
может включать ссылки на символы (п. 4.2.3). Агенты пользователей должны
интерпретировать значения атрибутов следующим образом:
› Заменять ссылки на символы (п. 4.2.3) на символы;
› Игнорировать перевод строки;
› Заменять каждый возврат каретки или табуляцию на один пробел.
4.4.3 Текстовые строки
Ряд атрибутов (%Text; в DTD) принимают текст, который предназначается для
чтения людьми. Вводную информацию об атрибутах Вы можете посмотреть в
обсуждении атрибутов.
4.4.4 URI
В этой спецификации термин URI используется, как определено в [URI] (см.
[RFC1630]).
Помните, что URI включают URL (как определено в [RFC1738]).
URI представляются в DTD комбинацией символов %URI;.
URI учитывают регистр. Могут быть URI, или части URI, в которых регистр не
имеет значения (например, имена машин), но идентификация их может быть
непроста. Пользователи должны всегда считать, что URI учитывают регистр (чтобы
не ошибиться).

Страница 34 из 65 © Red Graphic Systems


4.4.5 Отдельные символы
Определенные атрибуты вызывают отдельный символ из набора символов
документа. Эти атрибуты имеют тип %Character в DTD.
Отдельные символы можно указать с помощью ссылок на символы (например,
"&amp;").
4.4.6 Символьные данные
Определенные атрибуты вызывают символьные данные документа. Эти атрибуты
имеют тип %Text в DTD.
4.4.7 Дата и время
[ISO8601] позволяет много вариантов представления даты и времени. Текущая
спецификация использует один из форматов, описанных в профиле [DATETIME] для
определения допустимых строк дата/время ( %Datetime в DTD).
Это следующий формат:
ГГГГ-ММ-ДДTчч:мм:ссУЧП
в котором:
ГГГГ год из четырех цифр
ММ месяц из двух цифр (01=январь и т.д.)
ДД день из двух цифр (01 – 31)
чч две цифры часов (00 – 23) (до/пп НЕ допускается)
мм две цифры минут (00 – 59)
сс две цифры секунд (00 – 59)
УЧП указатель часового пояса
Указатели часового пояса:
Z Означает UTC (Общее скоординированное время). "Z" должно быть в
верхнем регистре.
+чч:мм Указывает, что местное время отстоит на чч часов и мм минут от UTC
вперед.
-чч:мм Указывает, что местное время отстает на чч часов и мм минут от UTC.

Указанные компоненты должны присутствовать в точности, с точно такой же


пунктуацией. Помните, что буква "T" отображается в строке литерально (она должна
быть заглавной), для указания начала времени, как описано в [ISO8601].
Если генерирующее приложение не знает времени с точностью до секунды, для
секунд может использоваться значение "00" (при необходимости также для минут и
для часов).
Примечание. [DATETIME] не касается добавочных секунд.

Страница 35 из 65 © Red Graphic Systems


5 Глобальная структура документа в формате XML Sapiens
5.1 Введение в структуру документа XML Sapiens
Документ в формате XML Sapiens состоит из трех частей:
1. Строка, указывающая на используемую версию XML Sapiens DTD (п. ).
2. Строка, указывающая на принадлежность языка семейству XML.
3. Корневой раздел, который включает собственно содержимое документа.
Раздел может вводиться элементом XML Sapiens.
Перед каждым элементом или после каждого элемента может находиться пустое
пространство (пробелы, переход на новую строку, табуляции и комментарии).
Вот пример простого документа XML Sapiens:
<!DOCTYPE SAPI SYSTEM "http://www.xmlsapiens.org/spec/sapi20.dtd">
<?xml version="1.0"?>
<sapi version="2.0" xmlns:sapi="http://www.xmlsapiens.org/spec/sapi.ns"
encoding="UTF-8">
<sapi:qc type="article" state="delivery" title="article (WYSIWYG)">
format
</sapi:qc>
</sapi>

5.2 Информация о версии XML Sapiens


В документе XML Sapiens должна быть объявлена используемая в нем версия языка
XML Sapiens. Объявление типа документа указывает определение типа документа
(DTD), используемое в этом документе (см. [ISO8879]). В настоящее время имеется
единственная версия языка XML Sapiens и соответственно единственный DTD:
(http://www.xmlsapiens.org/spec/sapi20.dtd).

<!DOCTYPE SAPI SYSTEM "http://www.xmlsapiens.org/spec/sapi20.dtd">

Страница 36 из 65 © Red Graphic Systems


5.3 Элемент XML Sapiens
<!ELEMENT sapi (sapi:qc*, sapi:sdc*, sapi:ddc*, sapi:author*)>
<!ATTLIST sapi -- корневой элемент документа --
version %Text #REQUIRED – версия XML Sapiens--
xmlns:sapi %URI #IMPLIED – формальное определение XML NS --
encoding %Charset #IMPLIED – языковая кодировка –
cache %Text #IMPLIED – флаг кеширования –
mdate %Datetime #IMPLIED – дата последней модификации --
>
Начальный тег: обязателен, конечный тег: обязателен

Определения атрибутов
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>

Страница 37 из 65 © Red Graphic Systems


5.3.1 Атрибут “version”
Определение атрибута
version = %Text [CN]
Обязателен. Значение этого атрибута указывает версию DTD XML Sapiens,
которой подчиняется этот документ.
Данный атрибут указывает парсеру на то, в соответствии с какой версией языка XML
Sapiens разбирать документ. DTD схема для версии XML Sapiens текущего
документа указывается в атрибуте xmlns:sapi.
5.3.2 Атрибут “xmlns:sapi”
Определение атрибута
xmlns:sapi = %URI [CN]
Необязателен. Формальное определение XML Name Spaces XML Sapiens
(http://www.w3.org/TR/REC-xml-names)
5.3.3 Атрибут “encoding”
Определение атрибута
encoding = %Charset [CI]
Желателен. Значение этого атрибута указывает на используемую в документе
языковую кодировку.
5.3.4 Атрибут “cache”
Определение атрибута
cache = %Charset [CI]
Необязателен. Значение “nocache” этого атрибута парсеру, на то допустимо ли
кеширование текущего документа или нет.
Вот образец документа:
<?xml version="1.0"?>
<sapi version=”2.0" xmlns:sapi="http://www.xmlsapiens.org/spec/sapi.ns"
cache=="nocache" >
...
</sapi>

5.3.5 Атрибут “mdate”


Определения атрибутов
mdate = %Datetime [CN]
Необязателен. Данный атрибут содержит дату и время последней
модификации документа.
Наличие данного атрибута в элементе SAPI носит факультативный характер. Однако
наличие даты и времени модификации, поможет организовать версионный контроль
документов XML Sapiens в CMS.

Страница 38 из 65 © Red Graphic Systems


5.4 Пространство имен документа XML Sapiens
XML Sapiens позволяет связать объекты документа XML Sapiens с логическими
областями сайта. Для этого создается элемент с описаниями пространства имен для
объектов XML Sapiens.
5.4.1 Элемент SAPI:NAMESPACES

<!ELEMENT sapi:namespaces (sapi:namespace*)>


Начальный тег: обязателен, конечный тег: обязателен
Пространство имен XML Sapiens определяется в теле документа (элемент SAPI).
Пример документа:
<?xml version="1.0"?>
<sapi version=”2.0" xmlns:sapi="http://www.xmlsapiens.org/spec/sapi.ns"
cache=="nocache" >

<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>

5.4.2 Элемент SAPI:NAMESPACE

<!ELEMENT sapi:namespace (sapi:site?, sapi:site-lang?, sapi:site-item?, sapi:container?)>


<!ATTLIST sapi:namespace -- пространство имен –
name %Text #REQUIRED – имя(идентификатор) пространства --
>
Начальный тег: обязателен, конечный тег: обязателен
Определения атрибутов
name = %Text [CN]
Обязателен. Значение этого атрибута указывает на имя пространства имен.
Это имя служит идентификатором пространства в атрибутах объектов XML
Sapiens
Пример:
<sapi:ddc name="var2" title="Пример контейнера динамических данных" ns="site1"

Страница 39 из 65 © Red Graphic Systems


category="infochannel.news">
...
</sapi:ddc>

5.4.2.1 Атрибут “name”


Определение атрибута
name = %Text [CN]
Обязателен. Значение этого атрибута указывает на имя пространства имен.
Это имя служит идентификатором пространства в атрибутах объектов XML
Sapiens.
5.4.3 Элемент SAPI:SITE

<!ELEMENT sapi:site – O EMPTY>


<!ATTLIST sapi:site -- сайт --
id %Text #REQUIRED – идентификатор сайта --
>
Начальный тег: обязателен, конечный тег: отсутствует
Определения атрибутов
id = %Text [CN]
Обязателен. Значение этого атрибута указывает на идентификатор
отображаемого сайта.
5.4.3.1 Атрибут “id”
Определение атрибута
id = %Text [CN]
Обязателен. Значение этого атрибута указывает на идентификатор
отображаемого сайта.
Данный атрибут содержит идентификатор сайта в синтаксисе, принятом в CMS,
отображающей сайт. В том случае, когда CMS обслуживает лишь один сайт
информационного пространства, назначение данного элемента не имеет смысла.
5.4.4 Элемент SAPI:SITE-LANG

<!ELEMENT sapi:site-lang – O EMPTY>


<!ATTLIST sapi:site-lang -- языковая версия сайта --
id %Text #REQUIRED – идентификатор языковой версии сайта --
>
Начальный тег: обязателен, конечный тег: отсутствует
Определения атрибутов
id = %Text [CN]

Страница 40 из 65 © Red Graphic Systems


Обязателен. Значение этого атрибута указывает на идентификатор языковой
версии отображаемого сайта.
5.4.4.1 Атрибут “id”
Определение атрибута
id = %Text [CN]
Обязателен. Значение этого атрибута указывает на идентификатор языковой
версии отображаемого сайта.
Данный атрибут содержит идентификатор языковой версии сайта в синтаксисе,
принятом в CMS, отображающей сайт. В том случае, когда CMS обслуживает лишь
одну языковую версию сайта информационного пространства, назначение данного
элемента не имеет смысла.
5.4.5 Элемент SAPI:SITE-ITEM

<!ELEMENT sapi:site-item – O EMPTY>


<!ATTLIST sapi:site-item -- раздел сайта --
id %Text #REQUIRED – идентификатор раздела --
>
Начальный тег: обязателен, конечный тег: отсутствует
Определения атрибутов
id = %Text [CN]
Обязателен. Значение этого атрибута указывает на идентификатор раздела
отображаемого сайта.
5.4.5.1 Атрибут “id”
Определение атрибута
id = %Text [CN]
Обязателен. Значение этого атрибута указывает на идентификатор раздела
отображаемого сайта.
Данный атрибут содержит идентификатор раздела сайта в синтаксисе, принятом в
CMS, отображающей сайт. В том случае, когда CMS обслуживает лишь один раздел
сайта информационного пространства, назначение данного элемента не имеет
смысла.
5.4.6 Элемент SAPI:CONTAINER

<!ELEMENT sapi:container – O EMPTY>


<!ATTLIST sapi:container -- контейнер --
name %Text #REQUIRED – имя контейнера --
>
Начальный тег: обязателен, конечный тег: отсутствует
Определения атрибутов
name = %Text [CN]

Страница 41 из 65 © Red Graphic Systems


Обязателен. Значение этого атрибута указывает на контейнер документа XML
Sapiens.
5.4.6.1 Атрибут “name”
Определение атрибута
name = %Text [CN]
Обязателен. Значение этого атрибута указывает на имя контейнера XML
Sapiens.
Данный атрибут позволяет описать пространство имен отдельно взятого контейнера.

Страница 42 из 65 © Red Graphic Systems


6 Содержание документа XML Sapiens
6.1 Информация о владельце кода
Документу XML Sapiens или контейнеру данных (п. 6.3) можно назначить одного
или нескольких авторов. Для назначения документу авторского коллектива по
каждому из авторов создается элемент SAPI:AUTHOR в теле документа. Для
назначения авторов контейнеру данных аналогичным образом создаются элементы
SAPI:AUTHOR в теле контейнера.
Информация об авторах обеспечивает обратную связь с авторами в “XML Sapiens
Works Gallery” (http://xmlsapiens.org/lib/).
6.1.1 Элемент SAPI:AUTHOR
<!ELEMENT sapi:author (sapi:name?, sapi:email?, sapi:uri? )>
Начальный тег: обязателен, конечный тег: обязателен
Элемент SAPI:AUTHOR содержит информацию об авторе документа или контейнера
данных. Пример использования элемента:
<sapi:author>
<sapi:name>Dmitry Sheiko</sapi:name>
<sapi:email>sheiko@cmsdevelopment.com</sapi:email>
<sapi:uri>www.cmsdevelopment.com</sapi:uri>
</sapi:author>

6.1.2 Элемент SAPI:NAME


<!ELEMENT sapi:name (%Text)>
Начальный тег: обязателен, конечный тег: обязателен
Элемент SAPI:NAME содержит имя автора документа или контейнера данных.

6.1.3 Элемент SAPI:EMAIL


<!ELEMENT sapi:email (%Text)>
Начальный тег: обязателен, конечный тег: обязателен
Элемент SAPI:EMAIL содержит адрес электронной почты автора документа или
контейнера данных.

6.1.4 Элемент SAPI:URI

<!ELEMENT sapi:uri (%Text)>


Начальный тег: обязателен, конечный тег: обязателен
Элемент SAPI:URI содержит URI сайта автора документа или контейнера данных.

Страница 43 из 65 © Red Graphic Systems


6.2 Комментарии
Документ XML Sapiens или контейнер данных (п. 6.3) можно прокомментировать.
Комментарии позволяют уточнить назначение и особенности того или иного
функционального решения.
Комментарии позволяют пользователям ознакомиться с особенностями выбранного
функционального решения “XML Sapiens Works Gallery” (http://xmlsapiens.org/lib/).

6.2.1 Элемент SAPI:COMMENTS


<!ELEMENT sapi:comments (%Text)>
Начальный тег: обязателен, конечный тег: обязателен
Элемент SAPI:COMMENTS содержит авторские комментарии и пояснения к
документу или контейнеру данных. Пример использования элемента:
<sapi:comments>Содержание комментария…</sapi:comments>

6.3 Контейнеры данных


Контейнеры данных являются основой языка XML Sapiens. Именно содержание
контейнеров диктует сценарии функциональных решений для документа CMS
основанной на XML Sapiens. Язык XML Sapiens включает контейнеры данных 2
типов: контейнеры запросов (SAPI:QC) и контейнеры динамических данных
(SAPI:DDC).
Контейнеры запросов (п. 6.3.1) указывают на фрагменты отображаемого на сайте
документа, содержание которых может изменяться администратором CMS. Эти
контейнеры содержат код запросов данных у пользователя и сопутствующее им
оформление.
Контейнеры динамических данных (п. 6.3.2) указывают на фрагменты
отображаемого на сайте документа, содержание которых формируется на основании
некоторого функционального алгоритма. Эти контейнеры содержат описание
функциональных алгоритмов.

6.3.1 Контейнер запроса (элемент SAPI:QC).


<!ELEMENT sapi:qc (sapi:ddc*, sapi:qc*, sapi:author*, sapi:comments?, sapi:apply*,
sapi:include*)>
<!ATTLIST sapi:qc -- контейнер запроса --
type %Text #REQUIRED – тип контейнера --
title %Text #IMPLIED – заголовок контейнера --
ns %Text #IMPLIED – пространство имен --
state %Text #IMPLIED – актуальное состояние среды --
mdate %Datetime #IMPLIED – дата последней модификации –
>
Начальный тег: обязателен, конечный тег: обязателен

Страница 44 из 65 © Red Graphic Systems


Определения атрибутов
type = %Text [CN]
Обязателен. Значение этого атрибута содержит тип контейнера данных.
title = %Text [CI]
Желателен. Значение этого атрибута содержит заголовок контейнера данных,
характеризующий контейнер в общем списке.
ns = %Text [CN]
Необязателен. Значение этого атрибута содержит указатель на пространство
имен к которому отнесен данный контейнер данных.
state = %Text [CN]
Необязателен. При наличии в элементе данного атрибута, значение его
указывает процессору когда применять данное описание.
mdate = %Datetime [CN]
Необязателен. Данный атрибут содержит дату и время последней
модификации документа

Контейнеры запросов указывают на фрагменты, отображаемого на сайте документа,


содержание которых может изменяться администратором CMS. К контейнеру можно
обратиться из шаблона представления отображаемого на сайте документа, а также из
прочих контейнеров с помощью элемента SAPI:APPLY (п. ) или с помощью атрибута
SAPI:%Attribib (п. 6.4).
Эти контейнеры содержат код запросов данных у пользователя и сопутствующее им
оформление.
Пример контейнера запросов:
<?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>

Страница 45 из 65 © Red Graphic Systems


6.3.1.1 Атрибут “type”
Определение атрибута
type = %Text [CN]
Обязателен. Значение этого атрибута содержит тип контейнера данных.
Данный атрибут содержит тип контейнера данных, благодаря которому объект
идентифицируется в документе XML Sapiens (п. 3.3.4). Обратиться к содержанию
контейнера (к данным, на которые он указывает) можно с помощью элемента
SAPI:APPLY.

6.3.1.2 Атрибут “title”


Определение атрибута
title = %Text [CI]
Желателен. Значение этого атрибута содержит заголовок контейнера данных,
характеризующий контейнер в общем списке.
Данный атрибут не рекомендуется игнорировать. Лаконичная, но содержательная
характеристика контейнера, позволит избежать ошибок при настройке сайта.
6.3.1.3 Атрибут “ns”
Определение атрибута
ns = %Text [CN]
Необязателен. Значение этого атрибута содержит указатель на пространство
имен, к которому отнесен данный контейнер данных.
6.3.1.4 Атрибут “state”
Определение атрибута
state = %Text [CN]
Необязателен. При наличии в элементе данного атрибута, значение его
указывает процессору при каком состоянии среды применять данное
описание.
6.3.1.5 Атрибут “mdate”
Определение атрибута
mdate = %Datetime [CN]
Необязателен. Данный атрибут содержит время и дату последней
модификации документа.

6.3.2 Контейнер динамических данных (SAPI:DDC)


<!ELEMENT sapi:ddc (sapi:author*, sapi:comments?, sapi:choose? >
<!ATTLIST sapi:ddc -- контейнер динамических данных --
name %Text #REQUIRED – имя контейнера --
title %Text #IMPLIED – заголовок контейнера --

Страница 46 из 65 © Red Graphic Systems


category %Text #IMPLIED – категория контейнера --
ns %Text #IMPLIED – пространство имен --
mdate %Datetime #IMPLIED – дата последней модификации --
>
Начальный тег: обязателен, конечный тег: обязателен

Определения атрибутов
name = %Text [CN]
Обязателен. Значение этого атрибута содержит имя контейнера данных.
title = %Text [CI]
Желателен. Значение этого атрибута содержит заголовок контейнера данных,
характеризующий контейнер в общем списке.
category = %Text [CI]
Желателен. Значение этого атрибута указывает на принадлежность
контейнера категории контейнеров динамических данных (п. ).
ns = %Text [CN]
Необязателен. Значение этого атрибута содержит указатель на пространство
имен к которому отнесен данный контейнер данных.
mdate = %Datetime [CN]
Необязателен. Данный атрибут содержит время и дату последней
модификации контейнера

Контейнеры динамических данных указывают на фрагменты отображаемого на сайте


документа. Содержание фрагментов формируется на основании некоторого
функционального алгоритма. Эти контейнеры содержат описание функциональных
алгоритмов. Можно сказать, что контейнеры динамических данных — это
функциональные решения интерфейса отображаемого динамического сайта.
К контейнеру можно обратиться из шаблона представления отображаемого на сайте
документа, а также из прочих контейнеров с помощью элемента SAPI:APPLY (п. )
или с помощью атрибута SAPI:%Attribib (п. 6.4).
Контейнер динамических данных содержит элементы SAPI:AUTHOR,
SAPI:COMMENTS и SAPI:CHOOSE. Последний элемент (SAPI:CHOOSE)
представляет собой обработчик условий состояния среды CMS. В случае
соответствия выражения (элемент SAPI:EXP или атрибут EXP) условия значению
«истина» выполняется содержание элемента условия (SAPI:WHEN). Условия могут
содержать код представления данных (п. 3.2), указатели контейнеров или обработчик
перечисления (SAPI:FOR-EACH). Обработчик перечисления обращается к
приложению CMS, имя которого указано в атрибуте SELECT элемента SAPI:FOR-
EACH. Данное приложение возвращает парсеру CMS набор узлов. Обработчик
перечисления может содержать обработчик условий. Последний вызывается столько
раз, сколько элементов, будет содержать набор узлов, возвращенный приложением.

Страница 47 из 65 © Red Graphic Systems


Условия, в свою очередь, могут содержать код представления данных и указатели на
данные. При каждом проходе обработчика перечисления возвращается содержание
«истинного» условия. Узлы набора, содержат данные, переданные приложением. Эти
данные доступны в свойствах узлов (п. 3.6.5.2). Если в ходе работы CMS
приложения произошла ошибка процессор вернет код указанный в
SAPI:FALLBACK. Если CMS приложение возвращает пустой массив, процессор
вернет код указанный в SAPI:IFEMPTY.

Пример контейнера динамических данных:


<?xml version="1.0"?>
<sapi version="2.0" xmlns:sapi="http://www.xmlsapiens.org/spec/sapi.dtd">
<sapi:ddc name="var2" title="Example of a dynamic data container"
ns="site1"
category="infochannel.news" mdate="2004.11.05T08:15-0500">
<sapi:author>
<sapi:name>Dmitry Sheiko</sapi:name>
<sapi:email>sheiko@cmsdevelopment.com</sapi:email>
<sapi:uri>www.cmsdevelopment.com</sapi:uri>
</sapi:author>
<sapi:comments> DDC example </sapi:comments>

<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>

6.3.2.1 Атрибут “name”


Определение атрибута
name = %Text [CN]
Обязателен. Значение этого атрибута содержит имя контейнера данных.

Страница 48 из 65 © Red Graphic Systems


Данный атрибут содержит имя контейнера данных, благодаря которому объект
идентифицируется в документе XML Sapiens (п. 3.3.4). Обратиться к содержанию
контейнера (к данным, на которые он указывает) можно с помощью элемента
SAPI:APPLY.
6.3.2.2 Атрибут “title”
Определение атрибута
title = %Text [CI]
Желателен. Значение этого атрибута содержит заголовок контейнера данных,
характеризующий контейнер в общем списке.
Данный атрибут не рекомендуется игнорировать. Лаконичная, но содержательная
характеристика контейнера, позволит избежать ошибок при настройке сайта.
6.3.2.3 Атрибут “category”
Определение атрибута
category [CI]
Желателен. Значение этого атрибута указывает на принадлежность
контейнера категории контейнеров динамических данных.
Данный атрибут помогает каталогизировать контейнер (функциональное решение) в
“XML Sapiens Works Gallery” (http://xmlsapiens.org/lib/), а также сообщает CMS о
специфике обработки данного контейнера. Список доступных категорий
контейнеров динамических данных см. п. .
6.3.2.4 Атрибут “ns”
Определение атрибута
ns = %Text [CN]
Необязателен. Значение этого атрибута содержит указатель на пространство
имен, к которому отнесен данный контейнер данных.
6.3.2.5 Атрибут “mdate”
Определение атрибута
mdate = %Datetime [CN]
Необязателен. Данный атрибут содержит время и дату последней
модификации контейнера

6.3.2.6 Элемент SAPI:CHOOSE


<!ELEMENT sapi:choose (sapi:when*)>
Начальный тег: обязателен, конечный тег: обязателен
Данный элемент представляет собой обработчик условий. Обработчик сообщает
парсеру CMS, что последнему следует обработать «истинные» условия, из
представленных в теле элемента SAPI:CHOOSE.
6.3.2.7 Элемент SAPI:WHEN
<!ELEMENT sapi:when (sapi:code?, sapi:comments?, sapi:for-each?, sapi:exp*)>

Страница 49 из 65 © Red Graphic Systems


<!ATTLIST sapi:when -- условие --
title %Text #IMPLIED – заголовок условия --
exp %Text #IMPLIED – выражение условия --
>

Начальный тег: обязателен, конечный тег: обязателен


Определения атрибутов
title = %Text [CI]
Желателен. Значение этого атрибута содержит заголовок условия контейнера,
характеризующий условие при отладке сайта.
exp = = %Text [CI]
Необязателен. Данный атрибут содержит выражение условия
Условие контейнера динамических данных кроме выражения условия (п. 6.3.2.11)
может содержать либо элемент SAPI:CODE (п. 6.3.2.10), либо обработчик
перечисления (п. 6.3.2.12).
Если выражение условия можно записать одной строкой, не содержащей
недопустимых для атрибутов символов (<>), то выражение условия помещается в
атрибут EXP. Например:
<sapi:when exp="eq(this.this.position, this.this.length)">
<sapi:code>HTML…</sapi:code>
</sapi:when>

В противном случае выражение условия указывается в элементе SAPI:EXP. См.


пример:
<sapi:when title="Условие выбора главной страницы">
<sapi:exp>or(eq(argvs.0.value,'home'),eq(argvs.0.value,''))</sapi:exp>
<sapi:code>HTML…</sapi:code>
</sapi:when>

6.3.2.8 Атрибут “title”


Определение атрибута
title = %Text [CI]
Желателен. Значение этого атрибута содержит заголовок условия контейнера,
характеризующий условие при настройке сайта.

6.3.2.9 Атрибут “exp”


Определение атрибута

Страница 50 из 65 © Red Graphic Systems


exp = = %Text [CI]
Необязателен. Данный атрибут содержит выражение условия .
Данный элемент позволяет определение условий. Условие считается «истинным» и
будет обработано парсером, лишь в том случае, если его значение имеет значение
«истина». Допускается использование выражений условий в синтаксисе формата
выражений XML Sapiens (п. 3.6). В особых случаях допускается использование
синтаксиса системного языка <?EXTERNAL … ?> (п. 3.7.1).
6.3.2.10 Элемент SAPI:CODE
<!ELEMENT sapi:code (sapi:ddc*, sapi:qc*, sapi:exp*, sapi:apply*, sapi:include*)>
Начальный тег: обязателен, конечный тег: обязателен
Данный элемент содержит код представления (п. 3.2.2).
В коде допускается наличие указателей на данные и указатели на контейнеры
данных (п. 6.4).
6.3.2.11 Элемент SAPI:EXP
<!ELEMENT sapi:exp (CDATA)>
Начальный тег: обязателен, конечный тег: обязателен
Данный элемент позволяет определение выражений условий. Условие считается
«истинным» и будет обработано парсером, лишь в том случае, если его значение
имеет значение «истина». Допускается использование выражений условий в
синтаксисе формата выражений XML Sapiens (п. 3.6).
6.3.2.12 Элемент SAPI:FOR-EACH
<!ELEMENT sapi:for-each (sapi:comments?, sapi:choose?, sapi:params?, sapi:fallback?,
sapi:ifempty? )>
<!ATTLIST sapi:for-each -- обработчик перечисления --
select %Text #REQUIRED – указатель на приложение CMS --
name %Text #IMPLIED – имя перечисления --
title %Text #IMPLIED – заголовок перечисления --
>
Начальный тег: обязателен, конечный тег: обязателен

Определения атрибутов
select = %Text [CN]
Обязателен. Значение этого атрибута содержит указатель на приложение
CMS.
name = %Text [CN]
Обязателен. Значение этого атрибута содержит имя перечисления.
title = %Text [CI]

Страница 51 из 65 © Red Graphic Systems


Желателен. Значение этого атрибута содержит заголовок перечисления,
характеризующий его при отладке сайта.

Условия (SAPI:WHEN п. 6.3.2.7) могут содержать обработчик перечисления (данный


элемент). Обработчик перечисления обращается к приложению CMS, имя которого
указано в атрибуте SELECT. Данное приложение возвращает парсеру CMS набор
узлов. Обработчик перечисления может содержать обработчик условий. Последний
вызывается столько раз, сколько узлов, и будет содержать набор, возвращенный
приложением. В свою очередь, условия могут содержать код представления данных
и указатели на данные. При каждом проходе обработчика перечисления
возвращается содержание «истинного» условия. Например:
<sapi:for-each select="get_tree()" name="enum" title="Перечисление">
<sapi:params>
<sapi:param name="root">/company/</sapi:param>
</sapi:params>
<sapi:ifempty> </sapi:ifempty>
<sapi:fallback>CMS-application error</sapi:fallback>
<sapi:choose>
<sapi:when exp="neq(this.this.variable.value, args.0.value)">
<sapi:code>
<a sapi:href="this.this.href.value">
<sapi:apply name="this.this.title.value" />
</a>
</sapi:code>
</sapi:when>
<sapi:when exp="eq(this.this.variable.value, args.0.value)">
<sapi:code>
<sapi:apply name="this.this.title.value" />
</sapi:code>
</sapi:when>
</sapi:choose>
</sapi:for-each>

6.3.2.13 Атрибут “select”


Определение атрибута
select = %Text [CN]
Обязателен. Значение этого атрибута содержит указатель на приложение
CMS.

Страница 52 из 65 © Red Graphic Systems


6.3.2.14 Атрибут “name”
Определение атрибута
name = %Text [CN]
Обязателен. Значение этого атрибута содержит имя перечисления.
6.3.2.15 Атрибут “title”
Определение атрибута
title = %Text [CI]
Желателен. Значение этого атрибута содержит заголовок перечисления,
характеризующий его при отладке сайта.

6.3.2.16 Элемент SAPI:FALLBACK


<!ELEMENT sapi:fallback (sapi:apply*)>

Начальный тег: обязателен, конечный тег: обязателен


Элемент определяет ответ процессора при возникновении ошибки CMS-
приложения.

6.3.2.17 Элемент SAPI:IFEMPTY


<!ELEMENT sapi:ifempty(sapi:apply*)>

Начальный тег: обязателен, конечный тег: обязателен


Элемент определяет ответ процессора, когда CMS-приложение возвращает пустой
массив.
6.3.2.18 Элемент SAPI:PARAMS
<!ELEMENT sapi:params (sapi:param*)>

Начальный тег: обязателен, конечный тег: обязателен


Элемент определяет область параметров CMS-приложения.

6.3.2.19 Элемент SAPI:PARAM


<!ELEMENT sapi:param (sapi:apply*)>
<!ATTLIST sapi:param -- определение параметра --
name %Text #REQUIRED – имя параметра --
>
Начальный тег: обязателен, конечный тег: обязателен

Страница 53 из 65 © Red Graphic Systems


Определения атрибутов
name = %Text [CN]
Обязателен. Имя параметра

Данный элемент определяет параметр CMS-приложения

6.3.2.19.1 Атрибут “name”


Определение атрибута
name = %Text [CN]
Обязателен. Имя параметра.

6.3.3 Набор полей (элемент SAPI:FIELDSET)


<!ELEMENT sapi:fieldset (sapi:body*)>
<!ATTLIST sapi:fieldset -- набор полей --
type %Text #REQUIRED – тип набора полей --
title %Text #IMPLIED – заголовок набора полей --
ns %Text #IMPLIED – пространство имен --
state %Text #IMPLIED – состояние среды --
mdate %Datetime #IMPLIED – дата последней модификации --
>
Начальный тег: обязателен, конечный тег: обязателен

Определения атрибутов
type = %Text [CN]
Обязателен. Значение этого атрибута содержит тип набора полей.
title = %Text [CI]
Желателен. Значение этого атрибута содержит заголовок набора полей.
ns = %Text [CN]
Необязателен. Значение этого атрибута содержит указатель на пространство
имен к которому отнесен набор полей.
state = %Text [CN]
Необязателен. При наличии в элементе данного атрибута, значение его
указывает состояние среды, для которой актуально данное описание.
mdate = %Datetime [CN]

Страница 54 из 65 © Red Graphic Systems


Необязателен. Данный атрибут содержит дату и время последней
модификации объекта

Наборы полей используются для задания структуры данных документа для заданных
состояний среды.
Пример определения набора полей:
<?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.3.3.1 Атрибут “type”


Определение атрибута
type = %Text [CN]
Обязателен. Значение этого атрибута содержит тип набора полей.
Данный атрибут содержит тип набора полей, благодаря которому объект
идентифицируется в документе XML Sapiens (п. 3.3.4). Обратиться к содержанию
набора (к данным, на которые он указывает) можно с помощью элемента
SAPI:INCLUDE:
<sapi:include href="default.xml" parse="fieldset" />

Страница 55 из 65 © Red Graphic Systems


6.3.3.2 Атрибут “title”
Определение атрибута
title = %Text [CI]
Желателен. Значение этого атрибута содержит заголовок набра полей.
6.3.3.3 Атрибут “ns”
Определение атрибута
ns = %Text [CN]
Необязателен. Значение этого атрибута содержит указатель на пространство
имен к которому отнесен данный контейнер данных.
6.3.3.4 Атрибут “state”
Определение атрибута
state = %Text [CN]
Необязателен. При наличии в элементе данного атрибута, значение его
указывает состояние среды, для которой актуально данное описание.
6.3.3.5 Атрибут “mdate”
Определение атрибута
mdate = %Datetime [CN]
Необязателен. Данный атрибут содержит дату и время последней
модификации документа

6.3.3.6 Элемент SAPI:BODY


<!ELEMENT sapi:body (sapi:ddc*, sapi:qc*, sapi:exp*, sapi:apply*, sapi:include*)>
Начальный тег: обязателен, конечный тег: обязателен
Данный элемент содержит код представления (п. 3.2.2).
В коде допускается наличие указателей на данные и указатели на контейнеры
данных (п. 6.4).

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 – указатель на свойства объекта –

Страница 56 из 65 © Red Graphic Systems


exp %Text #IMPLIED – указатель на свойства объекта –
type %Text #IMPLIED – тип запроса данных –
title %Text #IMPLIED – заголовок запроса данных --
index %Text #IMPLIED – указатель индексируемого поля –
href %Text #IMPLIED – местоположение файла описание объекта --
>
Начальный тег: обязателен, конечный тег: обязателен

Определения атрибутов
name = %Text [CN]
Обязателен. Значение этого атрибута содержит имя указателя на свойства
объекта (п. 3.3.4).
exp = %Text [CN]
Значение этого атрибута содержит выражение.

type = %Text [CN]


Значение этого атрибута содержит указатель на тип запроса данных

title = %Text [CN]


Значение этого атрибута содержит заголовок запроса данных. Данный
заголовок отображается напротив полей содержания при администрировании
документа.

index = %Text [CN]


Данный атрибут сообщает системе, что заданное поле подлежит индексации.

href = %Text [CN]


Данный атрибут сообщает системе, где расположен файл с описанием
контенера в случае указания на контейнер.

Элемент обращения по указателю к переменной окружения возвращает значение


этой переменной:
<sapi:apply name="variable1.value" />

Пример запроса содержания:


<sapi:apply name="qc.content.value" type="article" title="Description" />

Страница 57 из 65 © Red Graphic Systems


Пример запроса сценария с передачей параметров:
<sapi:apply name="ddc.list.value">
<sapi:param name="root">/section1/</sapi:param>
</sapi:apply>

Внимание! Вы можете использовать конструкцию предопределений XML для


получения значений переменных среды:
&variable1.value;

6.4.1.1 Атрибут “name”


Определение атрибута
name = %Text [CN]
Обязателен. Значение этого атрибута содержит указатель на свойства объекта.

6.4.1.2 Атрибут “exp”


Определение атрибута
exp = %Text [CN]
Обязателен. Значение этого атрибута содержит выражение.

6.4.1.3 Атрибут “type”


Определение атрибута
type = %Text [CN]
Значение этого атрибута содержит указатель на тип запроса данных

6.4.1.4 Атрибут “title”


Определение атрибута
title = %Text [CN]
Значение этого атрибута содержит заголовок запроса данных. Данный
заголовок отображается напротив полей содержания при администрировании
документа.

6.4.1.5 Атрибут “index”


Определение атрибута
index = %Text [CN]
Данный атрибут сообщает системе, что заданное поле подлежит индексации.

Страница 58 из 65 © Red Graphic Systems


6.4.2 Указатель (атрибут SAPI:%Attribib)
<!ATTLIST %Element -- обращение к указателю --
%Attrib %Text #REQUIRED – указатель на свойства объекта --
>

Определение атрибута
%Attrib = %Text [CN]
Обязателен. Значение этого атрибута содержит имя атрибута родительского
элемента, в которое парсер интегрирует значение переменной окружения
CMS.
В том случае, когда требуется подставить значение переменной окружения CMS в
атрибут элемента, используется дополнительный атрибут в следующем синтаксисе:
SAPI:имя_атрибута_для_подстановки:
<input name="feedback" value="" sapi:value="var.value" />

6.4.2.1 Атрибут “%Attrib”


Определение атрибута
%Attrib = %Text [CN]
Обязателен. Значение этого атрибута содержит имя атрибута родительского
элемента, в которое парсер интегрирует значение переменной окружения CMS.

6.5 Вспомогательные операнды


6.5.1 Включение файлов (элемент SAPI:INCLUDE)
<!ELEMENT sapi:include - O EMPTY>
<!ATTLIST sapi:sql -- включение --
href %Text #REQUIRED – адрес файла –
parse %Text #IMPLIED – тип обработки --
state %Text #IMPLIED – актуальное состояние среды --
>
Начальный тег: обязателен, конечный тег: отсутствует

Определения атрибутов
href = %Text [CN]
Обязателен. Данный атрибут указывает на расположение файла.
parse = %Text [CN]
Данный атрибут указывает на тип обработки файла (fieldset, html, php, java и
т.д.)

Страница 59 из 65 © Red Graphic Systems


state = %Text [CN]
Данный атрибут используется при включении наборов полей для указания
актуального состояния среды

XML Sapiens имеет возможность включения в исходный документ файлов, скриптов,


шаблонов или информационных структур (наборов полей). Для этих целей
используется элемент SAPI:INCLUDE
<sapi:include href="subtemplates/default.tpl" />

6.5.1.1 Атрибут “href”


Определение атрибута
href = %Text [CN]
Обязателен. Данный атрибут указывает на расположение файла.
6.5.1.2 Атрибут “parse”
Определение атрибута
parse = %Text [CN]
Данный атрибут указывает на тип обработки файла (fieldset, html, php, java и
т.д.)
6.5.1.3 Атрибут “state”
Определение атрибута
state = %Text [CN]
Данный атрибут используется при включении наборов полей для указания
актуального состояния среды

Страница 60 из 65 © Red Graphic Systems


7 Справочная информация XML для XML Sapiens
В данном разделе содержится формальное определение XML языка XML Sapiens.
Этот файл можно получить в формате ASCII:
DTD по умолчанию (Default DTD):
http://xmlsapiens.org/spec/sapi20.dtd

7.1 Проверка корректности документа


Для проверки корректности следует проверять документы с помощью
грамматического анализатора XML Sapiens, чтобы убедиться в их соответствии DTD
XML Sapiens.

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: Архитектура и

Страница 61 из 65 © Red Graphic Systems


основная многоязыковая плоскость», ISO/IEC 10646-1:1993. В текущей
спецификации также учтены первые пять изменений в ISO/IEC 10646-1:1993.
[ISO88591]
«Обработка информации – графические наборы символов с 8-разрядным
однобайтовым кодированием – Часть 1: Латинский алфавит № 1», ISO 8859-
1:1987.
[MIMETYPES]
Список зарегистрированных типов содержимого (типы MIME). Список
зарегистрированных типов можно загрузить по адресу ftp://ftp.isi.edu/in-
notes/iana/assignments/media-types/
[RFC1555]
Нуссбахер, Х., Бурвинь, И. «Ивритская кодировка символов для сообщений
Интернет», Декабрь 1993.
[RFC1556]
Нуссбахер, Х. «Обработка двунаправленных текстов в MIME». Декабрь 1993.
[RFC1738]
Бернерс-Ли, Т., Масинтер, Л., МакКахилл, М. «Универсальный адрес
ресурса». Декабрь 1994.
[RFC1766]
Алвестранд, Х. «Теги и идентификация языков». Март 1995.
[RFC1808]
Филдинг, Р. «Относительные универсальные адреса ресурсов». Июнь 1995.
[RFC2044]
Ерго, Ф. «UTF-8, формат преобразования Unicode и ISO 10646». Октябрь
1996.
[RFC2045]
Фрид, Н., Боренштейн, Н. «Многоцелевые расширения почты Интернет
(MIME) Часть первая: формат тел сообщений Интернет». Ноябрь 1996.
(Обратите внимание, что этот RFC новее RFC1521, RFC1522 и RFC1590).
[RFC2046]
Фрид, Н., Боренштейн, Н. «Многоцелевые расширения почты Интернет
(MIME) Часть вторая: Типы устройств. Ноябрь 1996. (Обратите внимание, что
этот RFC новее RFC1521, RFC1522 и RFC1590).
[RFC2068]
Филдинг, Р., Геттис, Дж., Могул, Дж., Фрюстюк Нильсен Х., Бернерс-Ли, Т.
«HTTP версия 1.1». Январь 1997.
[RFC2119]
Брэднер С. «Ключевые слова для использования в RFC для указания уровня
требований». Март 1997.

Страница 62 из 65 © Red Graphic Systems


[RFC2141]
Моутс Р. «Синтаксис URN». Май 1997.
[SRGB]
Стоукс, М., Андерсон, М., Чандрасекар, С., Мотта Р. «Стандартное
пространство цветов в Интернет по умолчанию». Версия 1.10. Ноябрь 1996.
[UNICODE]
«Стандарт Unicode: версия 2.0». Консорциум Unicode, Addison-Wesley
Developers Press, 1996. В этой спецификации также учтены ошибки в
http://www.unicode.org/unicode/uni2errata/bidi.htm.
Подробнее см. на странице консорциума Unicode по адресу
http://www.unicode.org

[URI]
Бернерс-Ли, Т., Филдинг, Р., Масинтер, Л. «Универсальные идентификаторы
ресурсов (URI): Общий синтаксис и семантика». Ноябрь 1997.

[WEBSGML]
Голдфарб, К. А. «Предложение TC для адаптации WebSGML для SGML», ed.
Июнь, 1997.

8.2 Информативные ссылки


[BRYAN88]
Брайан, М. «SGML: Руководство автора по стандартному обобщенному языку
разметки», Addison-Wesley Publishing Co., 1988 г.
[CALS]
Continuous Acquisition and Life-Cycle Support (CALS). CALS - это стратегия
достижения эффективного создания, обмена и использования цифровых
данных для систем вооружения и оборудования Министерства обороны.
[CHARSETS]
«Зарегистрированные значения наборов символов». Загрузите список
зарегистрированны значений по адресу
http://www.iana.org/assignments/character-sets
[CSS2]
Бос, Б., Ли, Х. В., Лилли К., Джейкобс, Я. «Каскадные таблицы стилей,
уровень 2». Ноябрь 1997 г. — http://www.w3.org/TR/WD-CSS2/
[DCORE]
«The Dublin Core»: подробнее см. по адресу http://dublincore.org/
[ETHNO]
«Этнология, языки мира», 12-е издание. Под ред. Граймс, Б.Ф. Летний
институт лингвистики, 1992.

Страница 63 из 65 © Red Graphic Systems


[GOLD90]
Голдфарб, К. Ф. «Справочник по SGML». Clarendon Press, 1991.
[HTML30]
Рэгетт, Д. «Спецификация языка разметки гипертекстов, версия 3.0».
Сентябрь 1995 г. Находится по адресу
http://www.w3.org/MarkUp/html3/CoverPage
[HTML32]
Рэгетт, Д. «Спецификация HTML 3.2». Январь 1997. Находится по адресу
http://www.w3.org/TR/REC-html32
[HTML3STYLE]
Бос, Б., Рэгетт Д., Ли Х. «HTML и таблицы стилей». Март 1997. Находится
по адресу http://www.w3.org/TR/WD-html40/
[LEXHTML]
Коннолли, Д. «Лексический анализатор для HTML и основного SGML». Июнь
1996. Находится по адресу http://www.w3.org/TR/WD-html-lex/
[PICS]
“Platform for Internet Content (PICS)”. Подробнее см. http://www.w3.org/PICS/
[RDF]
«Язык описания ресурсов». Находится по адресу http://www.w3.org/RDF/
[RFC822]
«Стандарт формата текстовых сообщений Интернет ARPA». Под ред. Крокер
Д.Х., 1982.
[RFC850]
Хортон, М. «Стандарт обмена сообщениями USENET», 1983.
[RFC1468]
Мюрай, Дж., Криспин М., Поль Э., ван дер. «Японская кодировка символов
для сообщений Интернет». Июнь 1993.
[RFC1630]
Бернерс-Ли, Т. «Универсальные идентификаторы ресурсов в WWW:
унифицированный синтаксис для выражения имен и адресов объектов в сети,
используемый в World-Wide Web». Июнь 1994.
[RFC1866]
Бернерс-Ли, Т., Коннолли, Д. «Язык разметки гипертекстов 2.0». Ноябрь 1995.
[RFC1867]
Небель, Э., Масинтер, Л. «Выгрузка файлов на базе форм в HTML». Ноябрь
1995.
[RFC1942]
Рэгетт, Д. «Таблицы HTML». Май 1996.

Страница 64 из 65 © Red Graphic Systems


[RFC2048]
Фрид, Н., Кленсин Дж., Постел, Дж. «Многоцелевые расширения почты
Интернет (MIME) Часть четвертая: Процедуры регистрации». Ноябрь, 1996.
Обратите внимание, что этот RFC новее RFC1521, RFC1522 и RFC1590.
[RFC2070]
Ерго, Ф., Николь, Ж., Адамс Г., Дюрст, М. «Интернационализация языка
разметки гипертекстов». Январь 1997.
[SGMLOPEN]
Консорциум SGML.
[SP]
SP – общедоступный синтаксический анализатор SGML. Находится по адресу
ftp://ftp.jclark.com/pub/sp/. Более подробную информацию можно найти по
адресу http://www.jclark.com.
[SQ91]
«The SGML Primer», 3-е издание. SoftQuad Inc., 1991.
[TAKADA]
Тошихиро, Т. «Обмен многоязыковой информацией через World-Wide Web»,
Компьютерные сети и системы ISDN, том 27, № 2, стр. 235-241, ноябрь 1994.
[WAIGUIDE]
Принципы разработки доступных документов HTML можно найти на Web-
сайте Web Accessibility Initiative (WAI): http://www.w3.org/WAI/.
[VANH90]
Хервайнен, Э., ван. «Практическое руководство по SGML». Kluwer Academic
Publishers Group, Norwell and Dordrecht, 1990.

9 Заключение
Мы надеемся, что данная спецификация позволит Вам сэкономить время разработки
CMS и обеспечит переносимость Ваших функциональных решений. Также Вы
сможете воспользоваться опытом прочих участников открытого проекта поддержки
XML Sapiens (http://xmlsapiens.org).

Страница 65 из 65 © Red Graphic Systems

Оценить