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 è 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>