 | Уровень сложности: средний Майанк Прадхан (Mayank Pradhan), инженер-консультант, IBM
13.04.2006 Декомпозиция аннотированной XML схемы в IBM® DB2® позволяет более эффективно разложить XML-документы на реляционные таблицы, чем при использовании DB2 XML Extender. DB2 XML Extender также поддерживает возможность дробления документов на реляционные схемы, но данный пакет позволяет использовать только очень ограниченное количество функций и ограничен оригинальным форматом соответствия DAD. С другой стороны, декомпозиция аннотированных XML-схем обладает гибким языком соответствия на основе XML-схем, который предоставляет пользователям детальный контроль над всем процессом декомпозиции. Этот метод также намного быстрее дробления с помощью XML Extender. В данной статье описаны преимущества перехода к декомпозиции аннотированных XML-схем на различных уровнях, таких как функциональность, удобство использования и производительность. Затем описаны шаги, необходимые для перехода от дробления с помощью XML Extender к декомпозиции аннотированных XML-схем. В статье также описан инструментарий (Dad2AS), который можно использовать для преобразования XML Extender RDB_Node DAD в аннотированную XML-схему.
Введение в декомпозицию аннотируемых XML-схем
Встроенная в
DB2 Viper функция декомпозиции аннотируемых XML-схем может использоваться для декомпозиции (полной или частичной) XML-документов в
реляционные таблицы. При этом аннотации в XML-схеме используются в качестве языка соответствия для
сопоставления информации в XML-документе с реляционными таблицами. В новой
функции XML-декомпозиции в качестве платформы получения информации о соответствии используется XML-схема.
XML-схема является открытым стандартом, поэтому для нее требуется добавить только несколько специализированных
функций в спецификацию языка соответствия. Это позволит ускорить процесс
обучения в сравнении с эквивалентной спецификацией соответствия, использующей
специализированный язык. Обратите внимание, что аннотации, добавленные к XML-схеме, не
участвуют в оценке соответствующих XML-документов. Это дает возможность пользователям
применять одну XML-схему для сопоставления и оценки XML-документов.
Новая функция XML-декомпозиции требует регистрации
аннотированной XML-схемы в хранилище XML-схем.
Хранилище XML-схем также представляет собой новую функцию пакета DB2 Viper. Как видно по названию,
это хранилище для XML-схем, которые могут состоять из одного или нескольких
XML-документов. Объем XML-схем, зарегистрированных в XSR, ограничен
базой данных. Любую XML-схему, зарегистрированную в XSR, можно использовать в двух целях:
- Проверка XML-документов при их вставке в столбцы XML-типа;
- Проверка XML-документов при декомпозиции на реляционные таблицы.
Любую XML-схему, зарегистрированную в XSR, можно включить для использования в
XML-декомпозиции, если только в этой XML-схеме имеется хотя бы одна
аннотация, связанная с декомпозицией. Если XML-схема доступна для декомпозиции,
выполняется проверка корректности аннотаций, совместимости
типов XML-схем с типом столбцов DB2 и наличие реляционных таблиц и столбцов, определенных
в аннотациях. Если аннотированная XML-схема определяется как правильная, извлекается
информация о соответствии и записывается в таблицы каталога в готовом к использованию двоичном формате.
Наконец, теперь можно выполнить декомпозицию на реляционные таблицы согласно заданному
сопоставлению любого XML-документа, соответствующего аннотированной
XML-схеме.
Язык соответствия аннотированных XML-схем разработан для
решения задач пользователей, уже имеющих реляционную схему с
несколькими приложениями, которым теперь требуется
использовать данные из XML-документов в существующей реляционной схеме. Структура XML-документов, выраженная XML-схемой, может
значительно отличаться от реляционной схемы, так как пользователи практически не контролируют разработку XML-схемы. Следовательно, язык соответствия
разработан для предоставления большей гибкости и детального контроля над
процессом декомпозиции. Существует 11 различных конструкций сопоставления (некоторые из них
даже имеют несколько перечисленных значений), выражающих соответствие элементов и
атрибутов, декларированных в XML-схеме, парам «таблица-столбец» в реляционной
схеме. Каждая из таких конструкций предназначена, главным образом, для точно определенной цели. Большинство
этих конструкций появились в результате запросов пользователей пакета XML Extender. Эти конструкции и их основные цели перечислены в таблице 1.
Таблица 1. Конструкции сопоставления и их основные цели
|
Номер
|
Конструкция аннотации
|
Назначение
|
Аналогичная конструкция DAD
|
Краткое описание
| |
XML-элементы/атрибуты сопоставления с парами «таблица-столбец»
|
|
db2-xdb:rowSet
|
Может использоваться для определения логического или физического контейнера (физический контейнер может быть реляционной таблицей), логически связанного с набором строк.
|
table
|
Используется для определения таблицы, по которой выполняется сопоставление элемента/атрибута.
|
|
db2-xdb:column
|
Должен использоваться для определения столбца, по которому выполняется декомпозиция информации, связанной с элементом/атрибутом.
|
column
|
Используется в DAD совместно с указанной выше конструкцией table для задания пары «таблица-столбец», по которой выполняется сопоставление элемента/атрибута.
|
|
db2-xdb:defaultSQLSchema
|
Следует использовать для задания SQL-схемы используемых реляционных таблиц.
|
нет
|
Таблицы необходимо задавать явно, для любого использования, или они должны автоматически задаваться при вызове пользователем хранимой процедуры дробления.
|
|
db2- xdb:rowSetMapping
|
Группировка всех связанных конструкций аннотаций, определяющих простое сопоставление с парой «набор строк - столбец». В одной декларации элемента/атрибута разрешается использовать одну или несколько конструкций db2- xdb:rowSetMapping, выполняющих сопоставление для различных пар «набор строк - столбец».
|
RDB_Node
|
Разрешение на группировку пар сопоставления «таблица - столбец». Для любого узла элемента/атрибута разрешается только одно такое сопоставление.
|
|
db2-xdb:table
|
Эта аннотация позволяет пользователям выполнять сопоставление нескольких элементов из различных частей XML-документа, для которого выполняется декомпозиция на одинаковые пары «таблица - столбец» в разных строках.
|
нет
|
Такую операцию невозможно выполнить с помощью конструкций DAD.
| |
Условная декомпозиция
|
|
db2-xdb:locationPath
|
Пользователи могут задавать различные цели (таблицы) на основе контекста появления элемента/атрибута. Это позволяет пользователям добавлять аннотации к элементам и атрибутам, объявленным в повторно используемых типах и группах, с которыми выполняется декомпозиция на основе контекста.
|
нет
|
Параметр locationPath в DAD выражается явно, так как все XML-иерархия должна повторяться с использованием конструкции элемент_узел/атрибут_узел.
|
|
db2-xdb:condition
|
Пользователи могут фильтровать вставляемые данные на основе содержимого элемента/атрибута в XML-документе.
|
condition
|
Эта конструкция в DAD вызывает перегрузку. Конструкция используется в двух целях, в зависимости от места ее задания.
- Если конструкция задана в корневом элементе, она используется для задания условия объединения. Другими словами, эта конструкция по существу разрешает выполнить сопоставление одного элемента/атрибута нескольких парам «таблица - столбец». Это должно быть явно задано в аннотированной XML-схеме с использованием конструкции db2- xdb:rowSetMapping.
- Если задан не корневой элемент, конструкция используется для фильтрации данных. Такая функция подобна конструкции db2-xdb:condition в аннотированных XML-схемах.
| |
Управление данными, для которых будет выполняться декомпозиция
|
|
db2-xdb:contentHandling
|
Пользователи могут выбирать содержимое элемента из следующих вариантов:
-
stringValue:
конкатенация всех текстовых узлов потомков
-
textValue
конкатенация всех дочерних текстовых узлов
-
serializeSubtree
последовательная строка, в своей форме разметки включает все между начальной и конечной меткой этого элемента, в том числе начальную и конечную метки элемента, комментарии и инструкции обработки.
|
нет
|
Это невозможно сделать в приложении дробления XML Extender.
| |
Преобразование данных для декомпозиции
|
|
db2-xdb:normalization
|
Пользователи могут задать поведение нормализации для содержимого XML-элемента или атрибута, для которого выполняется сопоставление с символьным целевым столбцом перед вставкой содержимого. Доступны следующие варианты:
-
canonical:
Перед вставкой в целевой столбец XML-значение преобразуется в свою каноническую форму в соответствии с типом своей XML-схемы
-
original:
Исходные символьные данные
-
whitespaceStrip:
Перед вставкой в целевой столбец удаляются все начальные и замыкающие пробелы, последовательно идущие пробелы преобразуются в один символ пробела.
|
нет
|
В дроблении XML Extender перед вставкой в определенную пару «таблица - столбец» нормализации не выполняется.
|
|
db2-xdb:expression
|
Пользователи могут задать собственное выражение, результат которого вставляется в таблицу, по которой выполняется сопоставление этого элемента.
|
нет
|
Пользовательское преобразование данных не выполняется при дроблении в приложении XML Extender. Если требуется выполнить преобразование, пользователи должны выполнить его с помощью XSL до дробления или создать триггеры для изменения данных перед вставкой.
|
|
db2-xdb:truncate
|
Пользователи могут определить, разрешено ли усечение при вставке XML-значения в символьный целевой столбец.
|
нет
|
Такая операция также запрещена в XML Extender.
| |
Примечание: db2-xdb является префиксом для всех используемых здесь аннотаций. Пользователи могут использовать любой префикс по своему усмотрению. Но префикс должен быть привязан к пространству имен URI http://www.ibm.com/xmlns/prod/db2/xdb1.
В противном случае аннотации будут игнорироваться при регистрации и выполнении обработчика декомпозиции.
|
Приложение дробления XML Extender не поддерживает наличие элементов/атрибутов в каком-либо пространстве имен.
|
В целях удобства все перечисленные аннотации можно задать как сторонние атрибуты деклараций элемента/атрибута или в качестве дочерних элементов иерархии xdb:annotation/xdb:appinfo с использованием конструкции db2-xdb:rowSetMapping. Подробней о таких аннотациях см. в документации по DB2.
Помимо различных конструкций сопоставления,
введенных в декомпозиции аннотированных XML-схем, здесь также используется
новый алгоритм, способный задать
отношения «один к одному» или «один к многим» без использования любой явной
(пользовательской) конструкции сопоставления. Алгоритм может определить
отношения по свойству maxOccurs и
группам моделей, включенных в элементы, сопоставленные с тем же параметром rowSet. В отличие от
других решений по декомпозиции и благодаря этому алгоритму отсутствуют
ограничения, позволяющие выполнять
сопоставления для одной таблицы только для элементов-потомков или дочерних элементов/атрибутов. Пока элементы/атрибуты,
участвующие в сопоставлении по одному набору строк rowSet формируют допустимое отношение «один к одному» или
«один к многим», элементы/атрибуты, сопоставляемые по одной
таблице, могут браться из любой части XML-схемы. По
способу определения отношения «один к многим» новый алгоритм позволяет выполнять декомпозицию в реляционные таблицы
зависимостей с несколькими значения. Алгоритм
не только создает строки на основе кардинального числа используемых
элементов/атрибутов, но и строки на основе типа
группы модели.
В новой XML-декомпозиции также имеется средство проверки строгого
типа и обработчик преобразования типов. Во время
регистрации средство запрещает выполнять декомпозицию элементов/атрибутов по целевым
столбцам, если предполагается, что тип декларированной схемы несовместим с типом
соответствующих целевых столбцов. Но при этом разрешено преобразование
типов, если оно возможно. Например, элемент/атрибут
целевого типа можно сопоставить со столбцом символьного типа.
Благодаря новой архитектуре и алгоритму сравнение
начальной производительности показывает, что новая декомпозиция аннотированных
XML-схем выполняется намного быстрее
декомпозиции с помощью XML Extender.
Анализ переноса
Выполним анализ переноса
из декомпозиции с помощью XML Extender к декомпозиции
аннотированных XML-схем:
-
Перенос сопоставленного документа:
Для
использования новых функций пользователи должны перенести свою схему DAD в аннотированную XML-схему. Возможно, это составляет самую большую часть
переноса. Для облегчения этой задачи имеется инструментальное средство,
описанное ниже. Это средство позволяет преобразовывать
XML-схемы в документы аннотированных XML-схем на основе DAD;
-
Добавление нового шага регистрации:
Теперь пользователи должны зарегистрировать аннотированную XML-схему в хранилище
XML-схем. Этот шаг аналогичен шагу
enable_collection в XML Extender. Но в XML Extender этот
шаг не является обязательным, поэтому у некоторых пользователей вообще нет наборов.
При использовании декомпозиции аннотированных XML-схем этот шаг является обязательным для регистрации XML-схем в хранилище схем, он должен быть выполнен до выполнения декомпозиции любых XML-документов относительно XML-схемы;
-
Перенос вызова
хранимых процедур: Новый вызов хранимых процедур выглядит
следующим образом:
xdbDecompXML ( rschema , xmlschemaname , xmldoc , documentid , validation ,
reserved , reserved , reserved ) |
rschema:
Реляционная схема, в которой создан объект XSRObject. Объект
XSRObject создается как последовательность регистрации и завершения
XML-схемы, которая аннотируется в данном
случае для декомпозиции.
xmlschemaname:
Имя объекта XSRObject, содержащее XML-схему,
описывающую посредством аннотаций, как следует выполнять
декомпозицию XML-документа.
xmldoc:
Этот
параметр типа BLOB используется для передачи XML-документа для
декомпозиции.
documentid:
Идентификатор XML-документа. Идентификатор используется для отчета с
данными диагностики в файле db2diag.log и также возвращается как часть
сообщения об ошибке.
validation:
Должно быть задано значение 1, если XML-документ будет проверяться при
дроблении. В противном случае необходимо задать значение ноль.
reserved:
Все зарезервированные параметры должны передаваться как null значения.
Имеется пять
вариантов этой хранимой процедуры, основанные на размере
XML-документов, с которыми будет выполняться декомпозиция. Все варианты имеют одинаковые параметры,
за исключением размера BLOB, используемого для передачи в XML-документ.
В таблице 2 описаны различные варианты хранимой процедуры.
Таблица 2. Различные варианты хранимой процедуры
|
Имя хранимой процедуры
|
Соответствующая хранимая процедура XML Extender
|
Макс. размер документа, для которого можно выполнить декомпозицию
| |
SYSPROC.XDBDECOMPXML
|
DB2XML.DXXSHREDXML
|
1 МБ
| |
SYSPROC.XDBDECOMPXML10MB
|
нет
|
10 МБ
| |
SYSPROC.XDBDECOMPXML25MB
|
нет
|
25 МБ
| |
SYSPROC.XDBDECOMPXML50MB
|
нет
|
50 МБ
| |
SYSPROC.XDBDECOMPXML75MB
|
нет
|
75 МБ
| |
SYSPROC.XDBDECOMPXML100MB
|
DB2XML.DXXSHREDXML100MB
|
100 МБ
|
Обратите внимание, что
хранимые процедуры аннотированных XML-схем принадлежат к схеме SYSPROC и являются встроенными.
В отличие от XML
Extender, для их использования не требуется включение базы данных;
-
Обработка ошибок: Теперь новая хранимая
процедура возвращает SQLCA с соответствующим кодами SQLCODE и SQLSTATE, которые
встроены в приложение обработки ошибок при использовании SQL.
Это позволяет приложениям использовать для обработки SQL-ошибок существующую инфраструктуру (при ее
наличии). SQLCA можно использовать для форматирования
и формирования локализованных сообщений.
Обратите внимание, что, как и все новые
связанные с XML функции, введенные в DB2 Viper, новая декомпозиция аннотированных
XML-схем также поддерживается только базами данных в кодировке Unicode
и базами данных с одним разделом.
Инструментальное средство преобразования XML-схем
Утилита преобразования схем DAD в аннотированные XML-схемы облегчает пользователям процесс преобразования XML-схем в аннотированные
XML-схемы на основе правил сопоставления, описанных в DAD.
XML-схема и схема DAD должны описывать один набор
XML-документов, хотя допустимо, что
XML-схема может описывать расширенный набор документов, описываемых схемой DAD.
Пользователи, не имеющие
XML-схем, могут легко их создать из соответствующих DTD и даже XML-документов с помощью инструментальных средств, которые можно бесплатно
найти в Интернет. Затем эту XML-схему можно обработать инструментом преобразования схем DAD в аннотированные
XML-схемы и получить аннотированную XML-схему.
Инструментальное средство поддерживает импорт, включение и переопределение конструкций
XML-схемы. (Другими словами, если XML-схема разбросана по множеству
документов с XML-схемами с помощью импорта, включения или переопределения, при необходимости можно использовать только путь для
основного документа схемы - документа, посредством которого можно найти все
документы с XML-схемами, созданными с помощью импорта, включения или
переопределения).Инструментальное средство также создает аннотации для
деклараций элементов/атрибутов в документах схемы. Обратите внимание, что схемы DAD
не поддерживают пространств имен, поэтому в данном сценарии невозможно использовать конструкцию
импорта.
Usage:
DAD2AS dad_filename.dad primary_schema_doc.xsd defaultSQLSchemaName
|
Для данной утилиты требуется три входных набора - файл схемы DAD,
основной документ XML-схемы и SQL-схема по умолчанию, в которой находятся
таблицы. На основании информации о сопоставлении, определенной в
DAD, средство преобразует заданную XML-схему в аннотируемую
XML-схему, которую можно использовать в
функции декомпозиции аннотированных XML-схем в DB2 Viper.
Параметры
Предполагается, что
заданная схема (RDB_NODE) DAD, которая может в текущий момент использоваться при дроблении
XML Extender, является действительной схемой DAD. В ней содержится
информация о сопоставлении для данного инструментального средства. Утилита считывает
DAD-файл, выполняет сопоставление и применяет его к
соответствующим элементам/атрибутам в XML-схеме, предоставленной
вторым параметром.
XML-схема должна соответствовать схеме DAD; в ней не должно быть
элементов/атрибутов, используемых в любом контексте в схеме DAD, не
определенном в том же контексте в XML-схеме. Другими словами, схемы
DAD и XML должны работать с одним семейством
XML-документов. (Если пользователи не имеют XML-схемы, а только
DTD, они могут с помощью различных инструментов преобразовать DTD в XML-схему).
Инструмент предполагает, что ни один из элементов/атрибутов, определенных в
XML-схеме, не находится ни в каком пространстве имен, так как
классификация по пространству имен элементов/атрибутов в схеме DAD не поддерживается
.
Пользователям перед запуском этого инструмента рекомендуется сохранять копии своих
документов схем, так как изменяется
основной документ схемы, и любой документ, являющийся частью схемы,
на который указывает ссылка с использованием конструкций xsd:include, xsd:import или
xsd:redefine.
Третий параметр используется для классификации неклассифицированных
ссылок таблицы. Если ссылка в таблице не классифицирована в схеме DAD,
считается, что она находится в заданной по умолчанию SQL-схеме.
Однако этот параметр требуется, даже если классифицированы все таблицы в схеме
DAD.
Примечание: Применение этого инструментального средства несколько раз к
одним документам схемы приводит к ошибке во время разблокирования
декомпозиции в XSR, так как при каждом запуске инструмент добавляет одинаковый набор
сопоставлений к одному набору элементов/атрибутов.
Необходимые условия для использования инструментального средства
-
JRE 1.4.2 или JRE 1.5;
-
Файлы JAR для Eclipse Modeling Framework;
-
Файлы JAR для модуля XSD;
-
Файлы JAR для xml4j-4_2_2 или аналогичного Xerces-J.
Ссылки для загрузки данных инструментальных средств приводятся ниже.
Запуск инструментального средства
Утилита написана на Java™, поэтому работает на всех платформах с поддержкой JRE. Для удобства использования с операционной системой Windows предоставлены файлы .bat®. Файлы .bat задают переменные PATH и CLASSPATH. Пользователи должны задавать пути
JAR-файлов в переменных CLASSPATH и JDK в соответствии с
установкой. Имеется два типа .bat файлов, а именно
Dad2AS_Eclipse.bat и Dad2AS_DB2DWB.bat. Файл
Dad2AS_Eclipse.bat настроен для пользователей, загрузивших Eclipse
и соответствующие модули непосредственно с Web-сайта www.eclipse.org, файл Dad2AS_DB2DWB.bat
предназначен для пользователей, загрузивших DB2 Developer Workbench. Обратите внимание,
что если загружен DB2 Developer Workbench, все необходимые
модули устанавливаются автоматически.
Пример
В
файле загрузки в области «Загрузка» также содержится пример. Разархивировав загруженный файл, его можно найти во вложенной папке Sample. В примере имеется файл схемы DAD,
исходная XML-схема и преобразованная аннотированная XML-схема,
созданная с помощью этого инструментального средства.
Файл со схемой DAD - Order.dad.
Исходный XSD-файл - Order.xsd.
Аннотированная XML-схема, созданная с помощью
данного инструментального средства, - файл Order_AS.xsd.
Обратите внимание, что после вставки аннотаций в файл
Order_AS.xsd этот файл для удобства
запускается с помощью XML-инструмента структурной распечатки программы.
Ограничения для инструментального средства
- Не
поддерживается аннотация db2-xdb:condition, соответствующая декларации элемента/атрибута для условия,
заданного в некорневом элементе в схеме
DAD с помощью конструкции <condition>. Аннотацию можно добавить вручную или можно
изменить соответствующий источник данных.
Заключение
Декомпозиция аннотированных XML-схем представляет собой новую
функцию пакета DB2 Viper. Эта функция создана заново
с использованием новых алгоритмов и языка сопоставления. Язык сопоставления и
алгоритмы предоставляют большую гибкость, эффективность и систематизированный способ декомпозиции XML-документов. Можно выполнять декомпозицию XML-схем,
значительно отличающихся по форме от целевых реляционных
схем. Первые результаты сравнения производительности показывают, что новая функция декомпозиции аннотированных XML-схем выполняется намного быстрее, чем выполнение декомпозиции в XML Extender. В свете преимуществ по производительности, гибкости и предсказуемости результатов, предлагаемых новой функцией, перенос декомпозиции аннотированных XML-схем в DB2
Viper также является выгодным.
Средство преобразования схем DAD в аннотированные XML-схемы позволяет во время
переноса преобразовать схемы DAD в эквивалентные аннотированные
XML-схемы, что значительно облегчает задачу переноса.
Загрузка | Описание | Имя | Размер | Метод загрузки |
|---|
| DAD to annotated XML schema converter tool | DAD2AS.zip | 30KB | HTTP |
|---|
Ресурсы Научиться
Получить продукты и технологии
-
Загрузите DB2 Viper и самостоятельно протестируйте декомпозицию XML-схем;
-
Загрузите Eclipse SDK;
-
Загрузите Xerces-J;
-
Создайте свой проект разработки с помощью
пробного ПО IBM
, которое можно загрузить непосредственно с сайта developerWorks.
Обсудить
Об авторе  | |  | Майанк Прадхан (Mayank Pradhan) - инженер-консультант в IBM, работает в группе XML-технологий. В настоящее время входит в состав группы разработки функции декомпозиции аннотированных XML-схем, реализуемой в DB2 Viper. Ранее входил в состав группы разработки XML Extender. |
Выскажите мнение об этой странице
|  |