xml (Transact-SQL)に関する記事で説明されているように、SQL Serverは、xml データ型を介して XML データのネイティブ ストレージを提供します。 必要に応じて、XML スキーマ コレクションを使って xml 型の変数や列と XSD スキーマを関連付けることができます。 XML スキーマ コレクションにはインポートした XML スキーマが格納され、その後このコレクションを次の操作に使用します。
XML インスタンスの検証
データベースに保存されている通りにXMLデータを入力する
XML スキーマ コレクションは、データベース内のテーブルに似たメタデータ エンティティです。 作成、変更、削除ができます。 CREATE XML SCHEMA COLLECTION (Transact-SQL) ステートメントで指定されたスキーマは、新しく作成された XML スキーマ コレクション オブジェクトに自動的にインポートされます。 データベース内の既存のコレクション オブジェクトに追加のスキーマまたはスキーマ コンポーネントをインポートするには、ALTER XML SCHEMA COLLECTION (Transact-SQL) ステートメントを使用します。
「 型指定された XML と型指定されていない XML」記事で説明したように、スキーマが関連付けられる列や変数に格納されている XML を、型指定された XML と呼びます。これは、インスタンス データに必要なデータ型情報をスキーマが提供しているためです。 SQL Serverでは、この種類の情報を使用してデータ ストレージを最適化します。
クエリ処理エンジンでも、型の確認、クエリの最適化、およびデータの変更にスキーマが使用されます。
また、SQL Serverは、xml インスタンスを検証するために、xml 型指定された関連付けられた XML スキーマ コレクションを使用します。 XML インスタンスがスキーマを使ってコンパイルされると、そのデータベースはインスタンスを型情報と共にシステムに格納できます。 それ以外の場合は、インスタンスを拒否します。
固有の関数 XML_SCHEMA_NAMESPACE を使用して、データベースに格納されているスキーマ コレクションを取得できます。 詳細については、「 格納されている XML スキーマ コレクションの表示」を参照してください。
また、XML スキーマ コレクションは、XML 変数、パラメーター、および列の型指定にも使用できます。
スキーマ コレクションを管理するための DDL
データベースに XML スキーマ コレクションを作成し、 xml 型の変数や列に関連付けることができます。 データベース内のスキーマ コレクションを管理するために、SQL Serverは次の DDL ステートメントを提供します。
CREATE XML SCHEMA COLLECTION (Transact-SQL) スキーマ コンポーネントをデータベースにインポートします。
ALTER XML SCHEMA COLLECTION (Transact-SQL) 既存の XML スキーマ コレクション内のスキーマ コンポーネントを変更します。
DROP XML SCHEMA COLLECTION (Transact-SQL) 完全な XML スキーマ コレクションとそのすべてのコンポーネントを削除します。
XML スキーマ コレクションとそのコレクションに含まれるスキーマを使用するには、まず CREATE XML SCHEMA COLLECTION ステートメントを使用して、コレクションとスキーマを作成する必要があります。 スキーマ コレクションを作成したら、 xml 型の変数および列を作成し、スキーマ コレクションに関連付けることができます。 スキーマ コレクションを作成すると、さまざまなスキーマ コンポーネントがメタデータに格納されます。 ALTER XML SCHEMA COLLECTION ステートメントを使用して、既存のスキーマにコンポーネントを追加したり、既存のスキーマ コレクションに新しいスキーマを追加することもできます。
スキーマ コレクションを削除するには、DROP XML SCHEMA COLLECTION ステートメントを使用します。 このステートメントを実行すると、スキーマ コレクションに含まれているすべてのスキーマが削除され、コレクション オブジェクトが削除されます。 スキーマ コレクションを削除する前に、DROP XML SCHEMA COLLECTION (Transact-SQL) で説明されている条件を満たす必要があります。
スキーマ コンポーネントについて
CREATE XML SCHEMA COLLECTION ステートメントを使用すると、さまざまなスキーマ コンポーネントがデータベースにインポートされます。 スキーマ コンポーネントには、スキーマの要素、属性、および型の定義などがあります。 DROP XML SCHEMA COLLECTION ステートメントを使用すると、コレクション全体が削除されます。
CREATE XML SCHEMA COLLECTION ステートメントを使用すると、スキーマ コンポーネントがさまざまなシステム テーブルに保存されます。
たとえば、次のスキーマを考えてみます。
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="uri:Cust_Orders2"
xmlns="uri:Cust_Orders2" >
<xsd:attribute name="SomeAttribute" type="xsd:int" />
<xsd:complexType name="SomeType" />
<xsd:complexType name="OrderType" >
<xsd:sequence>
<xsd:element name="OrderDate" type="xsd:date" />
<xsd:element name="RequiredDate" type="xsd:date" />
<xsd:element name="ShippedDate" type="xsd:date" />
</xsd:sequence>
<xsd:attribute name="OrderID" type="xsd:ID" />
<xsd:attribute name="CustomerID" />
<xsd:attribute name="EmployeeID" />
</xsd:complexType>
<xsd:complexType name="CustomerType" >
<xsd:sequence>
<xsd:element name="Order" type="OrderType"
maxOccurs="unbounded" />
</xsd:sequence>
<xsd:attribute name="CustomerID" type="xsd:string" />
<xsd:attribute name="OrderIDList" type="xsd:IDREFS" />
</xsd:complexType>
<xsd:element name="Customer" type="CustomerType" />
</xsd:schema>
上記のスキーマは、データベースに格納できる、異なる型のコンポーネントを示しています。 これには、 、 、 、 、 、 、 、 、 、 、および があります。
コンポーネントのカテゴリ
データベースに格納されるスキーマ コンポーネントは、次のように分類されます。
要素
属性
TYPE (単純型用または複合型用)
属性グループ
MODELGROUP
次に例を示します。
は ATTRIBUTE コンポーネントです。
、、はTYPE コンポーネントです。
は ELEMENT コンポーネントです。
データベースにスキーマをインポートする場合、SQL Serverはスキーマ自体を格納しません。 代わりに、SQL Serverにはさまざまな個々のコンポーネントが格納されます。 つまり、Schema タグは格納されず、定義されているコンポーネントのみが保持されます。 すべてのスキーマの要素は保持されません。 Schema タグにそのコンポーネントの既定の動作を指定する属性が含まれている場合、次の表に示すように、そのような属性はインポート処理中にスキーマ コンポーネントに移動されます。
| 属性名 | 動作 |
|---|---|
| アトリビュートフォームデフォルト | form 属性が存在しないスキーマ内のすべての属性の宣言に適用され、値は attributeFormDefault 属性の値に設定されます。 |
| elementFormDefault | form 属性が存在しないスキーマ内のすべての要素の宣言に適用され、値は elementFormDefault 属性の値に設定されます。 |
| blockDefault | block 属性が存在しないすべての要素の宣言と型定義に適用され、値は blockDefault 属性の値に設定されます。 |
| 最終デフォルト | final 属性が存在しないすべての要素の宣言と型定義に適用され、値は finalDefault 属性の値に設定されます。 |
| targetNamespace | 対象の名前空間に属するコンポーネントに関する情報がメタデータに格納されます。 |
XML スキーマ コレクションに対する権限
次の操作を行うためには必要な権限を持っている必要があります。
XML スキーマ コレクションを作成する、または読み込む
XML スキーマ コレクションを変更する
XML スキーマ コレクションを削除する
XML スキーマ コレクションを、 xml 型の列、変数、およびパラメーターの型指定に使用したり、テーブルまたは列の制約で使用する
SQL Server セキュリティ モデルでは、すべてのオブジェクトに対する CONTROL 権限が許可されます。 この権限が許可されたユーザーは、オブジェクトに対する他のすべての権限を取得したことになります。 オブジェクトの所有者も、オブジェクトに対するすべての権限を持っています。
オブジェクトの所有者とオブジェクトの CONTROL 権限があるユーザーは、オブジェクトに対する任意の権限を許可することができます。 オブジェクトの所有者でなく、CONTROL 権限を持っていないユーザーでも、WITH GRANT OPTION が指定されていれば、オブジェクトに対する権限を許可できます。 たとえば、ユーザー A は、WITH GRANT OPTION により、XML スキーマ コレクション S に対して REFERENCES 権限を持っていますが、S に対する他の権限は持っていないとします。ユーザー A は、スキーマ コレクション S に対する REFERENCES 権限をユーザー B に許可することができます。
セキュリティ モデルでは、XML スキーマ コレクションを作成および使用する権限を許可したり、あるユーザーから他のユーザーに所有権を転送することが許可されています。 次の記事では、XML スキーマ コレクションの権限について説明しています。
XML スキーマ コレクションに対する権限の許可
XML スキーマ コレクションを作成する権限を許可する方法、および XML スキーマ コレクション オブジェクトに対する権限を許可する方法について説明します。
XML スキーマ コレクションに対する権限の取り消し
権限の取り消しを使用して XML スキーマ コレクションの作成を回避する方法、および XML スキーマ コレクション オブジェクトに対する権限を取り消す方法について説明します。
XML スキーマ コレクションに対する権限の拒否
XML スキーマ コレクションを作成する権限を拒否する方法、および XML スキーマ コレクション オブジェクトに対する権限を拒否する方法について説明します。
XML スキーマおよびスキーマ コレクションに関する情報の取得
カタログ ビュー sys.xml_schema_collections には XML スキーマ コレクションが列挙されます。 XML スキーマ コレクション がシステムにより定義されています。 このコレクションには、すべてのユーザー定義 XML スキーマ コレクションで明示的に読み込むことなく使用できる定義済みの名前空間が含まれています。 一覧には 、、、、および 用の名前空間が含まれています。 この他に、各 XML スキーマ コレクションのすべての名前空間を列挙する 、および各 XML スキーマのすべての XML スキーマ コンポーネントを列挙する の 2 つのカタログ ビューがあります。
組み込み関数 、により xml データ型のインスタンスが生成されます。 このインスタンスには、XML スキーマ コレクションに含まれるスキーマ (定義済みの XML スキーマを除く) の XML スキーマ フラグメントが含まれます。
XML スキーマ コレクションのコンテンツは、次のようにして列挙できます。
XML スキーマ コレクションの適切なカタログ ビューに対してTransact-SQLクエリを記述します。
組み込み関数 を使用します。 この関数の出力には xml データ型のメソッドを適用できます。 ただし、基になる XML スキーマは変更できません。
このことを次の例で説明します。
例一覧
XML スキーマ コレクションでの XML 名前空間の列挙
XML スキーマ コレクション に次のクエリを実行します。
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 スキーマ コレクション のコンテンツを列挙します。
SELECT XML_SCHEMA_NAMESPACE (N'dbo', N'myCollection');
XML_SCHEMA_NAMESPACE() の 3 番目の引数として対象になる名前空間を指定することで、コレクション内の個別の XML スキーマを xmlデータ型のインスタンスとして取得できます。 これを次の例に示します。
XML スキーマ コレクションからの指定したスキーマの出力
次のステートメントを実行すると、リレーショナル スキーマ の XML スキーマ コレクション から、架空のターゲット名前空間 で XML スキーマが出力されます。
SELECT XML_SCHEMA_NAMESPACE (N'dbo', N'myCollection',
N'https://www.microsoft.com/was-books')
XML スキーマへのクエリ
XML スキーマ コレクションに読み込んだ XML スキーマには、次のようにしてクエリを実行できます。
XML スキーマ名前空間のカタログ ビューに対してTransact-SQLクエリを記述します。
xml データ型の列を含むテーブルを作成し、その列に XML スキーマを保存して XML 型のシステムに読み込みます。 その後、 xml データ型のメソッドを使用して XML 列にクエリを実行できます。 また、この列に XML インデックスを作成することもできます。 ただしこの方法を使用する場合は、XML 列に保存されている XML スキーマと XML 型のシステムとの整合性をアプリケーションで保つ必要があります。 たとえば、XML 型のシステムから XML スキーマ名前空間を削除する場合、整合性を保つためにテーブルからもその名前空間を削除する必要があります。
関連するコンテンツ
- 格納されている XML スキーマ コレクションの表示
- 含まれているスキーマをマージするためのスキーマの前処理
- サーバー上の XML スキーマ コレクションの要件と制限
- SQL プロジェクトの XML スキーマ コレクション