Создание серверных XSQL-страниц
Страница 3. Преобразование SQL-запросов в динамические XML-документы


Преобразование 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. https://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="https://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"

 
« Предыдущая статья   Следующая статья »