sql:use-cdata を使用した、CDATA セクションの作成 (SQLXML 4.0)
適用対象: SQL Server Azure SQL Database
XML では、文字がマークアップ文字として処理されないよう、文字を含むテキスト ブロックをエスケープするときに CDATA セクションを使用します。
Microsoft SQL Server のデータベースには、XML パーサーによってマークアップ文字として扱われる文字を含めることができます。たとえば、山かっこ (< と >)、等しくない記号 (<=)、アンパサンド (>) はマークアップ文字として扱われます。 この種類の特殊文字は、CDATA セクションで囲むことでマークアップ文字として扱われないようにできます。 CDATA セクション内の文字は、XML パーサーでプレーン テキストとして扱われます。
sql:use-cdata注釈は、SQL Server によって返されるデータを CDATA セクションにラップすることを指定するために使用されます (つまり、sql:field で指定された列の値を CDATA セクションで囲む必要があるかどうかを示します)。 sql:use-cdata 注釈は、データベース列にマップされる要素でのみ指定できます。
sql:use-cdata 注釈はブール値 (0 = false、1 = true) を受け取ります。 指定できる値は 0、1、true、false です。
この注釈は、 sql:url-encode または ID、IDREF、IDREFS、NMTOKEN、および NMTOKENS 属性の型では使用できません。
例
次の例を使用した実際のサンプルを作成するには、特定の条件を満たす必要があります。 詳細については、「
A. 要素に対して sql:use-cdata を指定する
次のスキーマでは、<Address> 要素内の <AddressLine1> の sql:use-cdata が 1 (True) に設定されています。 この結果、データは CDATA セクション内に返されます。
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:element name="Address"
sql:relation="Person.Address"
sql:key-fields="AddressID" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="AddressID" type="xsd:string" />
<xsd:element name="AddressLine1" type="xsd:string"
sql:use-cdata="1" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
スキーマに対してサンプル XPath クエリをテストするには
上のスキーマのコードをコピーして、テキスト ファイルに貼り付け、 UseCData.xml として保存します。
次のテンプレートをコピーして、テキスト ファイルに貼り付け、 UseCData.xml を保存したディレクトリに UseCDataT.xml として保存します。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="UseCData.xml"> /Address[AddressID < 11] </sql:xpath-query> </ROOT>
マッピング スキーマ (UseCData.xml) に指定するディレクトリ パスは、テンプレートを保存するディレクトリに対する相対パスです。 次のように、絶対パスを指定することもできます。
mapping-schema="C:\SqlXmlTest\UseCData.xml"
SQLXML 4.0 テスト スクリプト (sqlxml4test.vbs) を作成し、それを使用してテンプレートを実行します。
詳細については、「ADO を使用した SQLXML 4.0 クエリの実行」を参照してください。
これは部分的な結果セットです。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Address>
<AddressID>1</CustomerID>
<AddressLine1>
<![CDATA[ 1970 Napa Ct. ]]>
</AddressLine1>
</Address>
<Address>
<AddressLine1>
<![CDATA[ 9833 Mt. Dias Blv. ]]>
</AddressLine1>
</Address>
...
</ROOT>