Министерство общего и профессионального образования РФ
Удмуртский государственный университет
Физический факультет
Кафедра: Высшей математики
Реферат
“Поддержка 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 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, которая возвращает результаты запроса утилите.