Главная              Рефераты - Разное

“ Поддержка xml. Краткий обзор Oracle xdk” - реферат

Министерство общего и профессионального образования РФ

Удмуртский государственный университет

Физический факультет

Кафедра: Высшей математики

Реферат

“Поддержка XML. Краткий обзор Oracle XDK”

Выполнил

студент гр. 38-41 Кривоносов Д.В.

Проверил

Вотинцев А.А.

Ижевск 2003г.

Краткий обзор Oracle XDK

Oracle XML Developer's Kit <http://otn.oracle.com/tech/xml/> (XDK) доступен для: Java, JavaBeans, C, C++, и PL/SQL, и включает в себя XML Parsers, XSL Processors, XML Class Generator, XML Transviewer Beans, and XML Schema Processor.

XML Parsers (Синтаксические анализаторы)

Компанией Oracle реализованы XML Parserы для Java, C, C++, и PL/SQL. Каждый из них - автономный XML компонент, который анализирует XML документ (или автономный DTD) для последующей обработки программным приложением. Данные синтаксические анализаторы поддерживают DOM (Document Object Model) и SAX (Simple API for XML) интерфейсы, XML Namespaces, режимы проверки структуры XML файла и XSL преобразования. Они реализованы на всех платформах Oracle.

Поддержка XSL преобразования

Начиная с версии 2, XML анализаторы включают интегрированный XSLT процессор для преобразования данных XML, используя XSL таблицы стилей. Используя XSLT процессор, Вы можете преобразовать документы XML в XML, HTML, или фактически любой другой основанный на тексте формат.

Поддержка пространств имен ( Namespaces)

Java, C, и C++ анализаторы также поддерживают так называемые XML Namespaces. Namespaces - механизм, предназначенный для того, чтобы избежать коллизий имен элементов (тэгов) или атрибутов в документах XML. Этот механизм предоставляет "универсальные" пространства имен для элеменов и названий атрибутов, чья область видимости не ограничена документом, в котором они содержатся. Такие тэги определены унифицированными идентификаторами ресурса (URIs), такими как <oracle:EMP xmlns:oracle="http://www.oracle.com/xml"/ >. Например, пространство имен может использоваться, чтобы опознавать Oracle <EMP> элемент данных в отличие от определения элемента данных другой компании. Таким образом, приложение может опознавать элементы и атрибуты, которые непосредственно предназначены для нее. Java, C, и C++ анализаторы поддерживают пространства имен, распознавая универсальные элементы наравне с локальными.

Поддержка режима проверки структуры документа

Java, C, и C++ синтаксические анализаторы могут анализировать XML в режиме проверки структуры. При отключении режима проверки, синтаксический анализатор проверяет оформление XML документа и консолидирует данные в виде дерева объектов, которые в последствии могут управляться DOM API. В режиме проверки синтаксический анализатор кроме проверки оформления XML осуществляет проверку корректности данных XML относительно DTD. Проверка корректности подразумевает под собой проверку используемых названий атрибутов и тэгов, проверку корректности осуществления вложенности тэгов и т.д.

DOM API и SAX API

API для работы с XML относятся к двум категориям: основанные на событиях и основанные на деревьях. Основанный на событиях API (типа SAX) использует вызовы процедур, чтобы сообщить приложению о событиях, происходящий в процессе синтаксического анализа. Приложение получает информацию об этих событиях посредством настроенных обработчиков событий. Событиями оформляется начало и конец элементов и текстовых блоков. В отличие от API, основанных на деревьях, событийные API обычно не выстраивают в памяти представления документов XML в виде дерева. Поэтому, SAX полезен для приложений, которые не содержат операций манипулирования деревом XML, таких, как операция поиска необходимого элемента. API, основанные на деревьях (типа DOM) формируют в оперативной памяти представление документа XML в виде дерева. Кроме этого данные интерфейсы предоставляют приложению классы и методы для управления и обработки дерева. Вообще, интерфейс DOM наиболее полезен для структурных манипуляций с деревом XML, таких, как сортировка элементов, добавление или удаление элементов и атрибутов, переименование элементов, и т.д. Oracle9i XDK поддерживает и DOM 2.0, и SAX 2.0 спецификации.

Следующей рисунок показывает исходный документ XML и соответствующие ему SAX и DOM представления.

XML Document

SAX Events

DOM Tree

<?xml version="1.0"?> <EMPLIST> <EMP> <ENAME>MARTIN</ENAME> </EMP> <EMP> <ENAME>SCOTT</ENAME> </EMP> </EMPLIST>
start document start element: EMPLIST start element: EMPstart element: ENAMEcharacters: MARTINend element: EMP start element: EMPstart element: ENAMEcharacters: SCOTTend element: EMP end element: EMPLISTend document

Утилита XML SQL для Java

Утилита SQL XML для Java состоит из набора Java классов, которые:

· Подают запрос к базе данных и результаты представляют в виде документа XML (текст или DOM).

· Записывают данные XML в таблицу базы данных.

Представление результатов запроса в виде XML

Как показано на следующем рисунке, Утилита XML SQL может обрабатывать SQL запросы и возвращать результаты как документ XML.

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

Утилита может генерировать или строковое представление документа XML, или представление в виде дерева DOM элементов. Если необходимо по запросу сразу возвратить документ XML, лучше использовать строковое представление. Использование DOM представления необходимо, если Вы собираетесь обрабатывать этот XML программно, например, преобразовывать его, используя XSLT процессор, или использовать методы DOM, для поиска или редактирования XML.

Пример: Представление результатов запроса в виде XML

Запрос:

SELECT EMPNO, ENAME FROM EMP WHERE EMPNO = 7654;

генерирует следующий XML документ

<?xml version="1.0"?> <ROWSET> <ROW id="1"> <EMPNO>7654</EMPNO> <ENAME>MARTIN</ENAME> </ ROW > </ ROWSET >

Необходимо обратить внимание на формат документа XML. По умолчанию, ROWSET - название элемента, представляющего весь документ XML. ROW - элемент для каждой строки результата запроса. Данные EMPNO и ENAME представлены как элементы, вложенные внутрь ROW. В общем случае, данные представляются как элементы, и атрибуты используются, чтобы, если это необходимо, наложить ограничения на данные. Если в приложении требуется другой набор тэгов, может выполнить необходимое преобразование динамически, при помощи таблицы стилей XSL.

Запись XML в таблицу

На следующем рисунке показано взаимодействие с утилитой XML SQL, для записи XML данных в объектно-реляционную таблицу базы данных Oracle.

Запись документа XML в таблицу Oracle сохраняет структуру документа. Названия тэгов переходят в названия столбцов в таблице. Текстовые элементы отображаются в скалярные столбцы, а элементы, содержащие подэлементы отображаются в объектные типы. Наборы элементов переходят в коллекции.

Пример: Запись XML в Таблице

Следующий Java код вставляет данные из файла emp.xml в EMP таблицу. Этот пример предполагает, что документ XML уже соответствует структуре EMP таблицы.

import oracle.xml.sql.dml.*; import java.sql.*; import oracle.jdbc.driver.*; import oracle.jdbc.*; import java.net.*; public class xmlwritedb { public static void main(String args[]) throws SQLException { String tabName = "EMP"; // Table into which to insert XML data String fileName = "emp.xml"; // XML document filename DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); // Initialize a JDBC connection Connection conn = DriverManager.getConnection("jdbc:oracle:oci8:scott/tiger@"); // Insert XML data from file (filename) into // database table (tabName) OracleXMLSave save = new OracleXMLSave(conn, tabName); URL url = save.createURL(fileName); int rowCount = save.insertXML(url); System.out.println(" successfully inserted "+rowCount+ " rows into "+ tabName); conn . close (); } }

Заметим, что, если необходимо записать документ XML в таблицу базы данных, но данные XML не согласовываются со структурой таблицы, XML данные должны быть преобразованы перед записью в базу. Для подробного описания методов такого преобразования, см. Exchanging Data Among Applications <http://otn.oracle.com/tech/xml/htdocs/xml_data_exchange.htm> .

XSQL Сервлет (XSQL Servlet)

XSQL Servlet - инструмент, который обрабатывает SQL запросы и выдает результат как XML. Данный процесс реализован как Java сервлет и на вход принимает файл XML, содержащий необходимые запросы SQL. Он использует XML Parser для Java и утилиту XML SQL.

Данный сервлет может выполняться на любом вебсервере, поддерживающим Java сервлеты. Следующий рисунок показывает, как происходит обмен данными между пользователем и сервлетом. Последовательность операций следующая:

1. Пользователь в браузере вводит URL, который интерпретируется и передается XSQL сервлету посредством Java вебсервера. URL содержит название необходимого XSQL файла (.xsql) и, если необходимо, переменные, такие как значения параметров или названия таблицы стилей XSL . В качестве альтернативного варианта может использоваться вызов XSQL сервлета из командной строки, в обход браузера и сервера Java.

2. Сервлет передает XSQL файл Java XML анализатору (parser), который производит синтаксический разбор XML и создает API для доступа к содержанию XML.

3. Страничный процессор сервлета использует API, для передачи XML параметров и операторов SQL (расположенных внутри <query></query> контейнера) утилите XML SQL . Страничный процессор также передает любые XSL инструкции на XSLT процессор.

4. Утилита XML SQL отправляет запрос соответствующей базе данных Oracle, которая возвращает результаты запроса утилите.

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