sql:mapped を使用した XML ドキュメントからのスキーマ要素の除外
適用対象: SQL Server Azure SQL データベース
既定のマッピングでは、XSD スキーマのすべての要素と属性が、データベースのテーブルまたはビューと列にマップされます。 XSD スキーマで、データベース テーブル (ビュー) または列にマップされず、XML に表示されない要素を作成する場合は、 sql:mapped 注釈を指定できます。
sql:mapped注釈は、スキーマを変更できない場合や、スキーマを使用して他のソースからの XML を検証し、データベースに格納されていないデータが含まれている場合に特に便利です。 sql:mapped注釈は、マッピングされていない要素と属性が XML ドキュメントに表示されないという点で、sql:is-constant とは異なります。
sql:mapped注釈はブール値 (0 = false、1 = true) を受け取ります。 指定できる値は 0、1、true、false です。
例
次の例を使用した実際のサンプルを作成するには、特定の条件を満たす必要があります。 詳細については、「
A. sql:mapped 注釈を指定する
他のソースからの XSD スキーマがあるとします。 この XSD スキーマは、ContactID、FirstName>、LastName、および HomeAddress 属性を持つ<Person.Contact 要素で構成されます。
AdventureWorks データベースの Person.Contact テーブルにこの XSD スキーマをマッピングする場合、Employees テーブルには従業員の自宅住所が格納されないため、 sql:mapped は HomeAddress 属性で指定されます。 この結果、マッピング スキーマに対して Xpath クエリを指定すると、属性はデータベースにマップされず、結果の XML ドキュメント内に返されません。
スキーマの残りの部分に対しては、既定のマッピングが適用されます。 <Person.Contact> 要素は Person.Contact テーブルにマップされ、すべての属性は Person.Contact テーブル内の同じ名前の列にマップされます。
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:element name="Person.Contact">
<xsd:complexType>
<xsd:attribute name="ContactID" type="xsd:string"/>
<xsd:attribute name="FirstName" type="xsd:string" />
<xsd:attribute name="LastName" type="xsd:string" />
<xsd:attribute name="HomeAddress" type="xsd:string"
sql:mapped="false" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
スキーマに対してサンプル XPath クエリをテストするには
上のスキーマのコードをコピーして、テキスト ファイルに貼り付け、 sql-mapped.xml として保存します。
次のテンプレートをコピーして、テキスト ファイルに貼り付け、 sql-mapped.xml を保存したディレクトリに sql-mappedT.xml として保存します。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="sql-mapped.xml"> /Person.Contact[@ContactID < 10] </sql:xpath-query> </ROOT>
マッピング スキーマ (MySchema.xml) に指定するディレクトリ パスは、テンプレートを保存するディレクトリに対する相対パスです。 次のように、絶対パスを指定することもできます。
mapping-schema="C:\MyDir\sql-mapped.xml"
SQLXML 4.0 テスト スクリプト (sqlxml4test.vbs) を作成し、それを使用してテンプレートを実行します。
詳細については、「 ADO を使用した SQLXML クエリの実行」を参照してください。
結果セットは次のとおりです。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Person.Contact ContactID="1" FirstName="Gustavo" LastName="Achong" />
<Person.Contact ContactID="2" FirstName="Catherine" LastName="Abel" />
<Person.Contact ContactID="3" FirstName="Kim" LastName="Abercrombie" />
<Person.Contact ContactID="4" FirstName="Humberto" LastName="Acevedo" />
<Person.Contact ContactID="5" FirstName="Pilar" LastName="Ackerman" />
<Person.Contact ContactID="6" FirstName="Frances" LastName="Adams" />
<Person.Contact ContactID="7" FirstName="Margaret" LastName="Smith" />
<Person.Contact ContactID="8" FirstName="Carla" LastName="Adams" />
<Person.Contact ContactID="9" FirstName="Jay" LastName="Adams" />
</ROOT>
ContactID、FirstName、および LastName が存在しますが、HomeAddress は、マッピング スキーマが sql:mapped 属性に 0 を指定したためではありません。