在带批注的 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 固定 属性一起使用。
注释
BLOB 类型列不能用作键或外键的一部分。
例子
若要创建使用以下示例的工作示例,必须满足某些要求。 有关详细信息,请参阅 运行 SQLXML 示例的要求。
答: 指定 sql:encode 以获取对 BLOB 数据的 URL 引用
在此示例中,映射架构指定 sql:encode 了 LargePhoto 属性,以检索对特定产品照片的 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 查询
复制上面的架构代码,并将它粘贴到文本文件中。 将文件另存为 sqlEncode.xml。
复制以下模板,并将它粘贴到文本文件中。 将文件另存为 sqlEncodeT.xml 保存在保存 sqlEncode.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>