Condividi tramite


Mapping esplicito di attributi ed elementi XSD a tabelle e colonne (SQLXML 4.0)

Quando si utilizza uno schema XSD per fornire una vista XML del database relazionale, è necessario eseguire il mapping degli elementi e degli attributi dello schema a tabelle e colonne del database. Le righe della tabella/vista di database vengono mappate agli elementi del documento XML. I valori di colonna del database vengono mappati agli attributi o agli elementi.

Quando vengono specificate query XPath nello schema XSD con annotazioni, i dati relativi agli elementi e agli attributi dello schema vengono recuperati dalle tabelle e dalle colonne alle quali vengono mappati. Per ottenere un solo valore dal database, per il mapping specificato nello schema XSD devono essere indicati sia la relazione che il campo. Se il nome di un elemento/attributo non corrisponde a quello della tabella/colonna a cui viene mappato, vengono utilizzate le annotazioni sql:relation e sql:field per specificare il mapping tra un elemento o un attributo di un documento XML e la tabella (vista) o colonna di un database.

sql-relation

L'annotazione sql:relation viene aggiunta per eseguire il mapping di un nodo XML dello schema XSD a una tabella di database. Il nome di una tabella (vista) viene specificato come valore dell'annotazione sql:relation.

Quando sql:relation viene specificata su un elemento, l'ambito di questa annotazione si applica a tutti gli attributi e gli elementi figlio descritti nella definizione dei tipi complessi di quell'elemento, rendendo in questo modo più veloce la scrittura di annotazioni.

L'annotazione sql:relation risulta utile inoltre quando gli identificatori validi in MicrosoftSQL Server non sono validi in XML. "Order Details", ad esempio, è un nome di tabella valido in SQL Server ma non in XML. In queste situazioni, l'annotazione sql:relation può essere utilizzata per specificare il mapping, ad esempio:

<xsd:element name="OD" sql:relation="[Order Details]">

sql-field

L'annotazione sql-field esegue il mapping di un elemento o attributo a una colonna di database. L'annotazione sql:field viene aggiunta per eseguire il mapping di un nodo XML nello schema a una colonna di database. Non è possibile specificare sql:field su un elemento di contenuto vuoto.

Esempi

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

A. Specifica delle annotazioni sql:relation e sql:field

In questo esempio lo schema XSD è composto da un elemento <Contact> di tipo complesso con gli elementi figlio <FName> e <LName> e l'attributo ContactID.

L'annotazione sql:relation esegue il mapping dell'elemento <Contact> alla tabella Person.Contact nel database AdventureWorks. L'annotazione sql:field esegue il mapping dell'elemento <FName> alla colonna FirstName e dell'elemento <LName> alla colonna LastName.

Per l'attributo ContactID non viene specificata alcuna annotazione Il risultato ottenuto è un mapping predefinito dell'attributo alla colonna con lo stesso nome.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
  <xsd:element name="Contact" sql:relation="Person.Contact" >
   <xsd:complexType>
     <xsd:sequence>
        <xsd:element name="FName"
                     sql:field="FirstName" 
                     type="xsd:string" /> 
        <xsd:element name="LName"  
                     sql:field="LastName"  
                     type="xsd:string" />
     </xsd:sequence>
        <xsd:attribute name="ContactID" 
                       type="xsd:integer" />
    </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 con il nome MySchema-annotated.xml.

  2. Copiare il modello seguente e incollarlo in un file di testo. Salvare il file con il nome MySchema-annotatedT.xml nella stessa directory in cui è stato salvato il file MySchema-annotated.xml.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="MySchema-annotated.xml">
        /Contact
      </sql:xpath-query>
    </ROOT>
    

    Il percorso della directory specificato per lo schema di mapping MySchema-annotated.xml è relativo alla directory in cui è salvato il modello. È possibile specificare anche un percorso assoluto, ad esempio:

    mapping-schema="C:\SqlXmlTest\MySchema-annotated.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.

Di seguito viene indicato il set di risultati parziale:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> 
 <Contact ContactID="1"> 
    <FName>Gustavo</FName> 
    <LName>Achong</LName> 
 </Contact> 
  .....
</ROOT>