Laboratorio di reti II: Extensible Markup Language · E’ inoltre possibile raggruppare vari...

27
Laboratorio di reti II: Extensible Markup Language Stefano Brocchi [email protected]fi.it 20 aprile, 2009 Stefano Brocchi Laboratorio di reti II: XML 20 aprile, 2009 1 / 27

Transcript of Laboratorio di reti II: Extensible Markup Language · E’ inoltre possibile raggruppare vari...

Page 1: Laboratorio di reti II: Extensible Markup Language · E’ inoltre possibile raggruppare vari elementi tramite le parentesi Stefano Brocchi Laboratorio di reti II: XML 20 aprile,

Laboratorio di reti II: Extensible Markup Language

Stefano [email protected]

20 aprile, 2009

Stefano Brocchi Laboratorio di reti II: XML 20 aprile, 2009 1 / 27

Page 2: Laboratorio di reti II: Extensible Markup Language · E’ inoltre possibile raggruppare vari elementi tramite le parentesi Stefano Brocchi Laboratorio di reti II: XML 20 aprile,

Il linguaggio XML

Il linguaggio XML

L’ XML (eXtensible Markup Language) e un linguaggio a tag per ilsalvataggio di dati

L’ XML nasce con l’obiettivo di fornire un linguaggio universale concui definire l’informazione, comprensibile indipendentementedall’applicazione che la ha generata

Stefano Brocchi Laboratorio di reti II: XML 20 aprile, 2009 2 / 27

Page 3: Laboratorio di reti II: Extensible Markup Language · E’ inoltre possibile raggruppare vari elementi tramite le parentesi Stefano Brocchi Laboratorio di reti II: XML 20 aprile,

Il linguaggio XML

XML ben formati

Per essere ben formato, un file XML deve soddisfare i seguentisemplici requisiti:

Un documento XML e formato da una serie di tag per cui ad ogni tagaperto corrisponde un tag chiuso

Non ci sono tag predefiniti: qualsiasi tag puo essere definito edutilizzato da chi scrive l’XMLCome in HTML, e possibile specificare degli attributi per i tag

I tag devono essere correttamente annidati

Deve esistere un tag, detto radice, che contiene tutto il documento

All’inizio del documento specificare la versione dell’XML e la codificadel file tramite la sintassi

<?xml version="1.0" encoding="ISO-8859-1"?>

Stefano Brocchi Laboratorio di reti II: XML 20 aprile, 2009 3 / 27

Page 4: Laboratorio di reti II: Extensible Markup Language · E’ inoltre possibile raggruppare vari elementi tramite le parentesi Stefano Brocchi Laboratorio di reti II: XML 20 aprile,

Il linguaggio XML

XML

Un esempio di file XML:

<?xml version="1.0" encoding="ISO-8859-1"?>

<mail>

<da> Marco Rossi </da>

<a> Giulio Bianchi </a>

<soggetto> XML </soggetto>

<corpo> Una mail in XML </corpo>

</mail>

Stefano Brocchi Laboratorio di reti II: XML 20 aprile, 2009 4 / 27

Page 5: Laboratorio di reti II: Extensible Markup Language · E’ inoltre possibile raggruppare vari elementi tramite le parentesi Stefano Brocchi Laboratorio di reti II: XML 20 aprile,

Il linguaggio XML

Portabilita ed estendibilita

Se nell’esempio due diverse applicazioni volessero manipolare filerappresentanti una mail, potrebbero semplicemente creare file XML especificare il significato del contenuto dei vari tag

Un’altra caratteristica fondamentale dell’XML e l’estendibilita: ad unfile XML possono venir aggiunti ulteriori tag senza precluderel’interpretazione di quelli gia esistenti

Stefano Brocchi Laboratorio di reti II: XML 20 aprile, 2009 5 / 27

Page 6: Laboratorio di reti II: Extensible Markup Language · E’ inoltre possibile raggruppare vari elementi tramite le parentesi Stefano Brocchi Laboratorio di reti II: XML 20 aprile,

Il linguaggio XML

Esempio di estendibilita

Supponiamo che un’applicazione crei il file XML vistoprecedentemente e vi aggiunga la riga

<priorita> alta </priorita>

Se un’altra applicazione legge il file e non sa interpretare il tag<priorita> nulla le vieta di processare correttamente gli altri campi

Inoltre scrivendo tag con un nome che esprime chiaramente il lorosignificato, e possibile che anche senza una specifica ufficiale se unprogramma non comprende il tag questo potrebbe esserecomprensibile da un utente

Stefano Brocchi Laboratorio di reti II: XML 20 aprile, 2009 6 / 27

Page 7: Laboratorio di reti II: Extensible Markup Language · E’ inoltre possibile raggruppare vari elementi tramite le parentesi Stefano Brocchi Laboratorio di reti II: XML 20 aprile,

Il linguaggio XML Document Type Definition

Document Type Definition

Per definire una famiglia di documenti XML che rispetta determinateproprieta si puo definire un Document Type Definition (DTD)

Proposte ultimamente diverse alternative ai DTD, come per esempiogli XML schema

Un DTD permette di specificare che in un documento XML devonoessere presenti dei determinati tag strutturati in un certo modo

Due modi per specificare un DTD per un documento XML:

Direttamente nel file XML, con la sintassi<!DOCTYPE tagradice [ ... ] >

In un file esterno tramite la sintassi<!DOCTYPE tagradice SYSTEM "filedtd ">

Dove tagradice rappresenta il tag che contiene tutto il documento

Stefano Brocchi Laboratorio di reti II: XML 20 aprile, 2009 7 / 27

Page 8: Laboratorio di reti II: Extensible Markup Language · E’ inoltre possibile raggruppare vari elementi tramite le parentesi Stefano Brocchi Laboratorio di reti II: XML 20 aprile,

Il linguaggio XML Document Type Definition

Dichiarazioni in un DTD

In un DTD vengono specificate delle dichiarazioni su cosa undeterminato tag deve contenere con la seguente sintassi

<!ELEMENT nometag contenuto >

Nometag rappresenta il nome del tag da descrivere

Contenuto rappresenta cio che il tag deve contenere e puo averevalore:

EMPTY se il tag deve essere vuotoANY se il tag puo avere qualsiasi contenuto(contenuto) se si vuole specificare che il tag deve contenere altri tage/o altro contenuto

Stefano Brocchi Laboratorio di reti II: XML 20 aprile, 2009 8 / 27

Page 9: Laboratorio di reti II: Extensible Markup Language · E’ inoltre possibile raggruppare vari elementi tramite le parentesi Stefano Brocchi Laboratorio di reti II: XML 20 aprile,

Il linguaggio XML Document Type Definition

Dichiarazioni in un DTD

Nel contenuto di un tag, la stringa #PCDATA rappresenta uncontenuto che non contiene tag

Il contenuto di un tag deve essere specificato tramite la sintassi delleespressioni regolari

Un elenco separato da virgole specifica che devono essere presenti tuttigli elementiIl simbolo ’*’ dopo un simbolo specifica ’un qualsiasi numero di questielementi’Il simbolo ’+’ dopo un simbolo specifica ’uno o piu di questi elementi’Il simbolo ’?’ significa ’uno o zero di questi elementi’Il simbolo ’|’ tra due elementi e un ’o’ logicoE’ inoltre possibile raggruppare vari elementi tramite le parentesi

Stefano Brocchi Laboratorio di reti II: XML 20 aprile, 2009 9 / 27

Page 10: Laboratorio di reti II: Extensible Markup Language · E’ inoltre possibile raggruppare vari elementi tramite le parentesi Stefano Brocchi Laboratorio di reti II: XML 20 aprile,

Il linguaggio XML Document Type Definition

Esempio di DTD

Un semplice DTD per una mail in XML potrebbe essere per esempioil seguente

<!DOCTYPE mail [

<!ELEMENT mail (da,a,cc*,soggetto,corpo,priorita?)>

<!ELEMENT da (#PCDATA)>

<!ELEMENT a (#PCDATA)>

<!ELEMENT cc (#PCDATA)>

<!ELEMENT soggetto (#PCDATA)>

<!ELEMENT corpo (#PCDATA)>

<!ELEMENT priorita (#PCDATA)>

]>

Stefano Brocchi Laboratorio di reti II: XML 20 aprile, 2009 10 / 27

Page 11: Laboratorio di reti II: Extensible Markup Language · E’ inoltre possibile raggruppare vari elementi tramite le parentesi Stefano Brocchi Laboratorio di reti II: XML 20 aprile,

Il linguaggio XML Document Type Definition

Attributi in un DTD

Nei DTD e possibile specificare delle direttive anche per gli attributirelativi ad un determinato tag

Un esempio che impone che un attributo debba essere necessariamentespecificato<!ATTLIST nome-tag nome-attributo CDATA #REQUIRED>

Altri esempi di vincoli che si possono specificare: che un attributopossa avere solo determinati valori, oppure che possa essere omesso edin tal caso che assuma un valore di default

Non entreremo nel dettaglio, anche perche spesso gli attributi XMLnon vengono impiegati a favore dell’utilizzo di sottotag

Stefano Brocchi Laboratorio di reti II: XML 20 aprile, 2009 11 / 27

Page 12: Laboratorio di reti II: Extensible Markup Language · E’ inoltre possibile raggruppare vari elementi tramite le parentesi Stefano Brocchi Laboratorio di reti II: XML 20 aprile,

Il linguaggio XML XHTML

XML ed HTML

L’HTML non e un caso particolare di XML

Nell’HTML non tutti i tag devono essere necessariamente chiusi

Alcuni ammettoni per esempio chiusura implicita (come <li>), altrinon richiedono affatto tag di chiusura (come <br> o <img>)

Inoltre l’XML, al contrario dell’HTML, e case sensitive

Stefano Brocchi Laboratorio di reti II: XML 20 aprile, 2009 12 / 27

Page 13: Laboratorio di reti II: Extensible Markup Language · E’ inoltre possibile raggruppare vari elementi tramite le parentesi Stefano Brocchi Laboratorio di reti II: XML 20 aprile,

Il linguaggio XML XHTML

Extensible HyperText Markup Language

Per esprimere pagine web tramite XML, e stato definito un linguaggioche estende l’HTML in modo da essere conforme all’XML

Nasce cosı l’ Extensible HyperText Markup Language (XHTML)

Semplicemente, un documento XHTML e un documento HTML doveogni tag aperto viene anche chiuso

Tag con chiusura implicita vanno chiusi esplicitamente:<li> 1 <li> 2 diventa <li> 1 </li><li> 2</li>

Tag che non richiedevano tag di chiusura vanno chiusi senza corpo:<br> diventa <br/>, <img src=’img.jpg’> diventa <img

src=’img.jpg’/>

Stefano Brocchi Laboratorio di reti II: XML 20 aprile, 2009 13 / 27

Page 14: Laboratorio di reti II: Extensible Markup Language · E’ inoltre possibile raggruppare vari elementi tramite le parentesi Stefano Brocchi Laboratorio di reti II: XML 20 aprile,

Il linguaggio XML XHTML

Extensible HyperText Markup Language

Pagine in XHTML possono essere cosı processate e validate tramitestrumenti che supportano l’XML

La dichiarazione del tipo di documento per pagine XHTML deveessere conforme a questo tipo di file

Per esempio <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0

Strict//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

Stefano Brocchi Laboratorio di reti II: XML 20 aprile, 2009 14 / 27

Page 15: Laboratorio di reti II: Extensible Markup Language · E’ inoltre possibile raggruppare vari elementi tramite le parentesi Stefano Brocchi Laboratorio di reti II: XML 20 aprile,

Il linguaggio XML Gestione di XML in Java

Gestione di XML in Java

In Java sono presenti delle librerie per l’elaborazione di documentiXML

Le classi fornite nel JRE rappresentano solo le interfacce di questiparser; varie implementazioni sono disponibili in rete

Due diversi tipi di parser: SAX (Simple Api for XML) e DOM(Documento Object Model)

Stefano Brocchi Laboratorio di reti II: XML 20 aprile, 2009 15 / 27

Page 16: Laboratorio di reti II: Extensible Markup Language · E’ inoltre possibile raggruppare vari elementi tramite le parentesi Stefano Brocchi Laboratorio di reti II: XML 20 aprile,

Il linguaggio XML Gestione di XML in Java

Parser di tipo SAX

In SAX la gestione delle informazioni ottenute dall’XML vengonogestite tramite eventi

La classe che effettua il parsing contiene dei metodi che vengonorichiamati via via che il documento viene analizzato

Esistera per esempio un metodo per quando viene trovato un tagaperto o un metodo per quando viene trovato del contenuto di un tag

Per utilizzare SAX si dovra quindi estendere il parser ed implementarequesti metodi per realizzare il comportamento desiderato

Stefano Brocchi Laboratorio di reti II: XML 20 aprile, 2009 16 / 27

Page 17: Laboratorio di reti II: Extensible Markup Language · E’ inoltre possibile raggruppare vari elementi tramite le parentesi Stefano Brocchi Laboratorio di reti II: XML 20 aprile,

Il linguaggio XML Gestione di XML in Java

Parser di tipo DOM

In DOM invece quando il documento viene analizzato viene generatol’intero albero XML relativo

Le informazioni nel documento (tag aperti e chiusi, contenuti)vengono incapsulati in appositi oggetti

Dopo il parsing si puo ottenere l’albero del documento ed estrarre glioggetti in esso contenuti

Si possono recuperare tag sia per identificativo che navigando l’alberoXML (es. dato un tag ottenere tutti i figli di quel tag)Il Document Object Model e lo stesso modello che viene utilizzato, peresempio, da Javascript per la manipolazione dell’HTML

Stefano Brocchi Laboratorio di reti II: XML 20 aprile, 2009 17 / 27

Page 18: Laboratorio di reti II: Extensible Markup Language · E’ inoltre possibile raggruppare vari elementi tramite le parentesi Stefano Brocchi Laboratorio di reti II: XML 20 aprile,

Il linguaggio XML Gestione di XML in Java

SAX e DOM: confronto

La scelta tra DOM e SAX deve essere fatta soppesando i vantaggio diuno o dell’altro nel contesto dell’applicazione che ne deve fare uso

Visto che SAX scorre il documento senza ricostruirne tutta lastruttura, richiede una quantita minore di memoria e tempo

Evitare di costruire tutto l’albero XML puo essere inoltre convenientequando ci interessa solo una piccola parte dei dati contenuti

L’avere a disposizione l’intero albero XML puo essere tuttavia piucomodo per alcune applicazioni

Questo permette per esempio di visitare i tag XML in modo nonsequenziale

Stefano Brocchi Laboratorio di reti II: XML 20 aprile, 2009 18 / 27

Page 19: Laboratorio di reti II: Extensible Markup Language · E’ inoltre possibile raggruppare vari elementi tramite le parentesi Stefano Brocchi Laboratorio di reti II: XML 20 aprile,

Il linguaggio XML Un esempio di XML: gli RSS

Really Simple Syndacation

Gli RSS (Really Simple Syndacation) rappresentano un tipo didocumento XML per pubblicare delle informazioni frequentementeaggiornate

Gli RSS vengono creati ed aggiornati regolarmente da molti siti webin modo da pubblicare una sorta di riassunto delle principali novita delsito

D’altra parte utenti interessati al sito configureranno opportuniprogrammi (o semplicemente il proprio browser) per leggereregolarmente il file RSS e visualizzare le informazioni contenute

Stefano Brocchi Laboratorio di reti II: XML 20 aprile, 2009 19 / 27

Page 20: Laboratorio di reti II: Extensible Markup Language · E’ inoltre possibile raggruppare vari elementi tramite le parentesi Stefano Brocchi Laboratorio di reti II: XML 20 aprile,

Il linguaggio XML Un esempio di XML: gli RSS

Really Simple Syndacation

Un tipico RSS generato da un sito contiene una lista di collegamenti adelle pagine nuove, dove per ognuno e specificato un titolo ed unadescrizione

Essendo questi file in XML e seguendo un DTD ben definito, qualsiasiapplicazione puo estrarre i dati contenuti e visualizzarli nel modo piuopportuno

Stefano Brocchi Laboratorio di reti II: XML 20 aprile, 2009 20 / 27

Page 21: Laboratorio di reti II: Extensible Markup Language · E’ inoltre possibile raggruppare vari elementi tramite le parentesi Stefano Brocchi Laboratorio di reti II: XML 20 aprile,

Il linguaggio XML Un esempio di XML: gli RSS

Utilizzo di RSS

Gli RSS sono utilizzati dai browser per creare dei segnalibri dinamiciche puntano alle ultime pagine segnalate da un sito

Il browser periodicamente scarichera il file dalla URL specificata edaggiornera i segnalibri grazie alle informazioni estratte

Spesso gli RSS sono utilizzati in siti web per segnalare informazioniriguardanti altri siti considerati interessanti

Un esempio: Gmail visualizza per le ’web clips’ informazioni ottenuteda RSSNumerosi siti forniscono servizi che generano automaticamente ilcodice di un box HTML con i dati estratti da un RSS specificato

Stefano Brocchi Laboratorio di reti II: XML 20 aprile, 2009 21 / 27

Page 22: Laboratorio di reti II: Extensible Markup Language · E’ inoltre possibile raggruppare vari elementi tramite le parentesi Stefano Brocchi Laboratorio di reti II: XML 20 aprile,

Il linguaggio XML Un esempio di XML: gli RSS

Un DTD semplificato per RSS

Vediamo una versione semplificata del DTD relativo alla specificaRSS 0.91

<!DOCTYPE rss [

<!ELEMENT rss (channel)>

<!ATTLIST rss version CDATA #REQUIRED>

<!ELEMENT channel (title | link | description | item+)*>

<!ELEMENT title (#PCDATA)>

<!ELEMENT description (#PCDATA)>

<!ELEMENT link (#PCDATA)>

<!ELEMENT item (title | link | description)*>

]>

Stefano Brocchi Laboratorio di reti II: XML 20 aprile, 2009 22 / 27

Page 23: Laboratorio di reti II: Extensible Markup Language · E’ inoltre possibile raggruppare vari elementi tramite le parentesi Stefano Brocchi Laboratorio di reti II: XML 20 aprile,

Il linguaggio XML Un esempio di XML: gli RSS

Esempio di RSS

Un esempio di file costruito secondo il precedente DTD:

<rss version="0.91">

<channel>

<title>RSS di esempio</title>

<description>Un esempio di feed RSS</description>

<link>http://www.miosito.com</link>

<item>

<title>Nuova pagina web su miosito.com !</title>

<link>http://www.miosito.com/pagina8379.html</link>

<description>Descrizione nuova pagina web</description>

</item>

<!-- Altri oggetti <item> ... -->

</channel>

</rss>

Stefano Brocchi Laboratorio di reti II: XML 20 aprile, 2009 23 / 27

Page 24: Laboratorio di reti II: Extensible Markup Language · E’ inoltre possibile raggruppare vari elementi tramite le parentesi Stefano Brocchi Laboratorio di reti II: XML 20 aprile,

Il linguaggio XML Un esempio di XML: gli RSS

Collegamento di RSS ad una pagina web

Un RSS si puo associare automaticamente ad una pagina web tramiteil tag link con la seguente sintassi:

<link rel = "alternate" type = "application/rss+xml"

title = "RSS title" href = "RSS url">

Negli attributi title e href andranno specificati il titolo e l’indirizzodell’RSS da associare alla pagina

In questo modo si rende possibile effettuare la sottoscrizione ad unRSS associato ad una pagina web in modo molto semplice

Firefox per esempio visualizza in questo caso un apposito pulsante

Stefano Brocchi Laboratorio di reti II: XML 20 aprile, 2009 24 / 27

Page 25: Laboratorio di reti II: Extensible Markup Language · E’ inoltre possibile raggruppare vari elementi tramite le parentesi Stefano Brocchi Laboratorio di reti II: XML 20 aprile,

Il linguaggio XML Esercizio

Esercizio

Inserire nel forum una pagina accessibile da amministratori chepermetta di generare o aggiornare un file RSS relativo agli ultimithread del forum

Aggiuntivamente possono essere generati RSS relativi ai post di uno opiu determinati threadSarebbe inoltre interessante dare la possibilita di gestire un processoche aggiorni l’RSS periodicamente senza ulteriori istruzioni

Per verificare rapidamente se l’RSS e stato generato correttamente, epossibile utilizzare strumenti a disposizione in rete perl’interpretazione degli RSS o verificare sottoscrivendo al feed con unbrowser

Stefano Brocchi Laboratorio di reti II: XML 20 aprile, 2009 25 / 27

Page 26: Laboratorio di reti II: Extensible Markup Language · E’ inoltre possibile raggruppare vari elementi tramite le parentesi Stefano Brocchi Laboratorio di reti II: XML 20 aprile,

Il linguaggio XML Esercizio

Esercizio

Puo essere utile iniziare creando manualmente un file statico perstabilire una struttura corretta da utilizzare

In seguito modificare gli script del forum per generare file similiautomaticamente

Infine associare il file RSS alle pagine web del forum

Stefano Brocchi Laboratorio di reti II: XML 20 aprile, 2009 26 / 27

Page 27: Laboratorio di reti II: Extensible Markup Language · E’ inoltre possibile raggruppare vari elementi tramite le parentesi Stefano Brocchi Laboratorio di reti II: XML 20 aprile,

Il linguaggio XML Esercizio

Esercizio

Alternativamente, inserire nel proprio sito un box contenenteinformazioni ottenute da un generico RSS

Questo potrebbe avvenire ad esempio nel box personalizzato, o in unbox aggiuntivo creato appositamente

Scaricare tramite Java il file RSS desiderato ed eseguirne il parsing inmodo da estrarne le informazioni ritenute piu importanti

Visualizzare le informazioni tramite codice HTML come piu sipreferisce

Stefano Brocchi Laboratorio di reti II: XML 20 aprile, 2009 27 / 27