格納されている XML スキーマ コレクションの表示

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

CREATE XML SCHEMA COLLECTIONを使用して XML スキーマ コレクションをインポートすると、メタデータにスキーマ コンポーネントが格納されます。 組み込み関数 xml_schema_namespaceを使用して、XML スキーマ コレクションを再構築できます。 この関数は、 xml データ型のインスタンスを返します。

たとえば、次のクエリでは、ProductDescriptionSchemaCollectionデータベースの実稼働リレーショナル スキーマから XML スキーマ コレクション ( AdventureWorks2022 ) が取得されます。

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

XML スキーマ コレクションに含まれるスキーマを 1 つだけ表示するには、 によって返された xml xml_schema_namespace型の結果に対して 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 が使用され、他の名前空間には ns1ns2などが使用されています。

XML スキーマの同一のコピーを保持するには、ファイルまたはデータベース テーブルの xml 型の列に XML スキーマを保存する必要があります。

sys.xml_schema_collections カタログ ビューでも、XML スキーマ コレクションに関する情報が返されます。 この情報には、コレクションの名前、作成日、およびコレクションの所有者が含まれます。

関連項目