sql:encode を使用した、BLOB データへの URL 参照の要求 (SQLXML 4.0)
注釈付き XSD スキーマで、属性 (または要素) が Microsoft SQL Server の BLOB 列にマップされた場合、XML 内に返されるデータは Base 64 エンコード形式になります。
後で BLOB データをバイナリ形式で取得するときに使用できるよう、データへの参照 (URI) を返す場合は、sql:encode 注釈を指定します。 sql:encode は、単純型の属性または要素に指定できます。
sql:encode 注釈を指定すると、フィールド値の代わりにフィールドへの URL を返すことができます。 sql:encode では主キーに基づいて、URL での単一選択が生成されます。 主キーは、sql:key-fields 注釈を使用して指定できます。
sql:encode 注釈には、"url" または "default" の値を割り当てることができます。 "default" の場合、データは Base 64 エンコード形式で返されます。
sql:encode 注釈は、sql:use-cdata と共に使用したり、ID、IDREF、IDREFS、NMTOKEN、または NMTOKENS 属性型に指定したり、 XSD の fixed 属性で使用することはできません。
注 |
---|
BLOB 型の列は、キーの一部または外部キーとして使用することはできません。 |
使用例
次の例を使用した実際のサンプルを作成するには、特定の条件を満たす必要があります。 詳細については、「SQLXML のサンプル実行のための必要条件」を参照してください。
A. BLOB データへの URL 参照を取得するため、sql:encode を指定する
この例では、マッピング スキーマで LargePhoto 属性に sql:encode を指定して、バイナリ データを Base 64 エンコード形式で取得する代わりに特定の製品写真への URI 参照を取得します。
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:element name="ProductPhoto" sql:relation="Production.ProductPhoto"
sql:key-fields="ProductPhotoID" >
<xsd:complexType>
<xsd:attribute name="ProductPhotoID" type="xsd:int" />
<xsd:attribute name="LargePhoto" type="xsd:string" sql:encode="url" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
スキーマに対してサンプル XPath クエリをテストするには
上のスキーマのコードをコピーして、テキスト ファイルに貼り付け、 sqlEncode.xml として保存します。
次のテンプレートをコピーして、テキスト ファイルに貼り付け、 sqlEncode.xml を保存したディレクトリに sqlEncodeT.xml として保存します。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="sqlEncode.xml"> /ProductPhoto[@ProductPhotoID=100] </sql:xpath-query> </ROOT>
マッピング スキーマ (sqlEncode.xml) に指定するディレクトリ パスは、テンプレートを保存するディレクトリに対する相対パスです。 次のように、絶対パスを指定することもできます。
mapping-schema="C:\SqlXmlTest\sqlEncode.xml"
SQLXML 4.0 テスト スクリプト (sqlxml4test.vbs) を作成し、それを使用してテンプレートを実行します。
詳細については、「ADO を使用した、SQLXML 4.0 クエリの実行」を参照してください。
次に結果セットを示します。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<ProductPhoto ProductPhotoID="100"
LargePhoto="dbobject/Production.ProductPhoto[@ProductPhotoID="100"]/@LargePhoto" />
</ROOT>