CITKIT.ru
3 терабайта свободного софта!
Logo    
IT-рынок Новости мира IT Океан(!) софта на CITKIT.ru Форумы Поступления в библиотеку Учебный центр Курилка
CitForum    CITForum на CD Море(!) аналитической информации! :: CITFORUM.RU
IT-консалтинг Software Engineering Программирование Open Source СУБД Безопасность Internet Сети Операционные системы Hardware

23.05.2005

Google
WWW CITForum.ru

Новости мира IT:

  • 11.05 - Intel создает свою группу по Open Source
  • 11.05 - Банк контролирует использование USB устройств при помощи DeviceLock
  • 11.05 - Microsoft устранила опасную дыру в Windows
  • 11.05 - "Корпорация ОСС" создает антимонопольный альянс операторов IP-телефонии
  • 11.05 - В Mac OS X найдены множественные уязвимости
  • 11.05 - "Билайн" запускает услугу "Мобильная почта"
  • 11.05 - Две критические уязвимости в браузере Firefox 1.0.3
  • 11.05 - IBM покупает начинающую Open Source-компанию Gluecode
  • 11.05 - Microsoft готова к битве с Open Source за школы
  • 11.05 - Sun завершит "открытие" Solaris в ближайшие 45 дней
  • 11.05 - Создатели браузера Firefox выпускают юбилейные монеты в честь 50 миллионов скачанных копий
  • 11.05 - Вышла пятая версия мобильной ОС от Microsoft
  • 11.05 - Поисковые движки умнеют быстрее, чем люди
  • 11.05 - Фишеры постоянно совершенствуются
  • 11.05 - Специалисты прогнозируют появление аналога Google Adsense от "Яндекс"
  • 06.05 - ICANN озаботилась проблемой торговых марок
  • 06.05 - Google патентует сортировку новостей
  • 06.05 - Intel готовит двуядерные процессоры второго поколения
  • 06.05 - Schoolforge-UK и OSC продвигают Open Source в школы
  • 06.05 - Новая версия рекламной программы подстрекает пользователей купить ПО для своего лечения
  • 06.05 - Microsoft продает ряд своих закрытых разработок
  • 06.05 - Google Labs анонсировал ускоритель интернета
  • 06.05 - Microsoft подвешивает пиратам "морковку"
  • 06.05 - В США входят в обиход "интеллектуальные" тележки для супермаркетов
  • 06.05 - Microsoft работает над аналогом PDF
  • 05.05 - Yahoo video search теперь доступен массам
  • 05.05 - Алмазы помогут бороться с хакерами
  • 05.05 - Интернет-охоту хотят запретить
  • 05.05 - Microsoft привлекает блоггеров для теста Longhorn
  • 05.05 - Основатель Red Hat предложил Стиву Джобсу помощь в решении проблемы с торговой маркой
  • 05.05 - Компьютерная система оргкомитета Кубка мира по футболу 2006 года пострадала от червя Sober
  • 04.05 - Cisco Systems представила многофункциональный продукт Adaptive Security Appliance 5500
  • 04.05 - Администрация Евросоюза поддержала идею всеевропейской интернет-библиотеки
  • 04.05 - Компьютерный вирус дарит билеты на чемпионат мира по футболу
  • 04.05 - Лаборатория Касперского: Обзор вирусной активности - апрель 2005
  • 04.05 - Microsoft хочет отсудить у россиянина два домена
  • 04.05 - Сделка между Lenovo и IBM завершена
  • 04.05 - Эпидемия червя Sober.p зафиксирована в Западной Европе
  • 04.05 - Panda Software публикует отчет о вирусной активности за апрель
  • 03.05 - Институт SANS обновил список наиболее опасных уязвимостей

    Архив новостей >>>


  • 2004 г.

    XML в Oracle - это очень просто

    Владимир Пржиялковский , преподаватель технологий Oracle

    Введение

    Тип XMLTYPE появился в Oracle в версии 9.0.  До этого наиболее подходящим для хранения документов в формате XML был тип CLOB (и менее подходящим – тип VARCHAR2, ограниченный максимумом 4000 знаков).  Сам по себе объектный, новый тип XMLTYPE технически может храниться либо по-прежнему в виде CLOB, либо в виде объекта (начиная с версии 9.2).  И еще одно замечание:  несмотря на то, что технологии XML и Java идут «рука об руку», рамки приводимых ниже примеров не требуют от вашей БД установленных возможностей Java.

    В этой заметке рассмотрены только логические стороны использования XML в Oracle безотносительно к техническим свойствам хранения и доступа.

    Простой пример

    CREATE TABLE books
       (id          NUMBER PRIMARY KEY
      , description XMLTYPE);

    INSERT INTO books VALUES
        (100
       , XMLTYPE('<cover>
                    <title>Oracle SQL*Loader</title>
                    <author>Jonathan Gennick</author>
                    <author>Sanjay Mishra</author>
                    <pages>269</pages>
                  </cover>'));

    SET long 1000

    SELECT id, description FROM books;

    SELECT id, b.description.XMLDATA FROM books b;

    XMLDATA – специально созданный для XMLTYPE «псевдостолбец». 

    XMLTYPE – тип XML

    XMLTYPE дает возможность сообщить БД, что заносимый текст – это не просто строка, а строка документа XML.  Следующая попытка приведет к ошибке:

    INSERT INTO books VALUES (101, XMLTYPE('<cover><title></title>'));

    С дугой стороны, Oracle поймет правильно составленные директивы XML и встроенное в текст описание DTD:

    INSERT INTO books VALUES
        (101
       , XMLTYPE('<?xml version="1.0"?>
                  <!DOCTYPE cover [
                  <!ELEMENT cover (title, author*, pages)>
                  <!ELEMENT title (#PCDATA)>
                  <!ELEMENT author (#PCDATA)>
                  <!ELEMENT pages (#PCDATA)>
                  ]
    >
                  <cover>
                    <title>SQL*Plus Pocket Reference</title>
                    <author>Jonathan Gennick</author>
                    <pages>94</pages>
                  </cover>'));

    Убедитесь в этом сами, что Oracle действительно соотносит описание DTD самому тексту документа !

    Для выборки можно использовать специально придуманные для XMLTYPE функции.  Так, функция EXTRACTVALUE извлекает значения элемента из документа XML:

    SELECT id, EXTRACTVALUE(description, '/cover/title')
    FROM books;

    Функция EXISTSNODE дает возможность использовать в SQL условие отбора XPath (язык отбора, принятый в технологиях XML):

    SELECT id, b.description.XMLDATA
    FROM books b
    WHERE b.description.EXISTSNODE('/cover[author="Sanjay Mishra"]')=1;

    XMLTYPE – объектный тип Oracle

    Доказательством утверждения в заголовке служит создание следующей таблицы объектов типа XMLTYPE, «таблицы документов XML»:

    CREATE TABLE xbooks OF XMLTYPE;

    Работать с ними можно, как и с XML-атрибутом в обычной таблице:

    INSERT INTO xbooks VALUES
       (XMLTYPE('<cover>
                  <title>Oracle SQL*Loader</title>
                  <author>Jonathan Gennick</author>
                  <author>Sanjay Mishra</author>
                  <pages>269</pages>
                </cover>'));

    INSERT INTO xbooks VALUES
       (NEW XMLTYPE('<?xml version="1.0"?>
                     <cover>
                       <title>SQL*Plus Pocket Reference</title>
                       <author>Jonathan Gennick</author>
                       <pages>94</pages>
                     </cover>'));

    В первом случае объект XML создается с помощью конструктора, а во втором, к тому же, используется оператор NEW.  Последний применяется в Oracle для работы с объектами, однако его использование носит лишь рекомендательный характер, так как в SQL он ничего содержательного не дает.

    Далее:

    SELECT * FROM xbooks;

    SELECT VALUE(x) FROM xbooks x;

    SELECT XMLDATA FROM xbooks;

    Так же как для таблиц объектов прочих типов, элементы таблицы объектов XML имеют ссылки, то есть позволяют ссылаться на себя через REF в других типах и таблицах:

    SELECT REF(x) FROM xbooks x;

    SELECT DEREF(REF(x)) FROM xbooks x;

    У этого типа нет свойств, но есть методы.  В этом можно убедиться, сделав запрос от имени SYS:

    COLUMN text FORMAT A80

    SELECT text
    FROM user_source
    WHERE name ='XMLTYPE' AND type='TYPE'
    ORDER BY line;

    Исследование каталога rdbms/admin позволяет обнаружить и исходное описание этого типа (но не его тела !) в файле dbmsxmlt.sql.  К сожалению в документации описания этих методов разбросаны по разным местам, не всегда последовательны и ясны.  Так например, EXTRACT и EXISTSNODE (о последней речь шла выше), возведены в ранг функций SQL, то есть описаны в книжке документации по SQL в разделе «Функции», в то время как из предыдущего запроса к словарю-справочнику следует, что это методы.  О том же говорит синтаксис употребления.  Для EXISTSNODE пример уже приводился, а для EXTRACT он может выглядеть так:

    SELECT b.description.EXTRACT('/cover/title') FROM books b;

    (Сравните с примером использования функции EXTRACTVALUE выше).

    Вот некоторые другие примеры методов XMLTYPE:

    SELECT b.description.GETCLOBVAL() FROM books b;

    SELECT b.description.GETSTRINGVAL() FROM books b;

    SELECT b.description.GETROOTELEMENT() FROM books b;

    Обратите внимание, что некоторые методы XMLTYPE, например TOOBJECT, могут использоваться только процедурно, так как сами исполнены в виде процедур, а не функций.

    Правда, объектность типа XMLTYPE реализована не в полной степени.  Так, попытка создать в таблице столбец из коллекции документов XML (вложенной таблицы или массива VARRAY) в версии 9.2 терпит неудачу.  Это относится только к БД; в PL/SQL этих проблем не возникает:

    SQL> declare type xml_nt is table of xmltype index by varchar2(10);
      2  begin null; end;
      3  /

    PL/SQL procedure successfully completed.

    Взаимные преобразования табличного вида и XMLTYPE

    Связь двух форм описания данных – табличной и XML – достигается не одною только возможностью создавать в таблицах столбец типа XMLTYPE.  Возможно преобразование данных из одного вида в другой, благодаря чему исходный формат хранения данных может оказаться не столь существенен. 

    Преобразование из XMLTYPE в табличную форму

    Для преобразования данных типа XMLTYPE в обычный табличный вид можно использовать функции SQL и методы XMLTYPE, в первую очередь упоминавшуюся метод-функцию EXTRACT:

    COLUMN xdoc FORMAT A80

    SELECT ROWNUM, id, b.description.EXTRACT('/cover/author') xdoc
    FROM books b;

    Обратите внимание на возможность и способ обработки нескольких авторов в XML элементах <author>. 

    Использование функции SQL EXTRACTVALUE, в свою очередь, оставляет возможность отбора не более одного элемента XML для формирования каждой строки результата SELECT, но зато безболезнено убирает обрамляющие значение элемента XML метки:

    SELECT id, EXTRACTVALUE(b.description.EXTRACT('/cover/title'), '/title') xdoc
    FROM books b;

    То же самое можно записать проще, что уже демонстрировалось в начале статьи.

    Преобразование из табличной формы в XMLTYPE

    Для обратного преобразования удобно воспользоваться функциями, объединенными в стандарте SQL:2003 названием SQL/XML (другое название – SQLX).  В версии Oracle 9.2 реализованы следующие (не все) функции из этого стандартного набора:

    - XMLElement
    - XMLAttributes
    - XMLAgg
    - XMLConcat
    - XMLForest

    Вот некоторые примеры использования в схеме SCOTT:

    SELECT XMLELEMENT("Employee", ename) FROM emp;

    SELECT XMLELEMENT("Employee",
              XMLATTRIBUTES(ename AS "Name", empno AS "Number"))
    FROM emp;

    Обратите внимание, что в результатах выдаются поля типа XMLTYPE:

    CREATE TABLE xtable (n) AS SELECT XMLELEMENT("Name", ename) FROM emp;

    DESCRIBE xtable

    Следующий пример – агрегирующей функции XMLAGG, допускающей использование в запросах с группировкой GROUP BY, подобно тому, как агрегирующие функции MIN, AVG и другие применяются для обычных данных, а не XMLTYPE:

    SET LONG 2000

    SELECT XMLELEMENT("department", XMLATTRIBUTES(deptno AS "no")),
           XMLAGG(XMLELEMENT("employee", ename))
    FROM emp
    GROUP BY deptno;

    Интересно, что последний запрос допускает создания на своей основе выводимой таблицы, но не базовой:

    CREATE VIEW xview (a, b) AS
    SELECT XMLELEMENT("department", XMLATTRIBUTES(deptno AS "no")),
           XMLAGG(XMLELEMENT("employee", ename))
    FROM emp
    GROUP BY deptno;

    (срабатывает)

    CREATE TABLE xtable (a, b) AS
    SELECT XMLELEMENT("department", XMLATTRIBUTES(deptno AS "no")),
           XMLAGG(XMLELEMENT("employee", ename))
    FROM emp
    GROUP BY deptno;

    (ошибка !)

    Это объясняется тем, что столбцы A и B в обоих случаях Oracle пытается создавать как XMLTYPE, а наши данные таковы, что в столбце B содержатся строго говоря некорректные строки XML, например

    <employee>CLARK</employee><employee>KING</employee> ....

    Однако в случае выводимой таблицы Oracle смотрит на это сквозь пальцы, а в случае базовой – нет.  Возможно это есть следствие определенной недоработанности некоторых областей технологий XML в Oracle, что вызвано чересчур быстрыми темпами развития этих технологий.


     


    ХАЙВЕЙ - лучший российский хостинг-провайдер: хостинг, регистрация доменов, услуга Ваша@почта, поддержка 24 часа


    NetPromoter - единственный российский профессиональный комплекс программ и сервисов для раскрутки сайта и интернет-статистики


    STSS - известный поставщик надежных серверных решений различного назначения на платформе Intel (Xeon) и AMD.


    5-55: the ITIL company. Практический опыт и теоретические знания на лучших семинарах по ITIL и процессам ITSM.


    Подписка на новости IT-портала CITForum.ru
    (библиотека, ftp-архив CITKIT.ru)

    Новые поступления в on-line библиотеку:

    28 апреля

  • Выбор первого дистрибутива Linux: Пособие для начинающих
  • Обфускация и защита программных продуктов
  • Анализ и оптимизация циклов с помощью производящих функций
  • Стратегии объектно-реляционного отображения: систематизация и анализ на основе паттернов

    26 апреля

  • Business Intelligence обещает значительный рост в 2005 году
  • Десять основных тенденций 2005 года в области Business Intelligence и Хранилищ данных
  • Управление эффективностью бизнеса и предсказуемость
  • Увеличение эффективности бизнеса: пять ошибок управления, которых следует избегать
  • Потребность в организационных данных: модель комплексного управления эффективностью бизнеса
  • Технология Хранилищ данных для государственных учреждений
  • Оцените, насколько совершенно ваше Хранилище данных

    21 апреля

  • Исполнение моделей при помощи виртуальной машины
  • Параллельные алгоритмы компьютерной алгебры
  • От стандарта до стандарта (о стандартизации оптических разъемов)
  • За штурвалом IP-станции

    Продолжение дискуссии читателей:

  • Линукс и пользователи, или что мне не нравится в Linux
  • Еще один взгляд на альтернативные ОС (и софт для них)
  • О некомпетентности пользователя Windows
  • Переписка Долгачева В.С. и Монахова В.В.

    19 апреля

  • Межпротокольный шлюз NAT-PT с функциями DNS-ALG и FTP-ALG для обеспечения взаимодействия между сетями IPv4 и IPv6
  • Рефакторинг архитектуры программного обеспечения: выделение слоев
  • Комбинаторика слов и построение тестовых последовательностей
  • Функциональное тестирование Web-приложений на основе технологии UniTesK

    14 апреля

  • Как организовать двойную парольную защиту данных в Oracle
  • Деревянный интерфейс

    Продолжение дискуссии читателей:

  • Microsoft против мира
  • Впечатления от прочитанного

    12 апреля

  • Крупные проблемы и текущие задачи исследований в области баз данных
  • Глава 2 из книги Т.Кайта "Oracle для профессионалов"Архитектура

    Дискуссия читателей о Linux и Windows:

  • Деньги правят миром, и у кого их больше, тот и прав!
  • О злокозненности некомпетентных пользователей, или почему я не люблю ограниченных пользователей Windows

    7 апреля

  • О доблести Билла Гейтса, или почему Windows лучше, чем LINUX или Mac OS
  • Витая пара - все ли так просто?!
  • Выбираем сервер печати
  • Один слой хорошо, а два - лучше (о пишущих DVD-приводах)

    5 апреля

  • Использование Caché SQL Gateway
  • Глава 19 из книги Т.Кайта "Oracle для профессионалов"Хранимые процедуры на языке Java
  • Что такое PostgreSQL?
  • Обновлен PostgreSQL FAQ

    31 марта

  • Использование Веб-сервисов в Caché
  • Защита на уровне строк (Oracle)
  • Секции в реальном мире

    29 марта

  • Разработка успешных приложений для Oracle - первая глава из книги Тома Кайта "Oracle для профессионалов"
  • Web-сервисы: растущие опасения (мнение аналитиков IDC)
  • Технология OLAP - мощная альтернатива электронным таблицам
  • Какой модной стала подготовка отчетности

    24 марта

  • Многоверсионность данных и управление параллельными транзакциями
  • Исключение из правил. Опыт разработки и внедрения финансовой корпоративной системы
  • Обнаружение компрометаций ядра Linux с помощью gdb
  • Корпоративная сервисная шина - "бюджетный" подход к решению задач интеграции
  • Сервис-ориентированная архитектура
  • Бизнес-процессы и XML

    22 марта

  • Доступно. И точка! (обзор точек беспроводного доступа)
  • Коммутаторы Fast/Gigabit Ethernet для "большой" сети
  • Push to Talk: нажми на кнопку и ...говори
  • Сети нового поколения и технология softswitch

    17 марта

  • Часто задаваемые вопросы о proxy (proxy FAQ)
  • Самонастраивающаяся база данных: управляемые приложения и настройка SQL
  • Еще раз о волоконных трассах
  • Настраиваем русский Unicode в FreeBSD-5.3.

    10 марта

  • Еще не сказанное о волоконной оптике
  • Wi-Fi на службе оператора
  • Пора менять платформу?
    (о сокетах LGA775 и PGA478)

    Oracle:

  • Детальный аудит для практических целей
  • Шифруем свои ресурсы данных

    3 марта

  • Требования к проекту. Классификация - первый шаг к пониманию
  • Gtk vs. Qt: драки не будет
  • Управление бизнесом "по максимуму": BPM для финансовых учреждений
  • Реализация решения по управлению эффективностью бизнеса
  • Новые SerialATA-винчестеры
  • Карман для сервера

    1 марта

  • Выбрать корпус - нет ничего проще?
  • Создание виртуальной сети с удаленной загрузкой узлов
  • Текущее состояние и перспективы развития рынка интеграционных технологий
  • Интеграция корпоративной информации: новое направление
  • Архитектурные подходы к консолидации

    24 февраля

  • Каждому проекту своя методология
  • Императив интеграции
  • Безопасность IP-телефонии - полевые зарисовки
  • О злокозненности Билла Гейтса, или почему я не люблю Windows

    22 февраля

  • Oracle10: шифруем данные
  • В версии Oracle10 "виртуальные частные базы данных" данных стали избирательнее
  • Каждому (пользователю) свое (данное в таблице)
    Часть 1
    Часть 2
  • Ускоряем интернет
  • Сетевая аутентификация на практике
  • В фокусе Microsoft Virtual Server 2005

    17 февраля

    Открыт новый раздел
    Все об Open Source

    Все новости >>>



  • IT-консалтинг Software Engineering Программирование Open Source СУБД Безопасность Internet Сети Операционные системы Hardware

    Информация для рекламодателей PR-акции, размещение рекламы - pr@citforum.ru, тел. +7 095 4119920 Пресс-релизы - manager@citforum.ru
    Послать комментарий
    Информация для авторов
    Rambler's Top100 TopList liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня This Web server launched on February 24, 1997
    Copyright © 1997-2000 CIT, © 2001-2004 CIT Forum
    Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...