Смекни!
smekni.com

“ Поддержка xml. Краткий обзор Oracle xdk” (стр. 2 из 2)

5. Утилита XML SQL возвращает результаты запроса XSLT процессору в виде XML текста. Результат встроен в XML файл в том же самом месте, где располагался контейнер <query>.

6. Если необходимо, результаты запроса и любые другие данные XML преобразуются XSLT Процессором, используя установленную XSL таблицу стилей. Данные могут быть преобразованы в HTML или любой другой формат, определенный таблицей стилей. XSLT Процессор может выборочно применять различные таблицы стилей, основанные на типе клиента, который сделал первоначальный запрос. Эта информация может быть получена на основе переменной HTTP_USER_AGENT, передаваемой посредством протокола HTTP.

7. XSLT Процессор передает законченный документ назад на клиентский браузер для представления пользователю.

Пример: XSQL Servlet

Следующий пример - простой XSQL файл, который делает запрос к таблице EMP. Заданное по умолчанию поведение запроса должно возвратить все строки служащих в таблице. Если необходимо, пользователь может конкретизировать исследование, прибавляя параметр find= к URL при запросе XSQL сервлета из браузера. Например, если определить символ 'T', в качестве параметра поиска, запрос возвратит только те строки, чей ENAME содержит символ T. Также, Вы можете сортировать возвращаемые строки, определяя в URL параметр sort= . Например, определяя EMPNO, результат будет отсортирован по номерам служащих.

<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="rowcol.xsl"?> <query connection="demo" find="%" sort="ENAME" null-indicator="yes" > SELECT * FROM EMP WHERE ENAME LIKE '%{@find}%' ORDER BY {@sort} </query>

XSQL файл также определяет, как возвращаемый результат должен быть обработан, используя XSL таблицу стилей rowcol.xsl. Вот как выглядит примерная таблица стилей.

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body class="page"> <xsl:apply-templates/> </body> </html> </xsl:template> <xsl:template match="ROWSET"> <center> <table border="0" cellpadding="4"> <xsl:choose> <xsl:when test="ROW"> <!-- present headings: row[1] columns +--> <xsl:for-each select="ROW[1]"> <tr> <xsl:for-each select="*"> <th align="left"> <xsl:attribute name="class"> </xsl:attribute> <xsl:value-of select="name(.)"/> </th> </xsl:for-each> </tr> </xsl:for-each> <xsl:apply-templates/> </xsl:when> <xsl:otherwise> <tr><td>No Matches</td></tr> </xsl:otherwise> </xsl:choose> </table> </center> </xsl:template> <!-- present rows and columns +--> <xsl:template match="ROW"> <tr> <xsl:attribute name="class"> </xsl:attribute> <xsl:for-each select="*"> <td> <xsl:attribute name="class"> </xsl:attribute> <xsl:apply-templates select='.'/> </td> </xsl:for-each> </tr> </xsl:template></xsl:stylesheet>

Рисунок ниже показывает HTML страницу, которая была сгенерирована XSQL Servlet с использованием XSQL файла emp.xsql и таблицы стилей rowcol.xsl. Этот servlet был вызван, используя URL: http://localhost/xsql/demo/emp.xsql?find=T&sort=EMPNO

EMPNO

ENAME

JOB

MGR

HIREDATE

SAL

COMM

DEPTNO

7654 MARTIN SALESMAN 7698 1981-09-28 00:00:00.0 1250 1400 30
7788 SCOTT ANALYST 7566 1987-04-19 00:00:00.0 3000 20
73369 SMITH CLERK 7902 1980-12-17 00:00:00.0 800 20
7844 TURNER SALESMAN 7698 1981-09-08 00:00:00.0 1500 0 30

Источники:

http://otn.orcacle.com/tech/xml/htdocs/about_oracle_xml_products.html

http://otn.orcacle.com/tech/xml/relational/paper.html

http://otn.orcacle.com/tech/xml/xdk_sample/xdksample_093001.html


Замечания:

Недостаточно освещен XML Parsers, примеры на PL/SQL.

Описаны не все компоненты, перечисленные в 1-м абзаце.