Начинаем работать с программой DB2 Viper

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

Синтия M. Саракко (Cynthia M. Saracco), старший инженер-программист, EMC

C. M. Saracco works at IBM's Silicon Valley Laboratory in the DB2 XML organization. Сфера ее служебных интересов – управление базами данных, XML, разработка веб-приложений и смежные темы.



02.03.2006

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

Мы постараемся помочь вам быстро овладеть встроенными средствами поддержки XML в DB2 на примере решения несколько распространенных задач:

  1. Создание объектов базы данных для управления XML-данными на примере базы данных для упражнений, учебных таблиц и представлений;
  2. Заполнение базы данных XML-данными при помощи предложений INSERT и IMPORT;
  3. Проверка корректности XML-данных. Вы разработаете и зарегистрируете XML-схемы при помощи DB2, а для импорта данных воспользуетесь функцией XMLVALIDATE.

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

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

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

Создание учебного проекта базы данных

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

Листинг 1. Создание базы данных для хранения XML-данных
create database test using codeset UTF-8 territory us

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

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

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

Вы можете в определении таблиц DB2 указать, что они будут содержать только столбцы XML, или только столбцы с данными традиционных типов, или сочетание обоих типов данных. В этой статье моделируется последняя ситуация. Пример из листинга 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), 
  status      varchar(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, либо вызвав средство импортирования DB2 IMPORT, которое выполнит предложение INSERT неочевидным для пользователя образом.

Использование предложений INSERT

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

Чтобы воспользоваться редактором команд DB2, откройте модуль DB2 Control Center, и в раскрывающемся меню "Tools" в верхней части окна программы, выберите Command Editor. Появится отдельное окно, показанное на рисунке 1.

Рисунок 1. Редактор команд DB2 Command Editor
Редактор команд DB2 Command Editor

Введите в верхнюю панель следующие предложения:

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

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

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

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

Использование средства импортирования DB2 - команды IMPORT

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

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

Рисунок 2. Простой файл ASCII с разделителями для ввода в функцию DB2 IMPORT
ASCII file

Содержимое файла Client3227.xml представлено на рисунке 3. Как видите, в файле хранятся XML-элементы для почтового адреса, номера телефона, номера факса и адреса электронной почты Эллы Кимптон.

Рисунок 3. Простой XML-файл клиента
Client file

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

Рисунок 4. Простой файл ASCII с разделителями без описателя данных для одной записи
Import file

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

Листинг 4. Импорт данных в таблицу "clients"
import from clients.del of del xml from C:/XMLFILES insert into user1.clients;

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

Рисунок 5. Простой вывод команды DB2 IMPORT
Import output

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


Проверка корректности XML-данных

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

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

Для проверки корректности XML-данных вам необходимо задать схему XML, которая определяет допустимые элементы XML, их порядок, типы данных и т. п. Схемы XML – это отраслевой стандарт консорциума W3C; они пишутся на языке XML. Хотя функции XML-схем не рассматривается в этой статье, в сети Интернет можно найти различные руководства по этой теме (см. раздел «Ресурсы»).

Существует много способов разработки схем XML, от использования привычного текстового редактора до создания схемы вручную при помощи инструментов для наглядной разработки или генерации схемы. Такие инструменты для XML предоставляют независимые разработчики программного обеспечения, например, MDXSYS Limited; IBM также предлагает поддержку генерации схемы XML средствами своей встроенной среды разработки Java™.

Для примера® вы можете импортировать файл Client 3227.xml, показанный на рисунке 3, в Интернет-проект при помощи программы IBM WebSphere® Studio. Щелкнувправой кнопкой мыши, выберите Generate -> XML Schema и сгенерируйте корректную схему XML для конкретного файла ввода, как показано на рисунке 6. Вы можете затем изменить файл (если нужно) и зарегистрировать его в DB2.

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

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

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

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

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

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

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

Если схема очень велика, то перед регистрацией вам, возможно, придется увеличить размер стека программы. Для примера выполним следующие предложения:

Листинг 4. Увеличение стека приложения
 connect to test;
 update db cfg using applheapsz 10000;

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

В нашей статье используется простая, без зависимостей, 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 в данном примере является заполнителем. Он определяет унифицированный идентификатор ресурса (URI), на который ссылаются документы экземпляра XML; многие XML-документы используют пространство имен, которое определяется при помощи URI. Наконец, предложение “complete” инструктирует DB2 завершить процесс регистрации XML-схемы, чтобы данная схема могла использоваться для проверки корректности XML-данных.

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

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

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

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

Чтобы проверить корректность XML-данных в процессе импортирования их в таблицу "clients", используйте предложение XMLVALIDATE команды DB2 IMPORT. Следующее предложение (листинг 6) инструктирует DB2 использовать предварительно зарегистрированную XML-схему (user1.mysample) в качестве XDS (XML Data Specifier, описатель XML-данных) для проверки корректности 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, при которой одна запись из шести была отброшена вследствие того, что XML-документ не соответствовал заданной схеме.

Рисунок 8. Пример вывода DB2 IMPORT с отброшенной записью
Import rejected rows

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


Заключение

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

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

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

Выражаем благодарность Раву Эхойа (Rav Ahuia), Матиасу Никола (Matthias Nicola) и Гэри Робинсону (Gary Robinson) за комментарии к этой статье.


Загрузка

ОписаниеИмяРазмер
Пример программыsamples.zip  ( HTTP | FTP )4KB

Ресурсы

Научиться

Получить продукты и технологии

  • Создайте свой проект разработки с помощью пробного ПО IBM , которое можно загрузить непосредственно с сайта developerWorks;

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Information Management, XML
ArticleID=151702
ArticleTitle=Начинаем работать с программой DB2 Viper
publish-date=03022006