Solicitando referências URL a dados BLOB usando sql:encode (SQLXML 4.0)
Em um esquema XSD anotado, quando um atributo (ou elemento) é mapeado para uma coluna BLOB no Microsoft SQL Server, os dados são retornados no formato codificado em Base 64 no XML.
Caso queira que uma referência aos dados (um URI) seja retornada e que possa ser usada posteriormente para recuperar os dados BLOB em um formato binário, especifique a anotação sql:encode
. Você pode especificar sql:encode
em um atributo ou elemento de tipo simples.
Especifique a anotação sql:encode
para indicar que deve ser retornada uma URL para o campo em vez do valor do campo. sql:encode
depende da chave primária para gerar uma seleção singleton na URL. A chave primária pode ser especificada usando a sql:key-fields
anotação.
À anotação sql:encode
é possível atribuir o valor "url" ou "default". Um valor "default" retorna dados codificados na base 64.
A anotação sql:encode
não pode ser usada com sql:use-cdata
ou nos tipos de atributo ID, IDREF, IDREFS, NMTOKEN ou NMTOKENS. Ele também não pode ser usado com o atributo fixo XSD.
Observação
As colunas de tipo BLOB não podem ser usadas como parte de uma chave ou chave estrangeira.
Exemplos
Para criar exemplos de funcionamento usando os exemplos a seguir, é necessário atender a determinados requisitos. Para obter mais informações, consulte Requisitos para executar exemplos SQLXML.
a. Especificando sql:encode para obter uma referência URL aos dados BLOB
Neste exemplo, o esquema de mapeamento especifica sql:encode
no atributo LargePhoto para recuperar a referência de URI para uma foto específica do produto (em vez de recuperar os dados binários no formato codificado em 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>
Para testar uma consulta XPath de exemplo com relação ao esquema
Copie o código de esquema acima e cole-o em um arquivo de texto. Salve o arquivo como sqlEncode.xml.
Copie o modelo a seguir e cole-o em um arquivo de texto. Salve o arquivo como sqlEncodeT.xml no mesmo diretório onde você salvou 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>
O caminho de diretório especificado para o esquema de mapeamento (sqlEncode.xml) é relativo ao diretório onde o modelo foi salvo. Também é possível especificar um caminho absoluto, por exemplo:
mapping-schema="C:\SqlXmlTest\sqlEncode.xml"
Crie e use o script de teste SQLXML 4.0 (Sqlxml4test.vbs) para executar o modelo.
Para obter mais informações, consulte Usando o ADO para executar consultas SQLXML 4.0.
Este é o resultado:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<ProductPhoto ProductPhotoID="100"
LargePhoto="dbobject/Production.ProductPhoto[@ProductPhotoID="100"]/@LargePhoto" />
</ROOT>