Учебное пособие (1075724), страница 49
Текст из файла (страница 49)
Предварительное сохранениепараметров отчетаHTTP-параметры:prereport=1,XML-данные формыdata_processor.xql1. Вернуть списокпроцессоровHTTP-параметр:list=1report.xql3. Формирование отчетаHTTP-параметр:report=1report.xsl4. Возврат в форму параметров(в случае ошибокввода параметров)Рис. 7.14. Взаимодействие между сценариями модуля.Переход из начального состояния диаграммы на сценарий «report.xql»соответствует вызову сценария без параметров. В этом режиме сценарийгенерирует XForms-форму ввода параметров отчета.Для получения списка процессоров (1) XForms-форма обращается к модулю«тип процессора», вызывая сценарий «data_processor.xql» с HTTP-параметром«list=1».В случае нажатия в форме кнопки «Сформировать отчет» сначалапроисходит асинхронная передача заполненной формы параметров отчета всерверный сценарий (в нашем случае это тот же сценарий «report.xql») ипредварительное сохранение параметров отчета в переменной сессии (2).Затем происходит синхронный вызов сценария «report.xql» (3), при которомпараметры отчета читаются из сессионной переменной и проверяются.Если данные введены неправильно, то выводится сообщение об ошибке ипроисходит возврат в форму редактирования параметров (4).473Если данные введены правильно, то происходит формирование отчета, дляпреобразования результирующих данных отчета в HTML применяется XSLTпреобразование «report.xsl».Переход в конечное состояние соответствует закрытию окна браузера, вкотором был открыт отчет.
Поскольку сценарий формирования отчетаоткрывается в новом окне браузера, то возврат в главное меню здесь неиспользуется.7.3.5.7 Другие сценарииВ этом разделе рассмотрим остальные файлы нашего примера, которые невошли в справочники и формирование отчета: index.xql – сценарий, реализующий главное меню. initdb.xql – сценарий инициализации БД перед работой с приложением. module.xqm – XQuery-модуль, содержащий вспомогательные функции. style.css – основная стилевая таблица. xforms.css – стилевая таблица для отображения XForms-форм.7.3.5.7.1 Сценарий index.xqlСценарий предназначен для формирования главного меню.474Рис.
7.15. Сценарий index.xqlТекст сценария:xquery version "1.0";(: Импорт стандартных модулей :)declare namespace request="http://exist-db.org/xquery/request";declare namespace session="http://exist-db.org/xquery/session";(: Импорт модулей приложения :)import module namespace xrx_example ="http://iu5.bmstu.ru/edu/xrx_example" at "module.xqm";(: Формат, в котором результат должен отображаться в браузере :)declare option exist:serialize "method=xhtml media-type=text/htmlindent=no";(: Идентификатор модуля :)declare variable $module_id {"main"};(: Версия модуля :)declare variable $module_ver {""};(: ++++++++++++++++++++++++++++++++++++++++++++++ :)(: Основной запрос :)(: ++++++++++++++++++++++++++++++++++++++++++++++ :)475let $CurrentCssURI := xrx_example:PathURI_current_css()return<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF8"/><style type="text/css"><xi:include xmlns:xi="http://www.w3.org/2001/XInclude"href="{$CurrentCssURI}"/>Подсветка пунктов меню реализована с использованием CSS-стилей.</style></head><body><h1>Тестовое XRX-приложение</h1><table align="center"><tr><td><ol class="menu"><li><a class="menu"href="list_processor_1.2.xql">Справочник типов процессоров</a></li><li><a class="menu"href="list_computer_1.1.xql">Справочник компьютеров</a></li><li><a class="menu" target="_blank"href="report.xql">Формирование отчета</a></li>Пункт меню «Формирование отчета» открывается в новом окне (вкладке)браузера, так как указан атрибут target="_blank".<li><a class="menu" href="initdb.xql">ИнициализацияБД</a></li></ol></td></tr></table><p>Инициализация БД должна запускаться один раз перед началомработы с системой.
Этот сценарий создает в БД коллекции и файлы,необходимые для начала работы.</p>476</body></html>(: ++++++++++++++++++++++++++++++++++++++++++++++ :)7.3.5.7.2 Сценарий initdb.xqlСценарийпредназначендляинициализацииБДпередработойсприложением. Он создает необходимые коллекции и файлы в БД.Рис.
7.16. Сценарий initdb.xqlСценарий разработан таким образом, что его можно запускать многократно,все введенные данные при этом сохраняются.Сценарий содержит пролог и основной запрос (локальных функций нет).Пролог сценария:xquery version "1.0";(: Импорт стандартных модулей :)declare namespace request="http://exist-db.org/xquery/request";declare namespace response="http://exist-db.org/xquery/response";declare namespace session="http://exist-db.org/xquery/session";477(: Импорт модулей приложения :)import module namespace xrx_example ="http://iu5.bmstu.ru/edu/xrx_example" at "module.xqm";(: Формат в котором результат должен отображаться в браузере :)declare option exist:serialize "method=xhtml media-type=text/htmlindent=no";(: Идентификаторы модулей для создания коллекций :)declare variable $module_processor_id {"processor"};declare variable $module_computer_id {"computer"};Основной запрос сценария:(: ++++++++++++++++++++++++++++++++++++++++++++++ :)(: Основной запрос :)(: ++++++++++++++++++++++++++++++++++++++++++++++ :)letВ переменные запроса сохраняются следующие значения:$Computer_CollectionName :=xrx_example:PathURI_data_list_in_db_not_basepath($module_computer_id),Название коллекции компьютеров.$Processor_CollectionName :=xrx_example:PathURI_data_list_in_db_not_basepath($module_processor_id),Название коллекции процессоров.$Processor_CollectionNameWithBasePath :=xrx_example:PathURI_data_list_in_db($module_processor_id)Полный путь к коллекции процессоров, используется для создания файла сосписком процессоров.return((<h1 align="center">Инициализация БД</h1>),(: Создание коллекции iu5 в коллекции /db :)xrx_example:InitDB_Create_Collection($xrx_example:BasePath_db,$xrx_example:BasePath_iu5),478(: Создание коллекции xrx_example в коллекции /db/iu5/ :)xrx_example:InitDB_Create_Collection($xrx_example:BasePath_db_iu5,$xrx_example:BasePath_xrx_example),(: Создание коллекции computers в коллекции /db/iu5/xrx_example/:)xrx_example:InitDB_Create_Collection($xrx_example:BasePath,$Computer_CollectionName),(: Создание коллекции processors в коллекции /db/iu5/xrx_example/:)xrx_example:InitDB_Create_Collection($xrx_example:BasePath,$Processor_CollectionName),Спомощьюфункцииxrx_example:InitDB_Create_Collectionсоздаетсяколлекция в БД.
Первый параметр – название базовой коллекции, второйпараметр – название новой коллекции, которая создается в базовой.Если создаваемая коллекция уже существует, то она остается без изменений.(: Создание файла log.xml (для отладочных сообщений) в коллекции/db/iu5/xrx_example/ :)xrx_example:InitDB_Create_File($xrx_example:BasePath,$xrx_example:FileName_log, <root/>),(: Создание файла processors.xml (процессоры) в коллекции/db/iu5/xrx_example/processors/ :)xrx_example:InitDB_Create_File($Processor_CollectionNameWithBasePath, $xrx_example:FileName_processors, <processors/>),С помощью функции xrx_example:InitDB_Create_File создается файл взаданной коллекции БД.
Первый параметр – название коллекции, второй параметр– название создаваемого файла, третий параметр – XML-фрагмент, которыйсохраняется в файл.Если файл уже существует, то он не создается заново.(<div><hr/><table align="center"><tr>479{xrx_example:PathURI_menu()}Формирование кнопки возврата в главное меню.</tr></table></div>))7.3.5.7.3 Таблица стилей style.cssОсновная таблица стилей, которая применяется ко всем динамическигенерируемым HTML-документам.Таблица стилей составлена в соответствии со стандартом CSS [CSS, 2009].Так как таблица стилей добавляется в XQuery-сценарий с помощьютехнологии XInclude, то она «обрамляется» корневым тэгом и оформляется в видеXML-документа.Для того, чтобы избежать ошибок разбора таблицы стилей, в начало таблицыстилей помещается пустое правило empty {}.<?xml version="1.0" encoding="UTF-8"?><css>/* пустое правило, чтобы не было ошибок разбора таблицы стилей */empty {}h1 {text-align: center;font-size: 1.5em;font-weight: normal;font-family: Arial;color: white;background-color: #0990EE;margin-left: 0px;margin-bottom: 15px;margin-top: 0px;padding-left: 5px;padding-right: 5px;480padding-top: 5px;padding-bottom: 5px;-moz-border-radius: 15px;-webkit-border-radius: 15px;}h2 {text-align: center;font-size: 1em;font-weight: normal;font-family: Arial;color: white;background-color: #0990EE;margin-left: 0px;margin-bottom: 15px;margin-top: 0px;padding-left: 5px;padding-right: 5px;padding-top: 5px;padding-bottom: 5px;-moz-border-radius: 10px;-webkit-border-radius: 10px;}th, td{padding: 5px;}.menu li{margin-top: 15px;}a.menu, a.menu:visited {text-align: left;481text-decoration: none;color: blue;font-size: 1em;font-weight: bold;font-family: Arial;margin-left: 5px;margin-right: 5px;margin-top: 5px;margin-bottom: 5px;padding-left: 10px;padding-right: 10px;padding-top: 10px;padding-bottom: 10px;}a.menu:hover {text-align: left;text-decoration: none;font-size: 1em;font-weight: bold;font-family: Arial;color: white;background-color: #0990EE;margin-left: 5px;margin-right: 5px;margin-top: 5px;margin-bottom: 5px;padding-left: 10px;padding-right: 10px;padding-top: 10px;padding-bottom: 10px;-moz-border-radius: 15px;-webkit-border-radius: 15px;}</css>4827.3.5.7.4 Таблица стилей xforms.cssТаблица стилей, которая используется для форматирования XForms-форм.<?xml version="1.0" encoding="UTF-8"?><css>/* пустое правило, чтобы не было ошибок разбора таблицы стилей */empty {}/* Определение пространства имен для XForms */@namespace xf url("http://www.w3.org/2002/xforms");/* Задание параметров для элемента value, который соответствуетэлементу textarea (value вложен в textarea) *//* Связь с пространством имен через префикс xf */xf|textarea xf|value{vertical-align: middle;width : 300px;height: 40px;}</css>7.3.5.7.5 Модуль module.xqmXQuery-модуль содержит вспомогательные функции.Модуль (в отличие от обычного сценария) не содержит основного запроса.Он содержит только пролог и библиотечные функции.Далее приводится текст модуля с комментариями:xquery version "1.0";(: Наименование модуля :)module namespace xrx_example ="http://iu5.bmstu.ru/edu/xrx_example";(: Пространство имен модуля - "http://iu5.bmstu.ru/edu/xrx_example"В сценариях для подключения модуля должна использоваться командаimport module namespace префикс ="http://iu5.bmstu.ru/edu/xrx_example" at "module.xqm";483Функции модуля вызываются с использованием префикса префикс:функция(параметры)Префиксы могут быть произвольными (главное, чтобы совпадалипространства имен).В нашем примере в модуле и сценариях используется одинаковыйпрефикс - xrx_example.














