Создание серверных XSQL-страниц
Создание серверных XSQL-страниц
23 февраля 2001 г.
Generating XSQL Server Pages
Источник: журнал Oracle Magazine, no.1, 2001 (http://www.oracle.com/oramag/oracle/01-jan/index.html?o11xml.html)
Generating XSQL Server Pages
By the Oracle XML Product Development Team
Используя утилиты из Oracle XML Developer's Kit, вы можете создавать динамические XML-страницы на основе SQL-запросов.
[От редактора ROIM: по техническим ограничениям нашего издания угловые скобки (<) и (>), которыми выделяются теги, в тексте данной статьи заменены на двойные кавычки ("). Надеюсь, что для опытных читателей эти вынужденные замены не состявят большого неудобства. А.Бачин ]
Oracle8i содержит компоненты и утилиты, включая XSQL Servlet, которые позволяют использовать технологию XML в создаваемых вами приложениях для работы с базами данных. Следующий фрагмент из книги Oracle XML Handbook (Oracle Press 2000) расскажет, как это можно сделать.
Архитектура XSQL-страниц
XSQL Servlet - это средство, обрабатывающее SQL-запросы и поставляющее результирующие наборы данных в виде XML-документов. Этот процессор работает как Java Servlet, и в результате его работы получается XML-файл, содержащий в себе SQL-запрос. Он использует Oracle's XML Developer's Kit для осуществления большинства этих операций.
Использовать XSQL Servelt можно с любым Web-сервером, который поддерживает Java-сервлеты. Данные направляются от клиента к сервлету и возвращаются клиенту. Последовательность событий такова:
Пользователь в браузере задает адрес (URL), который обрабатывается и передается Java Web-сервером для XSQL Servelt. Адрес (URL) содержит имя конечного XSQL-файла (.xsql) и, возможно, набор параметров, таких как: значения и имя стиля. Кроме того, пользователь может вызвать XSQL Servelt из командной строки, минуя браузер и Java Web-сервер.
Сервлет передает XSQL-файл XML Java -разборщику, который разбирает XML и создает API для доступа к содержанию документа.
Процессор страниц (это компонент сервлета) использует API для передачи XML-параметров и SQL-выражений (находящихся между тегами "xsql:query" и "/xsql:query"). Кроме того, процессор страниц передает любые XSL-операторы XSLT-процессору.
Процессор страниц создает DOM (Document Object Model - объектная модель документа), посылая SQL-запрос под управлением Oracle8i, который возвращает результат запроса. Результат размещается в XML-файле на месте, которое отмечено тегом "xsql:query".
Если это необходимо, результат запроса и любые другие XML-данные трансформируются XSLT-процессором с использованием заданных стилей. Данные могут быть преобразованы в HTML или любые другие форматы, определенные стилем. XSLT-процессор может выборочно применять различные стили, имея в виду тип клиента, который сделал исходный URL-запрос. Информация о клиенте получается от него посредством HTTP-запроса.
XSLT-процессор передает готовый документ обратно на браузер клиента, который в свою очередь отображает его пользователю.
Установка XSQL Servelt
Вы можете установить и настроить XSQL Servelt на различных Web-серверах, таких как Oracle8i Lite Web-to-Go Server, Apache 1.3.9 (с JServ 1.0), и Sun JavaServer Web Development Kit (JSWDK) 1.0.1 Web Server.
В этой части мы рассмотрим установку XSQL Servelt на Apache 1.3.9 Web-сервер. Основные этапы установки следующие:
Этап 1:
Правка CLASSPATH. Убедитесь что все, необходимые для запуска XSQL Servelt, JAR- файлы прописаны в CLASSPATH для исполнительного механизма (runtime engine) Apache JServ. Вы должны добавить следующие строки в файл jserv.properties:
# Oracle XSQL Servlet
wrapper.classpath=C:xsqlliboraclexsql.jar
# Oracle JDBC (8.1.5)
wrapper.classpath=C:xsqllibclasses111.zip
# Oracle XML Parser V2 (with XSLT Engine)
wrapper.classpath=C:xsqllibxmlparserv2.jar
# XSQLConfig.xml File location
wrapper.classpath=C:xsqllib
Этап 2:
Регистрация .xsql Зарегистрируйте расширение .xsql для доступа к Java servlet class, который называется oracle.xml.xsql.XSQLServlet. Вы должны добавить следующие строки в файл конфигурации mod_jserv.conf
# Executes a servlet passing filename with proper extension
# property of servlet request.
# Syntax: ApJServAction [extension] [servlet-uri]
# Defaults: NONE
# Notes: This is used for external tools.
#ApJServAction .jsp /servlets/nl.nmg.jsp.JSPServlet
ApJServAction .xsql /servlets/oracle.xml.xsql.XSQLServlet
После регистрации расширения .xsql, перезапустите Web-сервер и откройте XSQL-файл, чтобы увидеть XML-выходной файл, а также трансформированный HTML-выходной файл.
Преобразование SQL-запросов в динамические XML-документы
Oracle XSQL-страницы (pages) - это XML-страницы (datapages) с размещенными в них SQL-запросами для получения или вставки данных. Вы можете сделать XSQL-страницу, если исправите свой XML-файл, вставив тег "xsql:query" в месте, где должен исполняться SQL. Тег "xsql:query" будет заменен выходными данными XML в запросе.
XSQL Servelt использует файл конфигурации XSQLConfig.xml для доступа и подключения к базе данных. Простейший файл конфигурации выглядит следующим образом:
"?xml version="1.0" ?"
"XSQLConfig"
"connectiondefs dumpallowed="no""
"connection name="demo""
"username"scott"/username"
"password"tiger"/password"
"dburl"jdbc:oracle:thin:@localhost:1521: ORCL"/dburl"
"driver"oracle.jdbc.driver.OracleDriver "/driver"
"/connection"
"/connectiondefs"
:
"/XSQLConfig"
Вы можете определить дополнительные элементы подключения для идентификации различных пользователей или для использования разных драйверов JDBC. XSQL Servelt ищет атрибут "connection" в вашем корневом XML-документе, это значение должно содержать название подключения, описанного в файле конфигурации.
Использавание тега "xsql:query" можно показать так:
"?xml version="1.0"?"
"xsql:query xmlns:xsql="urn:oracle-xsql" connection="demo""
SELECT 'Hello World' AS "GREETING" FROM
DUAL
"/xsql:query"
Этот XSQL-код создаст следующий XML-документ:
"?xml version = '1.0'?"
"ROWSET"
"ROW id="1""
"GREETING"Hello World"/GREETING"
"/ROW"
"/ROWSET"
Вы можете преобразовать XML-документ в другие формы XML-документов или в HTML. Можно также подключить внешние стили в XSQL-коде, используя следующую инструкцию:
"?xml-stylesheet type="text/html" href="transform.xsl"?"
Вы можете использовать объектно-ориентированные запросы в своих XSQL-страницах. Вы также можете использовать URL для передачи параметров для этих страниц. Например, вы можете использовать объекно-ориентированные возможности Oracle8i для создания пользовательского объектного типа POINT. Можно объявить этот новый тип POINT, как тип данных столбца ORIGIN в таблице LOCATIONS, используя следующие DDL-выражения.
CREATE TYPE POINT AS OBJECT (X NUMBER, Y NUMBER);
CREATE TABLE LOCATION (
NAME VARCHAR2(80),
ORIGIN POINT
);
Можно вставить строку в таблицу LOCATION, используя выражение INSERT с конструктором POINT():
SQL" INSERT INTO LOCATION VALUES ('Someplace', POINT(11,17) );
SQL" COMMIT;
Теперь вы можете использовать XSQL-страницу, как следующий point.xsql для запроса по таблице LOCATION, используя параметр x-coord.
"xsql:query connection="demo"
xmlns:xsql="urn:oracle-xsql""
SELECT name, origin
FROM location loc
WHERE loc.origin.x = {@x-coord}
"/xsql:query"
Используя следующий URL, можно получить все значения, для которых значение параметра x-coord равно 11.
http://yourmachine.com/xsql/demo/point.xsql?
x-coord=11
"ROWSET"
"ROW num="1""
"NAME"Someplace"/NAME"
"ORIGIN"
"X"11"/X"
"Y"17"/Y"
"/ORIGIN"
"/ROW"
"/ROWSET"
В предыдущем примере хорошо видно, как параметры X и Y столбца ORIGIN, имеющего тип данных POINT, автоматически превращаются в элементы "X" и "Y" XML-файла.
Поддержка тегов XSLT в XSQL
XSQL-страницы Oracle привлекают тем, что позволяют собирать динамические XML-таблицы, основанные на одном или более параметрических SQL- запросах. Процессор, используя XSLT– трансформер для страниц, выводит результат в любом желаемом формате XML, HTML или текстовом. Тем не менее, можно использовать XSLT для формирования XML-страниц. Например, можно использовать XSLT для исполнения SQL запросов c условиями заданными тегами "xsl:choose" или "xsl:if". Следующий пример показывает как использовать тег "xsl:if" для нахождения полной или детальной информации в списке книг:
"?xml version="1.0"?"
"xsql:query connection="demo" xmlns:xsql="urn:oracle-xsql"
xmlns:xsl="http://www.w3.org/1999/XSL /Transform""
"xsl:if test="$detail = 'yes'""
SELECT * FROM scott.BookList
"/xsl:if"
"xsl:if test="$detail = 'no'""
SELECT Title, Authorname FROM scott.BookList"/xsql:query"
"/xsl:if"
"/xsql:query"
Примечания редактора
XSQL Servlet, основаный для других Java XML-компонентов в базе данных Oracle8i (XML-разборщик,XSL-механизм трансформации, генератор XML-классов и XML TransViewer Beans), предназначается для выполнения их функций
Авторы: Ben Chang, Mark Scardina, K. Karun, Stefan Kiritzov, Ian Macky, Anguel Novoselsky и Niranjan Ramakrishnan - члены команды разработчиков Oracle XML Product Development Team.
|