Anteprima
Vedrai una selezione di 3 pagine su 7
Modello semistrutturato ed il linguggio XML Pag. 1 Modello semistrutturato ed il linguggio XML Pag. 2
Anteprima di 3 pagg. su 7.
Scarica il documento per vederlo tutto.
Modello semistrutturato ed il linguggio XML Pag. 6
1 su 7
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

<!ELEMENT ISBN #PCDATA>

<!ELEMENT autore #PCDATA>

<!ELEMENT editore #PCDATA>

<!ATTLIST libro identificatore ID prezzo CDATA curatore

IDREF>

L'asterisco indica la presenza di 1 o più elementi, il punto interrogativo indica che l'elemento può

mancare e la slash verticale sta per OR, il più indica la presenza di almeno un elemento.

PCDATA sta per Parsed Character Data ovvero stringhe sottoposte a parsing, utile a visualizzare

gli escape character, i caratteri speciali preceduti da una slash. Un elemento può possedere degli

attributi, questi hanno un tipo e, se si ha ID l'attributo è identificatore d'oggetto, CDATA indica

che il tipo è una stringa infine IDREF si usa come una sorte di chiave esterna, esiste anche la

possibilità di usasre IDREFS per impiegare più riferimenti separati da uno spazio. Gli attributi

sono CDATA e non PCDATA in quanto non sono sottoposti a parsing.

Esempio:

<libro identificatore="L1" prezzo="10€" curatore="C1">

...

</libro>

<curatore identificatore="C1">

...

</curatore>

Il meccanismo degli IDREF è molto generico rispetto a quello di una chiave esterna.

Uno schema può essere ricorsivo ad esempio:

<!ELEMENT a(a|bc)>

Un mixed element ha una struttura del tipo

<a>

string

<b> ... </b> 3 / 7

Modello semistrutturato e XML

string

<c> ... </c>

</a>

Un mixed element perciò contiene sia stringhe che sottoelementi. All'interno del DTD si

specifica come:

<!ELEMENT a((b|c|d|#PCDATA)*)>

Non esiste una maniera più precisa.

XML è uno standard definito dal Word Wide Web Consorsium.

Interrogazioni in XML

Supponiamo di avere il seguente documento XML:

<biblioteca>

<libro ID="L1" casaEd="CE1">

<titolo>TL1</titolo>

<autore>AL1</autore>

</libro>

<libro ID="L2" casaEd="CE1">

<titolo>TL2</titolo>

<autori>

<autore>AL2</autore>

<autore>AL3</autore>

</autori>

<annoEd>2000</annoEd>

</libro>

<casaEd ID="CE1">nomecasaEd1</casaEd>

</biblioteca>

il DTD accoppiato sarà: 4 / 7

Modello semistrutturato e XML

<!ELEMENT biblioteca (libro+,casaEd+)>

<!ELEMENT libro (titolo, autore|autori,annoEd?)>

<!ELEMENT autori(autore+)>

<!ATTLIST libro ID ID casaEd IDREF>

<!ELEMENT casaEd #PCDATA>

<!ATTLIST casaEd ID ID>

Immaginiamo il file XML come un albero:

Per distinguere un nodo attributo da altri si usa @. Gli attributi sono nodi senza figli, tuttavia i

riferimenti tramite IDREF è se fossero archi tratteggiati che cambiano la struttura del albero.

Questo modello si chiama grafo diretto aciclico, ma continuamo a chiamarlo albero.

Un primo linguaggio per l'interrogazione di file XML è XPath. XPath consente di specificare

comodamente quali cammini da percorrere per raggiungere nodi da cui si vuole estrarre

l'informazione. Esempio:

document("mioxml")/child::biblioteca/child::libro/child::titolo

Il risultato è una sequenza di nodi ordinati o meglio è una porzione di testio ossia:

5 / 7

Modello semistrutturato e XML

<titolo>TL1</titolo>

<titolo>TL2</titolo>

XPath è una sequenza di assi navigazionali, oltre child si può usare descendant che dato un nodo

estrae tutti i discendenti di quel nodo che hanno la proprietà scritta dopo i due punti. Esempio:

document("docxml")/descendant::titolo

Si estraggono i titoli discendenti dalla radice, utile il suo utilizzo per trovare tutti gli autori dato

che, alcuni libri hanno il tag <autori> e serve un altro cammino per considerarli.

document("docxml")/descendant::libro/child::autore

Gli assi navigazionali di XPath sono:

child: per scendere al figlio

descendant: per scendere di un numero qualunque di figli, con la variante descendant-or-self

per esprimere la possibilità di specificare i discendenti o se stessi.

parent: per salire al padre del nodo

ancestor: per salire alla radice, con la variante ancestor-or-self per esprimere la possibilità di

specificare l'ancestor o se stessi.

sibling: per spostarsi sui fratelli del nodo

Per convenzione se non si scrive nulla è sottointeso child, se si scrive // è sottointeso descendant.

Attraverso text() si ottiene come risultato solo il text. Per conoscere gli ID dei libri la query è la

seguente:

document("docxml")//libro/@ID

Per esprimere una condizione, ovvero un filtro di selezione si utilizzano le parentesi quadre. Ad

document("docxml")//libro[./annoEd/text()="2000"]/titolo

esempio:

ritorna libro se l'anno di pubblicazione del libro è 2000. Il titolo dei libri in cui viene specificato

l'anno di pubblicazione si ottiene tramite la query:

document("docxml")//libro[./annoEd]/titolo

La query precedente si può scrivere come

document("docxml")//libro[./annoEd="2000"]/titolo questo perché quando

avviene una comparazione, i due operandi della comparazione vengono tramutati nei loro valori.

XPath serve solo ad estrarre informazioni, per essere ancora user-friendly XPath permette di

evitare di scrivere ./ solo quando il primo asse è un figlio.

All'interno di XPath esiste la wildcard * che sta per qualsiasi utile per le condizioni di

disgiunzione. Esempio: 6 / 7

Dettagli
Publisher
A.A. 2022-2023
7 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher Jack04M di informazioni apprese con la frequenza delle lezioni di Basi di dati e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università della Calabria o del prof Furfaro Filippo.