データベースで XML スキーマ コレクションを管理するための DDL

サーバー上の XML スキーマ コレクションの管理」で説明したように、データベースに XML スキーマ コレクションを作成して、作成したコレクションを xml 型の変数や列に関連付けることができます。SQL Server には、データベースでスキーマ コレクションを管理するために、次の DDL ステートメントが用意されています。

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>

上記のスキーマは、データベースに格納できる、異なる型のコンポーネントを示しています。データベースに格納できるコンポーネントには、SomeAttribute、SomeType、OrderType、CustomerType、Customer、Order、CustomerID、OrderID、OrderDate、RequiredDate、および ShippedDate があります。

コンポーネントのカテゴリ

データベースに格納されるスキーマ コンポーネントは、次のように分類されます。

  • ELEMENT

  • ATTRIBUTE

  • TYPE (単純型用または複合型用)

  • ATTRIBUTEGROUP

  • MODELGROUP

次に例を示します。

  • SomeAttribute は、ATTRIBUTE コンポーネントです。

  • SomeTypeOrderType、および CustomerType は、TYPE コンポーネントです。

  • Customer は、ELEMENT コンポーネントです。

スキーマをデータベースにインポートするとき、SQL Server ではスキーマ自体は格納されません。代わりに、SQL Server によって個々のさまざまなコンポーネントが格納されます。つまり、<Schema> タグは格納されず、定義されているコンポーネントのみが保持されます。すべてのスキーマの要素は保持されません。<Schema> タグにそのコンポーネントの既定の動作を指定する属性が含まれている場合、次の表に示すように、そのような属性はインポート処理中にスキーマ コンポーネントに移動されます。

属性名

動作

attributeFormDefault

form 属性が存在しないスキーマ内のすべての属性の宣言に適用され、値は attributeFormDefault 属性の値に設定されます。

elementFormDefault

form 属性が存在しないスキーマ内のすべての要素の宣言に適用され、値は elementFormDefault 属性の値に設定されます。

blockDefault

block 属性が存在しないすべての要素の宣言と型定義に適用され、値は blockDefault 属性の値に設定されます。

finalDefault

final 属性が存在しないすべての要素の宣言と型定義に適用され、値は finalDefault 属性の値に設定されます。

targetNamespace

対象の名前空間に属するコンポーネントに関する情報がメタデータに格納されます。