次の方法で共有


sql:encode を使用した、BLOB データへの URL 参照の要求 (SQLXML 4.0)

適用対象: SQL Server Azure SQL データベース

注釈付き 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、IDREFS、NMTOKEN、または NMTOKENS 属性の型では使用できません。 XSD fixed 属性では使用できません。

Note

BLOB 型の列は、キーの一部または外部キーとして使用することはできません。

次の例を使用した実際のサンプルを作成するには、特定の条件を満たす必要があります。 詳細については、「REquirements for Running SQLXML Examples」を参照してください。

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 クエリをテストするには
  1. 上のスキーマのコードをコピーして、テキスト ファイルに貼り付け、 sqlEncode.xml として保存します。

  2. 次のテンプレートをコピーして、テキスト ファイルに貼り付け、 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"  
    
  3. 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>