sql:map-field を使用した、結果の XML ドキュメントからのスキーマ要素の除外 (XDR スキーマ)
重要 : |
---|
このトピックは、レガシ アプリケーションの参照用として用意されています。この機能は今後更新されません。新しい開発作業では、この機能の使用を避け、注釈付き XSD スキーマを使用して XML ビューを作成してください。詳細については、「注釈付き XSD スキーマの概要 (SQLXML 4.0)」を参照してください。既存の注釈付き XDR スキーマは、XSD スキーマに変換できます。詳細については、「注釈付き XDR スキーマから同等の XSD スキーマへの変換 (SQLXML 4.0)」を参照してください。 |
既定のマッピングでは、XDR スキーマのすべての要素と属性がデータベースのテーブルと列にマップされます。XDR スキーマに作成する要素を、データベース テーブルや列にマップせず、XML にも表示しないように指定することもできます。これには、sql:map-field 注釈を指定します。
sql:map-field 注釈は、要素と属性をマップせず、XML ドキュメントにも出力しないという点で、sql:is-constant とは異なります。sql:map-field は、スキーマを変更できない場合に特に便利です。または、データベースに格納されていない、他のソースからのデータを含む XML を検証するときにも使用できます。
sql:map-field はブール値 (0 = FALSE、1 = TRUE) をとります。sql:map-field 注釈は、<attribute>、<element>、またはコンテンツがテキストのみ (content=textOnly) の <ElementTypes> に対してのみ有効です。この注釈は、テーブルにマップされる <element> または <ElementTypes> に対しては有効でありません。
例
次の例を使用した実際のサンプルを作成するには、特定の条件を満たす必要があります。詳細については、「SQLXML のサンプル実行のための必要条件」を参照してください。
A. sql:map-field 注釈を指定する
他のソースからの XDR スキーマがあるとします。この XDR スキーマは、ContactID、FirstName、LastName、および属性が指定された <Person.Contact> 要素で構成されています。
Person.Contact テーブルには従業員の自宅の住所が格納されていないので、この XDR スキーマをデータベース内の Person.Contact テーブルにマップする場合は、HomeAddress 属性に sql:map-field を指定します。このマッピング スキーマに対して Xpath クエリを指定すると、結果の XML ドキュメント内に、この属性は返されません。
スキーマの残りの部分に対しては、既定のマッピングが適用されます。<Person.Contact> 要素は Person.Contact テーブルにマップされ、すべての属性は Person.Contact テーブルの同じ名前の列にマップされます。既定のマッピングの詳細については、「XDR の要素と属性からテーブルと列への既定のマッピング」を参照してください。
<?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="Person.Contact" >
<AttributeType name="ContactID" />
<AttributeType name="FirstName" />
<AttributeType name="LastName" />
<AttributeType name="HomeAddress" />
<attribute type="ContactID" />
<attribute type="FirstName" />
<attribute type="LastName" />
<attribute type="HomeAddress" sql:map-field="0" />
</ElementType>
</Schema>
スキーマに対してサンプル XPath クエリをテストするには
上のスキーマのコードをコピーして、テキスト ファイルに貼り付け、mapField-xdr.xml として保存します。
次のテンプレートをコピーして、テキスト ファイルに貼り付け、mapField-xdr.xml を保存したディレクトリに mapField-xdrT.xml として保存します。このテンプレート内のクエリでは、ContactID が 1 の Person.Contact レコードが選択されます。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="mapField-xdr.xml"> /Person.Contact[@ContactID=1] </sql:xpath-query> </ROOT>
マッピング スキーマ (mapField-xdr.xml) に指定するディレクトリ パスは、テンプレートを保存するディレクトリに対する相対パスです。次のように、絶対パスを指定することもできます。
mapping-schema="C:\MyDir\mapField-xdr.xml"
SQLXML 4.0 テスト スクリプト (sqlxml4test.vbs) を作成し、それを使用してテンプレートを実行します。
詳細については、「ADO を使用した、SQLXML 4.0 クエリの実行」を参照してください。
次に結果セットを示します。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Person.Contact ContactID="1" FirstName="Gustavo" LastName = "Achong"/>
</ROOT>
マッピング スキーマで sql:map-field 属性に値 0 を指定しているので、EmployeeID と FirstName、Lastname は存在しますが、HomeAddress は存在しないことに注意してください。