Compartilhar via


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 na 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 com a anotação sql:key-fields.

À 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. Ela também não pode ser usada com o atributo XSD fixed.

ObservaçãoObservaçã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 do 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 URI a uma foto de produto específica (em vez de recuperar os dados binários no formato codificado na 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

  1. Copie o código de esquema acima e cole-o em um arquivo de texto. Salve o arquivo como sqlEncode.xml.

  2. 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"
    
  3. 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 do 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>