Estrazione delle informazioni da un messaggio utilizzando XPath 1.0 e un nodo JavaCompute

XPath è un linguaggio query progettato per l'utilizzo con documenti XML, ma è possibile applicarlo a qualsiasi struttura ad albero per scopi di query. XPath viene utilizzato da WebSphere Message Broker per selezionare elementi dall'albero logico dei messaggi indipendentemente dal formato del flusso di bit. Per ulteriori informazioni su XPath e sulla definizione W3C di XPath 1.0 standard, fare riferimento a XPath. La terminologia utilizzata in questo argomento è basata sulla terminologia utilizzata nella definizione W3C di XPath 1.0.

Il presente argomento contiene le seguenti informazioni:

Utilizzo del metodo evaluateXPath per estrarre le informazioni del messaggio

Il metodo evaluateXPath() è compreso nell'API del nodo definito dall'utente Java e supporta XPath 1.0, con le eccezioni riportate di seguito.
  • L'asse spazio dei nomi e il tipo di nodo spazio dei nomi. L'asse spazio dei nomi restituisce i nodi della dichiarazione spazio dei nomi XML reali per un elemento particolare. Ciò consente di manipolare il prefisso XML o le dichiarazioni URI all'interno di un'espressione XPath. Tale asse restituisce una serie di nodi vuoti per flusso di bit diversi da XML.
  • Se si utilizza la funzione id(), viene generata una MbRecoverableException.

E' possibile richiamare il metodo evaluateXPath() su un oggetto MbMessage (per percorsi assoluti) o su un oggetto MbElement (per percorsi relativi). L'espressione XPath è trasmessa al metodo come un parametro di stringa. Viene fornito un secondo formato di questo metodo che prende un oggetto MbXPath. Tale oggetto incorpora un'espressione XPath con file di associazione di variabili e mappature spazio dei nomi, se richieste.

Il metodo evaluateXPath() restituisce un oggetto di uno di questi tipi, in base al tipo di restituzione dell'espressione:
  • java.lang.Boolean, che rappresenta il tipo booleano XPath
  • java.lang.Double, che rappresenta il tipo numero XPath
  • java.lang.String, che rappresenta il tipo stringa XPath
  • java.util.List, che rappresenta la serie di nodi XPath. L'interfaccia Elenco rappresenta una sequenza ordinata di oggetti, in questo caso MbElements. Consente accesso diretto agli elementi o la possibilità di ottenere un array MbElement o Iterator.

File di associazione di variabile XPath

XPath 1.0 supporta la possibilità di fare riferimento alle variabili all'interno di un'espressione assegnata prima della valutazione. La classe MbXPath dispone di tre metodi per assegnare e rimuovere questi file di associazione di variabile dal codice Java utente. E' necessario che il valore sia uno dei quattro tipi supportati da XPath 1.0:
  • Boolean
  • serie di nodi
  • numero
  • stringa

Supporto spazio dei nomi XPath

Per messaggi XML, viene fatto riferimento agli spazi dei nomi utilizzando una mappatura da un prefisso di spazio dei nomi abbreviato all'URI spazio dei nomi completo come descritto nel seguente esempio XML:
<ns1:aaa xmlns:ns1='http://mydomain.com/namespace1'
         xmlns:ns2='http://mydomain.com/namespace2'>
  <ns2:aaa>
    <ns1:bbb/>
  </ns2:aaa>
<n/ns1:aaa>

Mentre il prefisso dello spazio dei nomi è utile per rappresentare lo spazio dei nomi, è significativo solo all'interno del documento che definisce tale mappatura. E' l'URI dello spazio dei nomi che definisce il significato globale. Inoltre, il concetto di un prefisso spazio dei nomi non è significativo per documenti creati in un flusso di messaggi poiché è possibile assegnare un URI di spazio dei nomi a un elemento di sintassi senza aver definito una mappatura xmlns.

Per tale ragione i programmi di analisi XMLNS(C) e MRM espongono solo l'URI dello spazio dei nomi al broker e al codice utente (ESQL o codice plug-in). ESQL consente di impostare le proprie mappature per creare abbreviazioni per tali URI potenzialmente lunghi. Tali mappature non sono correlate in alcun modo ai prefissi definiti nel documento XML (sebbene sia possibile che abbiano lo stesso nome).

Il processore XPath consente di mappare le abbreviazioni dello spazio dei nomi agli URI espansi durante la valutazione. Nella classe MbXPath sono contenuti metodi per assegnare e rimuovere queste mappature dello spazio dei nomi. E' possibile indirizzare l'esempio XML utilizzando il seguente codice:
MbMessage msg = assembly.getMessage();
List chapters= (List)msg.evaluateXPath("/document/chapter");
// this returns a list of all chapters in the document (length 1)

MbElement chapter = (MbElement)chapters.get(0);  // the first one

// values can also be extracted directly using XPath
String title = (String)msg.evaluateXPath("string(/document/chapter/@title)");

String chapterText = (String)msg.evaluateXPath("string(/document/chapter/text())");

Aggiornamento di un messaggio utilizzando estensioni XPath

L'implementazione WebSphere Message Broker di XPath fornisce le seguenti funzioni aggiuntive per modificare l'albero dei messaggi:
set-local-name(object)
Imposta la parte locale del nome espanso del nodo del contesto al valore specificato nell'argomento. E' possibile che l'oggetto sia una qualsiasi espressione valida e viene convertito in una stringa come se fosse utilizzato il richiamo alla funzione della stringa.
set-namespace-uri(object)
Imposta la parte URI dello spazio dei nomi del nome espanso del nodo del contesto al valore specificato nell'argomento. E' possibile che l'oggetto sia una qualsiasi espressione valida e viene convertito in una stringa come se fosse utilizzato il richiamo alla funzione della stringa.
set-value(object)
Questa funzione imposta il valore di stringa del nodo del contesto al valore specificato nell'argomento. E' possibile che l'oggetto sia una qualsiasi espressione valida e viene convertito in una stringa come se fosse utilizzato il richiamo alla funzione della stringa.
Per consentire la creazione e la modifica degli alberi degli elementi di sintassi, è disponibile il seguente asse oltre ai 13 definiti nella specifica XPath 1.0:
select-or-create::name o ?name
?name equivale a select-or-create::name. Se name è @name, viene creato o selezionato un attributo. Tale operazione consente di selezionare nodi child che corrispondono al nametest specificato o di creare nuovi nodi in base alle seguenti regole:
  • ?name seleziona elementi child denominati name, se esistenti. Se non è presente un elemento child denominato name, ?name lo crea come ultimo elemento child e lo seleziona.
  • ?$name crea name come ultimo elemento child e lo seleziona.
  • ?^name crea name come primo child e lo seleziona.
  • ?>name crea name come successivo elemento di pari livello e quindi lo seleziona.
  • ?<name crea name come elemento di pari livello precedente e lo seleziona.
Informazioni correlate
API del nodo definito dall'utente Java
Informazioni particolari | Marchi | Download | Libreria | Supporto | Commenti
Copyright IBM Corporation 1999, 2006 Ultimo aggiornamento: ago 17, 2006
ac30390_