Страница 9 из 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="http://www.example.com" xmlns:xsd="http://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="http://www.example.com"') FROM temp a; Результатом будет: <foo_type xmlns="http://www.example.com" xmlns:xsd="http://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="http://www.example.com" xmlns:b="http://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-данных и утилиты загрузки данных |