Condividi tramite


Introduzione all'utilizzo di query XPath (SQLXML 4.0)

Si applica a: SQL Server Database SQL di Azure

Una query XPath (XML Path Language) può essere specificata come parte di un URL o all'interno di un modello. La struttura del frammento risultante viene determinata dallo schema di mapping mentre i valori vengono recuperati dal database. Questo processo è concettualmente simile alla creazione di viste mediante l'istruzione CREATE VIEW e alla scrittura di query SQL relative a tali viste.

Nota

Per comprendere le query XPath in SQLXML 4.0, è necessario avere familiarità con le viste XML e con concetti correlati quali i modelli e lo schema di mapping. Per altre informazioni, vedere Introduzione agli schemi XSD con annotazioni (SQLXML 4.0) e lo standard XPath definito dal World Wide Web Consortium (W3C).

Un documento XML è costituito da nodi, quali un nodo di elemento, un nodo di attributo, un nodo di testo e così via. Si consideri, ad esempio, il documento XML seguente:

<root>  
  <Customer cid= "C1" name="Janine" city="Issaquah">  
      <Order oid="O1" date="1/20/1996" amount="3.5" />  
      <Order oid="O2" date="4/30/1997" amount="13.4">Customer was  
          very satisfied</Order>  
   </Customer>  
   <Customer cid="C2" name="Ursula" city="Oelde" >  
      <Order oid="O3" date="7/14/1999" amount="100" note="Wrap it blue white red">  
          <Urgency>Important</Urgency>  
      </Order>  
      <Order oid="O4" date="1/20/1996" amount="10000"/>  
   </Customer>  
</root>  

In questo documento Customer ><è un nodo elemento, cid è un nodo attributo e "Importante" è un nodo di testo.

XPath è un linguaggio di navigazione grafica utilizzato per selezionare un set di nodi da un documento XML. Ogni operatore XPath consente di selezionare un set di nodi in base a un set di nodi selezionato da un operatore XPath precedente. Ad esempio, dato un set di <nodi Customer>, XPath può selezionare tutti i< nodi Order> con il valore dell'attributo date "7/14/1999". Il set di nodi risultante contiene tutti gli ordini con data 7/14/1999.

Il linguaggio XPath è definito dal World Wide Web Consortium (W3C) come linguaggio di navigazione standard. SQLXML 4.0 implementa un subset della specifica XPath W3C, che si trova in http://www.w3.org/TR/1999/PR-xpath-19991008.html.

Di seguito vengono elencate alcune delle differenze principali tra l'implementazione di XPath del W3C e l'implementazione di SQLXML 4.0.

  • Query radice

    SQLXML 4.0 non supporta la query radice (/). Ogni query XPath deve iniziare a un elemento ElementType> di primo livello <nello schema.

  • Segnalazione di errori

    La specifica XPath del W3C non definisce condizioni di errore. Le query XPath che non consentono di selezionare nodi restituiscono un set di nodi vuoto. In SQLXML 4.0 una query può restituire diversi tipi di messaggio di errore.

  • Ordine documento

    In SQLXML 4.0 l'ordine dei documenti non è sempre definito. Pertanto, i predicati numerici e gli assi che utilizzano l'ordine dei documenti (ad esempio , di seguito) non vengono implementati.

    La mancanza di un ordine dei documenti indica inoltre che il valore di stringa di un nodo può essere valutato solo se il nodo in questione è mappato a una singola colonna in una singola riga. Non è possibile convertire in stringa un elemento con elementi figlio o un nodo IDREFS o NMTOKENS.

    Nota

    In alcuni casi, l'annotazione o le chiavi dei campi chiave dell'annotazione della relazione possono comportare un ordine deterministico del documento. Tuttavia, non si tratta dell'uso principale di queste annotazioni. Per altre informazioni, vedere Identificazione delle colonne chiave tramite sql:key-fields (SQLXML 4.0) e Specifica delle relazioni tramite sql:relationship (SQLXML 4.0).

  • Tipo di dati

    SQLXML 4.0 presenta limitazioni nell'implementazione dei tipi di dati XPath string, number e booleani . Per altre informazioni, vedere Tipi di dati XPath (SQLXML 4.0).

  • Query tra prodotti

    SQLXML 4.0 non supporta query XPath di prodotto incrociato, quale Customers[Order/@OrderDate=Order/@ShipDate]. In questa query vengono selezionati tutti gli elementi Customer con un elemento Order per il quale OrderDate è uguale a ShipDate di un elemento Order qualsiasi.

    SQLXML 4.0 non supporta invece query come Customer[Order[@OrderDate=@ShippedDate]], in cui vengono selezionati gli elementi Customer con elemento Order per il quale OrderDate è uguale al relativo elemento ShipDate.

  • Gestione degli errori e sicurezza

    A seconda dello schema e dell'espressione di query XPath usata, gli errori Transact-SQL potrebbero essere esposti agli utenti in determinate condizioni.

Nelle tabelle delle sezioni seguenti vengono forniti dettagli su come l'implementazione nelle aree indicate delle query XPath in SQLXML 4.0 sia diversa da quella definita nella specifica del W3C.

Funzionalità supportata

Nella tabella seguente vengono mostrate le caratteristiche del linguaggio XPath implementate in SQLXML 4.0.

Funzionalità Articolo Collegamento a query di esempio
Assi attribute, child, parent e self axes Specifica di assi in query XPath (SQLXML 4.0)
Predicati con valori booleani, tra i quali sono inclusi predicati successivi e nidificati Specifica di operatori aritmetici nelle query XPath (SQLXML 4.0)
Tutti gli operatori relazionali =, !=, <, <=, >, >= Specifica di operatori relazionali nelle query XPath (SQLXML 4.0)
Operatori aritmetici +, -, *, div Specifica di operatori aritmetici nelle query XPath (SQLXML 4.0)
Funzioni di conversione esplicita number(), string(), Boolean() Specifica di funzioni di conversione esplicita in query XPath (SQLXML 4.0)
Operatori booleani AND, OR Specifica di operatori booleani in query XPath (SQLXML 4.0)
funzioni booleane true(), false(), not() Specifica di funzioni booleane in query XPath (SQLXML 4.0)
variabili XPath Specifica di variabili XPath in query XPath (SQLXML 4.0)

Funzionalità non supportata

Nella tabella seguente vengono mostrate le caratteristiche del linguaggio XPath non implementate in SQLXML 4.0.

Funzionalità Articolo
Assi predecessore, predecessore-or-self, discendente, discendente-or-self (//), seguente, di pari livello, spazio dei nomi, precedente, di pari livello precedente
Predicati con valori numerici
Operatori aritmetici mod
Funzioni nodo predecessore, predecessore-or-self, discendente, discendente-or-self (//), seguente, di pari livello, spazio dei nomi, precedente, di pari livello precedente
Funzioni di stringa string(), concat(), starts-with(), contains(), substring-before(), substring-after(), substring(), string-length(), normalize(), translate()
funzioni booleane lang()
Funzioni numeriche sum(), floor(), ceiling(), round()
Operatore Union |

Quando si specificano query XPath in un modello, si noti il comportamento seguente:

  • XPath può contenere caratteri come < o e che hanno significati speciali in XML (e il modello è un documento XML). È necessario eseguire l'escape di questi caratteri usando XML &encoding oppure specificare XPath nell'URL.

Vedi anche

Uso di query XPath in SQLXML 4.0