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

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

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

Page 1: XPath 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

Page 2: 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);

Utilizzato per rappresentare dati semistrutturati (dati che presentano una forma di struttura che non è così regolare e completa come nel caso dei dati strutturati)

Page 3: XPath Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano.

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.

Page 4: XPath Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano.

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.

Page 5: XPath Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano.

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>

Page 6: XPath Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano.

XML Tree 2/2

bib

book book

publisher author . . . .

Addison-Wesley Serge Abiteboul

The root

The root element

price=55

Page 7: XPath Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano.

Un po’ di terminologia <library>

<book> <chapter> </chapter> <chapter> <section> <paragraph/> <paragraph/> </section> </chapter> </book></library>

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

Page 8: XPath Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano.

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

Page 9: XPath Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano.

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..)

Page 10: XPath Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano.

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.

XQueryXSLT XPath

Page 11: XPath Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano.

PathsOperating 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

. = la directory corrente . = l’ elemento corrente

.. = la directory padre .. = il padre dell’elemento corrente

/users/sara/* = tutti i files in /users/dave

/library/book/chapter/* = tutti gli elementi in /library/book/chapter

prova = il file (o directory) chiamato prova nella directory corrente

section = ogni elemento section che è figlio dell’elemento corrente

Page 12: XPath Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano.

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

Page 13: XPath Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano.

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

Page 14: XPath Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano.

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.

Page 15: XPath Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano.

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;

Page 16: XPath Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano.
Page 17: XPath Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano.

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

Page 18: XPath Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano.

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 […]

Page 19: XPath Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano.

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).

Page 20: XPath Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano.

Axis: esempiPartendo 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::*

Page 21: XPath Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano.

Axis: vista ad albero

paragraph[1] paragraph[2]

section[1]

chapter[2]chapter[1] chapter[3]

book[1] book[2]

library

self

ancestor

descendant

preceding

following

Partendo da un nodo, gli axis self, preceding, following, ancestor, e descendant si comportano nel seguente modo:

Page 22: XPath Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano.

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

Page 23: XPath Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano.

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

Page 24: XPath Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano.

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

Page 25: XPath Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano.

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;

Page 26: XPath Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano.

Operatori Aritmetici + addizione - sottrazione * moltiplicazione div divisione (non si può usare /) modmodulo

Page 27: XPath Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano.

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!

Page 28: XPath Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano.

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”

Page 29: XPath Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano.

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

Page 30: XPath Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano.

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.

Page 31: XPath Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano.

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

Page 32: XPath Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano.

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.

Page 33: XPath Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano.

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

Page 34: XPath Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano.

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>

Page 35: XPath Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano.

Esempi

Page 36: XPath Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano.

Esempi

Page 37: XPath Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano.

Riferimenti

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

Page 38: XPath Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano.

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>

Page 39: XPath Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano.

Esercizi

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

parent::node()

Page 40: XPath Corso di basi di dati II Prof. Francesco Cutugno Dott. Sara Romano.

Esercizi

Cosa producono queste espressioni? /bib/book/author[first-name]

/bib/book/author[first-name][address[zip][city]]/last-name