使用 sql:encode 请求 BLOB 数据的 URL 引用 (SQLXML 4.0)

在带批注的 XSD 架构中,将属性(或元素)映射为 Microsoft SQL Server 中的 BLOB 列时,将在 XML 中以 Base 64 编码格式返回数据。

如果希望在稍后使用返回的数据引用 (URI) 来检索二进制格式的 BLOB 数据,请指定 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. 指定 sql:encode 以获取 BLOB 数据的 URL 引用

在本示例中,映射架构针对 LargePhoto 属性指定 sql:encode,以便检索特定产品照片的 URI 引用(而不是检索 Base 64 编码格式的二进制数据)。

<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>