В этом разделе подробно рассматриваются три основные темы, важные, когда XML и системы реляционных баз данных объединяются вместе: хранение документов XML в реляционных базах данных; поиск сохраненных документов XML; представление реляционных данных в форме XML. В начале обсуждаются различные способы, при помощи которых документы XML могут сохраняться в реляционной базе данных. После этого вводится наиболее важная форма хранения - использование типа данных XML. Затем показывается выборка сохраненных документов XML с использованием системных хранимых процедур и стандартного оператора insert. Также рассматривается другая проблема- представление реляционных данных в XML. В конце вкратце рассматривается язык XQuery и существующие методы XQuery в SQL Server.
SQL Server и XML
Как вы уже знаете, модель реляционных данных является лучшей моделью, если вы должны структурировать данные в соответствующую схему. С другой стороны, если используемые вами данные не полностью структурированы, вы должны знать, как моделировать эти данные. В этом случае хорошим выбором является XML, поскольку эта модель является независимой от платформы, которая обеспечивает переносимость слабоструктурированных данных. Тесная взаимосвязь существует между системами реляционных баз данных и документами XML, потому что целью современных систем баз данных является хранение данных любого вида. Существуют три основные техники хранения документов XML в реляционных базах данных: ♦ в виде «сырых» документов; ♦ разнесение документа по реляционным столбцам (выполнение…
SQL Server поддерживает все три общие техники для сохранения документов XML, рассмотренные в предыдущем разделе. ♦ «Сырые» документы. SQL Server использует типы данных varchar(max) и varbinary (мах) для хранения документов XML в качестве «сырых» документов. Этот подход не будет в дальнейшем обсуждаться в этой книге по причине его сложности. ♦ Декомпозиция. SQL Server может выполнять декомпозицию документа XML на раздельные столбцы таблиц, используя системную процедуру sp_xmi_preparedocument. Эта процедура выполняет синтаксический анализ предоставленного документа и представляет его узлы в виде дерева. (Полученное дерево может затем сохраняться в столбцах реляционных таблиц при использовании стандартного оператора insert и функции OpenXML.) ♦ Собственный формат…
Тип данных xml является базовым типом данных Transact-SQL. Это означает, что вы можете использовать тип данных xml таким же образом, каким вы используете любые другие стандартные типы данных, такие как integer или character. С другой стороны, тип данных xml имеет ряд ограничений, потому что столбец xml не может быть объявлен с помощью предложений unique, primary key или foreign key. В общем случае вы можете использовать тип данных xml для объявления: ♦ столбцов таблицы; ♦ переменных; ♦ входных или выходных параметров (в хранимых процедурах и в функциях, определенных пользователем). В примере 28.1 показано применение типа данных xml для объявления столбца таблицы.…
Database Engine внутренне сохраняет значения xml как большой двоичный объект. Без индекса для таких объектов во время выполнения запроса осуществляется декомпозиция, что может занять много времени. Поэтому причиной выполнять индексирование столбцов xml является увеличение производительности запроса. Система поддерживает первичный индекс xml и три типа вторичных индексов xml. Первичный индекс xml индексирует все теги, значения и пути в экземплярах XML столбца xml. Запросы используют первичный индекс xml для получения скалярных значений или вложенных деревьев xml. В примере 28.3 создается первичный индекс xml. Как вы можете видеть из примера 28.3, создание первичного индекса xml похоже на создание «нормального» индекса. Первичный…
Как вы уже знаете, документ XML может быть хорошо сформированным и правильным. Проверяться может только хорошо сформированный документ. Документ XML, который соответствует одной или более схемам, является достоверным в схеме и называется экземпляром документа в схеме. Схемы XML используются для выполнения более точных проверок в процессе компиляции запросов. Столбцы с типом данных xml, переменные и параметры могут быть типизированными (соответствуют набору схем) или не типизированными. Иными словами, когда типизированный экземпляр xml назначен столбцу типа данных xml, переменной или параметру, то система проверяет экземпляр. Рассмотрим использование схем XML, а затем подробно обсудим экземпляры типизированных XML.
Схема XML задает набор типов данных, которые существуют в конкретном пространстве имен. XML Schema (или XML Schema Definition Language) является языком определения данных для документов XML. SQL Server использует оператор create xml schema collection для импорта компонентов схемы в базу данных. В примере 28.5 показано использование этого оператора. В примере 28.5 показано, как оператор create xml schema collection может быть использован для каталогизации схемы EmployeeSchema в качестве объекта базы данных. Схема XML для примера 28.5 включает атрибуты (элементы) для служащих, такие как имя, фамилия и зарплата. Подробное обсуждение схем XML выходит за рамки этой книги. Обычно коллекция схемы XML…
Каждый типизированный столбец xml, переменная или параметр должны быть заданы с ассоциированными схемами. Чтобы сделать это, имя коллекции схем, которая была создана с использованием оператора create xml schema collection, должно быть записано внутри пары круглых скобок после имени экземпляра. В примере 28.6 показано это. Столбец xmiperson в примере 28.6 ассоциирован с коллекцией схем XML EmployeeSchema (см. пример 28.5). Это означает, что используются все спецификации из определенных схем для проверки правильности значения столбца xmiperson. Иными словами, когда вы добавляете новое значение в типизированный столбец xml (или изменяете существующее значение), проверяются все ограничения, заданные в схемах. Спецификация коллекции схем XML…
SQL Server поддерживает несколько представлений каталогов, связанных с XML Schema, наиболее важными из которых являются следующие: ♦ sys.xmi_schema_attributes возвращает строку для каждого компонента схемы XML, который является атрибутом; ♦ sys.xml_schema_elements возвращает строку для каждого компонента схемы XML, который является элементом; ♦ sys .xmi_schema_components возвращает строку для каждого компонента схемы XML.
Системная процедура sp_xmi_preparedocument читает текст XML, представленный ей в качестве ввода, выполняет синтаксический анализ и представляет преобразованный документ в виде дерева с различными узлами: элементы, атрибуты, текст и комментарии. В примере 28.8 показано использование системной процедуры sp_xmi_ ргерагedocument. Документ XML в примере 28.8 сохраняется в виде строки в переменной @doc. Эта строка дробится системной процедурой spxmipreparedocument. Процедура возвращает дескриптор (@hdoc), который затем может быть использован для доступа к вновь созданному представлению документа XML. Системная процедура spxmi removedocument удаляет внутреннее представление документа XML, заданное дескриптором документа, и делает недействительным этот дескриптор документа. В следующем разделе показано, как вы можете отыскивать…
Вы можете сгенерировать набор строк из документов и фрагментов XML и запросить его с помощью языка Transact-SQL. Это делается посредством OpenXML, который позволяет использовать операторы Transact-SQL для выделения данных из документа XML. Используя OpenXML, вы можете отыскивать данные из документа XML, как если бы они были реляционной таблицей. (OpenXML является международным стандартом для документов; он может быть свободно реализован множеством приложений на множестве платформ.) В примере 28.9 показано, как вы можете запрашивать документ из примера 28.8 с помощью OpenXML.
© 2021 serversql.ru. Все права защищены.