Поделиться через


Представления каталога для XML

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

XML-индексы

XML-индексы входят в представление каталога sys.indexes с индексом типа 3. Столбец name при этом содержит имя XML-индекса.

Кроме того, XML-индексы записываются в представление каталога sys.xml_indexes. Оно содержит все столбцы представления sys.indexes и некоторые специфические столбцы, полезные при работе с XML-индексами. Значение NULL в столбце secondary_type определяет первичный XML-индекс; значения 'P', 'R' и 'V' определяют соответственно вторичные XML-индексы PATH, PROPERTY и VALUE.

Информацию о пространстве, занимаемом XML-индексами, можно получить при помощи возвращающей табличное значение функции sys.dm_db_index_physical_stats. Она предоставляет такую информацию об индексах всех типов, как число занимаемых ими страниц на диске, средний размер строки в байтах и число записей. Эта функция поддерживает и XML-индексы. Получить такие данные можно для каждой секции базы данных. XML-индексы используют ту же схему секционирования и функцию секционирования базовой таблицы.

Получение коллекций XML-схем

Коллекции XML-схем перечислены в представлении каталога sys.xml_schema_collections. Коллекция XML-схем «sys» определяется системой. Она содержит предопределенные пространства имен, которые можно использовать во всех пользовательских коллекциях XML-схем, не загружая их явно. Этот список содержит пространства имен xml, xs, xsi, fn и xdt. Двумя другими представлениями каталога являются sys.xml_schema_namespaces, в котором перечислены все пространства имен каждой коллекции XML-схем и sys.xml_components, в котором перечислены все компоненты каждой XML-схемы.

Встроенная функция XML_SCHEMA_NAMESPACE, schemaName, XmlSchemacollectionName, namespace-uri, позволяет получить экземпляр типа данных xml. Этот экземпляр содержит фрагменты для XML-схем, содержащихся в коллекции XML-схем, за исключением предопределенных XML-схем.

Перечислить содержимое коллекции XML-схем можно двумя способами:

  • написать запросы Transact-SQL, адресованные соответствующим представлениям каталога, связанным с коллекциями XML-схем;

  • воспользоваться встроенной функцией XML_SCHEMA_NAMESPACE(). К результатам этой функции можно применять методы типа данных xml. Однако изменять базовые XML-схемы нельзя.

Все это поясняют следующие примеры.

Пример. Перечисление пространств имен XML, входящих в коллекцию XML-схем

Выполните следующий запрос для коллекции XML-схем «myCollection»:

SELECT XSN.name
FROM    sys.xml_schema_collections XSC JOIN sys.xml_schema_namespaces XSN
    ON (XSC.xml_collection_id = XSN.xml_collection_id)
WHERE    XSC.name = 'myCollection'   

Пример. Перечисление содержимого коллекции XML-схем

Следующая инструкция перебирает содержимое коллекции XML-схем «myCollection» реляционной схемы dbo.

SELECT XML_SCHEMA_NAMESPACE (N'dbo', N'myCollection')

Отдельные XML-схемы из коллекции можно получить как экземпляры типа данных xml, указав целевое пространство имен в качестве третьего аргумента функции XML_SCHEMA_NAMESPACE(). Это показано в следующем примере.

Пример. Вывод конкретной схемы из коллекции XML-схем

Следующая инструкция выводит XML-схему с целевым пространством имен «https://www.microsoft.com/books» из коллекции XML-схем «myCollection» реляционной схемы dbo.

SELECT XML_SCHEMA_NAMESPACE (N'dbo', N'myCollection', 
N'https://www.microsoft.com/books')

Запросы XML-схем

Запрашивать XML-схемы, загруженные в коллекцию XML-схем, можно перечисленными ниже способами.

  • Написать адресованные представлениям каталога запросы Transact-SQL о получении пространств имен XML-схем.

  • Создать таблицу со столбцом данных типа xml для хранения XML-схем и их загрузки в систему типов XML. Данные из XML-столбца можно запросить при помощи методов типа данных xml. Кроме того, можно создать для этого столбца XML-индекс. Однако при этом подходе в приложении нужно поддерживать согласованность между XML-схемами, хранимыми в XML-столбце, и системой типов XML. Например, при удалении пространства имен XML-схемы из системы типов XML для сохранения согласованности необходимо будет удалить его и из таблицы.

См. также

Другие ресурсы