Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
konkurs-samples / hadzkou / Отчет_проект.doc
Скачиваний:
15
Добавлен:
25.03.2015
Размер:
1.84 Mб
Скачать
      1. Пример исходногоXml-файла

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

Каждый исходный документ имеет единообразную структуру, которая начинается с объявления XML-спецификации:

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

За ней следует привязка схемы DTD, использующейся при валидации файла на корректность структуры:

<!DOCTYPE xml-document PUBLIC "-//DiplomaProject//DTD Ruling-Format: Document XML//EN" " Diploma_Project.dtd">

Далее могут указывать требования, предъявляемые непосредственно к DTD-схеме, такие как ее версия и др. Указывается идентификационный номер исходного документа.

После этого начинается структурное описание самого документа в соответствии со всеми спецификациями по его построению. Пример такого XML-файла показан на рисунке 11.

Рисунок 11 – ИсходныйXML-документ

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

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

Синим шрифтом выделены структурные элементы, которые используются для построения исходного документа. Правила их использования регламентированы DTD-схемой, привязанной к документу.

Красный шрифт используется для выделения атрибутов каждого отдельного элемента (нода). Перечень допустимых для применения атрибутов содержится в DTD-схеме. Фиолетовый шрифт применяется, чтобы выделить значения атрибутов.

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

      1. Настройка и использование сервераApacheCocoon

Cocoon 2 от Apache XML Project является гибкой системой Web-публикации, в основе которой лежат повторно используемые компоненты. Несмотря на то, что концепция многократного использования компонент присутствует во многих системах, Cocoon выделяется простотой интерфейсов взаимодействия компонент. Каждая компонента принимает на вход и возвращает XML, и такой подход работает.

Cocoon 2 является системой публикации XML. Что же это на самом деле значит? Это не база данных, в которой хранятся XML-данные, и не сервер приложений J2EE, который подготавливает контент для web-сервера. Cocoon 2 архитектурно располагается на промежуточном уровне и представляет собой среду обработки контента. Контент обрабатывается системой компонент, структуру которой как раз и строит разработчик.

Любая система компонент начинается с генератора. Генератор анализирует файл и создает поток событий SAX. Вторым элементом в рассматриваемой системе компонент является XSL-процессор. В нашем случае, процессор преобразований применяет XSL-преобразование (stylesheet.xsl) к XML-документу, полученному от генератора. Результатом его также является SAX-поток. На выходе системы находится сериализатор. Он прерывает поток и выдает результата преобразования в качестве HTTP-ответа. Подобную трехуровневую систему компонент можно применять для создания множества или даже всех страниц разрабатываемого сайта. Этот пример может показаться слишком простым, поскольку две компоненты из трех являются крайними компонентами, однако, он хорошо иллюстрирует общую идею.

На рисунке 12 показан случай, более приближенный к реальной жизни. Страницы, содержащие статический и динамический контент, поступают из базы данных. К предыдущей схеме добавлена новая компонента — SQL-процессор.SQL-процессор обрабатываетSQL-выражения, включенные в исходныйXML-документ, и заменяет их на результат выборки, опять же оформленный в видеXML-фрагмента.

Рисунок 12 – Принцип работы сервера ApacheCocoon

Например, если в исходном документе (в file.xml) содержится следующая информация:

<guest-list>

<sql:execute-query>

<sql:query>

SELECT CONCAT(lastName, ', ', firstName) as name, age

FROM guest WHERE status = ARRIVING;

</sql:query>

</sql:execute-query>

</guest-list>

Cоответствующим результатом действия SQL-процессора будет примерно следующее:

<guest-list>

<row-set>

<row>

<name>Bush, George</name>

<age>56</age>

</row>

<row>

<name>Jackson, Michael</name>

<age>42</age>

</row>

<row>

<name>Einstein, Albert</name>

<age>105</age>

</row>

</row-set>

</guest-list>

Главным преимуществом является то, что в исходном файле можно явно выделить бизнес-логику документа. В данном случае мы никак не используем JDBC API, напротив, контент исходного документа начинает отражать исходную бизнес-задачу.

Предположим теперь, что в локальной базе данных находится список символов акций, которые мы хотим использовать при отображении текущих цен на рынке. Подобная страница может являться составной частью какого-нибудь портала наподобие Yahoo. Эту бизнес-задачу можно решить с помощью многокомпонентной системы, показанной на рисунке 13.

Рисунок 13 – Включение в систему SOAP-процессора

Допустим, что в SOAP-процессор поступает следующий фрагмент XML-кода:

<soap:query url="http://www.mystock.org:8080">

<soap:body>

<getStockPrice>

<stockName>IBM</stockName>

<stockName>HWQ</stockName>

<stockName>BEA</sockName>

</getStockPrice>

</soap:body>

</soap:query>

Заметим, что в этом примере для преобразования результата работы SQL-процессора в формат, понятный SOAP-процессору в промежутке между этими двумя компонентами мы используем XSL-процессор. Как видно, XSL может использоваться для решения широкого круга задач, а не только для представления в виде HTML.

Cocoon 2 состоит из трех основных компонент: первая - генератор, который создает поток XML SAX. Этот поток может быть создан на основе файла из локальной файловой системы, на основе XML-данных из базы данных или внешней системы, или как-нибудь иначе. Вторая компонента - процессор преобразований, который изменяет поток XML. В качестве этой компоненты могут использоваться XSL, SQL, SOAP, LDAP или пользовательские процессоры. Главное требование заключается в возможности обрабатывать входящий поток XML и выводить также поток XML. В роли третьей компоненты выступает сериализатор, который терминирует поток XML и создает физическую репрезентацию контента в соответствующем формате. Таким форматом может быть не только HTTP, но и любой графический формат, операция записи в локальный файл и т.д.

Система компонент Cocoon 2 определяется в виде карты сайта в файле sitemap.xmap, который находится в корне web-приложения:

<map:match="*.html">

<map:generate src="file.xml"/>

<map:transformer type="sql">

<map:parameter name="use-connection" value="mydatabase"/>

</map:transformer>

<map:transformer type="xsl" src="format-adjust.xsl"/>

<map:transformer type="soap" url="soap://www.stockquote.com"/>

<map:transformer type="xsl" src="html-presentation.xsl"/>

<map:serializer type="html"/>

</map:match>

Для инсталляции и запуска Cocoon необходимы три следующих программных продукта.

  1. JDK. Рекомендуется использовать JDK 1.3.1, который можно загрузить с корпоративного сайта Sun: http://java.sun.com/j2se/1.3;

  2. Сервер приложений J2EE. Apache Tomcat является очень популярным продуктом, но я бы посоветовал Orion Web Server. Это современное Java-решение можно загрузить с сайта http://www.orionserver.com/. Отметим, что Oracle использует этот сервер в своей последней линейке продуктов версии 9i;

  3. Дистрибутив Cocoon. Его можно загрузить со страницы http://xml.apache.org/cocoon/dist. Рекомендую использовать версию 2.0.1, так как в версии 2.0.2 существуют некоторые проблемы с примерами, которые, надеемся, будут исправлены в 2.0.3.

На сайте Cocoon приведена подробная инструкция по инсталляции и настройке Cocoon для различных серверов приложений (Tomcat, WebLogic, Jrun, Jboss, Resin и др.)

После установки и настройки программы загрузите в вашем web-браузере хост http://localhost/, http://localhost:8080/ или тот, что вы указали в конфигурации сервера. По умолчанию, Cocoon по умолчанию сконфигурирован так, чтобы он загружался в память по требованию пользователя. И после небольшой задержки, требуемой для завершения процесса инициализации, вы увидите демо-страницу Cocoon.

Работу с Cocoon лучше всего проиллюстрировать на очень простом HTML примере «Hello World». Есть три момента, на которые стоит обратить внимание. Первый - это фрагмент карты сайта, отвечающий за обработку этого примера. Найдите в файле sitemap.xmap строчку <map:match pattern="hello.html">. Этот элемент содержит следующее правило соответствия компонент:

<map:match pattern="hello.html">

<map:generate src="docs/samples/hello-page.xml"/>

<map:transform src="stylesheets/page/simple-page2html.xsl"/>

<map:serialize type="html"/>

</map:match>

Второй момент – из этого правила мы видим, что исходный файл XML для этого правила должен быть найден по пути docs/samples/hello-page.xml. И наконец, следует проверить наличие преобразования stylesheets/page/simple-page2html.xsl.

Чтобы продемонстрировать некоторые преимущества и возможности Cocoon, создадим систему компонент, которая получает числовое значение, переданное с помощью HTTP POST, и вычисляет факториал этого значения. Таким образом, мы покажем, как можно использовать различные источники данных отличные локальных файлов, и как система компонент и процессор преобразований XSL может выполнять более сложные задачи, чем просто внедрение разметки HTML.

Система компонент должна состоит из трех элементов:

  • стандартный генератор HTTP Request, который преобразует все доступные элементы запроса HTTP, такие как пары параметр-значение, имя хоста и т.д. в XML;

  • преобразование XSL, которое выбирает соответствующее числовое поле и вычисляет факториал;

  • сериализатор, который преобразует поток SAX в формат HTTP. В данном случае, мы будет выдавать результат в формате XML.

Ниже приведено правило соответствия для описанной системы компонент.

<map:match pattern="mypage">

<map:generate type="request"/>

<map:transform src="mystylesheet.xsl"/>

<map:serialize type="xml"/>

</map:match>

Соответствующее XSL-преобразование имеет вид:

<?xml version="1.0"?>

<!-- Author: Steven P. Punte "stevep@candlelightsoftware.com" -->

<!-- Description: Computes Factorial -->

<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

xmlns:http="http://xml.apache.org/cocoon/requestgenerator/2.0">

<xsl:template match="/">

<page>

<incoming-value>

<xsl:value-of select="/http:request/http:requestParameters/

http:parameter/http:value"/>

</incoming-value>

<computed-factorial>

<xsl:call-template name="factorial">

<xsl:with-param name="input" select="/http:request/

http:requestParameters/http:parameter/http:value"/>

</xsl:call-template>

</computed-factorial>

</page>

</xsl:template>

<xsl:template name="factorial">

<xsl:param name="input"/>

<xsl:choose>

<xsl:when test="$input > 1">

<xsl:variable name="tmp">

<xsl:call-template name="factorial">

<xsl:with-param name="input" select="$input - 1" />

</xsl:call-template>

</xsl:variable>

<xsl:value-of select="$tmp * $input"/>

</xsl:when>

<xsl:otherwise>

1

</xsl:otherwise>

</xsl:choose>

</xsl:template>

</xsl:stylesheet>

Cocoon использует простую идею системы компонент. Компоненты Cocoon могут получать доступ к реляционным и XML базам данных, взаимодействовать с LDAP и создавать графические объекты. Можно создать отдельные компоненты для создания и получения SOAP и ebXML сообщений, можно использовать сериализаторы SNMP протокола, предоставляющие COM и EJB/RMI мосты, и, говоря общими словами, можно решать различные задачи, связанные с корпоративной бизнес-логикой.

Cocoon является примером XML-ориентированного программного продукта.Упомянутые в данной статье процессоры преобразований XSL и SQL являются только примерами возможных компонент. Программистам необходимо выразить собственные решения на языке XML, чтобы иметь возможность повторно использовать оболочки подобных компонент.

Соседние файлы в папке hadzkou