КаталогИндекс раздела


© IBM deweloperWork
© Е.Сандуленко, А.Деревянко (перевод)

Быстрый старт с DB2 Viper

Cynthia M. Saracco, Senior Software Engineer, IBM

02 марта 2006

Выпуск бета версии DB2 Viper, предоставляет существенно новую поддержку для хранения, управления и поиска XML-данных. Мастер этих новых возможностей XML быстро, шаг за шагом, покажет, как выполнить фундаментальные задачи. В этой статье объясняется, как создать объекты базы данных для управления XML-данными и как заполнить вашу базу данных DB2 данными XML.

Вы, вероятно, сталкивались со слухами о новом выпуске DB2 Viper - первой системы управления базами данных IBM, которая поддерживает и табличную (на основе SQL) и иерархическую (на основе XML) структуру данных. Если Вы интересуетесь новой естественной (native) поддержкой XML DB2 и хотите быстро изучить этот вопрос, Вы выбрали правильное руководство.

Чтобы ускорить изучение естественных возможностей XML в DB2, рассмотрим несколько общих задач:

  1. Создание базы данных для управления XML-данным, включая тестовую базу данных, типовые таблицы, и представления
  2. Начальная загрузка базы данных с XML, используя инструкции INSERT И IMPORT
  3. Валидация XML-данных. Разработка и регистрация XML-схемы в DB2, используя опцию XMLVALIDATE при импортировании данных.

В статье будут затронуты и другие темы, такие как вопросы модификации и удаления XML DB2 данных при помощи SQL, вопросы обработки XML-данных с помощью XQuery в DB2, разработка прикладных Java-программ и Web-компонентов, которые работают с XML-данными в DB2.

Создание объектов базы данных

Для начала давайте создадим Unicode базу данных в DB2. В DB2 Viper'е, только Unicode базы данных могут хранить и XML-документы, и более традиционные форматы SQL-данных, такие как целые числа, дата/время, символьные строки переменной длины, и так далее. Далее Вы создадите объекты в этой базе данных, чтобы управлять и XML и другими типами данных.

Создание тестовой базы данных

Чтобы создать новую "тестовую" базу данных Unicode в DB2, откройте командное окно DB2, и выполните команду, задающую кодировку Unicode и территориальную зону, показанную в Листинге 1

Листинг 1. Создание базы данных для сохранения XML-данных

  create database test using codeset UTF-8 territory us

После того, как Вы создали базу данных Unicode, Вы не обязаны выполнять какие-либо команды, чтобы дать возможность DB2 хранить данные XML в его естественном иерархическом формате. Ваша система DB2 готова для работы.

Создание таблиц примера

Чтобы сохранить XML-данные, создайте таблицы, которые содержат один или более столбцов XML. Эти таблицы служат логическими контейнерами для коллекций документов; внутри DB2 фактически использует различные схемы хранения XML и не XML-данных. Однако, использование таблиц как логических объектов для управления любых форм поддерживаемых данных упрощает администрирование и решение разработку приложений, особенно, когда различные формы данных должны быть интегрированы в одном запросе.

Вы можете определять таблицы DB2, для хранения либо только столбцов XML, либо только столбцов традиционных типов SQL, либо комбинации обоих. Эта статья описывает последний способ. В пример в Листинге 2 происходит соединение с "тестовой" базой данных и создание двух таблиц. Первая - таблица " items", которая хранит информацию о продаваемых товарах и комментариях заказчиков о них. Вторая таблица отслеживает информацию о "клиентах", включая контактную информацию. Обратите внимание на то, что "comments " и "contactinfo" базируются на новом XML типе данных DB2, в то время как все другие столбцы в таблицах базируются на традиционных SQL типах данных.

Листинг 2. Создание таблиц для XML-данных

 connect to test;
 
 create table items (
   id    int primary key not null, 
   brandname   varchar(30), 
   itemname    varchar(30), 
   sku   int, 
   srp   decimal(7,2), 
   comments    xml
 );
 
 create table clients(
   id    int primary key not null, 
   name  varchar(50), 
   statusvarchar(10), 
   contactinfo xml
 ); 

Если Вы внимательно рассмотрите эти примеры создания таблиц, Вы заметите, что внутренняя структура XML-документов в столбцах "comments" или "contactinfo" указана. Это - важная особенность DB2. Пользователи не должны предопределять XML структуру данных (или, более точно, XML-схему) чтобы хранить эти данные. Напротив, DB2 может сохранять любой правильно форматированный XML-документ в единственном столбце. Это означает, что XML-документы различных схем - или документы, не связанные с какой-либо зарегистрированной схемой - могут быть храниться в том же самом столбце DB2. Эту особенность мы обсудим далее, когда будем исследовать, как хранятся данные в DB2.

Создание представления

При желании, Вы можете создавать представления к таблицам, содержащим XML-данные, точно также, как Вы можете создавать представления к таблицам, содержащим только традиционные SQL типы данных. Пример в Листинге 3 создает представление клиентов со статусом "Gold ":

Листинг 3. Создание представления, которое содержит XML-данные

 create view goldview as 
  select id, name, contactinfo 
  from clients where status='Gold'; 

Замечание об индексах

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

Запись XML-данных

Созданные таблицы Вы можете теперь заполнять данными. Вы можете это делать оператором SQL INSERT непосредственно или, вызывая утилиту IMPORT DB2, которая внутри себя применяет оператор INSERT.

Использование оператора INSERT

Используя INSERT, Вы передаете DB2 необработанные XML-данные непосредственно. Это, возможно, самое легкое решение при написании прикладной программы для сохранения XML-данных в переменной. Но если Вы только начинаете работать с DB2 Viper и не хотите писать прикладную программу, Вы можете выполнять ваши инструкции INSERT в интерактивном режиме. (Я нахожу удобным использовать Command Editor DB2, хотя Вы можете также использовать процессор командной строки)

Чтобы использовать Command Editor DB2, запустите Control Center DB2. Из меню " Tools ", выберите Command Editor.Появиться окно, которое изображено на рисунке.

Рисунок 1. DB2 Command Editor

Введите следующие операторы в верхней панели:

Листинг 4. Вставка XML-данных в интерактивном режиме

 connect to test;

 insert into clients values (77, 'John Smith', 'Gold', 
    '111 Main St., Dallas, TX, 00112') 

Нажмите на зеленую стрелку в левом углу, чтобы выполнить команду.

В этом случае, входной документ был весьма прост. Если бы документ был более сложным, было бы непрактично вводить XML-данные в операторе INSERT, как показано. В большинстве случаев, Вы пишете прикладную программу, чтобы вставить данные, использующие host-переменную или маркер параметра. Данную статью сопровождает короткий пример кодирования на Java. Поскольку это - вводный учебник, мы не будем обсуждать тему разработки приложений подробно. Вместо этого, мы обсудим другой вариант начальной загрузки XML столбцов DB2 данными - использование средства IMPORT.

Использование утилиты IMPORT DB2

Если ваши XML-данные хранятся в файлах, средство IMPORT DB2 обеспечивает простое решение для заполнения таблиц DB2 этими данными. Вам нет необходимости писать прикладную программу. Вы только должны создать ASCII-файл с разделителями, содержащий данные, которые Вы хотите загрузить в вашу таблицу. Для XML-данных, сохраненных в файлах, соответствующее имя файла задается параметром.

Вы можете создавать ASCII-файл с разделителями в любом текстовый редакторе. (В соответствии с соглашением, такие файлы имеют обычно тип .del.) Каждая строка в вашем файле представляет строку данных, которые будут импортированы в вашу таблицу. Если ваша строка содержит Спецификатор XML-Данных (XML Data Specifier - XDS), IMPORT читает данные, содержащиеся в упомянутом XML файле, и импортирует их в DB2. Например, первая строка на Рисунке 2 содержит информацию об Элле Кимптон, включая ее ID, имя, и статус заказчика. Ее контактная информация включена в файл Client3227.xml.

Рисунок 2. Пример ASCII-файла с разделителями для выполнения утилиты IMPORT

Содержимое файла Client3227.xml показано на Рисунке 3. Как Вы видите, файл содержит XML-элементы адреса Эллы Кимптон, номеров телефона, факс и email.

Рисунок 3. Пример выборки XML файла

Если Вам необходимо импортировать данные, но у Вас нет XML-файлов для всех строк, Вы можете вставить данные непосредственно. Это легко сделать. Опустите XDS информацию о входном файле. Например, в файле items.del на Рисунке 4 опущено имя XML-файла для элемента 3641 (комплект "Dress to Impress"). В результате XML-столбец для этой строки не будет содержать никаких данных.

Рисунок 4. Пример ASCII-файла с разделителями без Спецификатора Данных XML для одной строки

Теперь, имея XML-файлы и ASCII-файлы с разделителями, Вы можете воспользоваться утилитой импорта DB2. Следующая инструкция в Листинге 4 импортирует содержимое файла clients.del, хранящегося по адресу C:/XMLFILES, в таблицу "clients".

Листинг 4. Импортирование данных в таблицу "clients"

 import from clients.del of del XML from C:/XMLFILES insert into user1.clients; 

Файл clients.del, показанный на Рисунке 5, содержит шесть строк данных, включая ссылки на шесть XML-файлов. Успешное выполнение команды IMPORT закончится выводом, подобным Рисунку 5 .

Рисунок 5. Пример вывода при выполнении импорта в DB2

Независимые продавцы программных продуктов, типа Exegenix, предлагают инструментальные средства, которые могут помочь Вам конвертировать Word, PDF, и другие форматы документов в XML для импорта в DB2. (См Ресурсы для получения подробной информации о Exegenix.)

Валидация ваших XML-данных

Только что обсужденные примеры INSERT и IMPORT будут сохранять любые правильно форматированные XML-данные в ваших таблицах. Они не выполняют валидацию данных - то есть, они не проверяют, что данные соответствуют определенной XML-схеме и, следовательно, твердо придерживаются некоторой структуры. Однако есть возможность поручить DB2 выполнение валидации. Давайте рассмотрим один из способов, позволяющий сделать:

Шаг 1: Создание XML-схемы

Чтобы выполнять валидацию XML-данных, Вы должны задать XML-схему, которая определяет допустимые XML элементы, их порядок, типы данных и так далее. XML-схемы - промышленный стандарт W3C, написанный в XML. В данной статье нет возможности объяснять особенности XML-схем, но существуют различные обучающие программы доступные в Internet. (См. "Ресурсы".)

Есть много способов разрабатывать XML-схемы, начиная от использования вашего любимого текстового редактора для создания схемы вручную и заканчавая использованием инструментальных средств, которые позволяют графически проектировать или генерировать схему. Независимые продавцы программных продуктов, такие как MDXSYS Limited, обеспечивают такие инструментальные средства для XML. IBM также предлагает XML поддержку создания схем через ее Интегрированную среду разработки JavaT.

Например, с помощью IBM WebSphere Studio, Вы можете импортировать файл Client3227.xml, показанный на Рисунке 3, в Web-проект. Для этого щелкните правой кнопкой мыши, и выберите Generate -> XML Schema. Эта процедура должна сгенерировать XML-схему для вашего входного файла, как показано на Рисунке 6. Вы можете изменять файл (в случае необходимости) и его регистрировать в DB2.

Рисунок 6. Использование WebSphere Studio для генерации XML-схемы из XML-файла

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

XML-схема, показанная на Рисунке 7, которая была получена из схемы, сгенерированной WebSphere Studio, предоставляет такую гибкость. Она включает в себя дополнительные спецификации о минимальном и максимальные числе вхождений ("minOccurs" и "maxOccurs") данного элемента. В данном случае, заказчик не обязан давать Вам какую либо контактную информацию, которую Вы хотели бы хранить. Но, если заказчик решает дать Вам информацию о своей электронной почте, эта схема даст возможность соответствующим документам содержать до пяти адресов электронной почты (то есть, 5 значений элементов "email").

Рисунок 7. Пример XML-схемы для контактной информацией о пользователе.

Как Вы, возможно, заметили , XML-схемы также содержат информацию о типах. В то время, как схема, показанная на Рисунке 7, просто определяет, что все основные элементы должны быть обработаны, как строки, большинство промышленных XML-схем использует также и другие типы данных, такие как integer, decimal, date и так далее. Если Вы выполняете валидацию XML-документов по данной схеме как часть операции INSERT или IMPORT, DB2 будет автоматически добавлять описания типов к вашим XML-документам.

Шаг 2: Регистрация XML-схемы

Как только Вы создали соответствующую XML-схему, Вы должны зарегистрировать схему в DB2. IBM обеспечивает несколько способов для этого. Вы можете запустить графический Мастер из Control Center DB2, который проведет Вас через весь процесс, вызывать системные хранимые процедуры, или выполнять команды DB2 непосредственно. Давайте воспользуемся последним методом, поскольку это позволит Вам лучше понять то, что делает DB2 за сценой, выполняя ваши команды.

Если ваша схема очень большая, Вы возможно должны будете увеличить размер кучи приложения (application heap) перед тем, как регистрировать схему. Например, выпполние следующие команды:

Листинг 4. Увеличение размера кучи приложения

 connect to test;
 update db cfg using applheapsz 10000; 

Затем, регистрируйте вашу XML-схему. Если ваша XML-схема не ссылается на другие XML-схемы, Вы можете зарегистрировать и закончить процесс единственной командой. Иначе, Вы будете должны отдельные индивидуальные команды, чтобы зарегистрировать вашу первичную XML-схему, добавить другие требуемые схемы, и закончить процесс регистрации. Когда документ схемы становится очень большим, его содержимое обычно делят на несколько файлов, чтобы улучшить управляемость, удобочитаемость, и повторное использование. Это похоже на упрощение сложной прикладной программы или компонента путем разбивки на модули. Для получения подробной информации обратитесь к источнику W3C "XML Schema primer." (См. "Ресурсы".)

В этой статье используется простая, независимая XML-схема. Вы можете зарегистрировать ее в DB2, используя следующую команду:

Листинг 5. Регистрация XML-схемы

 register XMLschema 'http://mysample.org' from 'C:/XMLFiles/ClientInfo.xsd'
  as user1.mysample complete;

В этом примере, ClientInfo.xsd - имя XML-файла схемы. Он расположен в каталоге C:/XMLFiles. Эта XML-схема будет зарегистрирована в DB2 с внутренним представлением SQL схемой "user1" и XML-схемой "mysample". Параметр http://mysample.org в этом примере - это только заполнитель. Он определяет универсальный идентификатор ресурса (uniform resource indicator - URI), на который ссылаются экземпляры XML-документов; многие XML-документы используют пространства имен, которые определяются при помощи URI. Наконец, выражение "complete" будет указывать DB2 закончить процесс регистрации XML-схемы, чтобы схема могла использоваться для валидации XML-данных.

Стоит отметить, что процесс регистрации схемы не включает определение столбца(ов) таблицы, к которому схема будет применяться. Другими словами, схемы - не эквивалент ограничений столбца SQL. Данная схема может валидировать данные для разных XML столбцов в различных таблицах. Однако, проверка правильности - не автоматическая. DB2 позволяет сохранить в XML столбце любой правильно форматированный XML-документ. Если Вы хотите выполнять валидацию ваших данных по зарегистрированной схеме перед сохранением, Вы должны дать DB2 инструкцию сделать это.

Шаг 3: Импортирование XML-данных с валидацией

Припомощи созданной XML-схемы, полностью зарегистрированной в DB2, Вы можете выполнять валидацию данных в DB2, валидировать XML-данные при вставке или импортировании их в таблицу. Давайте вернемся к рассмотренному ранее сценарию импорта.

Если Вы уже заполнили таблицу "clients", Вы можете ее очистить или удалить и создать таблицу заново. Это необходимо в том случае, если Вы планируете добавлять те же самые данные в таблице, поскольку Вы уже делали это предварительно. Напомним, что "clients" была определена с первичным ключом пользователя (столбец ID), и попытка импортировать дублирующиеся строки закончится неудачей.

Для валидации XML-данных при импортировании их в таблицу "clients" используйте выражение XMLVALIDATE в команде IMPORT. Следующий оператор в Листинге 6 указывает DB2 использовать вашу предварительно зарегистрированную XML-схему (user1.mysample) как Спецификатор Данных XML (XML Data Specifier - XDS) по умолчанию при валидации XML файлов, указанных в файле clients.del перед вставкой их в таблицу " clients ".

Листинг 6. Импортирование XML-данных с валидацией

 import from clients.del of del XML from C:/XMLFILES XMLvalidate using xds 
  default user1.mysample insert into user1.clients; 

Если DB2 устанавливает, что XML-документ не соответствует указанной схеме, вся строка, связанная с этим документом, будет отклонена. Рисунок 8 иллюстрирует стандартный вывод операции IMPORT, в котором строка 6 была отклонена, потому что ее XML-документ не соответствовал указанной схеме.

Рисунок 8. Стандартный вывод утилиты IMPORT DB2, с одной отклоненной строкой

Стоит отметить, что XMLVALIDATE может также использоваться с jgthfnjhfvb INSERT, чтобы указать DB2 валидацию XML-данные перед их вставкой. Синтаксис подобен примеру IMPORT, в котором Вы определяете зарегистрированную (и законченную) XML-схему при вызове выражения XMLVALIDATE. (См. "Java пример" для получения большей информации об этом.)

Резюме

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

Теперь, когда Вы научились сохранять XML-данные, используя новые "естественные" XML-возможности DB2, Вы готовы делать запросы к этим данных. Это будет рассмотренно в последующих статьях, которые представятся Вам новую поддержку XQuery в DB2, а также ее XML-расширения к SQL (иногда называемые "SQL/XML").

Благодарности

Благодарю Рава Ахойя, Матиаса Никола и Гэри Робинсона за их комментарии к этой статье.

Ресурсы

Обучение

Получение продуктов и технологий

Обсуждения


КаталогИндекс раздела