Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoCristiano Spinelli Modificato 11 anni fa
1
Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano
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
XML Tree 2/2 The root The root element . . . . bib book book publisher
author price=55 Addison-Wesley Serge Abiteboul
7
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 nodo book) 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 <library> <book> <chapter> </chapter> <chapter> <section> <paragraph/> <paragraph/> </section> </chapter> </book> </library>
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
XPath XQuery XSLT 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
locationStep1/locationStep2/.../locationStepn
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 Con le regole abbreviate si possono definire solo alcuni percorsi e non tutti come nei location paths
14
axis::nodetest[filter1]…[filtern]
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 predicato che 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;
17
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
18
Filter 1/2 Un Filter è un predicato che filtra 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 […]
19
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).
20
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::* Preceding e following selezionano ogni nodo del documento che sta prima o dopo il tag di chiusura del nodo corrente
21
Axis: vista ad albero Partendo da un nodo, gli axis self, preceding, following, ancestor, e descendant si comportano nel seguente modo: ancestor paragraph[1] paragraph[2] section[1] chapter[2] chapter[1] chapter[3] book[1] book[2] library following preceding self descendant
22
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
23
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 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
24
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
25
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;
26
Operatori Aritmetici + addizione - sottrazione * moltiplicazione
div divisione (non si può usare /) mod modulo
27
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!
28
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”
29
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
30
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.
31
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
32
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.
33
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
34
File XML di esempio <?xml version="1.0" encoding="ISO "?> <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>
35
Esempi
36
Esempi
37
Riferimenti http://www.w3schools.com/xpath; www.w3.org/TR/xpath;
Libro di testo “An introduction to XML”
38
Esercizi <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>
39
Esercizi Qual’è la forma abbreviata per: /child::bib/child::book
/child::bib/child::book/attribute::price /descendant-or-self::node()/child::author/parent::node()
40
Esercizi Cosa producono queste espressioni?
/bib/book/author[first-name] /bib/book/author[first-name][address[zip][city]]/last-name
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.