Differenze tra le versioni di "Estrazione dati da XML con query XPath"

Da wiki.maggioli.it.
Jump to navigation Jump to search
imported>Root
(Nuova pagina: Questa action permette di estrarre dati scalari o vettoriali (array) da una stringa in formato XML tramite una o più query XPath. ==Parametri== ===XML=== E' un array di stringhe in f...)
imported>Root
 
(5 versioni intermedie di uno stesso utente non sono mostrate)
Riga 4: Riga 4:
===XML===
===XML===
E' un array di stringhe in formato XML. Se l'elemento N-esimo dell'array è vuoto, tutti i risultati delle query XPath applicate a tale elemento sono vuoti, indipendentemente dal tipo di query e da altri parametri di compensazione. Normalmente si utilizza un solo XML ma passando più XML in array si ottiene che per ogni query XPath i suoi risultati vengono accumulati tra gli XML.
E' un array di stringhe in formato XML. Se l'elemento N-esimo dell'array è vuoto, tutti i risultati delle query XPath applicate a tale elemento sono vuoti, indipendentemente dal tipo di query e da altri parametri di compensazione. Normalmente si utilizza un solo XML ma passando più XML in array si ottiene che per ogni query XPath i suoi risultati vengono accumulati tra gli XML.
===ID documenti repository contenenti XML===
E' un array di identificativi di documenti presenti nel repository documentale. Tali documenti dovranno essere documenti di testo in formato XML. Passando più ID documento si ottiene che per ogni query XPath i suoi risultati vengono accumulati tra i documenti XML.
'''''Nota:''' E' possibile specificare sia il parametro '''XML''' che il parametro '''ID documenti (...)'''. Anche in questo caso i risultati vengono accumulati.
===XML errati o non XML===
E' possibile definire se l'attività deve andare in errore o meno quando incontra un contenuto non XML. Questo vale sia per il parametro '''XML''' che per il parametro '''ID documenti (...)'''.
===Query XPath===
===Query XPath===
Sono le query XPath. Ad ogni query XPath <tt>'''query_X'''</tt> corrisponde un risultato <tt>'''result_X'''</tt>. E' possibile definire un numero arbitrario di query XPath che estraggono aspetti diversi dello stesso XML.
Sono le query XPath. Ad ogni query XPath <tt>'''query_X'''</tt> corrisponde un risultato <tt>'''result_X'''</tt>. E' possibile definire un numero arbitrario di query XPath che estraggono aspetti diversi dello stesso XML.
===Query XPath Raffinamento===
E' una query XPath secondaria (opzionale). Se presente, questa processa in cascata il risultato della query principale (che in questo caso deve essere configurata affinchè torni un XML). Unitamente al parametro <tt>Compensa i singoli risultati a minimo un elemento</tt> (vedi successivamente) la query di raffinamento permette di risolvere casi in cui tag con valori nulli causano lo shiftamento degli array di output (infatti XPath ignora i valori nulli e accorcia gli array dei risultati).
La tecnica corretta per gestire questa problematica è utilizzare una query principale che torni l'XML del tag immediatamente superiore al dato cercato, ed una query di raffinamento che estragga il tag potenzialmente nullo dal risultato principale. Attivando la compensazione dei dati in questo modo l'algoritmo dell'azione è in grado di capire che la query di raffinamento torna un valore vuoto e compensa aggiungendo un elemento vuoto, mantendo quindi il sincronismo.
===Tipo risultato===
Permette di definire il tipo del risultato prodotto dall'estrazione. Il default è <tt>STRING</tt>. Normalmente non è necessario specificare il tipo dell'output dato che il workflow effettua conversioni automatiche quando necessario, ma questa opzione permette di gestire correttamente l'estrazione di dati tipo <tt>DATE</tt> che non utilizzino la formattazione interna del workflow. Specificando quindi <tt>DATE</tt> come tipo, si attiverà il successivo campo <tt>FORMATO</tt> che permette di dettagliare il formato della stringa che si sta estraendo.
===Formato===
Questo parametro è effettivo solo se si specifica il tipo risultato a <tt>DATE</tt>. In questo caso è possibile specificare il formato della data estratta dall'XML, permettendo quindi al workflow di operare la corretta lettura del dato. A titolo di esempio, per una data del tipo <tt>2015-01-29T11:18:02.448+01:00</tt> sarà necessario inserire il formato <tt>yyyy-MM-dd'T'HH:mm:ss.SSSXXX</tt>.
Per ulteriori esempi su come costruire le stringhe di formattazione (standard Java) si veda [http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html SimpleDateFormat]
===Copia su===
===Copia su===
I risultati delle query, che possono essere copiati negli attributi di workflow. Un risultato è sempre in formato <tt>String[]</tt> (array di stringhe). Il motore di conversione automatica dei tipi dato del workflow effettuerà la conversione al tipo di dato richiesto dalle funzioni invocate successivamente (sempre che ciò sia possibile). Dati formattati in modo non previsto potrebbero causare un errore di conversione. Se vengono passati in input più XML il risultato è l'accumulo di tutti i risultati della query per ogni singolo XML.
I risultati delle query, che possono essere copiati negli attributi di workflow. Un risultato è un array di dati nel formato specificato in <tt>Tipo risultato</tt>. Ad esempio se il tipo è <tt>STRING</tt> il risultato sarà di tipo <tt>STRING[]</TT>. Il motore di conversione automatica dei tipi dato del workflow effettuerà la conversione al tipo di dato richiesto dalle funzioni invocate successivamente (sempre che ciò sia possibile). Dati formattati in modo non previsto potrebbero causare un errore di conversione. Se vengono passati in input più XML il risultato è l'accumulo di tutti i risultati della query per ogni singolo XML.
===Non compensare i singoli risultati===
===Non compensare i singoli risultati===
Ogni volta che una query XPath viene eseguita, se il suo risultato e' vuoto non viene accumulato nulla.
Ogni volta che una query XPath viene eseguita, se il suo risultato e' vuoto non viene accumulato nulla.
===Compensa i singoli risultati a minimo un elemento===
===Compensa i singoli risultati a minimo un elemento===
Ogni volta che una query XPath viene eseguita, se il suo risultato è vuoto viene accumulato un risultato di un singolo elemento nullo. Questo permette di eseguire query di estrazione di singoli tag su più XML che potrebbero contenere o meno tali tag e garantire che l'array risultante (l'accumulo dei risultati) abbia una lunghezza pari il numero degli XML processati anche se questi mancano dei tag. Ovviamente se un singolo XML possiede il tag in oggetto più di una volta il risultato si disallinea.
Ogni volta che una query XPath viene eseguita, se il suo risultato è vuoto viene accumulato un singolo elemento nullo. Questo permette di eseguire query di estrazione di singoli tag su più XML che potrebbero contenere o meno tali tag e garantire che l'array risultante (l'accumulo dei risultati) abbia una lunghezza pari il numero degli XML processati anche se questi mancano dei tag. Ovviamente se un singolo XML possiede il tag in oggetto più di una volta il risultato si disallinea. E' possibile utilizzare questo parametro anche in congiunzione con la query xpath di raffinamento (si veda sopra), dando la possibilità di gestire in modo fine la produzione di array contenenti potenziali valori nulli.
==Note==
==Note==
Ogni query produce un risultato. In base al tipo di query e al contenuto dell'XML processato, tale risultato può essere un valore singolo oppure un array di valori.  
Ogni query produce un risultato. In base al tipo di query e al contenuto dell'XML processato, tale risultato può essere un valore singolo oppure un array di valori.  
Riga 19: Riga 35:
<blockquote><tt>
<blockquote><tt>
<popolazione>
<popolazione>
:<persona cognome="MARIO" nome="ROSSI"/>
:<persona nome="MARIO" cognome="ROSSI"/>
:<persona cognome="GIUSEPPE" nome="VERDI"/>
:<persona nome="GIUSEPPE" cognome="VERDI"/>
:<persona cognome="MARCO" nome="BIANCHI"/>
:<persona nome="MARCO" cognome="BIANCHI"/>
</popolazione>
</popolazione>
</tt></blockquote>
</tt></blockquote>
Riga 32: Riga 48:
produce la lista di valori
produce la lista di valori
<blockquote><tt>
<blockquote><tt>
MARIO<br/>GIUSEPPE<br/>MARCO
ROSSI<br/>VERDI<br/>BIANCHI
</tt></blockquote>
</tt></blockquote>


Riga 39: Riga 55:
<blockquote><tt>
<blockquote><tt>
<popolazione>
<popolazione>
:<persona cognome="MARIO" nome="ROSSI"/>
:<persona nome="MARIO" cognome="ROSSI"/>
:<persona cognome="GIUSEPPE" nome="VERDI"/>
:<persona nome="GIUSEPPE" cognome="VERDI"/>
:<persona cognome="MARCO" nome="BIANCHI"/>
:<persona nome="MARCO" cognome="BIANCHI"/>
</popolazione>
</popolazione>
</tt></blockquote>
</tt></blockquote>
Riga 53: Riga 69:
<blockquote><tt>
<blockquote><tt>
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml version="1.0" encoding="ISO-8859-1"?>
<persona cognome="MARIO" nome="ROSSI"/>
<persona nome="MARIO" cognome="ROSSI"/>
<br>
<br>
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml version="1.0" encoding="ISO-8859-1"?>
<persona cognome="GIUSEPPE" nome="VERDI"/>
<persona nome="GIUSEPPE" cognome="VERDI"/>
<br>
<br>
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml version="1.0" encoding="ISO-8859-1"?>
<persona cognome="MARCO" nome="BIANCHI"/>
<persona nome="MARCO" cognome="BIANCHI"/>
</tt></blockquote>
</tt></blockquote>



Versione attuale delle 17:41, 9 feb 2015

Questa action permette di estrarre dati scalari o vettoriali (array) da una stringa in formato XML tramite una o più query XPath.

Parametri

XML

E' un array di stringhe in formato XML. Se l'elemento N-esimo dell'array è vuoto, tutti i risultati delle query XPath applicate a tale elemento sono vuoti, indipendentemente dal tipo di query e da altri parametri di compensazione. Normalmente si utilizza un solo XML ma passando più XML in array si ottiene che per ogni query XPath i suoi risultati vengono accumulati tra gli XML.

ID documenti repository contenenti XML

E' un array di identificativi di documenti presenti nel repository documentale. Tali documenti dovranno essere documenti di testo in formato XML. Passando più ID documento si ottiene che per ogni query XPath i suoi risultati vengono accumulati tra i documenti XML.

Nota: E' possibile specificare sia il parametro XML che il parametro ID documenti (...). Anche in questo caso i risultati vengono accumulati.

XML errati o non XML

E' possibile definire se l'attività deve andare in errore o meno quando incontra un contenuto non XML. Questo vale sia per il parametro XML che per il parametro ID documenti (...).

Query XPath

Sono le query XPath. Ad ogni query XPath query_X corrisponde un risultato result_X. E' possibile definire un numero arbitrario di query XPath che estraggono aspetti diversi dello stesso XML.

Query XPath Raffinamento

E' una query XPath secondaria (opzionale). Se presente, questa processa in cascata il risultato della query principale (che in questo caso deve essere configurata affinchè torni un XML). Unitamente al parametro Compensa i singoli risultati a minimo un elemento (vedi successivamente) la query di raffinamento permette di risolvere casi in cui tag con valori nulli causano lo shiftamento degli array di output (infatti XPath ignora i valori nulli e accorcia gli array dei risultati). La tecnica corretta per gestire questa problematica è utilizzare una query principale che torni l'XML del tag immediatamente superiore al dato cercato, ed una query di raffinamento che estragga il tag potenzialmente nullo dal risultato principale. Attivando la compensazione dei dati in questo modo l'algoritmo dell'azione è in grado di capire che la query di raffinamento torna un valore vuoto e compensa aggiungendo un elemento vuoto, mantendo quindi il sincronismo.

Tipo risultato

Permette di definire il tipo del risultato prodotto dall'estrazione. Il default è STRING. Normalmente non è necessario specificare il tipo dell'output dato che il workflow effettua conversioni automatiche quando necessario, ma questa opzione permette di gestire correttamente l'estrazione di dati tipo DATE che non utilizzino la formattazione interna del workflow. Specificando quindi DATE come tipo, si attiverà il successivo campo FORMATO che permette di dettagliare il formato della stringa che si sta estraendo.

Formato

Questo parametro è effettivo solo se si specifica il tipo risultato a DATE. In questo caso è possibile specificare il formato della data estratta dall'XML, permettendo quindi al workflow di operare la corretta lettura del dato. A titolo di esempio, per una data del tipo 2015-01-29T11:18:02.448+01:00 sarà necessario inserire il formato yyyy-MM-dd'T'HH:mm:ss.SSSXXX.

Per ulteriori esempi su come costruire le stringhe di formattazione (standard Java) si veda SimpleDateFormat

Copia su

I risultati delle query, che possono essere copiati negli attributi di workflow. Un risultato è un array di dati nel formato specificato in Tipo risultato. Ad esempio se il tipo è STRING il risultato sarà di tipo STRING[]. Il motore di conversione automatica dei tipi dato del workflow effettuerà la conversione al tipo di dato richiesto dalle funzioni invocate successivamente (sempre che ciò sia possibile). Dati formattati in modo non previsto potrebbero causare un errore di conversione. Se vengono passati in input più XML il risultato è l'accumulo di tutti i risultati della query per ogni singolo XML.

Non compensare i singoli risultati

Ogni volta che una query XPath viene eseguita, se il suo risultato e' vuoto non viene accumulato nulla.

Compensa i singoli risultati a minimo un elemento

Ogni volta che una query XPath viene eseguita, se il suo risultato è vuoto viene accumulato un singolo elemento nullo. Questo permette di eseguire query di estrazione di singoli tag su più XML che potrebbero contenere o meno tali tag e garantire che l'array risultante (l'accumulo dei risultati) abbia una lunghezza pari il numero degli XML processati anche se questi mancano dei tag. Ovviamente se un singolo XML possiede il tag in oggetto più di una volta il risultato si disallinea. E' possibile utilizzare questo parametro anche in congiunzione con la query xpath di raffinamento (si veda sopra), dando la possibilità di gestire in modo fine la produzione di array contenenti potenziali valori nulli.

Note

Ogni query produce un risultato. In base al tipo di query e al contenuto dell'XML processato, tale risultato può essere un valore singolo oppure un array di valori.

Esempio

Con il seguente XML

<popolazione>

<persona nome="MARIO" cognome="ROSSI"/>
<persona nome="GIUSEPPE" cognome="VERDI"/>
<persona nome="MARCO" cognome="BIANCHI"/>

</popolazione>

la query XPath

/popolazione/persona/@cognome

produce la lista di valori

ROSSI
VERDI
BIANCHI

Esempio

Con il seguente XML

<popolazione>

<persona nome="MARIO" cognome="ROSSI"/>
<persona nome="GIUSEPPE" cognome="VERDI"/>
<persona nome="MARCO" cognome="BIANCHI"/>

</popolazione>

la query XPath

/popolazione/persona

produce la lista di valori

<?xml version="1.0" encoding="ISO-8859-1"?> <persona nome="MARIO" cognome="ROSSI"/>
<?xml version="1.0" encoding="ISO-8859-1"?> <persona nome="GIUSEPPE" cognome="VERDI"/>
<?xml version="1.0" encoding="ISO-8859-1"?> <persona nome="MARCO" cognome="BIANCHI"/>

E' quindi possibile estrarre i dati a vari livelli di granularità. Copiando i risultati in attributi d'istanza di tipo String[] e' successivamente possibile elaborare queste informazioni con le altre funzioni di manipolazione dati del Workflow (oppure effettuare altre query XPath sui singoli elementi, a patto che questi siano XML).

Essendo la sintassi XPath abbastanza estesa, si evita di inserire tutta la relativa documentazione in questa pagina. Si veda la sezione dei collegamenti esterni per maggiori informazioni a riguardo.

Collegamenti esterni

Documentazione sintassi XPath su W3Schools

Specifiche XPath W3C