XPath - SisInfLab
Transcript
XPath - SisInfLab
Corso di Laurea Magistrale in Ingegneria Gestionale Corso di Sistemi Informativi XPATH – XML Path Language Eufemia TINELLI A. A. 2012 - 2013 Contenuti • Strumenti per navigare un albero XML – Percorsi di posizione e passaggi di posizione • Assi • Test dei nodi • Predicati • Nodo di contesto – Operatori e funzioni dei nodi • Esercitazione con RecipeML E. TINELLI – SI A. A. 2012-2013 2 XPath • Permette di localizzare parti specifiche di un documento XML Navigare albero XML • Non è un linguaggio strutturato come XML ma basato su “espressioni” usate da altre tecnologie XML • Vede un documento XML come una “struttura gerarchica di nodi”. Tipi di nodi: radice, elemento, testo, commento, istruzione di elaborazione, namespace • XPATH 1.0 W3C recommendation 1999 • XPATH 2.0 W3C draft 2005, W3C recommendation 2007 E. TINELLI – SI A. A. 2012-2013 3 Percorsi di posizione • Un percorso di posizione (location path) è una sequenza di passaggi (location steps) separati dal carattere ‘/’ che valuta una sequenza di nodi: – La sequenza è ordinata secondo la struttura gerarchica del documento – La sequenza non può contenere duplicati • Un location step consiste di – Un asse (axis) axis :: nodetest [Exp1] [Exp2] ... – Un node test – Dei predicati (espressioni XPath) • Un location step parte da un “nodo contesto” e individua una sequenza di nodi si potrebbe trasformare una sequenza di nodi in un’altra rimpiazzando ogni nodo della sequenza di input con il risultato di una location path che ha quel nodo come contesto E. TINELLI – SI A. A. 2012-2013 4 Individuare una sequenza di nodi: Esempio E. TINELLI – SI A. A. 2012-2013 5 Individuare una sequenza di nodi: Esempio Context Node E. TINELLI – SI A. A. 2012-2013 6 Individuare una sequenza di nodi: Esempio descendant::C E. TINELLI – SI A. A. 2012-2013 7 Individuare una sequenza di nodi: Esempio descendant::C/child::E E. TINELLI – SI A. A. 2012-2013 8 Individuare una sequenza di nodi: Esempio descendant::C/child::E/child::F E. TINELLI – SI A. A. 2012-2013 9 I nodi di contesto • Nella valutazione di una espressione XPath un “contesto” contiene: – Un nodo di contesto (un nodo dell’albero XML) – Una posizione ed una dimensione (2 interi non negativi) – Un insieme di operatori che mettono in relazione nomi di variabili a valori – Delle funzioni di libreria – Un insieme di dichiarazioni di namespace che mettono in relazione i prefissi con gli URIs • Il contesto iniziale è determinato dall’applicazione che richiede la valutazione dell’espressione XPath • ‘/’ forza a considerare come contesto iniziale il root node E. TINELLI – SI A. A. 2012-2013 10 I nodi di contesto: Esempio E. TINELLI – SI A. A. 2012-2013 11 I nodi di contesto: Esempio E. TINELLI – SI A. A. 2012-2013 12 I nodi di contesto: Esempio E. TINELLI – SI A. A. 2012-2013 13 Gli Assi (Axis) • Le ricerche all’interno di un documento XML iniziano dal nodo di contesto • Un asse indica quali nodi, riferiti al nodo contesto, devono essere inclusi nella ricerca • Ogni asse ha una direzione: l’ordine con cui vengono concatenati i nodi – Sequenza diretta (ordine dei nodi nel documento XML) • child, descendant, following-sibling, following, self, descendant-or-self – Sequenza inversa (ordine inverso rispetto al documento XML) • Parent, ancestor, preceding-sibling, preceding – Attribute?? • Un asse ha un tipo di nodo principale che corrisponde al tipo di nodo che l’asse può selezionare – Tutti gli assi hanno element come tipo di nodo principale tranne attribute e namespace E. TINELLI – SI A. A. 2012-2013 14 Asse Parent E’ vuoto per il root node E. TINELLI – SI A. A. 2012-2013 15 Asse Child Gli attributi non sono inclusi E. TINELLI – SI A. A. 2012-2013 16 Asse Descendant Gli attributi non sono inclusi E. TINELLI – SI A. A. 2012-2013 17 Asse Ancestor E. TINELLI – SI A. A. 2012-2013 18 Asse Following-Sibling E’ vuoto per gli attributi E. TINELLI – SI A. A. 2012-2013 19 Asse Preceding-Sibling E’ vuoto per gli attributi E. TINELLI – SI A. A. 2012-2013 20 Asse Following Sono esclusi i discendenti E. TINELLI – SI A. A. 2012-2013 21 Asse Preceding Sono esclusi gli antenati E. TINELLI – SI A. A. 2012-2013 22 Gli altri assi • Attribute: individua i nodi degli attributi del nodo contesto • Self: individua il nodo di contesto • Descendant-or-self: è la concatenazione delle sequenze di nodi degli assi Self e Descendant • Ancestor-or-self: è la concatenazione delle sequenze di nodi degli assi Self e Ancestor • Namespace: individua i nodi dei namespace del nodo di contesto E. TINELLI – SI A. A. 2012-2013 23 Test dei nodi • Un asse individua un gruppo di nodi dalla struttura ad albero di un documento XML, i nodi vengono selezionati in base ai test dei nodi – text() seleziona tutti i nodi di testo – comment() seleziona tutti i nodi dei commenti – processing-instruction() seleziona tutti i nodi delle istruzioni di elaborazione – node() seleziona tutti i nodi (indipendetemente dal tipo) – * seleziona tutti i nodi dello stesso tipo di nodo principale (dipende dall’asse) – name seleziona tutti i nodi di un dato nome – *:localname seleziona tutti i nodi di un dato nome qualificato – prefix:* seleziona tutti i nodi di un dato prefisso E. TINELLI – SI A. A. 2012-2013 24 Esempi di Percorsi di destinazione • Il titolo di ogni ricetta • Il nome di ogni ingrediente • Tutti i “character data” nella Collection E. TINELLI – SI A. A. 2012-2013 25 Predicati XPath • È una espressione XPath che può essere valutata come una condizione booleana avente il nodo corrente come contesto • Un predicato XPath può essere anche un percorso di destinazione che permette di verificare le proprietà dei nodi senza “spostarsi” realmente nella struttura dei nodi • Questi esempi restituiscono lo stesso risultato? E. TINELLI – SI A. A. 2012-2013 26 Funzioni XPath • XPath offre un elevato numero di funzionalità mediante le function libraries • Il namespace di default per tali funzioni (prefisso fn) è: http://www.w3.org/2004/07/xpath-functions Esso contiene 106 funzioni supportate da XPath 2.0 • Altre funzioni relative al casting/costruzioni di valori si trovano al namespace (prefisso xs): http://www.w3.org/2001/XMLSchema E. TINELLI – SI A. A. 2012-2013 27 Funzioni XPath E. TINELLI – SI A. A. 2012-2013 28 Funzioni XPath E. TINELLI – SI A. A. 2012-2013 29 Funzioni XPath • fn:doc(“http://sisinflab.poliba.it/tinelli/recipes.xml”) – Restituisce il root node del documento XML specificato dall’URI • fn:position() – Restituisce la posizione di un nodo nel “nodo contesto” • fn:last() – Restituisce la dimensione (size) di un “nodo contesto” E. TINELLI – SI A. A. 2012-2013 30 Esempi di predicati • Verificare l’esistenza di un attributo • Verificare l’uguaglianza del valore di un attributo • Verificare due condizioni per volta • Verificare la posizione del nodo contesto • Verificare l’esistenza di un sotto-albero E. TINELLI – SI A. A. 2012-2013 31 Abbreviazioni E. TINELLI – SI A. A. 2012-2013 32 Espressioni XPath abbreviate • Tutti gli ingredienti di una data ricetta • Il titolo di una ricetta “dietetica” • N.B. • è diversa da E. TINELLI – SI A. A. 2012-2013 33 XPath 1.0 e XPath 2.0 • Le espressioni generali sono state introdotte principalmente con XPath2 • Molte implememtazioni supportano solo XPath 1.0 – – – – Gestione dei namespace di default Minor numero di function library Cast dei valori implicito Alcune espressioni cambiano semantica Es. “4” < “4.0” è falsa in XPath 1.0 ma vera in XPath 2.0 E. TINELLI – SI A. A. 2012-2013 34 Esercitazione RecipeML E. TINELLI – SI A. A. 2012-2013 35 RecipeML DTD E. TINELLI – SI A. A. 2012-2013 36 RecipeML Example <collection> <recipe> <title>Beef Parmesan with Garlic Angel Hair Pasta</title> <ingredient name="beef cube steak" amount="1.5" unit="pound" /> <ingredient name="onion, sliced into thin rings" amount="1" /> <ingredient name="green bell pepper, sliced in rings" amount="1" /> <ingredient name="Italian seasoned bread crumbs" amount="1" unit="cup" /> <ingredient name="grated Parmesan cheese" amount="0.5" unit="cup" /> <ingredient name="olive oil" amount="2" unit="tablespoon" /> <ingredient name="spaghetti sauce" amount="1" unit="jar" /> <ingredient name="shredded mozzarella cheese" amount="0.5" unit="cup" /> <ingredient name="angel hair pasta" amount="12" unit="ounce" /> <ingredient name="minced garlic" amount="2" unit="teaspoon" /> <ingredient name="butter" amount="0.25" unit="cup" /> <preparation> <step>Preheat oven to 350 degrees F (175 degrees C).</step> <step>Cut cube steak into serving size pieces. Coat meat with the bread crumbs and parmesan cheese. Heat olive oil in a large frying pan, and saute 1 teaspoon of the garlic for 3 minutes. Quick fry (brown quickly on both sides) meat. Place meat in a casserole baking dish, slightly overlapping edges. Place onion rings and peppers on top of meat, and pour marinara sauce over all.</step> <step>Bake at 350 degrees F (175 degrees C) for 30 to 45 minutes, depending on the thickness of the meat. Sprinkle mozzarella over meat and leave in the oven till bubbly.</step> <step>Boil pasta al dente. Drain, and toss in butter and 1 teaspoon garlic. For a stronger garlic taste, season with garlic powder. Top with grated parmesan and parsley for color. Serve meat and sauce atop a mound of pasta!</step> </preparation> <comment>Make the meat ahead of time, and refrigerate over night, the acid in the tomato sauce will tenderize the meat even more. If you do this, save the mozzarella till the last minute.</comment> <nutrition calories="1167" fat="23%" carbohydrates="45%" protein="32%" /> </recipe> E. TINELLI – SI A. A. 2012-2013 37 Query 1. I titoli di tutte le ricette che usano l’olio di oliva. 2. I titoli di tutte le ricette restituite come stringhe 3. I titoli di tutte le ricette che hanno meno di 500 calorie 4. I titoli delle ricette che non usano burro 5. La quantità di zucchero necessaria per la Zuppa Inglese 6. I primi due steps nella preparazione della Zuppa Inglese 7. I titoli delle ricette che richiedono almeno 5 steps 8. Il numero di ricette nel documento 9. Il numero medio di calorie 10. Le ricette che hanno un ingrediente in comune con la Zuppa Inglese 11. I titoli delle ricette che hanno soltanto ingredienti composti E. TINELLI – SI A. A. 2012-2013 38 Riferimenti • Specifiche – http://www.w3.org/TR/xpath/ – http://www.w3.org/TR/xpath20/ – http://www.w3.org/TR/xquery-operators/ • Testo consigliato – A. Moller and M. Schwartzbach, An Introduction to XML and Web Technologies, Addison Wesley, 2006 [cap. 3] • Materiale esercitazioni Ombretta Gaggi @ Università di Padova Alessio Pace,Valter Crescenzi,Paolo Merialdo,Paolo Papotti @ Università Roma Tre E. TINELLI – SI A. A. 2012-2013 39