XML: XPath - Dipartimento di Scienze Ambientali, Informatica e
Transcript
XML: XPath - Dipartimento di Scienze Ambientali, Informatica e
XML: XPath ● ● ● ● XPath, acronimo di XML Path Language è un linguaggio il cui scopo è quello di identificare particolari nodi o set di nodi all'interno di un documento XML. Il documento XML ha per sua natura una struttura ad albero, e quindi sono individuabili una serie di nodi. La sintassi di XPath NON è una sintassi XML. Il concetto (e la sintassi in forma abbreviata) è simile a quello di navigazione su un file system (Unix) con l'ausilio di implementazioni che ne aumentano le potenzialità. Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari XML: XPath ● ● XPath 1.0: W3C Recommendation del 16 novembre 1999. XPath 2.0: W3C Recommendation del 23 gennaio 2007. Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari XML: Xpath - Data Type ANALIZZIAMO I TIPI DI NODI PRESENTI IN UN DOCUMENTO XML La quasi totalità di un documento XML è formato da tre tipologie di nodi: ● Root Node E' la radice che contiene tutti gli altri nodi ● Element Node Sono gli elementi del documento ● Attribute Node Sono gli attributi di ciascun elemento Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari XML: Xpath - Data Type Poi ci sono altri quattro nodi meno frequenti: ● Namespace Node Sono rappresentati dai namespace ● Processing Instruction Node Sono le istruzioni di elaborazione esclusa la dichiarazione di documento ● Comment Node Sono i commenti del documento ● Text Node E' il testo presente all'interno di un elemento Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari XML: Xpath – Data Type Tutti i risultati delle espressioni XPath hanno uno dei seguenti tipi di dato come risultato: ● node set Un insieme di nodi di un documento XML ● boolean Un tipo di dato binario che puo' assumere il valore true o false generalmente prodotto mediante operatori di confronto o logici. ● number Un tipo di dato floating point. In più sono compresi i valori speciali, Inf, -Inf e Nan ● string Una sequenza di caratteri Unicode racchiusi tra apici singoli o doppi Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari XML: Xpath La Location Path è quell'insieme di regole principali per formare le espressioni che individueranno la porzione di un documento XML che vogliamo estrarre/identificare. Ci sono due forme per scrivere le espressioni XPath, la forma abbreviata e quella estesa. ● ● La forma abbreviata ricorda molto la sintassi della shell Unix con simboli come / . .. La forma estesa ha una sintassi particolare, e divide il suo costrutto in 3 parti, un axis (asse), un node test (test di nodo) e un'altra parte ozpionale che è il predicate (predicato). Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari XML: Xpath – Forma estesa LocationPath = LocationStep/LocationStep/.../LocationStep axis::node-test[predicate1][predicate2][...] I location step consistono di un identificatore di asse, un test di nodo e zero o più predicati. Un location step identifica un nuovo node-set relativo al contesto node-set. Il location step viene valutato per ogni nodo all'interno del contesto node-set, e l'unione dei risultanti node-set diventano il nuovo contesto node-set per il passo successivo di elaborazione. Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari XML: Xpath – Location Step Un location step ha tre parti: ● ● ● Un axis (asse), che individua la direzione di specifica del location step nell’albero e rispetto al contesto. Un node test (test di nodo), che individua il tipo e il nome completo del nodo identificato dal location step. Zero o più predicates (predicati) che raffinano ulteriormente l’insieme di nodi selezionati dal location step Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari XML: Xpath – Forma estesa L'asse di una espressione XPath indica, partendo dal test node, la direzione da seguire per la ricerca. TIPI DI AXIS (13) ● self - il nodo stesso ● child - tutti i nodi figli del set di nodi (è il nodo di default quindi puo' anche essere omesso) ● descendant - tutti i nodi contenuti nel set di nodi (quindi figli, figli dei figli e così via) ● descendant-or-self - tutti i descendant oltre al nodo stesso ● parent - il nodo che contiene il set dei nodi Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari XML: Xpath – Forma estesa TIPI DI AXIS - CONTINUAZIONE ● ancestor - tutti gli elementi e il nodo radice che contengono il set dei nodi ● ancestor-or-self - tutti gli ancestor oltre al nodo stesso ● preceding - tutti i nodi prercedenti del set dei nodi, ossia i nodi che terminano prima del set di nodi in esame ● preceding-sibling - tutti i fratelli precedenti del set dei nodi, ossia i fratelli che terminano prima dell'inizio del set di nodi in esame ● following - tutti i nodi successivi del set dei nodi, ossia i nodi che iniziano dopo il set di nodi in esame ● following-sibling - tutti i fratelli successivi del set dei nodi, ossia i fratelli che iniziano dopo l'inizio del set di nodi in esame ● attribute - gli attributi del set dei nodi ● namespace - i namespace del set dei nodi Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari XML: Xpath – Forma estesa ESEMPI DI ASSI E NODI Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari XML: Xpath – Forma estesa Il node test indica quali nodi includere lungo l'axis specificato prima dei :: TIPI DI NODE TEST ● name - ogni elemento o attributo con quel nome lungo l'asse specificato ● * - ogni elemento lungo l'asse specificato ● prefix:* - ogni elemento o attributo con il namespace 'prefix' lungo l'asse specificato ● comment() - ogni commento lungo l'asse specificato ● text() - ogni nodo di testo lungo l'asse specificato ● node() - ogni nodo lungo l'asse specificato ● processing-instruction() - ogni istruzione di elaborazione lungo l'asse specificato ● processing-instruction('target') - ogni istruzione di elaborazione che si riferisce al relativo 'target' lungo l'asse specificato Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari XML: Xpath – Forma estesa I predicate sono racchiusi da [...] alla fine di un location step. Un predicate filtra un node-set per produrre un nuovo node-set, anlizzando ogni nodo nel node-set in base al predicate. Sulla base del risutato (boolean) o della posizione il nodo viene o meno lasciato all'interno del node-set. In poche parole, una volta ritrovato un set di nodi grazie ad axis::nodetest, possiamo grazie ai predicati, selezionare una parte di questi nodi. Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari XML: Xpath – Forma breve Abbreviata Estesa name @name / // . .. child::name attribute::name descendent::name descendent-or-self::name self::node() parent::node() La forma abbreviata per la sua semplicità, è la più utilizzata. Tuttavia nella forma abbreviata mancano alcuni tipi di axis. Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari XML: Xpath – Forma breve ASSI MANCANTI NELLA FORMA ABBREVIATA ● ● ● ● ● ● ● ancestor following-sibling preceding-sibling following preceding namespace ancestor-or-self Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari XML: Xpath – Operatori ARITMETICI: +, -, *, div, mod BOOLEANI: -, <, <=, >, >=, =, !=, and, or, | Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari XML: Xpath – Funzioni XPath non definisce un elenco completo di funzioni, ma un elenco fondamentale di funzioni. Funzioni sul node-set: last(), position(), count(),id(), local-name(), namespace-uri(), name() child::pippo[position()=3] individua il terzo nodo di nome “pippo” nel contesto di elaborazione. child::pippo[last()] individua l’ultimo nodo “pippo” nel contesto di elaborazione. child::pippo[3] è equivalente a child::pippo[position()=3] Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari XML: Xpath – Funzioni Funzioni sulle stringhe: string(), concat(), starts-with(), contains(), substring-before(), substring-after(), substring(), string-length(), normalizespace(), translate() Funzioni booleane e numeriche: boolean(), not(), true(), false(), lang() Funzioni numeriche: number(), sum(), floor(), ceiling(), round() Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari XML: Xpath – Esempi pippo[@type=“pluto”] tutti i figli “pippo” nel contesto che abbiano l’attributo type uguale a “pluto”. pippo[@type=“pluto”][3] il terzo figlio “pippo” nel contesto che abbia l’attributo type uguale a “pluto”. pippo[7][@type=“pluto”] il settimo figlio “pippo” nel contsto, ma solo se ha l’attributo type uguale a “pluto”. articolo[titolo] il figlio “articolo” nel contesto che contenga uno o più elementi “titolo” Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari XML: Xpath – Esempi string-length('XML') 3 substring('ciaomondo',4,2) 'mo' round(1.5) 2 number('xml') NaN number(price) normalize-space( ' ciao mondo ') 'ciao mondo' Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari XML: Xpath – Attenzione 1 Root node e document node Gli XPath assoluti iniziano sempre con /root (dove “root” è il nome dell'elemento radice). Il nodo radice è più generale, e contiene l'elemento radice (corrispondente al tag radice), ma non coincide con lui. Il nodo radice contiene la dichiarazione XML, la dichiarazione di tipo di documento, eventuali altre processing instruction (es. per indicare il foglio di stile XSLT), oltre al nodo dell'elemento radice, chiamato, per evitare confusioni, document element. Assi in ordine rovesciato La maggior parte degli assi idntifica la posizione seguendo l'ordine degli elementi nel documento. Gli assi che indicano elementi precedenti al nodo (ad esempio ancestor, preceding e precedingsibling) vanno in ordine rovesciato, quindi si ha che: ● preceding[1] viene dopo di preceding[2] ● ancestor[1] è il padre, non la radice Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari XML: Xpath – Attenzione 2 Caratteri proibiti XPath viene usato in contesti con sintassi particolari (es. attributi XML o URI). In questi casi i caratteri leciti in XPath ma proibiti nel contesto vanno adeguatamente riscritti. Es. <xsl:template match="doc[position() < 3]">… Da notare che “-” è sia un carattere lecito nei nomi XML sia un operatore matematico in XPath. Quindi è necessario precedere l'operatore matematico con uno spazio /doc/pippo[@foo-bar] è diverso da /doc/pippo[@foo - bar] ID in XPath La funzione id(foo) richiede di identificare quell'elemento con un attributo di tipo ID il cui valore sia foo. E' necessario avere il DTD per riconoscere che un attributo è di tipo ID. Poiché i DTD non sono necessari nei documenti XML, questa funzione può essere verificata solo da un parser validante, e quindi non è universale. Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari XML: Vincoli di Integrità Xpath si usa in XML Schema per la definizione di vincoli di unicità ed integrità referenziale: ● Unicità: <xs:unique name="codice"> <xs:selector xpath="/libreria/libro"/> <xs:field xpath="autore"/> <xs:field xpath="titolo"/> </xs:unique> Un vincolo di unicità NON implica che il nodo utilizzato come identificatore (field) sia obbligatorio. Eventuali nodi non presenti vengono ignorati. Per definire lo stesso vincolo quando il nodo è obbligatorio si utilizza “key” al posto di “unique”. Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari XML: Vincoli di Integrità Integrità referenziale <xs:key name="codice"> <xs:selector xpath="/libreria/libro"/> <xs:field xpath="autore"/> <xs:field xpath="titolo"/> </xs:key> xs:keyref si utilizza per definire un riferimento non solo a xs:key ma anche a xs:unique mettendo il nome della “chiave” nell'attributo “refer”: <xs:keyref name="lista" refer="codice"> <xs:selector xpath="/lista/oggetti/”> <xs:field xpath="@id"/> </xs:keyref> Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari