importanza dtd la dtd (document type definition) consente di dichiarare in maniera univoca la...
TRANSCRIPT
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 untag <nome_elemento> che contienecaratteri 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 è 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 metteresia testo che altri elementi (purché definiti)
Gli attributi
<!ATTLIST
element-nameattribute-nameattribute-typedefault-value>
Esempio:<!ATTLIST persona sesso CDATA “F”>
Prossima lezione!
RIASSUNTO CREAZIONE DI UN ATTRIBUTO
<!ATTLIST nome_elemento nome_attributo TIPO_ATTRIBUTO TIPO_PRESENZA>
• 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_PRESENZA>
• 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. 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>