使用 sql:url-encode 请求对 BLOB 数据的 URL 引用(XDR 架构)

重要说明重要提示

本主题是针对早期应用程序提供的参考。以后不会就该功能继续进行开发。请避免在新的开发工作中使用此功能。请改用带批注的 XSD 架构创建 XML 视图。有关详细信息,请参阅带批注的 XSD 架构简介 (SQLXML 4.0)。可以将现有带批注的 XDR 架构转换为 XSD 架构。有关详细信息,请参阅将带批注的 XDR 架构转换为等效的 XSD 架构 (SQLXML 4.0)

在带批注的 XDR 架构中,如果属性(或元素)映射到 Microsoft SQL Server 中的 BLOB 列,则将在 XML 中以 Base 64 编码格式返回数据。有关 SQL Server 数据类型及其对应 XML 数据类型的说明,请参阅数据类型强制(XDR 架构)

如果希望返回对数据的引用 (URI) 以便稍后可使用此引用检索二进制格式的 BLOB 数据,请指定 sql:url-encode 批注。

指定 sql:url-encode 批注可指示应返回字段的 URL,而非字段的值。sql:url-encode 根据主键生成 URL 中的单独选择。可以使用 sql:key-fields 批注指定主键。有关详细信息,请参阅使用 sql:key-fields 标识键列 (SQLXML 4.0)

sql:url-encode 批注接受布尔类型的值(0 = FALSE,1 = TRUE)。sql:url-encode 不能与 sql:use-cdata 一起使用,也不能用在以下任何属性类型上:ID、IDREF、IDREFS、NMTOKEN 或 NMTOKENS。

示例

若要创建使用以下示例的工作示例,必须满足一些要求。有关详细信息,请参阅运行 SQLXML 示例的要求

A. 指定 sql:url-encode 以获取对 BLOB 数据的 URL 引用

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

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
   xmlns:dt="urn:schemas-microsoft-com:datatypes"
   xmlns:sql="urn:schemas-microsoft-com:xml-sql">
   <ElementType name="ProductPhoto" sql:relation="Production.ProductPhoto" 
                 sql:key-fields="ProductPhotoID" >
      <AttributeType name="ProductPhotoID" />
      <AttributeType name="LargePhoto" />

      <attribute type="ProductPhotoID" />
      <attribute type="LargePhoto" sql:url-encode="1" />
   </ElementType>
</Schema>

针对该架构测试示例 XPath 查询

  1. 复制上面的架构代码,并将它粘贴到文本文件中。将文件另存为 UrlEncodeXdr.xml。

  2. 复制以下模板,并将它粘贴到文本文件中。在保存 UrlEncodeXdr.xml 的相同目录中将该文件另存为 UrlEncodeXdrT.xml。

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="UrlEncodeXdr.xml">
        /ProductPhoto[@ProductPhotoID=100]
      </sql:xpath-query>
    </ROOT>
    

    为映射架构 (UrlEncodeXdr.xml) 指定的目录路径是相对于模板保存目录的相对路径。也可以指定绝对路径,例如:

    mapping-schema="C:\MyDir\UrlEncodeXdr.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>