sql:field の使用 (XDR スキーマ)
重要 : |
---|
このトピックは、レガシ アプリケーションの参照用として用意されています。この機能は今後更新されません。新しい開発作業では、この機能の使用を避け、注釈付き 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 クエリをテストするには
上のスキーマのコードをコピーして、テキスト ファイルに貼り付け、sqlFieldXdr.xml として保存します。
次のテンプレートをコピーして、テキスト ファイルに貼り付け、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"
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 クエリをテストするには
上のスキーマのコードをコピーして、テキスト ファイルに貼り付け、sqlFieldElementXdr.xml として保存します。
次のテンプレートをコピーして、テキスト ファイルに貼り付け、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"
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>