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


Просмотр хранимой коллекции XML-схем

После импорта коллекции XML-схем с помощью команды Создать коллекцию схем XML компоненты схемы будут храниться в метаданных. Можно использовать внутреннюю функцию xml_schema_namespace, чтобы повторно построить коллекцию XML-схем. Функция возвращает экземпляр данных типа xml.

Например, следующий запрос извлекает коллекцию XML-схем (ProductDescriptionSchemaCollection) в реляционной схеме продукции в базе данных AdventureWorks.

SELECT xml_schema_namespace(N'Production',N'ProductDescriptionSchemaCollection')
GO

Если нужно увидеть только одну схему из коллекции, можно задать запрос XQuery для результата типа xml, возвращаемого функцией xml_schema_namespace.

SELECT xml_schema_namespace(N'RelationalSchemaName',N'XmlSchemaCollectionName').query('
/xs:schema[@targetNamespace="TargetNameSpace"]
')
GO

Например, следующий запрос находит сведения об XML-схеме поддержки и гарантий на продукт в коллекции XML-схем ProductDescriptionSchemaCollection.

SELECT xml_schema_namespace(N'Production',N'ProductDescriptionSchemaCollection').query('
/xs:schema[@targetNamespace="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain"]
')
GO

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

SELECT xml_schema_namespace(N'Production',N'ProductDescriptionSchemaCollection', N'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain')
GO

Когда в базе данных создается коллекция XML-схем с помощью инструкции CREATE XML SCHEMA COLLECTION, она сохраняет компоненты схемы в метаданных. Обратите внимание, что сохраняются только те компоненты схемы, которые понимает SQL Server. Любые комментарии, заметки или несоответствующие XSD-схеме атрибуты не сохраняются. Следовательно, схема, повторно сконструированная посредством функции xml_schema_namespace, функционально эквивалентна первоначальной схеме, но не обязательно будет так же выглядеть. Например, не будет тех же префиксов, которые были в первоначальной схеме. Схема, возвращаемая функцией xml_schema_namespace, использует префикс t для целевого пространства имен и префиксы ns1, ns2 и так далее для всех остальных.

Если нужно сохранить точную копию XML-схем, следует сохранить схему в файл или в таблицу базы данных в столбец типа xml.

Представление каталога sys.xml_schema_collections также возвращает сведения о коллекциях XML-схем. Сюда входят, например сведения об имени коллекции, дате создания и владельце коллекции.