Condividi tramite


Richiesta di riferimenti URL a dati BLOB utilizzando sql:encode (SQLXML 4.0)

In uno schema XSD con annotazioni, quando viene eseguito il mapping di un attributo (o elemento) a una colonna BLOB in Microsoft SQL Server, i dati vengono restituiti in formato con codifica Base 64 all'interno di XML.

Se si desidera che venga restituito un riferimento ai dati (un URI) che possa essere utilizzato successivamente per recuperare i dati BLOB in un formato binario, specificare l'annotazione sql:encode. È possibile specificare sql:encode su un attributo o un elemento di tipo semplice.

Specificare l'annotazione sql:encode per indicare che deve essere restituito un URL al campo invece del valore del campo. sql:encode dipende dalla chiave primaria per generare un singleton scelto nell'URL. La chiave primaria può essere specificata utilizzando l'annotazione sql:key-fields.

All'annotazione sql:encode è possibile assegnare il valore "url" o "default". Il valore "default" restituisce dati in formato con codifica Base 64.

Non è possibile utilizzare l'annotazione sql:encode con sql:use-cdata o sui tipi di attributo ID, IDREF, IDREFS, NMTOKEN o NMTOKENS. Non può essere usata anche con l'attributo fisso XSD.

Nota

Non è possibile utilizzare le colonne di tipo BLOB come parte di una chiave o di una chiave esterna.

Esempio

Per creare esempi reali utilizzando gli esempi seguenti, è necessario soddisfare alcuni requisiti. Per altre informazioni, vedere Requisiti per l'esecuzione di esempi SQLXML.

A. Specifica di sql:encode per ottenere un riferimento URL ai dati BLOB

In questo esempio, lo schema di mapping specifica sql:encode l'attributo LargePhoto per recuperare il riferimento URI a una foto specifica del prodotto (anziché recuperare i dati binari in formato con codifica 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>  
Per testare una query Xpath di esempio sullo schema
  1. Copiare il codice dello schema precedente e incollarlo in un file di testo. Salvare il file come sqlEncode.xml.

  2. Copiare il modello seguente e incollarlo in un file di testo. Salvare il file come sqlEncodeT.xml nella stessa directory nella quale è stato salvato 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>  
    

    Il percorso di directory specificato per lo schema di mapping (sqlEncode.xml) è relativo alla directory nella quale viene salvato il modello. È possibile specificare anche un percorso assoluto, ad esempio:

    mapping-schema="C:\SqlXmlTest\sqlEncode.xml"  
    
  3. Creare e utilizzare lo script di test SQLXML 4.0 (Sqlxml4test.vbs) per eseguire il modello.

    Per altre informazioni, vedere Uso di ADO per eseguire query SQLXML 4.0.

Risultato:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
   <ProductPhoto ProductPhotoID="100"  
                 LargePhoto="dbobject/Production.ProductPhoto[@ProductPhotoID="100"]/@LargePhoto" />   
</ROOT>