Oracle XML DB - работаем с неструктурированными данными

Обзор возможностей базы данных Oracle XML DBВ любой типичной организации информация хранится в нескольких форматах, часть которой, возможно, помещается в реляционные базы данных, но большая часть все-таки хранится за пределами этих баз данных. Не помещаемая в базы данных информация может храниться в формате конкретных приложений, например, электронных таблиц Excel. Сохранение ее вместо этого в формате XML позволяет упрощать процесс получения доступа и обновления неструктурированных данных организации.

Oracle XML DB (XML-база данных Oracle) не является базой данных специально предназначенного для XML-данных типа. Она просто дополнительно содержит набор встроенных технологий для хранения, извлечения и манипулирования XML-данными. Она обладает преимуществами одновременно и технологии реляционных баз данных, и технологии XML. Например, одна из главных проблем при работе с XML-данными в реляционной базе данных состоит в том, что большинство XML-данных имеют иерархическую структуру по своей природе, в то время как база данных Oracle основана на реляционной модели. Через Oracle XML DB предоставляется возможность эффективной обработки иерархических XML-данных за счет применения специальных SQL-операторов и методов, которые позволяют запрашивать и обновлять XML-данные в базе Oracle. Посредством Oracle XML DB в ядро Oracle встраивается объектная модель документов XML ( Document Object Model — DOM). Благодаря этому, большинство операций с данными XML воспринимается как часть обычного процесса обработки данных.

Oracle XML DB предоставляет возможность просматривать как структурированную, так и неструктурированную информацию в формате реляционных данных. То есть данные можно просматривать как в виде строк в таблице, так и в виде узлов в XML-документе.

Ниже приведен краткий перечень предлагаемых XML-базой данных Oracle преимуществ:

  • К XML-данным можно получать доступ с помощью обычных SQL-запросов.
  • Для обработки XML-данных можно использовать поддерживаемые Oracle технологии оперативной обработки транзакций (OLTP), создания хранилищ данных, тестирования, пространственных данных и мультимедиа.
  • Можно генерировать XML из SQL-запросов Oracle.
  • Можно легко преобразовывать XML в формат HTML.

 

Сохранение XML-данных в Oracle XML DB

Для сохранения и управления XML-данными в реляционной таблице применяется специальный тип данных XMLType. Этот тип, а также тип XDBURIType, который представляет собой еще один встроенный тип, предназначенный для работы с данными XML, позволяет возлагать ответственность за выполнение синтаксического анализа, хранение и извлечение XML-данных на базу данных Oracle. Использовать тип XMLType можно точно так же, как и обычные типы данных в базе данных Oracle. Благодаря ему, правильно оформленный XML-документ теперь можно сохранять в базе данных в виде XML-теста с использованием базового типа данных CLOB.

Ниже приведен пример применения типа данных XMLType

SQL> CREATE TABLE sales_catalog_table
2 (sales_num number(18),
3 sales_order xmltype);

Table created.

SQL> DESC sales_catalog_table

Name               Null?  Type
-----------------  -----  --------
SALES_NUM                 NUMBER(18)
SALES_ORDER               XMLTYPE
SQL>

Тип данных XMLType поставляется с набором специальных XML-методов, которые можно использовать для работы с объектами XMLType. Эти методы можно применять для выполнения как типичных операций в базе данных, наподобие проверки на предмет существования узла или извлечения узла, так и нескольких специальных операций, позволяющих получать доступ к XML-данными и манипулировать ими в виде части обычного SQL-оператора. Эти специальные операции являются отражением развивающегося стандарта SQL/XML. За счет использования уже хорошо известной нотации XPath, они осуществляют обход по структурам XML и отыскивают тот узел или узлы, к которым им следует применить указанные SQL-операторы. Ниже перечислены некоторые наиболее важные операции SQL/XML.

  • Extract(). Извлекает подмножество узлов, содержащихся в XMLType.
  • ExistsNode(). Проверяет, существует ли конкретный узел в XMLType.
  • Validating(). Проверяет правильность содержимого XMLType по схеме XML.
  • Transform(). Выполняет XSL-преобразование.
  • ExtractValue(). Возвращает узел, соответствующий выражению XPath.

XML-данные имеют абстрактную форму по сравнению с записями в обычных реляционных таблицах. Для оптимизации и выполнения операторов, подразумевающих обработку XML-данных, в Oracle применяется механизм перезаписи запросов, преобразующий выражение XPath в обычный эквивалентный оператор SQL. После этого оптимизатор обрабатывает этот преобразованный SQL-оператор подобно любому другому оператору SQL.

Сохранять XML-данные в XML-базе данных Oracle можно двумя способами.

  • С использованием SQL или PL/SQL для вставки данных. Такой подход подразумевает сначала преобразование исходных данных в экземпляр XMLType с помощью конструкторов XMLType.
  • С использованием репозитория Oracle XML DB для сохранения XML-данных.

Ниже приведен простой пример, в котором для демонстрации выполнения основанной на SQL операции DML в отношении поддерживающей XML таблицы используется таблица sales_catalog_table. В листинге 2 в эту таблицу вставляется XML-документ.


 

SQL> INSERT INTO sales_catalog_table
2 VALUES (123456,
3 XMLTYPE(
4 '
5 Alapati - 200302201428CDT
6 
7 
8 Nina U. Alapati
9 ALAPATI
10 Dallas
11 
12 Bicycle Courier
13 
14 
15 Expert Oracle DB Administration
16 
17 
18 
19* '));

1 row created.

SQL>

 


Теперь для просмотра XML-документа в его исходном формате достаточно просто запросить столбец sales_order таблицы sales_catalog_table, как показано в листинге 3.


Работа с неструктурированными данными в  Oracle XML DB 

SQL> SELECT sales_order FROM
2 sales_catalog_table;

Alapati - 200302201428CDT


Sam R. Alapati
ALAPATI
Dallas

Bicycle Courier


Expert Oracle DB Administration



SQL>

После создания из таблицы sales_catalog_table можно очень легко извлекать данные с помощью любого из описанных выше методов. Ниже показан пример применения метода extract(). В этом примере выражения XPath и операции SQL/XML extractValue и existsNode применяются для поиска названия того отправления, у которого в узле SalesOrder/SalesLocation/text() содержится значение Dallas.

SQL> SELECT extractValue(s.sales_order,'/SalesOrder/Requestor')
2 FROM sales_catalog_table s
3 WHERE existsNode(s.SALES_ORDER,
4* '/SalesOrder[SalesLocation="Dallas"]') = 1;

EXTRACTVALUE(S.SALES_ORDER,'/SALESORDER/REQUESTOR')
---------------------------------------------------
Nina U. Alapati

SQL>

 

Репозиторий Oracle XML DB

Обрабатывать XML-документы в Oracle XML DB лучше всего, сначала загрузив их в специальное хранилище, называемое репозиторием Oracle XML DB. Этот репозиторий имеет иерархическую структуру, как и большинство XML-данных, и позволяет легко запрашивать XML-данные. Для представления отношений между XML-данными в нем используются пути и URL-адреса, а для прохода по содержащимся внутри него папкам и путей — специальный иерархический индекс. В нем могут храниться и данные, отличные от XML, наподобие изображений JPEG, документов Word и многое другое.

Для получения доступа к этому репозиторию можно применять SQL и PL/SQL. Инструменты авторизации XML позволяют получать доступ к находящимся внутри него документам напрямую за счет использования популярных Интернет-протоколов вроде HTTP, FTP и WebDAV. Например, для работы с хранящимися в этом репозитории XML-документами можно легко применять такие приложения, как Windows Explorer, Microsoft Office и Adobe Acrobat. XML-данные являются документными по своей природе, а репозиторий XML обеспечивает приложения возможностью абстрагировать файлы при работе с ними.

 

Настройка схемы XML

Прежде чем приступить к использованию Oracle XML DB для работы с XML-документами, понадобится выполнить следующие задачи.

  1. Создайте схему XML. Например, в листинге 2 SalesOrder представляет собой простую XML-схему, отображающую простой XML-документ. Внутри нее находятся элементы, такие как ItemDescription, которые предоставляют детали по различным атрибутам элементов компонента.
  2. Зарегистрируйте схему XML. После создания схемы XML ее нужно обязательно зарегистрировать в базе данных Oracle с помощью соответствующей процедуры PL/SQL. При регистрации XML-схемы Oracle будет автоматически создавать все SQL-объекты и таблицы XMLType, необходимые для хранения и управления соответствующими XML-документами. В случае примера из листинга 1 регистрация схемы XML приведет к автоматическому созданию таблицы по имени SalesOrder со строками для каждого загруженного в репозиторий XML документа SalesOrder. Эта схема будет зарегистрирована под URL-адресом localhost:8080/home/SCOTT/xdb/salesorder.xsd и будет содержать определение элемента SalesOrder.

 

Создание реляционного представления из XML-документа

Даже если разработчик плохо разбирается в XML, он все равно может использовать XML-документы, хранящиеся в базе данных Oracle, за счет создания на их основе реляционных представлений. Ниже приведен пример отображения узлов в XML-документе на столбцы в реляционном представлении по имени salesorder_view:

SQL> CREATE OR REPLACE VIEW salesorder_view
2 (requestor,description,sales_location)
3 AS SELECT
4 extractValue(s.sales_order,'/SalesOrder/Requestor'),
5 extractValue(s.sales_order,'/SalesOrder/Sales_Location')
6* FROM sales_Catalog_Table s ;

View created.

SQL>

Далее к этому представлению salesorder_view можно выполнять запросы точно так же, как и к любому другому представлению в базе данных Oracle, как показано ниже: 

SQL> SELECT requestor,sales_location FROM salesorder_view;

REQUESTOR
SALES_LOCATION
Aparna Alapati
Dallas

SQL>

Вас заинтересует / Intresting for you:

Oracle и непроцедурный доступ ...
Oracle и непроцедурный доступ ... 8522 просмотров Antoni Tue, 21 Nov 2017, 13:32:50
Язык SQL в Oracle
Язык SQL в Oracle 4293 просмотров Ирина Светлова Tue, 21 Nov 2017, 13:26:01
Использование памяти PGA и UGA...
Использование памяти PGA и UGA... 6382 просмотров Денис Tue, 21 Nov 2017, 13:31:33
Использование функций SQL в за...
Использование функций SQL в за... 12995 просмотров Боба Wed, 18 Apr 2018, 04:56:26
Войдите чтобы комментировать

MaxNiko аватар
MaxNiko ответил в теме #9870 3 года 2 мес. назад

apv пишет: Я так понимаю, проект умер на текущий момент?

Живее всех живых!))
apv аватар
apv ответил в теме #9867 3 года 2 мес. назад
Я так понимаю, проект умер на текущий момент?