Автоматизация преобразования структурированных данных в корпоративном правовом портале

Разработка системы автоматизации преобразования структурированных данных в корпоративном правовом портале. Выбор программных средств реализации проекта, его предметная область. Определение проблемы и выработка требований. Разработка проекта приложения.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 07.07.2013
Размер файла 4,6 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

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

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

Рисунок 12 - Принцип работы сервера Apache Cocoon

Например, если в исходном документе (в 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 необходимы три следующих программных продукта.

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

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

Дистрибутив 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, чтобы иметь возможность повторно использовать оболочки подобных компонент.

3.2 Реализация процессинговой части Web-приложения

Создание XSLT-темплейтов

XSLT-темплейты логически являются одним из главных звеньев в цепи функционирования разработанного проекта. Именно они отвечают за преобразование XML-файлов, в которых содержатся исходные данные, в HTML-страницы, которые затем предоставляются пользователю в удобном для него виде. Всего в системе используется порядка 40 XSLT-файлов, отвечающих за различные аспекты функционирования системы, начиная от обработки небольших структурных элементов исходного документа, заканчивая реализацией общего представления документа для его последующей отправки посредством электронной почты, для чего предъявляются несколько иные требования.

Стартовой точкой системы является файл document-xhtml-renderer-scion-view. xsl (рисунок 14). Он содержит точку входа в исходный документ (<xsl: template match="/">) и содержит инструкции, необходимые для выполнения в случае нахождения в документе так называемого "root tag" - стартового элемента.

В случае вызова данного темплейта происходит построение HTML-страницы, вызов других темплейтов для дальнейшей обработки исходного документа, подключение файлов с кодом JavaScript, подключение CSS-файла, формирование тела страницы и ее блочной структуры.

Следующим вызывается файла doc-view-specific. xsl, который включает в себя другие необходимые темплейты и подключает обработчики из других файлов проекта:

<xsl: include href="document-xhtml-list-renderer. xsl"/>

<xsl: include href="document-xhtml-commons. xsl"/>

<xsl: include href="doc-heading. xsl"/>

<xsl: include href="value-add-html. xsl"/>

<xsl: include href="document-xhtml-renderer. xsl"/>

<xsl: include href="xhtml-page-start-element. xsl"/>

<xsl: include href="xhtml-footer. xsl"/>

<xsl: include href="doc-notes-html. xsl"/>

<xsl: include href="all-formats. xsl"/>

<xsl: include href="xhtml-related-information-element. xsl"/>

<xsl: include href="break-html. xsl"/>

<xsl: include href="document-xhtml-metadata-renderer. xsl"/>

<xsl: include href="html-head-section. xsl"/>

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

Рисунок 14 - Структура файла document-xhtml-renderer-scion-view. xsl

Возвращаемся к документу doc-view-specific. xsl. Здесь находится один из наиболее важным участком обработчика, а именно, темплейт, отвечающий за создание структуры документа для различных типов юридических данных. В темплейте "atlas-document-body-structure" в зависимости от переменной, в которой содержатся данные об идентификации типа юридической информации, строится своя индивидуальная структура HTML-страницы и в дальнейшем вызываются специфические обработчики (рисунок 15).

Рисунок 15 - Структура темплейта "atlas-document-body-structure"

Посредством вызова инструкции <xsl: apply-templates/> происходит обращение ко всем другим обработчикам, которые найдут в исходном документе элементы, подходящие под их условия. Использование инструкции <xsl: call-template/> приводит к вызову специального темплейта с изначально заданным именем.

Далее приведем пример, как строится секция заголовка для одного из документов (рисунок 16).

Рисунок 16 - Создание секции заголовка

На рисунке представлены 3 взаимосвязанных темплейта. В первом из них строится общая структура секции заголовка, создаются блоки-контейнеры, вызывается обработчик для отображения текста главного заголовка после чего инструкция <xsl: call-template name="metadata-grey-box-law"/> вызывает отображение панели с метаданными - "дэшбоард" - своего рода информационное меню HTML-страницы.

Далее формируется кнопка-список для перехода к секциям "Related Matter" с использованием возможностей JavaScript, для чего создается пустой блок-контейнер в третьем из приведенных выше темплейтов. Затем внутри первого обработчика вызывается второй темплейт, который отвечает за отображение дополнительной текстовой информации после "дэшбоарда". Подобным образом устроена работа и других обработчиков, например, отвечающего за преобразование элементов wkdoc: level (рисунок 17).

Рисунок 17 - Структура темплейта "wkdoc: level"

Следующий темплейт иллюстрирует процесс создания информационного меню для документов типа Newsletter (рисунок 18). Данный обработчик находится в файле value-add-html. xsl.

Рисунок 18 - Структура темплейта "metadata-grey-box-news"

Здесь применяется более сложный механизм, наряду с блочной структурой представления данных также используется и табличная. За форматирование отвечает закрепленный за проектом CSS-файл, который с использованием изображений и специализированных атрибутов позволяет добиться получения необходимого результата оптимальным способом. Также вызывается специализированный темплейт для отображения даты, хранящейся в документе, в формате, который зависит от языка. То есть, в случае, если исходный файл содержит параметр, указывающий на английский язык, будет применено иное форматирование, нежели в случае использования французского языка. На рисунке 19 показано, как происходит обработка и создание заголовков различных уровней для элементов h1, находящихся в исходных данных, которые относятся к типу документов "GAD" (doc-agency).

Рисунок 19 - Обработка элементов h1 из документов типа GAD

Еще одним часто встречающимся элементом является "para". Его обработка происходит в файле paragraph-html. xsl (рисунок 20).

Рисунок 20 - Обработка элементов para

Создание XSL-FO темплейтов

Аналогичным образом происходит процесс создания обработчиков на языке трансформации XSL-FO, который отвечает за отображение преобразованных исходных данных в форматах PDF и RTF. Пользователь получает возможность при просмотре HTML-страницы в веб-браузере скачать изучаемый документ в одном из предложенных форматов.

Всего в системе используется порядка 20 XSL-FO-файлов, отвечающих за различные аспекты функционирования системы в режимах RTF и PDF, начиная от обработки небольших структурных элементов исходного документа, заканчивая реализацией общего представления документа для его последующей отправки посредством электронной почты. Стартовой точкой системы является файл document-fo-skeleton. xsl (рисунок 21). Он содержит точку входа в исходный документ (<xsl: template match="/">).

Рисунок 21 - Структура файла document-xhtml-renderer-scion-view. xsl

В случае вызова данного темплейта происходит построение HTML-страницы, вызов других темплейтов для дальнейшей обработки исходного документа, подключение файлов с кодом JavaScript, подключение CSS-файла, формирование тела страницы и ее блочной структуры.

Следующим вызывается файла print-xhtml-specific. xsl, который включает в себя другие необходимые темплейты и подключает обработчики из других файлов проекта:

<xsl: include href="document-xhtml-list-renderer. xsl"/>

<xsl: include href="document-xhtml-commons. xsl"/>

<xsl: include href="doc-heading. xsl"/>

<xsl: include href="value-add-html. xsl"/>

<xsl: include href="document-xhtml-renderer. xsl"/>

<xsl: include href="xhtml-page-start-element. xsl"/>

<xsl: include href="xhtml-footer. xsl"/>

<xsl: include href="xhtml-print-header. xsl"/>

<xsl: include href="xhtml-print-document-body-structure. xsl"/>

<xsl: include href="doc-notes-html. xsl" />

<xsl: include href="all-formats. xsl"/>

<xsl: include href="break-html. xsl"/>

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

Возвращаемся к документу doc-view-specific. xsl. Здесь находится один из наиболее важным участком обработчика, а именно, темплейт, отвечающий за создание структуры документа для различных типов юридических данных. В темплейте "atlas-document-body-structure" в зависимости от переменной, в которой содержатся данные об идентификации типа юридической информации, строится своя индивидуальная структура HTML-страницы и в дальнейшем вызываются специфические обработчики (рисунок 22).

Посредством вызова инструкции <xsl: apply-templates/> происходит обращение ко всем другим обработчикам, которые найдут в исходном документе элементы, подходящие под их условия. Использование инструкции <xsl: call-template/> приводит к вызову специального темплейта с изначально заданным именем.

Можно сделать вывод о том, что принцип построения обработчика в обоих языках (XSLT и XSL-FO) имеет много общих черт, что ускоряет процесс разработки приложения после создания первой части.

Существенным отличием между этими языками трансформации является то, что в XSLT существует возможность подключить внешний CSS-файл с настройками форматирования генерируемых HTML-документов. Очевидно, что при создании PDF и RTF документов такая функция нереализуема, что вынуждает разработчика напрямую задавать параметры форматирования выходных данных в самих темплейтах при помощи атрибутов элементов, идентичных тем, что используются в CSS.

Рисунок 22 - Структура темплейта "atlas-document-body-structure"

Ввиду описанной выше особенности языка XSL-FO, построение заголовком происходит несколько иным образом. Все параметры блочных (fo: block) и инлайновых (fo: inline) элементов задаются в самих файлах XSL-FO, как показано на рисунке 23.

Подобным образом устроена работа и других обработчиков, например, отвечающего за преобразование элементов wkdoc: level и их вывод в форматах PDF и RTF (рисунок 24).

Рисунок 23 - Создание секции заголовка

Рисунок 24 - Структура темплейта "wkdoc: level"

Следующий темплейт иллюстрирует процесс создания информационного меню для документов типа Newsletter (рисунок 25). Данный обработчик находится в файле doc-heading-fop. xsl.

Рисунок 25 - Структура темплейта "newsMetadata"

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

На рисунке 26 показано, как происходит обработка и создание заголовков различных уровней для элементов h1, находящихся в исходных данных, которые относятся к типу документов "Legislation" (doc-law).

Рисунок 26 - Обработка элементов h1 из документов типа Legislation

Еще одним часто встречающимся элементом является "para". Его обработка происходит в файле paragraph-fo. xsl (рисунок 27).

Рисунок 27 - Обработка элементов para

Подключение и использование CSS

Для корректного отображения выходных данных на HTML-странице в соответствии с заданными требованиями к проекту подключается CSS-файл. Он функционирует в системе локального сервера, подключается в XSLT-темплейте, отвечающем за обработку загрузочного нода, а подключение к нему происходит динамически во время отображения веб-страницы в браузере.

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

Рисунок 28 - Фрагмент файла docDisplay. Css

В данном проекте использовалась таблица стилей docDisplay. css, длина которой в конечном итоге превысила 2000 строк ввиду большого количества различных документов, поддерживаемых в проекте, а также разнообразия элементов, используемых в них (рисунок 28).

Применение JavaScript

Для реализации дополнительного функционала использовался JavaScript (рисунок 29). При нажатии на кнопку Related Matter над ней появляется всплывающее окно, содержимое окна сдвигается наверх.

Рисунок 29 - Функционал JavaScript

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

Рисунок 30 - Код функции блокировки скроллинга на языке JavaScript

3.3 Примеры выходных данных и работа с системой

Функционирующая система с подключением локального сервера, всех дополнительных библиотек, обработчиков и с реализацией главного меню выглядит следующим образом (рисунок 31).

Рисунок 31 - Готовая реализация проекта

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

Рисунок 32 - Использование меню

Реализация возможностей JavaScript показана на рисунке 33 на примере использования кнопок "Related Matter" и "History". При нажатии открываются всплывающие окна.

Рисунок 33 - Демонстрация работы JavaScript в разработанной системе

На рисунке 34 представлен пример реализации специального информационного меню, которое содержит дополнительную информацию, касающуюся каждого конкретного документа.

Рисунок 34 - Информационное меню

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

Рисунок 35 - HTML-презентация документа типа GAD

Рисунок 36 - PDF-презентация документа типа GAD

Рисунок 37 - RTF-презентация документа типа GAD

Для выхода из приложения достаточно закрыть окно браузера.

Заключение

Результатом дипломного проекта стал готовый к эксплуатации web-проект. Была успешно реализована задача Автоматизации преобразования структурированных данных в корпоративном правовом портале. Данное приложение является удобным стартовым инструментарием, на основе которого можно создавать более сложные приложения.

В процессе выполнения дипломного проекта были выбраны необходимые для решения задачи технологические средства. Для функционирования системы использовался локальный сервер Apache Cocoon, одновременно являющийся процессором, поддерживающим языки трансформации исходных данных. Сами исходные данные ввиду необходимости их структурированного представления хранятся в XML-формате и проверяться на соответствии заданной разработчиком с учетом требований заказчика DTD схеме. Для трансформации данных были выбраны языки XSLT и XSL-FO, которые позволяют представить информацию, извлеченную из структурированных данных и представить ее в форматах HTML и PDF (RTF) соответственно. В HTML-реализации проекта нашли применение возможности языка JavaScript.

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

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

Список использованных источников

1. Экель, Б. Thinking in Java / Брюс Экель // Питер, 1987. - С.15-30, 99-243.

2. Хабибуллин, И. Разработка Web-служб средствами Java / Ильдар Хабибуллин // БХВ-Петербург. - Санкт-Петербург, 2003. - С.25-133.

3. Флэнаган, Д. Java Справочник / Дэвид Флэнаган // Символ. - М., 2004. - С.214-221, 879-951.

4. Фаулер, М. Архитектура корпоративных программных приложений / М. Фаулер - М.: "Вильямс", 2007 - 544 с.

5. Ноутон, П. Java 2. Наиболее полное руководство. / П. Ноутон, Г. Шилдт - СПб.: БХВ-Петербург, 2005 - 1072 с

6. Тидвелл, Д.Г. Разработка пользовательских интерфейсов: Пер. с англ. / Д.Г. Тидвелл. - П.: Питер, 2008. - 416 с.

7. Буч, Г. Объектно-ориентированное программирование с примерами применения / Г. Буч - М.: Конкорд, 1992 - 567 с.

8. XSLT Tutorial [Электронный ресурс]. - 2011. - В режиме доступа: http://www.w3schools.com/xsl/. - Дата доступа: 24.02.2011.

9. XPath, XQuery, and XSLT Functions [Электронный ресурс]. - 2012. - В режиме доступа: http://www.w3schools.com/xpath/xpath_functions. asp. - Дата доступа: 10.03.2012.

10. Cocoon Tutorial [Электронный ресурс]. - 2012. - В режиме доступа: http://cocoon. apache.org/2.1/tutorial/index.html. - Дата доступа: 18.03.2012.

11. XSL-FO Input [Электронный ресурс]. - 2012. - В режиме доступа: http://xmlgraphics. apache.org/fop/fo.html. - Дата доступа: 26.03.2012.

12. Модели данных для индексации текстовых и графических информационных ресурсов [Электронный ресурс]. В режиме доступа: http://listenbook. narod.ru/Pi-104/Mir_104. htm#_Toc223342930. - Дата доступа: 02.04.2012.

13. iXBT.com - ваш основной источник информации [Электронный ресурс]. - 2012. - В режиме доступа: http://www.ixbt.com/. - Дата доступа: 03.04.2012.

14. Википедиа [Электронный ресурс]. - 2012. - В режиме доступа: http://ru. wikipedia.org/. - Дата доступа: 10.04.2012.

Приложения

Приложение А

Пример XSLT-темплейтов:

<xsl: template match="wkdoc: level [contains (@css-class,'scms_question-answer')] // para [contains (@css-class,'scms_para')] ">

<xsl: call-template name="put-anchor-marker-for-id"/>

<xsl: choose>

<xsl: when test="$is-doctype-agency">

<xsl: choose>

<xsl: when test="ancestor:: wkdoc: level [@css-class='scms_question'] ">

<p class="scms_bold">

<xsl: apply-templates select="." mode="find-num"/>

<xsl: apply-templates/>

</p>

</xsl: when>

<xsl: when test="ancestor:: wkdoc: level [@css-class='scms_answer'] ">

<p>

<xsl: apply-templates select="." mode="find-num"/>

<xsl: apply-templates/>

</p>

</xsl: when>

</xsl: choose>

</xsl: when>

<xsl: otherwise>

<p>

<xsl: apply-templates select="." mode="find-num"/>

<xsl: apply-templates/>

</p>

</xsl: otherwise>

</xsl: choose>

</xsl: template>

<xsl: template match="span">

<xsl: choose>

<xsl: when test="@css-class">

<span>

<xsl: attribute name="class">

<xsl: value-of select="@css-class"/>

</xsl: attribute>

<xsl: apply-templates/>

</span>

</xsl: when>

<xsl: otherwise>

<xsl: apply-templates/>

</xsl: otherwise>

</xsl: choose>

</xsl: template>

<xsl: template match="span [contains (@css-class,'scms_term')] ">

<xsl: choose>

<xsl: when test="ancestor:: para [preceding-sibling:: h1 [contains (@css-class,'scms_heading')]] ">

<xsl: apply-templates/>

</xsl: when>

<xsl: otherwise>

<span class="scms_term">

<xsl: apply-templates/>

</span>

</xsl: otherwise>

</xsl: choose>

</xsl: template>

<xsl: template match="wkdoc: level [$is-doctype-agr-leg and contains (@css-class,'scms_document_nums')] /para">

<xsl: variable name="sub-class" select=" // sub-class/@sub-class"/>

<xsl: call-template name="put-anchor-marker-for-id"/>

<xsl: choose>

<xsl: when test="$sub-class='protocol'">

<xsl: apply-templates select="* [not (contains (@css-class,'scms_num'))] "/>

</xsl: when>

<xsl: when test="$sub-class='treaty'">

<xsl: apply-templates select="* [not (contains (@css-class,'scms_type_print'))] "/>

</xsl: when>

</xsl: choose>

</xsl: template>

Пример XSL-FO-темплейтов:

<xsl: template name="block-params">

<xsl: if test="fill">

<xsl: attribute name="text-align-last">justify</xsl: attribute>

</xsl: if>

<xsl: if test="@align='center' or @align='right'">

<xsl: attribute name="text-align">

<xsl: value-of select="@align"/>

</xsl: attribute>

</xsl: if>

<xsl: if test="parent:: wkdoc: document and $superClass='law'">

<xsl: attribute name="margin-left">0.22in</xsl: attribute>

</xsl: if>

</xsl: template>

<xsl: template match="para/span [ ($is-doctype-news) and contains (@css-class,'scms_type_report')] " priority="1"/>

<xsl: template match="para [contains (@css-class,'scms_type_attribution')] ">

<fo: block margin-top="3pt" margin-bottom="6pt" text-align="right" font-style="italic">

<xsl: text> - </xsl: text>

<xsl: apply-templates/>

</fo: block>

</xsl: template>

<xsl: template match="para [contains (@css-class,'scms_type_caseref')] ">

<xsl: choose>

<xsl: when test="count (span [contains (@css-class,'scms_text')]) gt 1">

<xsl: for-each select="span [contains (@css-class,'scms_text')] ">

<fo: block text-align="right">

<xsl: apply-templates/>

</fo: block>

</xsl: for-each>

</xsl: when>

<xsl: otherwise>

<fo: block text-align="right">

<xsl: apply-templates/>

</fo: block>

</xsl: otherwise>

</xsl: choose>

</xsl: template>

<xsl: template match="wkdoc: level [contains (@css-class,'scms_prov-body')] ">

<fo: block margin-left="0">

<xsl: apply-templates/>

</fo: block>

</xsl: template>

<xsl: template match="wkdoc: level [contains (@css-class,'scms_attribution')] ">

<fo: block font-family="Verdana" font-size="1.1em">

<xsl: apply-templates/>

</fo: block>

</xsl: template>

Пример CSS-селектров:

scms_history-notes{

position: relative;

display: block;

background: url (. /images/history. gif) no-repeat;

margin: 20px 0;

color: #00AACC;

font-family: "Arial";

height: 16px;

width: 80px;

cursor: pointer;

}

. scms_history-notes-french{

position: relative;

display: block;

background: url (. /images/history_fr. gif) no-repeat;

margin: 20px 0;

color: #00AACC;

font-family: "Arial";

height: 16px;

width: 65px;

cursor: pointer;

}

. scms_history-notes a{

color: #00AACC;

font-size: 9pt;

}

. scms_history-notes-french a{

color: #00AACC;

font-size: 9pt;

}

. scms_history-notes_popup a{

text-decoration: underline;

font-size: 10pt;

}

. scms_history-notes_popup a: visited{

color: #00AACC;

}

. scms_history-notes_popup{

margin-top: 20px;

margin-bottom: - 15px;

display: none;

background: url (. /images/faded_bg_top. gif) no-repeat 0 0;

width: 659px;

z-index: 50;

}

. scms_history-notes_popup_bgheader{

background: url (. /images/rel_mat_header. gif) repeat-x;

padding: 7px 12px;

margin-left: 2px;

}

. scms_history-notes_popup_header{

background: url (. /images/history_letter. gif) no-repeat;

color: white;

font-size: 10pt;

padding: 0 23px;

}

. scms_history-notes_popup_content{

color: black;

padding-left: 35px;

padding-right: 50px;

font-size: 10pt;

overflow-x: hidden;

overflow-y: auto;

max-height: 169px;

}

. scms_history-notes_popup_background{

padding: 20px;

padding-bottom: 24px;

background: url (. /images/faded_bg_bottom. gif) no-repeat 0 bottom;

}

. scms_history-notes_popup. scms_prov-para{

margin-left: 8px;

}

. scms_history-notes_popup. scms_subpara{

margin-left: 12px;

}

. scms_history-notes_popup. scms_subsection{

margin-left: 14px;

}

. scms_history-notes_popup. scms_prov-para,

. scms_history-notes_popup. scms_item,

. scms_history-notes_popup. scms_subpara,

. scms_history-notes_popup. scms_clause,

. scms_history-notes_popup. scms_subclause,

. scms_history-notes_popup. scms_section,

. scms_history-notes_popup. scms_subsection{

position: static;

}

Пример JavaScript-функционала:

var showPopup = function (id) {

var element = document. getElementById (id). previousSibling;

while (element. nodeType! == 1) {

element = element. previousSibling;

}

if (element. style. display === 'block') {

document. body. scrollTop - = (element. offsetHeight + 5);

document. documentElement. scrollTop - = (element. offsetHeight + 5);

element. style. display = 'none';

} else {

element. style. display = 'block';

document. body. scrollTop += (element. offsetHeight + 5);

document. documentElement. scrollTop += (element. offsetHeight + 5);

}

return element;

};

var generateList = function () {

var blocks = document. getElementsByTagName ('div'),

foundLinks = [],

fragment = document. createDocumentFragment (),

tmpLink,

list = document. getElementById ('relatedMatterList'),

linkCounter = 1,currentPopup,

linkTitles = {

'scms_related-matter': 'Related Matter ',

'scms_related-matter-french': 'Rйfйrences '

};

for (var i = 0, l = blocks. length; i < l; i++) {

if (hasClass (blocks [i], 'scms_related-matter') || hasClass (blocks [i], 'scms_related-matter-french')) {

tmpLink = document. createElement ('a');

tmpLink. innerHTML = linkTitles [blocks [i]. className] + linkCounter++;

(function (link) {

tmpLink. onclick = function () {

var element = document. getElementById (link. id). previousSibling;

while (element. nodeType! == 1) {

element = element. previousSibling;

}

if (element. style. display = 'none') {

currentPopup = showPopup (link. id);

};

document. body. scrollTop = document. documentElement. scrollTop = currentPopup. offsetTop;

}

}) (blocks [i]);

fragment. appendChild (tmpLink);

}

}

list. appendChild (fragment);

};

function hasClass (ele,cls) {

return ele. className. match (new RegExp (' (\\s|^) '+cls+' (\\s|$) '));

}

function init () {

var popups = document. getElementsByTagName ('div');

// quit if this function has already been called

if (arguments. callee. done) return;

// flag this function so we don't do the same thing twice

arguments. callee. done = true;

// kill the timer

if (_timer) clearInterval (_timer);

generateList ();

};

Размещено на Allbest.ru


Подобные документы

  • Разработка проекта автоматизации учета основных средств на сельскохозяйственных предприятиях. Состав технических и программных средств, необходимых для реализации проекта автоматизации учета. Предполагаемые результаты внедрения данного проекта.

    курсовая работа [23,4 K], добавлен 14.08.2010

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

    курсовая работа [700,6 K], добавлен 26.01.2010

  • Характеристика объекта автоматизации. Создание многоуровневой архитектуры приложения, отладка метода безошибочной идентификации пользователей системы. Разработка нестандартного метода преобразования объектов базы данных в объекты классов приложения.

    курсовая работа [395,4 K], добавлен 28.04.2015

  • База данных как поименованная совокупность структурированных данных, относящихся к определенной предметной области. Ее типы и структура, особенности архитектуры. Функциональные особенности языка структурированных запросов (SQL). Разработка базы данных.

    курсовая работа [639,8 K], добавлен 14.12.2022

  • Анализ проблемы автоматизации и управления производством. Организационная структура Дирекции по информационным технологиям, разработка логической схемы базы данных. Разработка приложения в среде Oracle Express Edition. Экономическая эффективность проекта.

    дипломная работа [500,3 K], добавлен 25.07.2015

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

    курсовая работа [706,2 K], добавлен 17.06.2012

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

    курсовая работа [61,9 K], добавлен 12.05.2015

  • Рассмотрение вопроса автоматизации работы служб гостиницы. Разработка базы данных для работы с клиентами. Характеристика языка структурированных запросов SQL и его разновидности. Описание таблицы программы, ключей и диаграммы составленной базы данных.

    курсовая работа [1,6 M], добавлен 27.05.2014

  • Изучение особенностей языка структурированных запросов при использовании его в прикладном программировании. Сравнение реализации связи между SQL и языками программирования высокого уровня. Проектирование базы данных и системы управления базами данных.

    курсовая работа [1,5 M], добавлен 25.01.2016

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

    курсовая работа [2,3 M], добавлен 24.07.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.