次の方法で共有


XSD 要素および属性の、テーブルおよび列への既定のマッピング [SQLXML 4.0]

既定では、XSD 注釈付きスキーマの複合型の要素は、指定されたデータベース内の同じ名前のテーブル (ビュー) にマップされ、単純型の要素または属性は、テーブル内の同じ名前の列にマップされます。

次の例を使用した実際のサンプルを作成するには、特定の条件を満たす必要があります。詳細については、「SQLXML のサンプル実行のための必要条件」を参照してください。

A. 既定のマッピングを指定する

この例では、XSD スキーマで注釈は指定されていません。<Person.Contact> 要素は複合型であり、既定では AdventureWorks データベース内の Person.Contact テーブルにマップされます。<Person.Contact> 要素のすべての属性 (ContactID、FirstName、LastName) は単純型であり、既定では Person.Contact テーブル内の同じ名前の列にマップされます。

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
  <xsd:element name="Person.Contact" >
     <xsd:complexType>
       <xsd:attribute name="ContactID"  type="xsd:string" /> 
       <xsd:attribute name="FirstName"   type="xsd:string" /> 
       <xsd:attribute name="LastName"    type="xsd:string" /> 
     </xsd:complexType>
  </xsd:element>
</xsd:schema>

スキーマに対してサンプル XPath クエリをテストするには

  1. 上のスキーマのコードをコピーして、テキスト ファイルに貼り付け、MySchema.xml として保存します。

  2. 次のテンプレートをコピーして、テキスト ファイルに貼り付け、MySchema.xml を保存したディレクトリに MySchemaT.xml として保存します。

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
        <sql:xpath-query mapping-schema="MySchema.xml">
            /Person.Contact
        </sql:xpath-query>
    </ROOT>
    

    マッピング スキーマ (MySchema.xml) に指定するディレクトリ パスは、テンプレートを保存するディレクトリに対する相対パスです。次のように、絶対パスを指定することもできます。

    mapping-schema="C:\SqlXmlTest\MySchema.xml"
    
  3. SQLXML 4.0 テスト スクリプト (sqlxml4test.vbs) を作成し、それを使用してテンプレートを実行します。

    詳細については、「ADO を使用した、SQLXML 4.0 クエリの実行」を参照してください。

次に結果セットの一部を示します。

<?xml version="1.0" encoding="UTF-8" ?>
<ROOT>
  <Person.Contact ContactID="1" FirstName="Gustavo" LastName="Achong"/>
  <Person.Contact ContactID="2" FirstName="Catherine" LastName="Abel"/>
   ...
</ROOT>

B. XML 要素をデータベース列にマップする

この例では、注釈が使用されず、既定のマッピングが行われます。<Person.Contact> 要素は複合型であり、データベース内の同じ名前のテーブルにマップされます。<FirstName> 要素と <LastName> 要素、および EmployeeID 属性は単純型なので、同じ名前の列にマップされます。前の例との唯一の違いは、FirstName フィールドと LastName フィールドのマップに要素を使用する点です。

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
  <xsd:element name="Person.Contact">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="FirstName" type="xsd:string" /> 
        <xsd:element name="LastName" type="xsd:string" /> 
      </xsd:sequence>
      <xsd:attribute name="ContactID" type="xsd:integer" /> 
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

スキーマに対してサンプル XPath クエリをテストするには

  1. 上のスキーマのコードをコピーして、テキスト ファイルに貼り付け、MySchemaElements.xml として保存します。

  2. 次のテンプレート (MySchemaElementsT.xml) を作成し、前の手順と同じディレクトリに保存します。

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
        <sql:xpath-query mapping-schema="MySchemaElements.xml">
            /Person.Contact
        </sql:xpath-query>
    </ROOT>
    

    マッピング スキーマに指定するディレクトリ パスは、テンプレートを保存するディレクトリに対する相対パスです。次のように、絶対パスを指定することもできます。

    mapping-schema="C:\SqlXmlTest\MySchemaElements.xml"
    
  3. SQLXML 4.0 テスト スクリプト (sqlxml4test.vbs) を作成し、それを使用してテンプレートを実行します。

    詳細については、「ADO を使用した、SQLXML 4.0 クエリの実行」を参照してください。

次に結果セットの一部を示します。

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <Person.Contact ContactID="1">
    <FirstName>Gustavo</FirstName>
    <LastName>Achong</LastName>
  </Person.Contact>
   ...
</ROOT>

C. XML 要素を XML データ型の列にマップする

この例では、注釈が使用されず、既定のマッピングが行われます。<Production.ProductModel> 要素は複合型であり、データベース内の同じ名前のテーブルにマップされます。ProductModelID 属性は単純型なので、同じ名前の列にマップされます。前の例との唯一の違いは、<Instructions> 要素が xsd:anyType 型によって、xml データ型の列にマップされている点です。

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
  <xsd:element name="Production.ProductModel">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="Instructions" type="xsd:anyType" /> 
      </xsd:sequence>
      <xsd:attribute name="ProductModelID" type="xsd:integer" /> 
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

xml データ型は、新しく SQL Server 2005 で導入されたデータ型です。

スキーマに対してサンプル XPath クエリをテストするには

  1. 上のスキーマのコードをコピーして、テキスト ファイルに貼り付け、MySchemaXmlAnyElements.xml として保存します。

  2. 次のテンプレート (MySchemaXmlAnyElementsT.xml) を作成し、前の手順と同じディレクトリに保存します。

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
        <sql:xpath-query mapping-schema="MySchemaXmlAnyElements.xml">
            /Production.ProductModel[@ProductModelID=7]
        </sql:xpath-query>
    </ROOT>
    

    マッピング スキーマに指定するディレクトリ パスは、テンプレートを保存するディレクトリに対する相対パスです。次のように、絶対パスを指定することもできます。

    mapping-schema="C:\SqlXmlTest\MySchemaXmlAnyElements.xml"
    
  3. SQLXML 4.0 テスト スクリプト (sqlxml4test.vbs) を作成し、それを使用してテンプレートを実行します。

    詳細については、「ADO を使用した、SQLXML 4.0 クエリの実行」を参照してください。

次に結果セットの一部を示します。

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <Production.ProductModel ProductModelID="7">
    <Instructions>
      <root xmlns="http:
//schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstru
ctions">
...
      </root>
    <Instructions>
  </Production.ProductModel>
</ROOT>

参照

関連項目

注釈付きスキーマのセキュリティに関する注意点 (SQLXML 4.0)
SQLXML 4.0 での xml データ型のサポート

その他の技術情報

xml データ型

ヘルプおよび情報

SQL Server 2005 の参考資料の入手