Importanza DTD


La DTD (Document Type Definition) consente
di dichiarare in maniera univoca la struttura di
markup mediante la definizione dello schema
dei tags.
In qualche maniera, noi definiamo come si
modella conoscenza (attraverso quali tag e
strutturati come) – knowledge engineer
Prima sintassi DTD - DOCTYPE



<!DOCTYPE lettera [ ….. ]>
lettera indica il tag radice del documento
XML.
Vengono cioè elencati [………] gli elementi
ammissibili, il contesto in cui possono apparire,
ed altri eventuali vincoli strutturali.
Dove si scrive la DTD?
1. Dentro al documento XML
<!DOCTYPE elementroot [ defs ]>
2. All’esterno del documento XML
<!DOCTYPE elementroot SYSTEM “nome.dtd">
3. Entrambe le possibilità
<!DOCTYPE elementroot SYSTEM “nome.dtd“[ defs ]>
NOI useremo opzione 1! Ad esempio:
<!DOCTYPE RUBRICA [
<!ELEMENT RUBRICA (PERSONA)*>
……….
]>
Definizione di ELEMENTO
<!ELEMENT sezione (titolo, abstract, para) >


Un elemento contiene solo altri elementi, senza parti
opzionali.
In questo esempio, dentro all’elemento sezione ci deve
essere un titolo, seguito da un abstract, seguito da un
para.
<sezione>
<titolo> … </titolo>
<abstract> … </abstract>
<para> … </para>
</sezione>
Sintassi ELEMENT
<!ELEMENT nome_elemento (#PCDATA)>

Significa:
E’ legale scrivere nel documento XML un
tag <nome_elemento> che contiene
caratteri riconoscibili dal parser XML di tipo
#PCDATA.
<nome_elemento>qui dentro del testo, hurrah! ;)</nome_elemento>
Sintassi ELEMENT
(RICAPITOLIAMO)
1) <!ELEMENT nome_elemento (#PCDATA)>
2) <!ELEMENT nome_elemento (nome_elemento_interno1,
nome_elemento_interno2) >


Quindi “dentro” un elemento ci puo' stare
 1) un altro elemento
 2) un #PCDATA
 1+2) combinazioni di questi
Importante: Bisogna iniziare sempre con il document
root.
Un esempio più completo - File: lettera.xml
<?xml version="1.0" encoding="UTF-8" standalone=”yes" ?>
<lettera>
<to>Pippo</to>
<from>Nicola</from>
<intestazione>Domanda: </intestazione>
<corpo_domanda>Cosa fai stasera? </corpo_domanda>
</lettera>
Proviamo insieme a scrivere un DTD per questo XML?
Esiste piu' di un DTD possibile?
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>
Validare per imparare

http://validator.w3.org/
 Sia
XML che HTML!!!
I protagonisti delle DTD




Elementi
Attributi
Valori
Entità
Dichiarazione ELEMENTO

Elementi con contenuto.
<!ELEMENT element-name(element-content)>
Contenuto “a caratteri” (#PCDATA)
ORA facciamo una DTD per una possibile rubrica (lista di informazioni su
persone). Immaginiamola insieme!
Dichiarazione ELEMENTO

Elementi con contenuto.
<!ELEMENT element-name(element-content)>
Contenuto “a caratteri” (#PCDATA)
ORA facciamo una DTD per una possibile rubrica (lista di informazioni su
persone). Immaginiamola insieme!
<!ELEMENT RUBRICA (PERSONA)*>
<!ELEMENT PERSONA (DATI_ANAGRAFICI, TELEFONO)>
<!ELEMENT DATI_ANAGRAFICI (NOME*, COGNOME*, INDIRIZZO?)>
<!ELEMENT TELEFONO (FISSO?, MOBILE?)>
<!ELEMENT NOME (#PCDATA)>
<!ELEMENT COGNOME (#PCDATA)>
………………
Simboli ‘*’ ‘+’ ‘?’

Più occorrenze dello stesso elemento (quante vuoi!)
Element*
0, 1, 2, 3, ..., 100, ..., 1024, ..., 38938, ...

Una o + occorrenze dello stesso elemento (almeno 1!)
Element+
1, 2, 3, ..., 100, ..., 1024, ..., 38938, ...

Zero o una occorrenza dell’elemento (0 o 1!)
Element?
0, 1
<!ELEMENT TELEFONO (FISSO?, MOBILE?)>
Simbolo OR:


‘|’
OR: Un elemento o l’altro.
La condizione or è possibile nella
dichiarazione dei figli di un elemento tramite
il simbolo |
<!ELEMENT nome (nick | anagrafico) >

Naturalmente occorre poi definire nick e
anagrafico
Altro esempio
<!ELEMENT para (#PCDATA | bold)* >

Un elemento contiene sia caratteri stampabili ed
entità, sia altri elementi.
<para>Questo &egrave; un paragrafo lecito con alcune <bold>
parole in grassetto </bold> e poi <bold> ancora altre
</bold>.
</para>
EMPTY - ANY

(!ELEMENT elemento EMPTY)
Che si traduce nella dichiarazione legale di
<elemento/> (tipo <br/> dell'HTML)

(!ELEMENT elemento ANY)
Che significa che dentro ci posso mettere
sia testo che altri elementi (purché definiti)
Gli attributi
<!ATTLIST
element-name
attribute-name
attribute-type
default-value>

Esempio:
<!ATTLIST persona sesso CDATA “F”>
Prossima lezione!
RIASSUNTO CREAZIONE DI UN
ATTRIBUTO
<!ATTLIST nome_elemento nome_attributo TIPO_ATTRIBUTO TIPO_PRESEN
ZA>
•
•
•
nome_elemento:
Rappresenta il nome dell'elemento a cui si rifà
nome_attributo:
Rappresenta il nome dell’attributo assegnato
TIPO_ATTRIBUTO:
Serve a definire il tipo di valore che assume l'attributo. I due più usati
sono:


CDATA: il valore dell'attributo può essere composto da un qualsiasi insieme
di caratteri
(questo|quello|...): il valore dell'attributo può assumere solo i valori
rappresentati nella lista fra parentesi divisa dal simbolo | quindi o
"questo" o "quello" o "..."
RIASSUNTO CREAZIONE DI UN
ATTRIBUTO - VALORI
<!ATTLIST nome_elemento nome_attributo TIPO_ATTRIBUTO TIPO_PRESE
NZA>
•
TIPO_PRESENZA:
Serve a definire la tipologia di presenza dell'attributo rispetto
all'elemento. I valori possibili sono:




"valore“ rappresenta il valore predefinito che assume l'attributo
#REQUIRED
l'attributo deve essere sempre dichiarato
#IMPLIED
l'attributo può anche non essere dichiarato
#FIXED "valore"
l'attributo è sempre presente e deve essere dichiarato con il valore
fisso: "valore"
Il DTD per l'xHTML
Prime 3 lezioni: abbiamo spiegato e capito quali
tag e attributi si possono usare e dove in HTML a
voce.
Ma come facciamo a definirlo in maniera non
ambigua?
Chi definisce il DTD per xHTML?
E se io ne definisco una diversa?
Entità
Per dichiarare una entità in un documento XML si
usa la sintassi:
<!ENTITY nome_entita “valore”>
Esempio:
<!ENTITY autore “Polettini Nicola”>

Si richiama con &autore;
Esempio completo – Rubrica.xml
<?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?)>
<!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.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.
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>
Si possono usare immagini, link e altro codice
<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>
Scarica

ELEMENT nome_elemento (#PCDATA)