XPath - XML Path Language
Transcript
XPath - XML Path Language
Corso di Laurea Specialistica in Ingegneria Informatica Corso di Linguaggi e Tecnologie Web XPATH – XML Path Language Eufemia TINELLI A. A. 2011 - 2012 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 – LTW A. A. 20112011-2012 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 – LTW A. A. 20112011-2012 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 – LTW A. A. 20112011-2012 4 Individuare una sequenza di nodi: Esempio E. TINELLI – LTW A. A. 20112011-2012 5 Individuare una sequenza di nodi: Esempio Context Node E. TINELLI – LTW A. A. 20112011-2012 6 Individuare una sequenza di nodi: Esempio descendant::C E. TINELLI – LTW A. A. 20112011-2012 7 Individuare una sequenza di nodi: Esempio descendant::C/child::E E. TINELLI – LTW A. A. 20112011-2012 8 Individuare una sequenza di nodi: Esempio descendant::C/child::E/child::F E. TINELLI – LTW A. A. 20112011-2012 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 – LTW A. A. 20112011-2012 10 I nodi di contesto: Esempio E. TINELLI – LTW A. A. 20112011-2012 11 I nodi di contesto: Esempio E. TINELLI – LTW A. A. 20112011-2012 12 I nodi di contesto: Esempio E. TINELLI – LTW A. A. 20112011-2012 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 – LTW A. A. 20112011-2012 14 Asse Parent E’ vuoto per il root node E. TINELLI – LTW A. A. 20112011-2012 15 Asse Child Gli attributi non sono inclusi E. TINELLI – LTW A. A. 20112011-2012 16 Asse Descendant Gli attributi non sono inclusi E. TINELLI – LTW A. A. 20112011-2012 17 Asse Ancestor E. TINELLI – LTW A. A. 20112011-2012 18 Asse Following-Sibling E’ vuoto per gli attributi E. TINELLI – LTW A. A. 20112011-2012 19 Asse Preceding-Sibling E’ vuoto per gli attributi E. TINELLI – LTW A. A. 20112011-2012 20 Asse Following Sono esclusi i discendenti E. TINELLI – LTW A. A. 20112011-2012 21 Asse Preceding Sono esclusi gli antenati E. TINELLI – LTW A. A. 20112011-2012 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 – LTW A. A. 20112011-2012 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 – LTW A. A. 20112011-2012 24 Esempi di Percorsi di destinazione • Il titolo di ogni ricetta • Il nome di ogni ingrediente • Tutti i “character data” nella Collection E. TINELLI – LTW A. A. 20112011-2012 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 – LTW A. A. 20112011-2012 26 Espressioni generali • Espressioni da valutare su valori atomici (numeri, booleani, stringhe unicode e datatype di XSD) o nodi • Espressioni aritmetiche (+,-,*,div,idiv,mod) • Espressioni di confronto – Operatori eq, ne, lt, le, gt, ge per i valori atomici – Operatori =, !=, <, <=, >, >= per tutti i valori – Operatori is, <<, >> per confrontare nodi • Espressioni booleane – Exp1 and exp2, exp1 or exp2, not(exp) • Espressione For – for $name in exp1 return exp2 • Espressione condizionale – if (exp1) then exp2 else exp3 E. TINELLI – LTW A. A. 20112011-2012 27 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 Funzioni XPath Funzioni XPath 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” 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 – LTW A. A. 20112011-2012 32 Abbreviazioni E. TINELLI – LTW A. A. 20112011-2012 33 Espressioni XPath abbreviate • Tutti gli ingredienti di una data ricetta • Il titolo di una ricetta “dietetica” • N.B. • è diversa da E. TINELLI – LTW A. A. 20112011-2012 34 Bookstore: documento XML di esempio <bookstore> <book category="COOKING"> <title lang="en">EverydayItalian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book> <book category="CHILDREN"> <title lang="en">HarryPotter</title> <author>J K.Rowling</author> <year>2005</year> <price>29.99</price> </book> <book category="WEB"> <title lang="en">XQueryKickStart</title> <author>JamesMcGovern</author> <author>Per Bothner</author> <author>KurtCagle</author> <author>JamesLinn</author> <author>VaidyanathanNagarajan</author> <year>2003</year> <price>49.99</price> </book> <book category="WEB"> <title lang="en">LearningXML</title> <author>ErikT.Ray</author> <year>2003</year> <price>39.95</price> </book> </bookstore> E. TINELLI – LTW A. A. 20112011-2012 35 Esempi di espressioni XPath E. TINELLI – LTW A. A. 20112011-2012 36 Usare i predicati E. TINELLI – LTW A. A. 20112011-2012 37 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 Esercitazione RecipeML E. TINELLI – LTW A. A. 20112011-2012 39 RecipeML DTD E. TINELLI – LTW A. A. 20112011-2012 40 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 – LTW A. A. 20112011-2012 41 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 – LTW A. A. 20112011-2012 42 Riferimenti • Specifiche – http://www.w3.org/TR/xpath/ – http://www.w3.org/TR/xpath20/ • 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 – LTW A. A. 20112011-2012 43