1 / 40

XPath

XPath. Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano. XML. XML eXtensible Markup Language è un metalinguaggio; sviluppato dal consorzio World Wide Web (W3C);

austin
Download Presentation

XPath

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. XPath Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano

  2. XML • XML eXtensible Markup Language è un metalinguaggio; • sviluppato dal consorzio World Wide Web (W3C); • Utilizzato per rappresentare dati semistrutturati (dati che presentano una forma di struttura che non è così regolare e completa come nel caso dei dati strutturati)

  3. Struttura di XML • caratterizzato da una struttura gerarchica; • ciascun elemento (tag) rappresenta un componente logico del documento e può contenere altri elementi (sottoelementi) o testo; • ogni elemento può avere associate delle informazioni aggiuntive attraverso la definizione di attributi; • L'organizzazione degli elementi segue un ordine gerarchico che prevede un elemento principale che è chiamato root element.

  4. Document tree • Il root element contiene l'insieme degli altri elementi del documento. • Un documento XML è rappresentato attraverso un albero, generalmente noto come document tree.

  5. XML Tree 1/2 <bib> <book price=“55”> <publisher>Addison-Wesley</publisher> <author>Serge Abiteboul</author> <author><first-name>Rick</first-name> <last-name>Hull</last-name> </author> <author>Victor Vianu</author> <title>Foundations of Databases</title> <year>1995</year> </book> <book> <publisher>Freeman</publisher> <author>Jeffrey D. Ullman</author> <title>Principles of Database and Knowledge Base Systems</title> <year>1998</year> </book> </bib>

  6. bib XML Tree 2/2 The root The root element book book publisher author price=55 . . . . Addison-Wesley Serge Abiteboul

  7. <library><book><chapter> </chapter><chapter> <section><paragraph/> <paragraph/> </section></chapter></book></library> Un po’ di terminologia • library è padre di book; book è il padre dei due nodi chapter • I due nodi chapter sono figli di book, e il nodo section è figlio del secondo nodo chapter • I due nodi chapter (figli del nodobook) sono fratelli (sibling) • library, book, e il secondo chapter sono antenati (ancestors) del nodo section • I due nodi chapter, il nodo section, e il nodo paragraph sono discendenti (descendents) del nodo book

  8. Tipi di nodi • Document: è il primo nodo e rappresenta l’intero documento XML. Questo nodo non corrisponde a nulla di visibile all’interno del documento ma rappresenta il documento stesso; • Element: è un nodo che rappresenta un generico elemento del documento XML (etichette); • Attribute: è un particolare nodo che viene associato ad un nodo Element ma non viene considerato come suo nodo figlio; rappresenta l’attributo di un elemento del documento • Text: contenuto testuale di un nodo (nodo foglia); • Processing instruction: un nodo contenente un’istruzione da eseguire; • Comment: un nodo utilizzato per commentare un documento XML; • Namespace: un nodo associato ad un nodo Element che ne identifica il namespace

  9. Cos’è XPath? • XPath è un linguaggio utilizzato per selezionare parti di un documento XML; • È uno standard W3C dal 1999; • XPath contiene una libreria di oltre 100 funzioni standard (manipolazione stringhe, valori numerici ecc..)

  10. XSLT XPath XQuery XPath • Non è un XML (la sintassi non è XML) ma viene utilizzato in XSLT e XQuery (indispensabile); • Il modo in cui XPath definisce percorsi lungo l’albero XML per estrarre elementi è simile al modo in cui un sistema operativo definisce percorsi ai file.

  11. Paths Operating system:XPath: / = la root directory /library= il root element (se ha nome library ) /users/sara/prova = il file (o directory) chiamato prova in sara in users /library/book/chapter/section= tutti gli elemente section in un chapter in ogni book nella library prova = il file (o directory) chiamato prova nella directory corrente section = ogni elemento section che è figlio dell’elemento corrente . = la directory corrente . = l’ elemento corrente .. = il padre dell’elemento corrente .. = la directory padre /users/sara/* = tutti i files in /users/dave /library/book/chapter/*= tutti gli elementi in /library/book/chapter

  12. Node List • Una espressione XPath produce come risultato una node list. Definizione (Node List): Dato un albero XML T=(N, E), una Node List NL={n | n  N} è un insieme di nodi di nodi n appartenenti all’albero XML t. N.B. Per il modello di rappresentazione XML anche gli attributi e il testo sono nodi

  13. Location Path • Una espressione XPath è detta location path; • Con i location paths è possibile definire qualsiasi percorso; • Un LP identifica un node set (insieme di nodi); • Un LP è costituito da una successione di Location Steps separati dal simbolo ‘/’ e letti da sinistra verso destra; • Un LP ha la seguente forma: locationStep1/locationStep2/.../locationStepn

  14. Location Step • Ogni location step ha la seguente forma: axis::nodetest[filter1]…[filtern] • Un Axis, individua la direzione di specifica del location step nell’albero e rispetto al nodo corrente; • Un NodeTest individua il tipo e il nome completo del nodo identificato dal location step; • Un Filter è un predicatoche raffinano ulteriormente l’insieme di nodi selezionati dal location step.

  15. Axis • Gli assi possibili sono 13: • child, descendant: figlio diretto e a qualunque livello del context node. • parent, ancestor: il genitore immediato a qualunque livello del context node. • self: il context node. • attribute: gli attributi del context node. • preceding-sibling, following-sibling: i nodi allo stesso livello ma precedenti o seguenti il context node. • preceding, following: i nodi a qualunque livello, ma fuori al context node, che precedono o seguono il context node. • descendan-tor-self, ancestor-or-self: come descendant e ancestor, ma considerando anche il context node. • namespace: il nodo namespace;

  16. Node test • Il NodeTest identifica il tipo di oggetto da restituire. Se un’asse identifica un nodo o un attributo (attribute), questo può essere verificato attraverso un test sul nome; • Il test può essere: • NameTest: condizione vera se il nodo (che sia elemento o attributo) possiede quel nome. • NodeType: tipologie di nodi che diventano condizione di filtro. Le tipologie di nodi sono: • text() per identificare nodi di tipo testo, c • comment() per identificare nodi di tipo commento, • node() identifica un generico nodo

  17. Filter 1/2 • Un Filter è un predicato chefiltra l’insieme dei nodi rispetto alla direzione indicata dall’axis per produrre un nuovo insieme di nodi. • Il filtro può essere attuato sulla posizione di un nodo o valutando un’espressione booleana. In questo secondo caso il risultato è quel sottoinsieme di nodi, tra quelli individuati finora, per cui l’espressione booleana è vera. • Il filter è sempre racchiuso tra parentesi quadre […]

  18. Filter 2/2 • Predicato: [a] con a espressione booleana. • EspressioneBooleana: a or b, a and b, not a, c, con a e b espressioni booleane e c espressione relazionale. • EspressioneRelazionale: a=b, a!=b, a<b, a>b, a=<b, a=>b, c, con c espressione aritmetica. • EspressioniAritmetiche: a+b, a-b, a*b, a div b, a mod b, c, con c espressione di disgiunzione. • EspressioniDisgiunzione: a | b, c, con c espressione di path. • Espressione di Path: LocationPath o Espressione primaria. • EspressionePrimaria: numero, lettera o chiamata funzione (XPath possiede un insieme di funzioni predefinite).

  19. Axis: esempi Partendo da un nodo, gli axis self, preceding, following, ancestor, e descendant si comportano nel seguente modo: • <library> <book><chapter/><chapter><section> <paragraph/> <paragraph/> </section> </chapter><chapter/></book><book/></library> • //chapter[2]/self::* • //chapter[2]/preceding::* • //chapter[2]/following::* • //chapter[2]/ancestor::* • //chapter[2]/descendant::*

  20. library ancestor following book[1] book[2] preceding self chapter[1] chapter[2] chapter[3] section[1] descendant paragraph[2] paragraph[1] Axis: vista ad albero Partendo da un nodo, gli axis self, preceding, following, ancestor, e descendant si comportano nel seguente modo:

  21. Sintassi abbreviata • Nodename: seleziona tutti i nodi figli del nodo nodename • / - Seleziona a partire dalla radice • // - seleziona nodi nel documento a partire dal nodo corrente indipndentemente dalla loro posizione nell’albero • . - seleziona il nodo corrente • .. - seleziona il padre del nodo corrente • @ - per selezionare gli attributi dei nodi

  22. Location steps e sintassi abbreviata • child:: può essere omesso dal location step perchè è l’axis di default bib/book è equivalente a child::bib/child::book • attribute:: può essere sostituito da @ • descendant-or-self:: può essere sostituito da // • self::node() può essere abbreviato con . • .//book è l’abbreviazione di self::node()/descendant-or-self::node()/child::book • parent::node() può essere sostituito con .. • attribute::lang può essere sostituito da /@lang

  23. Selezionare nodi • Per selezionare un nodo posso fare riferimento al suo nodename • Per selezionare un qualunque nodo (o attributo) indipendentemente dal nome posso usare: • * seleziona nodi element di un livello; • @* seleziona un nodo attribute; • node() seleziona qualunque nodo

  24. Operatori di XPath • Una espressione XPath restituisce un node-set o una stringa o un booleano, o un numero; • Le espressioni XPath possono utilizzare i seguenti tipi di operatori: • Operatori aritmentici; • Operatori di confronto; • Operatori booleani;

  25. Operatori Aritmetici • + addizione • - sottrazione • * moltiplicazione • div divisione (non si può usare /) • mod modulo

  26. Operatori di confronto 1/2 • = “equals” • != “not equals” • Attenzione: • valore=node-set è vera se il node-set contiene qualche nodo che ha valore uguale a valore • valore !=node-set è vera se il node-set contiene qualche nodo che non ha valore uguale a valore • quindi, • value=node-set e value !=node-set may possono essere entrambe vere nello stesso momento!

  27. Operatori di confronto 2/2 • I seguenti operatori possono essere usati solo per confronti su valori numerici: • < “minore” • <= “minore o uguale” • > “maggiore” • >= “maggiore o uguale”

  28. Operatori logici • and • or • not() (function) • price=9.80 or price=9.70 è vera se price è 9.80 falsa se price è 9.50 • price>9.00 and price<9.90 è vera se price è 9.80 falsa se price è 8.50

  29. Funzioni di XPath • Un elenco delle funzioni fondamentali di XPath è il seguente: • Funzioni che riguardano l’insieme dei nodi: • fn:last() – Restituisce il numero di elementi nella node list che viene processata. Example: /book[last()] Risultato: Seleziona l’ultimo elemento book • fn:position() – Restituisce l’indice della posizione del nodo che viene processato. Example: /book[position()<=3] Risultato: Seleziona i primi tre elementi book • fn:count((item, item…)) – Restituisce il numero di nodi; • fn:id((string, string,… ), node) – Restituisce una sequenza di nodi che hanno ID il cui valore è uguale a uno o più valori specificati.

  30. Funzioni XPath • Funzioni che riguardano l’insieme dei nodi: • fn:namespace-uri() – Restituisce il namespace URI del nodo corrente; • fn:name() – Restituisce il nome del nodo corrente; • Funzioni che riguardano le Stringhe: • fn:string(arg) – Restituisce il valore stringa dell’argomento Example: string(314) Result: "314" • fn:concat(string, string, ..) – Restituisce la concatenazione delle stringhe. Example: concat('XPath ','is ','FUN!') Result: 'XPath is FUN!' • fn:starts-with() – Restituisce vero se seting1 inizia con string2, falso altrimenti. Example: starts-with('XML','X') Result: true

  31. Funzioni XPath • fn:substring-before() {substringafter()} – Restituisce la parte a sinistra di string1 prima che string2 si presenti. Example: substring-before('12/10','/') Result: '12' • fn:substring(string,start,len) – Restituisce la sottostringa a partire dalla posizione start fino alla lunghezza specificata. L’indice del primo carattere è 1. Example: substring('Beatles',1,4) Result: 'Beat' • fn:stringlength(string) – Restituisce la lunghezza della stringa.

  32. Funzioni XPath • Funzioni Numeriche: • fn:number(arg) – Restituisce il valore numerico dell’argomento. Example: number('100') Result: 100 • fn:sum(arg, arg, …) – Restituisce la somma degli argomenti. • fn:round() - Example: round(3.14)Result: 3

  33. File XML di esempio <?xml version="1.0" encoding="ISO-8859-1"?><bookstore><book>  <title lang="eng">Harry Potter</title>  <price>29.99</price></book><book>  <title lang="eng">Learning XML</title>  <price>39.95</price></book></bookstore>

  34. Esempi

  35. Esempi

  36. Riferimenti • http://www.w3schools.com/xpath; • www.w3.org/TR/xpath; • Libro di testo “An introduction to XML”

  37. Esercizi <bib> <bookprice=“55”> <publisher>Addison-Wesley</publisher> <author>Serge Abiteboul</author> <author><first-name>Rick</first-name> <last-name>Hull</last-name> </author> <author>Victor Vianu</author> <title>Foundations of Databases</title> <year>1995</year> </book> <book> <publisher>Freeman</publisher> <author>Jeffrey D. Ullman</author> <title>Principles of Database and Knowledge Base Systems</title> <year>1998</year> </book> </bib>

  38. Esercizi Qual’è la forma abbreviata per: • /child::bib/child::book • /child::bib/child::book/attribute::price • /descendant-or-self::node()/child::author/parent::node()

  39. Esercizi • Cosa producono queste espressioni? • /bib/book/author[first-name] • /bib/book/author[first-name][address[zip][city]]/last-name

More Related