Condividi tramite


Utilizzo di sql:relation (schema XDR)

Nota importanteImportante

Questo argomento è incluso come riferimento per le applicazioni legacy. Per questa caratteristica non è previsto alcun progetto di sviluppo in futuro. Evitare di utilizzarla in un nuovo progetto di sviluppo. Utilizzare invece gli schemi XSD con annotazioni per creare le viste XML. Per ulteriori informazioni, vedere Introduzione agli schemi XSD con annotazioni (SQLXML 4.0). È possibile convertire gli schemi XDR con annotazioni esistenti in schemi XSD. Per ulteriori informazioni, vedere Conversione di schemi XDR con annotazioni in schemi XSD equivalenti (SQLXML 4.0).

L'annotazione sql:relation viene aggiunta per eseguire il mapping di un nodo XML nello schema XDR a una tabella di database. Un nome di tabella/vista viene specificato come valore dell'annotazione sql:relation.

L'annotazione sql:relation può essere aggiunta a un nodo <ElementType>, <element> o <attribute> nello schema XDR. sql:relation specifica il mapping tra <ElementType>, <element> o <attribute> nello schema a una tabella/vista in un database.

Quando sql:relation viene specificata su <ElementType>, l'ambito di questa annotazione si applica a tutte le specifiche di attributi ed elementi figlio in quel <ElementType>. Consente quindi di scrivere più velocemente le annotazioni. Quando sql:relation viene specificata direttamente su <element>, negli attributi specificati all'interno di una dichiarazione <ElementType> viene introdotto anche l'ambito. L'annotazione sql:relation viene ignorata su <AttributeType>.

L'annotazione sql:relation risulta utile nei casi in cui gli identificatori validi in Microsoft SQL Server sono non 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:

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

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 di sql:relation su <ElementType> contenente attributi

Lo schema XDR di questo esempio è composto da un elemento <Contacts> con gli attributi BusinessEntityID, FirstName e LastName. L'annotazione sql:relation viene specificata su <ElementType> attraverso il mapping dell'elemento <Contacts> alla tabella Person.Person. L'ambito di questo mapping si applica a tutti gli attributi in <ElementType>. Tutti gli attributi eseguono pertanto il mapping alle colonne nella tabella Person.Person.

Il mapping predefinito viene eseguito per gli attributi. Essi vengono mappati, ad esempio, alle colonne con gli stessi nomi nella tabella Person.Person.

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <ElementType name="Contacts" sql:relation="Person.Person" >
    <AttributeType name="BusinessEntityID" />
    <AttributeType name="FirstName" />
    <AttributeType name="LastName" />

    <attribute type="BusinessEntityID" />
    <attribute type="FirstName" />
    <attribute type="LastName" />
  </ElementType>
</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 sqlRelationXdr.xml.

  2. Copiare il modello seguente e incollarlo in un file di testo. Salvare il file con il nome sqlRelationXdrT.xml nella stessa directory in cui è stato salvato il file sqlRelationXdr.xml. La query nel modello seleziona un contatto con BusinessEntityID pari a 1.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="sqlRelationXdr.xml">
        /Contacts[@BusinessEntityID="1"]
      </sql:xpath-query>
    </ROOT>
    

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

    mapping-schema="C:\MyDir\sqlRelationXdr.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.

Di seguito è riportato il set di risultati parziale:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> 
    <Contacts BusinessEntityID="1" FirstName="Gustavo" 
              LastName="Achong" /> 
</ROOT>

B. Specifica di sql:relation su <ElementType> contenente sottoelementi e attributi

Lo schema XDR di questo esempio è composto dall'elemento <Contacts> con l'attributo BusinessEntityID e gli elementi figlio <FirstName> e <LastName>. L'annotazione sql:relation viene specificata su <ElementType> attraverso il mapping dell'elemento <Contacts> alla tabella Person.Person. L'ambito di questo mapping si applica a tutti gli attributi in <ElementType>. Tutti gli attributi eseguono pertanto il mapping alle colonne nella tabella Person.Person.

Il mapping predefinito viene eseguito per gli attributi. Essi vengono mappati alle colonne con lo stesso nella tabella Person.Person.

In questo esempio l'elemento content viene specificato sugli attributi figlio <FirstName> e <LastName>. Senza l'attributo content=textOnly, non è possibile eseguire il mapping degli elementi figlio alle colonne FirstName e LastName nella tabella Person.Person perché, per impostazione predefinita, gli elementi vengono mappati a una tabella e non a un campo.

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">

  <ElementType name="FirstName" content="textOnly"/>
  <ElementType name="LastName" content="textOnly"/>
  <ElementType name="Contacts" sql:relation="Person.Person" >
    <AttributeType name="BusinessEntityID" />

    <attribute type="BusinessEntityID" />
    <element type="FirstName" />
    <element type="LastName"  />
  </ElementType>
</Schema>

In alternativa, anziché specificare l'attributo content=textOnly, è possibile specificare l'annotazione sql:field nella definizione element per eseguire il mapping degli elementi figlio (FirstName, LastName) ai nomi di colonna corrispondenti, come negli esempi seguenti:

<element type="FirstName" sql:field="FirstName" />
<element type="LastName" sql:field="LastName" />

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 UsingSqlRelationXdr.xml.

  2. Copiare il modello seguente e incollarlo in un file di testo. Salvare il file con il nome UsingSqlRelationXdrT.xml nella stessa directory in cui è stato salvato il file UsingSqlRelationXdr.xml. La query nel modello seleziona un contatto con BusinessEntityID pari a 1.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="UsingSqlRelationXdr.xml">
        /Contacts[@BusinessEntityID="1"]
      </sql:xpath-query>
    </ROOT>
    

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

    mapping-schema="C:\MyDir\UsingSqlRelationXdr.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.

Di seguito è riportato il set di risultati parziale:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> 
  <Contacts BusinessEntityID="1"> 
    <FirstName>Gustavo</FirstName>
    <LastName>Achong</LastName>
  </Contacts>
</ROOT>

Vedere anche

Riferimento