Condividi tramite


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

In uno schema XSD con annotazioni quando un attributo o elemento viene mappato a una colonna BLOB in Microsoft SQL Server, i dati vengono restituiti in formato con codifica Base 64 in 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 del campo anziché il valore del campo. sql:encode dipende dalla chiave primaria per la generazione di una selezione singleton 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 è inoltre possibile utilizzarla con l'attributo fixed XSD.

[!NOTA]

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

Esempi

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

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

In questo esempio lo schema di mapping specifica sql:encode sull'attributo LargePhoto per recuperare il riferimento URI a una specifica fotografia di prodotto, anziché recuperare i dati binari nel 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 sopra riportato 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 ulteriori informazioni, vedere Utilizzo 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>