Хранение XML данных в Oracle (Storing XML Data). Часть 2
Страница 9. Специфицирование пространства имен


Специфицирование пространства имен

Если сохраненный XML-документ имеет пространства имен (namespaces), то все XML-запросы к этому документу должны быть определены для пространства имен, так как <Namespace:Element> - это не одно и то же что <Element> в XML. Обе функции XMLType.existNode() и XMLType.extract() разрешают пользователю специфицировать пространство имен во втором параметре, как показано ниже:

MEMBER FUNCTION existsNode(xpath in varchar2, nsmap in varchar2)
RETURN number deterministic
MEMBER FUNCTION extract(xpath IN varchar2, nsmap IN varchar2)
RETURN XMLType deterministic

В этом случае Xpath требует использования полностью квалифицированных (qualified) XML имен, которые содержат имя элемента и его пространство имен. Например, вы можете вставить XML-документ с двумя декларированными пространствами имен в XMLTypes, как показано ниже:

CREATE TABLE temp (doc XMLType);
DECLARE
v_temp XMLType;
BEGIN
v_temp:= XMLType.createXML('<foo xmlns="https://www.example.com"
xmlns:xsd="https://www.w3c.org/2001/XMLSchema">
<foo_type xsd:type="date">03-11-1998</foo_type>
</foo>');
INSERT INTO temp VALUES(v_temp);
END;

Чтобы запросить этот документ, вы можете определить пространство имен и его префикс во втором параметре функции XMLType.extract() и квалифицировать XPath, используя префикс, как показано в следующем SQL-запросе:

SELECT a.doc.extract('/a:foo/a:foo_type',
'xmlns:a="https://www.example.com"')
FROM temp a;

Результатом будет:

<foo_type xmlns="https://www.example.com"
xmlns:xsd="https://www.w3c.org/2001/
XMLSchema" xsd:type="date">03-11-1998</foo_type>
ЗАМЕЧАНИЕ

Если вы не используете квалифицированное имя пространства имен в XPath после предоставленных пространств имен, вы получите [сообщение] ORA-31013: Invalid XPath expression error.

Если у вас есть несколько пространств имен, то можно составить из них список, используя второй параметр функций XMLType.existNode() и XMLType.extract() и разделить их пробелами, как показано в следующем примере:

SELECT a.doc.extract('/a:foo/a:lastupdate/@b:type',
'xmlns:a="https://www.example.com"
xmlns:b="https://www.w3c.org/2001/XMLSchema"') AS result
FROM temp a;
RESULT
--------------------------------------------------
date

ВЫВОДЫ

В этой главе рассматривались разнообразные опции XML-памяти и соответствующие им стратегии загрузки в Oracle Database 10g. Таблица 9-1 показывает взаимодействие между XML-памятью хранения и функциональностью предложенных XML-утилит для загрузки данных. Вы можете выбрать одну из этих утилит или использовать SQL- или PL/SQL- интерфейсы для загрузки XML-документов в базу данных Oracle.

Утилиты Функцио- нальность Реляцинное хранилище с XMLType представлениями Таблицы XMLType XMLType столбцы
SQL*Loader Утилита командной строки Ограниченная поддержка Да Да
XML SQL Utility Утилита командной строки и программный Java- и PL/SQL-интерфейс Да Да Да
TransX Utility Утилита командной строки и программный Java- интерфейс Да Да Да
XSQL Servlet Утилита командной строки и программный Java- и HTTP- интерфейсы, подготовленные во встроенных обработчиках Да Да Да
HTTP/WebDAV HTTP/WebDAV директории Нет Да, но таблица требует создания таблицы по умолчанию, до того как XML-схема будет зарегистрирована Нет
FTP Interfaces FTP -интерфейсы Нет Да, но таблица требует создания таблицы по умолчанию, до того как схема будет зарегистрирована Нет

Таблица 9-1. Хранение XML-данных и утилиты загрузки данных

 
« Предыдущая статья   Следующая статья »