vuoi
o PayPal
tutte le volte che vuoi
Il link può permettere anche di aprire file zip o pdf, non per forza file html o png/jpg eccetera: <a href=“…/…
articolo.pdf> Apri Pdf </a> oppure <a href=“…/archivio.zip”> Archivio </a>.
Il link può anche preimpostare l’invio di una mail: <a href=“mailto:simone.scacchetti@me.com"> Contattami
</a>.
Nota bene: il nome dei documenti non deve avere spazi, e maiuscole e minuscole fanno la differenza.
Per i link interni (al documento di codice) il valore dell’attributo href è preceduto dallo sharp (#): <a
href=“#Indirizzo”> Contenuto </a>.
Se per esempio devo citare un’altra parte del mio documento, uso <a href=“#I-Paragrafo”> Primo paragrafo
</a>. Per fare questo chiaramente devo creare la parte citata a cui l’ancora si appoggia, ovvero la coda.
Per creare la coda di un’ancora interna: <a name=“I-Paragrafo”> Primo paragrafo </a>.
Esempio:
<html>
<head>
<title>Documento con link interno</title>
</head>
<body> <h2>
<a name="I-Paragrafo">Primo paragrafo</a>
</h2>
<p>
<a href="#II-Paragrafo">Al secondo paragrafo</a>
</p>
<p>
Ciao ciao ciao (Primo paragrafo)
</p>
<h2>
<a name="II-Paragrafo">Secondo paragrafo</a>
</h2> <p>
<a href="#I-Paragrafo">Al primo paragrafo</a>
</p>
<p>
Ciao ciao ciao (Secondo paragrafo)
</p>
</body>
</html>
—
Di default un browser cliccando sul link si sposta alla coda nello stesso “pannello”. Per fargli aprire invece
una nuova finestra e visualizzare la cosa è necessario inserire l’attributo target=“_blank” al tag a:
<a href=“#I-Paragrafo” target=“_blank”> Al secondo paragrafo </a>.
L’attributo title al tag a permette di inserire un breve testo per definire il significato del testo XHML coda
dell’ancora. Questo testo esplicativo compare quando il puntatore si sofferma per un po’ sul link.
<a title=“Home Page del Dipartimento di Informatica dell’Università Roma Tre” href=“http://
blablabla.uniroma3.it/index.html"> Dipartimento di Informatica </a>.
3 - Generalizziamo XHTML
•• Qualsiasi linguaggio, umano o di programmazione, serve per dare forma a concetti. I linguaggi artificiali
possono essere interpretati da interpreti “stupidi” come un calcolatore.
I calcolatori risolvono i problemi computazionalmente, interpretando per traduzione.
Il linguaggio naturale è ambiguo e solo interpreti sofisticati come le persone possono risolvere problemi
ambigui. I linguaggi per calcolatori devono poter esprimere algoritmi. Un algoritmo è una sequenza finita di
passi, occupo interpretabile in un tempo finito.
4 - Sintassi e formalizzazione
•• Strutturare sintatticamente un concetto significa individuare regolarità nella descrizione del concetto e
fissare queste regolarità in una struttura linguistica opportuna.
Esempio: un numero è una sequenza di cifre.
<numero>
<cifra> 1 </cifra>
<cifra> 2 </cifra>
<cifra> 3 </cifra>
</numero>
A un tag di apertura ne deve corrispondere una di chiusura, come fossero parentesi. Siccome sono come
parentesi, i tag possono annidarsi e comporsi in sequenza ([x][{y}]).
Con l’etichettatura <!— testo commento —> si inseriscono commenti, parti metatestuali che servono per gli
umani e non per le macchine.
Se l’etichetta non contiene sottonodi, allora il tag aperto si può subito chiudere:
<ElementiNutrizionali calorie=“1187” grassi=“23” carboidrati=“45” proteine=“32”/>.
Scrivere questo o scrivere:
<ElementiNutrizionali calorie=“1187” grassi=“23” carboidrati=“45” proteine=“32”>
</ElementiNutrizionali>
—
Ogni codice ha una radice, ovvero un tag da cui derivano tutti gli altri, eventuali nodi ed eventuali foglie,
che terminano i rami dell’albero. Un nodo può avere anche dei rami attributi, i quali potranno a loro volta
gemmare in valori particolari (ingrediente-> nome, quantità, unità). I tag quindi possono avere attributi.
Ogni documento xml comincia con il tag <?xml version=“1.0”?>, che indica la versione xml usata. Ogni
tag aperto deve anche essere chiuso. I nomi dei tag sono case sensitive. Se un tag descrive un elemento
necessariamente vuoto, si può usare la sintassi contratta <elemento/>. I commenti si scrivono così: <!—
commento—>. La correttezza sintattica di documenti xml viene verificata tramite programmi: è la
parsificazione. Il modo più semplice per parificare un documento xml è leggerlo in un browser internet.
5 - DTD e semantica di documenti XML
•• Una semantica definisce insiemi di istanze di uno stesso concetto. Solo i testi xml che soddisfano le
proprietà richieste dalla semantica appartengono all’insieme. La semantica per i documenti xml è la dtd
(data type definition), che descrive come costruire alberi sintattici ed è interpretabile da un calcolatore
elettronico.
Nel costruire un albero abbiamo dei gradi di libertà: scegliamo noi i nomi dei nodi, l’ampiezza di ogni livello
dell’albero, la profondità massima dell’intero albero e la natura delle foglie (se contengono o no attributi). Le
foglie sono i concetti primitivi, cioè i nodi che non hanno altri discendenti.
La distanza tra due nodi è data dalla lunghezza del cammino tra quei nodi, ovvero è il numero di rami
attraversati per andare da un nodo all’altro.
Un livello è fatto da tutti i nodi con la stessa distanza dalla radice.
L’ampiezza globale di un livello è il numero globale di nodi su quel livello. L’ampiezza parziale è il numero
di nodi con la stessa etichetta su uno stesso livello.
Il linguaggio dtd descrive i gradi di libertà di costruzione degli alberi sintattici.
Se un nodo non può contenere alcun valore, e quindi nessun attributo, bisogna inserire EMPTY. ANY al
contrario indica che non si assume a priori alcuna strutturazione del contenuto di quel nodo. #PCDATA
indica che il contenuto può essere una qualsiasi sequenza di caratteri. La differenza tra ANY e #PCDATA è
metodologica: ANY si sceglie in fase di progettazione, mentre #PCDATA costituisce un momento finale di
progettazione in cui si decide che il contenuto debba essere proprio una sequenza arbitraria di caratteri.
+: almeno un elemento; ?: al più un elemento; *: eventualmente nessun elemento; “,”: and; “|”: or.
Per ogni livello di un albero è possibile stabilire un numero fisso di discendenti così: <!ELEMENT LivI
(LivIpiu1-1, LivIpiu1-2, …, Liv1piu1-n)>. Il livello I quindi ha n discendenti al livello I+1.
Per alberi con livelli ad ampiezza variabile invece si usa <!ELEMENT LivI (LivIpiu1*).
Per annidare regole dtd per comporre alberi sintattici di ampiezza e profondità arbitrarie bisogna usare la
clausola dtd generale <!ELEMENT elementi-name content-model>, in cui content-motel può essere
EMPTY, ANY o #PCDATA, oppure una espressione regolare deterministica: element-name, (E, …, E), E*,
E+, E?, (E | … | E).
Il nome di una espressione è una espressione regolare; una sequenza di lunghezza fissa è una
espressione regolare.
#PCDATA non può occorrere come componente di una espressione regolare deterministica.
Un documento dtd oltre a elementi-name e content-motel può contenere anche una !ATTLIST che definisce
il nome dell’attributo e il tipo, cioè l’insieme di valori assumibili dall’attributo stesso, così come la regola di
uso dei valori dell’attributo.
Il tipo può essere definito da tre parole chiave: CDATA (sequenza qualsiasi di caratteri), ID (il valore è
univoco per un elemento - come ogni matricola per ogni studente) o IDREF (valori di un attributo che fanno
riferimento all’ID - come più voti degli esami per ogni matricola).
La regola d’uso dei valori dell’attributo prevede quattro casi: #REQUIRED (necessario), #IMPLIED (è una
implicazione: att-name può non esserci, ma se c’è deve esserci anche il valore), #FIXED (seguito da un
valore arbitrario: ci dice che quell’attributo ha sempre un valore costante, che è appunto “valore arbitrario”);
in alternativa si può usare un valore arbitrario senza farlo precedere da alcuna delle parole chiave
precedenti.
In generale quindi la struttura è questa: <!ATTLIST element-name att-name att-type att-usemode>.
6 - Validazione di documenti XML
•• Per validare un documento xml abbiamo bisogno di un documento dtd che descriva la struttura di tutti i
documenti xml che appartengono alla stessa semantica e di almeno un documento xml che rispetta la
semantica dtd in questione. Se l’xml appartiene alla semantica data, si dice che l’xml è valido per quella
semantica. Ci sono programmi variatori che verificano automaticamente la validità di documenti.
Per validare un documento xml dobbiamo specificare nell’xml quale sia il documento dtd, o inserendolo
prima dell’xml, nello stesso documento (dtd inline) oppure citandolo e inserendo il dtd nella stessa cartella
dell’xml (dtd esterna).
Nel caso di dtd inline:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Preambolo XML con un testo DTD esplicito -->
<!DOCTYPE elemento-radice [
<!ELEMENT elemento-radice ....>
<!-- resto della grammatica DTD -->
]>
<!-- resto del documento XML —>
Nel caso di dtd esterna:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Preambolo XML con un ruferimento ad un file
esterno, che contiene il testo DTD -->
<!DOCTYPE numero SYSTEM "testo-DTD-esterno.dtd">
<!-- resto del documento XML -->
7 - Interpretazione tramite trasformazione
•• Interpretare un concetto significa presentarlo in altri termini (il cuoco è l’interprete di una ricetta; uno
studente durante un esame scritto interpreta domande producendo risposte corrispondenti).
Il nostro scopo è interpretare, tramite un calcolatore, concetti astratti, rappresentati come testi etichettati.
Per interpretare due concetti arbitrari con la stessa grammatica bisogna portare la prima grammatica a
essere il più simile possibile alla seconda.
Conviene sempre correlare semanti