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-м абзаце.