Programma delle lezioni LABORATORIO B Lezione 01: 27/02martedi 10-12 Lezione 02: 06/03martedi...

Post on 02-May-2015

219 views 0 download

transcript

Programma delle lezioniLABORATORIO B

Lezione 01: 27/02 martedi 10-12 Lezione 02: 06/03 martedi 10-12 Lezione 03: 13/03 martedi 10-12 Lezione 04: 20/03 martedi 10-12 Lezione 05: 27/03 martedi 10-12 Lezione 06: 03/04 martedi 10-12 Lezione 07: 17/04 martedi 10-12 Lezione 08: 24/04 martedi 10-12 Lezione 09: 04/05 venerdi 10-12 Lezione 10: 08/05 martedi 10-12

Dove? "laboratorio multimediale"

Informatica Umanistica A.A. 2005/2006

LEZIONE 6

Ripasso XML – DTDIntroduzione a XSL

Lezione 6SOMMARIO

1. Ripasso XML e concetti DTD2. Validare per imparare3. Ripasso di alcuni esempi4. Primi passi con XSL5. Primi esempi con XSL

XML – DTD – XSL

Nel file XML c’è il contenuto “vero e proprio” semanticamente strutturato

La DTD (o lo Schema) definiscono la sintassi

dell’XML

Il file XSL definisce la visualizzazione

Breve riassunto progetto

PAGINA .XML (contenuto)

PAGINA .DTD (struttura - almeno 3 livelli)

PAGINA .XSL (visualizzazione)

VALIDATORE:http://validator.w3.org/

Un esempio più completo - File: lettera.xml

<?xml version="1.0" encoding="UTF-8" standalone=“yes" ?>

<!DOCTYPE lettera [<!ELEMENT lettera (to, from, intestazione, corpo_domanda)><!ELEMENT to (#PCDATA)><!ELEMENT from (#PCDATA)><!ELEMENT intestazione (#PCDATA)><!ELEMENT corpo_domanda (#PCDATA)>

]>

<lettera><to>Pippo</to><from>Nicola</from><intestazione>Domanda: </intestazione><corpo_domanda>Cosa fai stasera? </corpo_domanda>

</lettera>

DTD

Contenuto XML

Validare per imparare

http://validator.w3.org/

Riassunto:Definizione ELEMENTI

Gli elementi possono essere dichiarati con la sintassi:

<!ELEMENT nome-elemento tipo> nel caso di elemento che non ha figli.

<!ELEMENT nome-elemento (figli)> per un elemento con figli: i nomi dei figli vengono dichiarati all’interno delle parentesi.

Le virgole, separano gli elementi (figlio1, figlio2) indicano un ordine di successione obbligatorio.

Riassunto: Tipi di ELEMENTI

Gli elementi vuoti vengono dichiarati con la sintassi:<!ELEMENT nome-elemento EMPTY>

Gli elementi di tipo carattere sono dichiarati con la sintassi:<!ELEMENT nome-elemento (#PCDATA)>

Gli elementi di tipo misto sono dichiarati con la sintassi:<!ELEMENT nome-elemento ANY>

Riassunto:Cardinalità ELEMENTI

Elementi obbligatori, ma presenti una sola volta:<!ELEMENT nome-elemento (figlio)>

Obbligatori, e presenti almeno una volta:<!ELEMENT nome-elemento (figlio+)>

Facoltativi e presenti diverse volte:<!ELEMENT nome-elemento (figlio*)>

Facoltativi e, se presenti, una volta sola:<!ELEMENT nome-elemento (figlio?)>

Per dichiarare due elementi presenti in alternativa:<!ELEMENT TIPO (cassetta|disco)>

ATTRIBUTI degli ELEMENTI

Gli attributi aggiungono informazioni extra sugli elementi. ESEMPIO HTML?

SINTASSI: <!ATTLIST nome-elemento nome-attributo tipo-attributo “valore-standard”>

ESEMPIO XML: <PAGAMENTO tipo="CHECK">10.000</PAGAMENTO> ESEMPIO DTD:<!ATTLIST PAGAMENTO TIPO CDATA "CHECK">

ESEMPIO XML: <contatto fax="555-667788" /> ESEMPIO DTD:

<!ATTLIST contatto fax CDATA #IMPLIED>

Attributi degli ELEMENTI (2)

Per ogni elemento possono essere indicati una serie di attributi (ATTLIST), definiti in base alla obbligatorietà o meno della loro presenza. Diversi tipi di presenza:

#REQUIRED, la presenza dell'attributo è obbligatorio

#FIXED, il valore dell'attributo è fisso #IMPLIED, l'attributo è previsto ma non

obbligatorio e non ha un valore di default.

Lista ATTRIBUTI

Sintassi: <!ATTLIST nome-elemento nome-attributo

(el1 | el2 |..) “valore-standard”> ESEMPIO DTD: <!ATTLIST pagamento tipo (check|

cash) "cash"> Il valore puo' essere o cash o check e cash e'

quello di default (se non viene specificato)

ESEMPIO XML: 1. <pagamento tipo="cash" />2. <pagamento tipo="check" />

Ripasso ENTITA’

Le entità servono per dichiarare dei testi o delle iscrizioni fisse che vengono inserite ripetutamente all’ interno dei documenti. Possono essere interne o esterne.

Sintassi:<!ENTITY nome-entità “valore">

DTD:<!ENTITY nome “Mario Rossi">

XML: (nb: l’entità costituisce parte dell’elemento email)

<email> &nome;@ditta.it </email>

XSL (eXtensible Stylesheet Language)

XSL = eXtensible Stylesheet Language

anche detto “foglio di stile”

Noooo, un altro linguaggio!?! Ma a che serve l'XSL???

XSL per immagini

immagine a http://www.cmswatch.com/images/XSL-transform-final.gif

XSL per immagini

immagine a http://www.intranetjournal.com/articles/200010/tmk0900-3b.gif

XSL per immagini

immagine a http://www.intranetjournal.com/articles/200104/wireless_files/Wireless6.gif

XSL per immagini

immagine a http://architag.com/tag/images/fig14060102-1.gif

Basi dell’XSL

Un file XSL è formato da una serie di template (modelli) che contengono le regole di trasformazione dei tag del documento XML. Questi template vengono applicati ai tag corrispondenti nel file XML.

NB: nel nostro caso, le notazioni saranno in formato HTML

Esempio intuitivo. con il file XSL potro' dire:

l'elemento “cognome” del file XML trasformalo in un elemento “H3” dell'HTML

Per applicare una formattazione ad un documento XML è necessario richiamare il documento XSL dal file XML.

Richiamare il file XSL dal documento XML

Jkfaslfd

Dkl;fsakl fdksjl

Fdsjflsdf

fsdjlsfjls

Documento rubrica.xml

Documento rubrica.xsl

Jkfaslfd

Dkl;fsakl fdksjl

Fdsjflsdf

fsdjlsfjls

Pagina web

Per applicare una formattazione ad un documento XML è necessario richiamare il documento XSL dal file XML.

Ok, ma come e dove? Seconda riga, cosi':

<?xml version="1.0" encoding="UTF-8" standalone=”yes" ?><?xml-stylesheet type="text/xsl" href="./rubrica.xsl"?>

<!DOCTYPE RUBRICA [<!ELEMENT RUBRICA (PERSONA)*><!ELEMENT PERSONA (DATI_ANAGRAFICI, TELEFONO)><!ELEMENT DATI_ANAGRAFICI (NOME*, COGNOME*, INDIRIZZO?)>

Richiamare il file XSL dal documento XML

E ora?

Ora vedremo a livello teorico i principali costrutti dell'XSL

Chi se la sente puo' provare ad applicare quanto vede (velocemente!) ad uno dei file XML (RSS) che appaiono a http://www.repubblica.it/servizi/rss/index.html

in modo da farlo apparire come la homepage di corriere.it

Salvatevi il file in locale. Facile? Noooooooooooo

Le basi dei template

In un file XSL le regole di trasformazione sono contenute all'interno degli elementi template

<xsl:template>...</xsl:template>

Tramite l'attributo match possiamo specificare il tag a cui si riferiscono queste regole.

<xsl:template match="RUBRICA">

Nel nostro esempio vedremo che il template contiene le regole di trasformazione dell'elemento root del file XML (l'elemento <rubrica>).

Esempio template

<xsl:template match="RUBRICA"><HTML> <HEAD> <TITLE>Rubrica di esempio</TITLE> </HEAD> <BODY BGCOLOR="#559cd7"> ………………..</HTML>

</xsl:template>

Estrapolazione dei dati dal documento XML

All’interno di ogni template e’ possibile effettuare delle ricerche per estrapolare dati e visualizzarli nel browser.

esempio: trova l'elemento “cognome” del file XML e trasformalo in un elemento “H3” dell'HTML

Ai dati viene applicato il linguaggio HTML per apparire su video (nel nostro caso! Altri formati di output sono possibili!)

Elementi principali per cercare elementi nel documento XML

1. Estrazione semplice dei valori 2. Estrazione condizionata3. Estrazione con if

ESTRAZIONE ELEMENTI SEMPLICE: for-each e value-of

SINTASSI:

<xsl:for-each select="nome-elemento">

<xsl:value-of select="./nome-elemento"/>

</xsl:for-each>NB: attenzione al percorso

ESTRAZIONE ELEMENTI SEMPLICE: for-each e value-of

SINTASSI:

<xsl:for-each select="nome-elemento">

<xsl:value-of select="./nome-elemento"/>

</xsl:for-each>- <xsl:....> sono tag, vanno chiusi, hanno attributi!

- di solito for-each viene usato per riempire una struttura ripetitiva (es: TABLE)

- di solito con value-of si seleziona un sottoelemento

ESTRAZIONE CONDIZIONATA DI ELEMENTI: test con []

SINTASSI:<xsl:for-each select=“nome-elemento">

<xsl:for-each select="./[nome-elemento='valore-

elemento']">

</xsl:for-each></xsl:for-each>

ESTRAZIONE CONDIZIONATA DI ATTRIBUTI: test con []

SINTASSI:<xsl:for-each select=“nome-elemento">

<xsl:for-each select="./*[@nome-attributo=‘valore-

attributo']">

</xsl:for-each></xsl:for-each>

ESTRAZIONE CONDIZIONATA: test con if

<xsl:for-each select="nome-attributo">

<xsl:if test="./nome-elemento= 'valore-attributo' ">

</xsl:if>

</xsl:for-each>

Primo file XSL

Cosa facciamo ora?

Creiamo un foglio di stile (XSL) per rubrica.xml

Istruzioni a

http://moloko.itc.it/paoloblog/a.html

ATTENZIONE!!! Al fine di modificare i file con un editor sotto Windows, ci conviene dare estensione .xml ai file XSL. Useremo quindi la seguente convenzione

File XML: rubrica_dati.xml

File XSL: rubrica_stile_001.xml

Applicheremo diversi fogli di stile allo stesso XML cambiando la seconda riga, quella che definisce il foglio di stile da usare

Esempio completo – Rubrica.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?><?xml-stylesheet type="text/xsl" href="./rubrica_stile_001.xml"?>

<!DOCTYPE RUBRICA [<!ELEMENT RUBRICA (PERSONA)*><!ELEMENT PERSONA (DATI_ANAGRAFICI, TELEFONO)><!ELEMENT DATI_ANAGRAFICI (NOME*, COGNOME*, INDIRIZZO?)><!ELEMENT TELEFONO (FISSO?, MOBILE?)><!ELEMENT NOME (#PCDATA)><!ELEMENT COGNOME (#PCDATA)><!ELEMENT FISSO (NUMERO+)><!ELEMENT MOBILE (NUMERO+)><!ELEMENT NUMERO (#PCDATA)><!ELEMENT INDIRIZZO ((PIAZZA | VIA)?, N_CIVICO?, CITTA?, CAP?)><!ELEMENT PIAZZA (#PCDATA)><!ELEMENT VIA (#PCDATA)><!ELEMENT N_CIVICO (#PCDATA)><!ELEMENT CITTA (#PCDATA)><!ELEMENT CAP (#PCDATA)><!ATTLIST NUMERO prefisso CDATA #IMPLIED compagnia (wind | vodafone | tim | tre )

#IMPLIED>]>

Esempio completo – Rubrica.xml

<RUBRICA> <PERSONA>

<DATI_ANAGRAFICI><NOME>Giulio</NOME><COGNOME>Cesare</COGNOME><INDIRIZZO>

<PIAZZA>Bruto</PIAZZA><N_CIVICO>10</N_CIVICO><CITTA>Roma</CITTA><CAP>10100</CAP>

</INDIRIZZO></DATI_ANAGRAFICI><TELEFONO>

<FISSO><NUMERO prefisso="06">321654</NUMERO>

</FISSO><MOBILE>

<NUMERO compagnia="wind">32557684785</NUMERO></MOBILE>

</TELEFONO></PERSONA>

<PERSONA>

………………………………….

</PERSONA></RUBRICA>

Esempio completo – rubrica_stile_001.xml (e' un XSL!)

<?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">

<html><head>

<title>Rubrica</title></head><body>

<font face="Verdana,Arial"><center><h1>Rubrica</h1>Qui si usa la sintassi per visualizzare il contenuto del file rubrica.xml.Si possono usare immagini, link e altro codice HTML come ad esempio:<a href="http://www.google.it"><strong> Il motore di Ricerca google </strong></a>Oppure visualizzare tutto il contenuto xml:<h5>Rubrica:</h5>

<xsl:apply-templates/>

<strong>Per non vederlo cosi la prossima volta si spieghera' la sintassi XSL: Lezione 6-7 </strong></center></font>

</body></html>

</xsl:template></xsl:stylesheet>

Esercizio finale

Modificare sintassi rubrica.xsl

XSLT – esempio1: people.xml

<?xml version="1.0" ?><?xml-stylesheet href="people.xsl" type="text/xsl" ?><people>

<person><name>

<first_name>Alan</first_name><last_name>Turing</last_name>

</name><born>1912</born><died>1954</died><profession>computer scientist</profession><profession>mathematician</profession><profession>cryptographer</profession>

</person>… (altre persone)

</people>

XSLT – esempio1: people.xsl

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl" version="1.0">

<xsl:template>

<xsl:apply-templates/>

</xsl:template>

<xsl:template match="people"><html>

<body bgcolor="#995588" text="white"><center><h1>Scienziati famosi</h1></center> <hr/><table border="1">

<xsl:for-each select="person"><tr bgcolor=“silver">

<td colspan=“4"><xsl:value-of select="name"/></td>

</tr>

Continua…

<tr>

<td>Anno di nascita: </td><td><xsl:value-of select="born"/></td>

<td>Anno di morte: </td><td><xsl:value-of select="died"/></td>

</tr>

</xsl:for-each></table>

</body></html>

</xsl:template>

</xsl:stylesheet>

Esercizio

1. Costruire la DTD per people.xml2. Validare people.xml3. Inserire l’entità autore4. Richiamare l’entità autore nel file xsl

usando il costrutto<xsl:value-of select=“…..