格納されている XML スキーマ コレクションの表示
CREATE XML SCHEMA COLLECTION を使用して XML スキーマ コレクションをインポートすると、メタデータにスキーマ コンポーネントが格納されます。固有の関数 xml_schema_namespace を使用して、XML スキーマ コレクションを再構築できます。この関数は、xml データ型のインスタンスを返します。
たとえば、次のクエリでは、AdventureWorks データベースの実稼働リレーショナル スキーマから XML スキーマ コレクション (ProductDescriptionSchemaCollection
) が取得されます。
SELECT xml_schema_namespace(N'Production',N'ProductDescriptionSchemaCollection')
GO
XML スキーマ コレクションに含まれるスキーマを 1 つだけ表示する場合は、xml_schema_namespace
によって返された xml 型の結果に対して、XQuery を指定できます。
SELECT xml_schema_namespace(N'RelationalSchemaName',N'XmlSchemaCollectionName').query('
/xs:schema[@targetNamespace="TargetNameSpace"]
')
GO
たとえば、次のクエリでは、ProductDescriptionSchemaCollection
XML スキーマ コレクションに含まれる、製品保証書とメンテナンスの XML スキーマ情報を取得しています。
SELECT xml_schema_namespace(N'Production',N'ProductDescriptionSchemaCollection').query('
/xs:schema[@targetNamespace="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain"]
')
GO
次のクエリに示すように、省略可能な対象名前空間を 3 番目のパラメータとして xml_schema_namespace
関数に渡すことにより、特定のスキーマをコレクションから取得することもできます。
SELECT xml_schema_namespace(N'Production',N'ProductDescriptionSchemaCollection', N'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain')
GO
CREATE XML SCHEMA COLLECTION を使用してデータベースに XML スキーマ コレクションを作成すると、スキーマ コンポーネントがメタデータに格納されます。SQL Server が理解したスキーマ コンポーネントのみが格納されることに注意してください。コメント、注釈、または XSD 以外の属性は格納されません。したがって、xml_schema_namespace によって再構築されたスキーマは、機能的には元のスキーマと同じですが、同じように見えるとは限りません。たとえば、元のスキーマにあったものと同じプレフィックスはありません。xml_schema_namespace によって返されるスキーマでは、対象名前空間のプレフィックスとして t が使用されており、他の名前空間用に ns1、ns2 などが使用されています。
XML スキーマの同一のコピーを保持するには、ファイルまたはデータベース テーブルの xml 型の列に XML スキーマを保存する必要があります。
sys.xml_schema_collections カタログ ビューでも、XML スキーマ コレクションに関する情報が返されます。この情報には、コレクションの名前、作成日、およびコレクションの所有者が含まれます。