次の方法で共有


sql:relation の使用 (XDR スキーマ)

ms171756.note(ja-jp,SQL.90).gif重要 :
このトピックは、レガシ アプリケーションの参照用として用意されています。この機能は今後更新されません。新しい開発作業では、この機能の使用を避け、注釈付き XSD スキーマを使用して XML ビューを作成してください。詳細については、「注釈付き XSD スキーマの概要 (SQLXML 4.0)」を参照してください。既存の注釈付き XDR スキーマは、XSD スキーマに変換できます。詳細については、「注釈付き XDR スキーマから同等の XSD スキーマへの変換 (SQLXML 4.0)」を参照してください。

XDR スキーマ内の XML ノードをデータベース テーブルにマップするには、sql:relation 注釈を追加します。テーブル名とビュー名は、sql:relation 注釈の値として指定します。

sql:relation 注釈は、XDR スキーマ内の <ElementType><element>、または <attribute> ノードに追加できます。sql:relation では、スキーマ内の <ElementType><element>、または <attribute> から、データベース内のテーブルおよびビューへのマッピングを指定します。

<ElementType>sql:relation を指定した場合は、この注釈のスコープが、その <ElementType> のすべての属性と子要素の指定に適用されます。これによって、注釈の記述を簡素化できます。<element> に直接 sql:relation を指定した場合も、<ElementType> 内で指定される属性にはスコープが設定されます。sql:relation 注釈は、<AttributeType> では無視されます。

sql:relation 注釈は、Microsoft SQL Server で有効な識別子が XML で無効な場合に便利です。たとえば、"Order Details" は、SQL Server では有効なテーブル名ですが、XML では無効です。この場合、sql:relation 注釈を使用して、次のようなマッピングを指定できます。

<ElementType name="OD" sql:relation="[Order Details]">

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

A. 属性を含む <ElementType> に sql:relation を指定する

この例では、XDR スキーマは <Contacts> 要素と ContactIDFirstName、および LastName 属性で構成されています。sql:relation 注釈は <ElementType> に指定されており、これによって <Contacts> 要素が Person.Contact テーブルにマッピングされます。このマッピングのスコープは、<ElementType> 内のすべての属性に適用されます。したがって、すべての属性は Person.Contact テーブル内の列にマップされます。

属性については、既定のマッピングが適用されます。たとえば、これらの属性は Person.Contact テーブル内の同じ名前の列にマップされます。

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <ElementType name="Contacts" sql:relation="Person.Contact" >
    <AttributeType name="ContactID" />
    <AttributeType name="FirstName" />
    <AttributeType name="LastName" />

    <attribute type="ContactID" />
    <attribute type="FirstName" />
    <attribute type="LastName" />
  </ElementType>
</Schema>

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

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

  2. 次のテンプレートをコピーして、テキスト ファイルに貼り付け、sqlRelationXdr.xml を保存したディレクトリに sqlRelationXdrT.xml として保存します。このテンプレート内のクエリでは、ContactID が 1 の連絡先が選択されます。

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="sqlRelationXdr.xml">
        /Contacts[@ContactID="1"]
      </sql:xpath-query>
    </ROOT>
    

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

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

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

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

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

B. 副要素と属性を含む <ElementType> に sql:relation を指定する

この例では、XDR スキーマは <Contacts> 要素と ContactID 属性、および <FirstName> および <LastName> 子要素で構成されています。sql:relation 注釈は <ElementType> に指定されており、これによって <Contacts> 要素が Person.Contact テーブルにマッピングされます。このマッピングのスコープは、<ElementType> 内のすべての属性に適用されます。したがって、すべての属性は Person.Contact テーブル内の列にマップされます。

属性については、既定のマッピングが適用されます。これらの属性は Person.Contact テーブル内の同じ名前の列にマップされます。

この例では、content 属性は <FirstName> および <LastName> 子要素に指定されています。既定では要素はフィールドではなくテーブルにマップされるので、content=textOnly 属性を指定しないと、子要素は Person.Contact テーブル内の FirstName および LastName 列にそれぞれマップされません。

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">

  <ElementType name="FirstName" content="textOnly"/>
  <ElementType name="LastName" content="textOnly"/>
  <ElementType name="Contacts" sql:relation="Person.Contact" >
    <AttributeType name="ContactID" />

    <attribute type="ContactID" />
    <element type="FirstName" />
    <element type="LastName"  />
  </ElementType>
</Schema>

別の方法として、content=textOnly 属性を指定する代わりに element 定義内に sql:field 注釈を指定し、次の例のように子要素 (FirstName、LastName) を対応する列名にマップすることもできます。

<element type="FirstName" sql:field="FirstName" />
<element type="LastName" sql:field="LastName" />

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

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

  2. 次のテンプレートをコピーして、テキスト ファイルに貼り付け、UsingSqlRelationXdr.xml を保存したディレクトリに UsingSqlRelationXdrT.xml として保存します。このテンプレート内のクエリでは、ContactID が 1 の連絡先が選択されます。

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="UsingSqlRelationXdr.xml">
        /Contacts[@ContactID="1"]
      </sql:xpath-query>
    </ROOT>
    

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

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

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

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

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

参照

関連項目

SQLXML 4.0 での XPath クエリの使用

ヘルプおよび情報

SQL Server 2005 の参考資料の入手