次の方法で共有


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

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

sql:field 注釈を使用すると、注釈付きスキーマ内の要素または属性からデータベース内の列へのマッピングを指定できます。この注釈は、要素または属性に追加できます。注釈付きスキーマの <AttributeType> 要素では、sql:field 注釈は無視されます。sql:field 属性では、テーブルまたはビュー内のマッピング先の列の名前を指定します。

たとえば、列の名前が XDR で指定されるスキーマのフィールドと一致しない場合、sql:field を使用して列名を指定できます。sql:field の値は、列名である必要があります。database.owner.table.columnname などのように、4 部構成の列名は指定できません。これは、すべての注釈で値に列名を指定する場合に当てはまります。

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

A. XDR スキーマの <attribute> に sql:field を指定する

次の注釈付きスキーマでは、スキーマの <attribute> 要素に sql:field 注釈が指定されています。この sql:field 属性では、スキーマ内の Email 属性が Person.Contact テーブル内の EmailAddress 列にマップされます。

XDR スキーマ内の属性名 ContactID は Person.Contact テーブル内の ContractID 列と同じなので、この属性に sql:field は指定されていません。このマッピングは既定です。

<?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="Email" />
    <attribute type="ContactID" />
    <attribute type="Email" sql:field="EmailAddress" />
</ElementType>
</Schema>

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

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

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

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

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

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

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

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

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> 
  <Contacts ContactID="1" Email="gustavo0@adventure-works.com" /> 
</ROOT>

マッピング スキーマでは属性をグローバルに宣言できます。たとえば、<AttributeType...><ElementType> のスコープ外で宣言できます。宣言後、<attribute type=...> で属性を参照することができます。次のスキーマがその例です。

次のスキーマでは、LastName 属性がグローバルに宣言され、Customer <ElementType> のスコープで参照されています。

<?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">
<AttributeType name="LastName" />
<ElementType name="Contacts" sql:relation="Person.Contact" >
    <AttributeType name="ContactID" />
    <AttributeType name="FName" />
    <AttributeType name="LName" />
    
    <attribute type="CustomerID" />
    <attribute type="FName" sql:field="FirstName" />
    <attribute type="LName" sql:field="LastName" />
</ElementType>
</Schema>

B. XDR スキーマの <element> に sql:field を指定する

次の注釈付きスキーマでは、スキーマの <element> に sql:field 注釈が指定されています。この sql:field 注釈では、スキーマ内の <Email> 子要素が Person.Contact テーブル内の EmailAddress 列にマップされます。

スキーマ内の <Contacts> 要素の <Email> 子要素は、注釈が明示的に指定されていないため、Person.Contact テーブルの EmailAddress 列にはマップされません。要素の既定のマッピングはフィールドではなくリレーションに行われます。ただし、<ElementType>textOnly 属性が含まれる場合は例外です。

<?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="Email" />
  <ElementType name="Contacts" sql:relation="Person.Contact" >
    <AttributeType name="ContactID" />

    <attribute type="ContactID" />
    <element type="Email" sql:field="EmailAddress" />
  </ElementType>
</Schema>

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

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

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

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

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

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

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

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

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> 
  <Contacts ContactID="1"> 
    <Email>gustavo0@adventure-works.com</Email> 
  </Contacts> 
</ROOT>

電子メール アドレスの <ElementType>content="textOnly" が指定されており、SQL 列の既定の名前 ("EmailAddress") が使用される場合、子要素に sql:field 注釈は必要ありません。この場合、<EmailAddress> 子要素は Person.Contact テーブル内の EmailAddress 列にマップされます。

<?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="EmailAddress" content="textOnly" />
  <ElementType name="Contacts" sql:relation="Person.Contact" >
    <AttributeType name="ContactID" />

    <attribute type="ContactID" />
    <element type="EmailAddress" />
  </ElementType>
</Schema>

参照

関連項目

SQLXML 4.0 での XPath クエリの使用

ヘルプおよび情報

SQL Server 2005 の参考資料の入手