テーブル/列へのカスタム XSD マッピング (SQLXML)
適用対象: SQL Server Azure SQL データベース
XSD スキーマを使用してリレーショナル データベースの XML ビューを作成するときには、スキーマの要素と属性をデータベースのテーブルと列にマップする必要があります。 データベースのテーブルおよびビューの行は、XML ドキュメントの要素にマップされます。 データベースの列値は属性または要素にマップされます。
注釈付き XSD スキーマに対して XPath クエリを指定する場合、スキーマ内の要素と属性のデータは、マップ先のテーブルと列から取得されます。 データベースから単一の値を取得するには、XSD スキーマに指定されているマッピングに、リレーションとフィールドの両方の指定が必要です。 要素/属性の名前が、マップ先のテーブル/ビューまたは列名と同じ名前でない場合、xml ドキュメント内の要素または属性とデータベース内のテーブル (ビュー) または列の間のマッピングを指定するために、 sql:relation および sql:field 注釈が使用されます。
sql-relation
XSD スキーマの XML ノードをデータベース テーブルにマップするために、 sql:relation 注釈が追加されます。 テーブル (ビュー) の名前は、 sql:relation 注釈の値として指定されます。
sql:relationが要素に指定されている場合、この注釈のスコープは、その要素の複合型定義で記述されているすべての属性と子要素に適用されるため、注釈を記述するためのショートカットが提供されます。
sql:relation注釈は、Microsoft SQL Server で有効な識別子が XML で有効でない場合にも役立ちます。 たとえば、"Order Details" は SQL Server では有効なテーブル名ですが、XML では有効ではありません。 このような場合、 sql:relation 注釈を使用してマッピングを指定できます。次に例を示します。
<xsd:element name="OD" sql:relation="[Order Details]">
sql-field
sql-field注釈は、要素または属性をデータベース列にマップします。 sql:field注釈が追加され、スキーマ内の XML ノードがデータベース列にマップされます。 空のコンテンツ要素 sql:field を指定することはできません。
例
次の例を使用した実際のサンプルを作成するには、特定の条件を満たす必要があります。 詳細については、「
A. sql:relation 注釈と sql:field 注釈を指定する
この例では、XSD スキーマは、<FName> および <LName> 子要素と ContactID 属性を持つ複合型の <Contact> 要素で構成されています。
sql:relation注釈は<Contact>要素を AdventureWorks データベースの Person.Contact テーブルにマップします。 sql:field注釈は、<FName>要素を FirstName 列にマップし、<LName> 要素を LastName 列にマップします。
ContactID 属性に注釈は指定されません。 このため、既定のマッピングが使用され、属性が同じ名前の列にマップされます。
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:element name="Contact" sql:relation="Person.Contact" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="FName"
sql:field="FirstName"
type="xsd:string" />
<xsd:element name="LName"
sql:field="LastName"
type="xsd:string" />
</xsd:sequence>
<xsd:attribute name="ContactID"
type="xsd:integer" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
スキーマに対してサンプル XPath クエリをテストするには
上のスキーマのコードをコピーして、テキスト ファイルに貼り付け、 MySchema-annotated.xml として保存します。
以下のテンプレートをコピーし、テキスト ファイルに貼り付けます。 MySchema-annotated.xml を保存したディレクトリに MySchema-annotatedT.xml として保存します。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="MySchema-annotated.xml"> /Contact </sql:xpath-query> </ROOT>
マッピング スキーマ (MySchema-annotated.xml) に指定するディレクトリ パスは、テンプレートを保存するディレクトリに対する相対パスです。 次のように、絶対パスを指定することもできます。
mapping-schema="C:\SqlXmlTest\MySchema-annotated.xml"
SQLXML 4.0 テスト スクリプト (sqlxml4test.vbs) を作成し、それを使用してテンプレートを実行します。
詳細については、「 ADO を使用した SQLXML クエリの実行」を参照してください。
次に結果セットの一部を示します。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Contact ContactID="1">
<FName>Gustavo</FName>
<LName>Achong</LName>
</Contact>
.....
</ROOT>