sql:is-constant を使用した、定数要素の作成 (XDR スキーマ)
重要 : |
---|
このトピックは、レガシ アプリケーションの参照用として用意されています。この機能は今後更新されません。新しい開発作業では、この機能の使用を避け、注釈付き XSD スキーマを使用して XML ビューを作成してください。詳細については、「注釈付き XSD スキーマの概要 (SQLXML 4.0)」を参照してください。既存の注釈付き XDR スキーマは、XSD スキーマに変換できます。詳細については、「注釈付き XDR スキーマから同等の XSD スキーマへの変換 (SQLXML 4.0)」を参照してください。 |
既定のマッピングでは、XDR スキーマのすべての要素と属性がデータベースのテーブルと列にマップされます。XDR スキーマに作成する要素を、データベース テーブルや列にマップせず、XML には表示するように指定することもできます。このような要素を定数要素といいます。定数要素を作成するには、sql:is-constant 注釈を使用します。sql:is-constant はブール値 (0 = FALSE、1 = TRUE) をとります。
この注釈は <ElementType> に指定します。ElementType はどのデータベース テーブルにもマップされないので、定数要素になります。sql:is-constant 注釈は次の目的に使用できます。
- 最上位要素を XML ドキュメントに追加する。XML では、ドキュメントに 1 つの最上位要素 (<root> 要素) が必要です。
- コンテナ要素を作成する。たとえば、すべての注文を包括する <Orders> 要素などを作成します。
例
次の例を使用した実際のサンプルを作成するには、特定の条件を満たす必要があります。詳細については、「SQLXML のサンプル実行のための必要条件」を参照してください。
A. sql:is-constant を指定してコンテナ要素を追加する
この注釈付き XDR スキーマでは、<OrderList> が、すべての <Orders>サブ要素を格納する定数要素として定義されています。ここでは OrderList<ElementType> に sql:is-constant 注釈が指定されており、どのデータベース テーブルにもマップされない定数であることが示されています。<OrderList> 要素はデータベース テーブルまたは列にマップされませんが、結果の XML には <Orders> サブ要素を含むコンテナ要素として表示されます。
<?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="Sales.SalesOrderHeader" >
<AttributeType name="SalesOrderID" />
<attribute type="SalesOrderID" />
</ElementType>
<ElementType name="OrderList" sql:is-constant="1">
<element type="Orders">
<sql:relationship
key-relation="Sales.Customer"
foreign-relation="Sales.SalesOrderHeader"
key="CustomerID"
foreign-key="CustomerID" />
</element>
</ElementType>
<ElementType name="Sales.Customer" >
<AttributeType name="CustomerID" />
<attribute type="CustomerID" />
<element type="OrderList" />
</ElementType>
</Schema>
スキーマに対してサンプル XPath クエリをテストするには
上のスキーマのコードをコピーして、テキスト ファイルに貼り付け、isConstant-xdr.xml として保存します。
次のテンプレートをコピーして、テキスト ファイルに貼り付け、isConstant-xdr.xml を保存したディレクトリに isConstant-xdrT.xml として保存します。このテンプレートの XPath クエリでは、CustomerID 属性の値が 1 の<Sales.Customer> 要素がすべて選択されます。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql" > <sql:xpath-query mapping-schema="isConstant-xdr.xml" > /Sales.Customer[@CustomerID=1] </sql:xpath-query> </ROOT>
マッピング スキーマ (isConstant-xdr.xml) に指定するディレクトリ パスは、テンプレートを保存するディレクトリに対する相対パスです。次のように、絶対パスを指定することもできます。
mapping-schema="C:\MyDir\isConstant-xdr.xml"
SQLXML 4.0 テスト スクリプト (sqlxml4test.vbs) を作成し、それを使用してテンプレートを実行します。
詳細については、「ADO を使用した、SQLXML 4.0 クエリの実行」を参照してください。
次に結果セットを示します。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Sales.Customer CustomerID="1">
<OrderList>
<Sales.SalesOrderHeader SalesOrderID="43860" />
<Sales.SalesOrderHeader SalesOrderID="44501" />
<Sales.SalesOrderHeader SalesOrderID="45283" />
<Sales.SalesOrderHeader SalesOrderID="46042" />
</OrderList>
</Sales.Customer>
</ROOT>