テーブルおよび列への XSD 要素および属性の明示的なマッピング (SQLXML 4.0)
XSD スキーマを使用してリレーショナル データベースの XML ビューを作成するときには、スキーマの要素と属性をデータベースのテーブルと列にマップする必要があります。 データベースのテーブルおよびビューの行は、XML ドキュメントの要素にマップされます。 データベースの列値は属性または要素にマップされます。
注釈付き XSD スキーマに対して XPath クエリを指定する場合、スキーマ内の要素と属性のデータは、マップ先のテーブルと列から取得されます。 データベースから単一の値を取得するには、XSD スキーマに指定されているマッピングに、リレーションとフィールドの両方の指定が必要です。 要素または属性の名前が、マップ先のテーブル、ビューまたは列名と同じでない場合は、sql:relation 注釈と sql:field 注釈を使用して、XML ドキュメントの要素または属性から、データベースのテーブル、ビューまたは列へのマッピングを指定します。
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 注釈では、要素または属性がデータベース列にマップされます。 スキーマ内の XML ノードをデータベース列にマップするには、sql:field 注釈を追加します。 空のコンテンツ要素に sql:field は指定できません。
使用例
次の例を使用した実際のサンプルを作成するには、特定の条件を満たす必要があります。 詳細については、「SQLXML のサンプル実行のための必要条件」を参照してください。
A. sql:relation 注釈と sql:field 注釈を指定する
この例では、XSD スキーマに複合型の <Contact> 要素が含まれ、この要素に子要素 <FName> と <LName>、および属性 ContactID が指定されています。
ここでは、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>