sql:is-constant を使用した、定数要素の作成 [SQLXML 4.0]
データベース テーブルまたは列にマップされない XSD スキーマの要素を定数要素といい、この要素を指定するには、sql:is-constant 注釈を使用します。この注釈はブール値 (0 = false、1 = true) をとります。指定できる値は 0、1、true、false です。sql:is-constant 注釈は、属性のない要素に指定できます。この注釈を値 true (または 1) と共に要素に指定した場合、その要素は XML ドキュメント内に表示されますが、データベースにはマップされなくなります。
sql:is-constant 注釈は次の目的に使用できます。
- 最上位要素を XML ドキュメントに追加する。XML では、ドキュメントに 1 つの最上位要素 (ルート要素) が必要です。
- コンテナ要素を作成する。たとえば、すべての注文をラップする <Orders> 要素などを作成します。
sql:is-constant 注釈は、<complexType> 要素に追加できます。
例
次の例を使用した実際のサンプルを作成するには、特定の条件を満たす必要があります。詳細については、「SQLXML のサンプル実行のための必要条件」を参照してください。
A. sql:is-constant を指定してコンテナ要素を追加する
この注釈付き XSD スキーマでは、<CustomerOrders> に sql:is-constant 属性を値 1 と共に指定して、定数要素として定義します。この結果、<CustomerOrders> はデータベース テーブルまたは列にマップされなくなります。この定数要素には、<Order> 子要素が含まれます。
<CustomerOrders> はデータベース テーブルまたは列にマップされませんが、結果の XML には <Order> 子要素を含むコンテナ要素として表示されます。
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:annotation>
<xsd:appinfo>
<sql:relationship name="CustOrders"
parent="Sales.Customer"
parent-key="CustomerID"
child="Sales.SalesOrderHeader"
child-key="CustomerID" />
</xsd:appinfo>
</xsd:annotation>
<xsd:element name="Customer" sql:relation="Sales.Customer" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="CustomerOrders" sql:is-constant="1" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Order" sql:relation="Sales.SalesOrderHeader"
sql:relationship="CustOrders"
maxOccurs="unbounded" >
<xsd:complexType>
<xsd:attribute name="SalesOrderID" type="xsd:integer" />
<xsd:attribute name="OrderDate" type="xsd:date" />
<xsd:attribute name="CustomerID" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="CustomerID" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
スキーマに対してサンプル XPath クエリをテストするには
上のスキーマのコードをコピーして、テキスト ファイルに貼り付け、isConstant.xml として保存します。
次のテンプレートをコピーして、テキスト ファイルに貼り付け、isConstant.xml を保存したディレクトリに isConstantT.xml として保存します。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="isConstant.xml"> Customer[@CustomerID=1] </sql:xpath-query> </ROOT>
マッピング スキーマ (isConstant.xml) に指定するディレクトリ パスは、テンプレートを保存するディレクトリに対する相対パスです。次のように、絶対パスを指定することもできます。
mapping-schema="C:\MyDir\isConstant.xml"
SQLXML 4.0 テスト スクリプト (sqlxml4test.vbs) を作成し、それを使用してテンプレートを実行します。
詳細については、「ADO を使用した SQLXML クエリの実行」を参照してください。
次に結果セットの一部を示します。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Customer CustomerID="1">
<CustomerOrders>
<Order SalesOrderID="43860" OrderDate="2001-08-01" CustomerID="1" />
<Order SalesOrderID="44501" OrderDate="2001-11-01" CustomerID="1" />
<Order SalesOrderID="45283" OrderDate="2002-02-01" CustomerID="1" />
<Order SalesOrderID="46042" OrderDate="2002-05-01" CustomerID="1" />
...
</CustomerOrders>
</Customer>
</ROOT>