Diapositiva 1 - ITIS "Luigi di Savoia"
Transcript
Diapositiva 1 - ITIS "Luigi di Savoia"
XML INVITO ALLO STUDIO EUROPEAN NETWORK OF INNOVATIVE SCHOOLS Road Map • Cos’è XML • La Struttura dell’XML • DTD • XML Schema • CSS e XML • XSL,XSLT • XLink • Applicazioni XML (DOM, SAX) Oggi Mercoledì 12 Ottobre Mercoledì 19 Ottobre Mercoledì 26 Ottobre Cos’è XML XML è un insieme di regole per creare formati di testo facili da generare e facilmente elaborabili da un computer. I file di testo risultanti sono strutturati, in modo tale da essere: • PRIVI DI AMBIGUITA’ • ESTENDIBILI • INDIPENDENTI DALLA PIATTAFORMA • XML e’ uno strumento indipendente dall’hardware e dal software utile per memorizzare, trasportare, e scambiare informazione • XML serve in generale per descrivere dei dati (e non solo per presentarli, come HTML) Le principali differenze tra l’XML e l’ HTML • XML non è un rimpiazzo per l’HTML • XML e HTML furono creati con fini differenti • XML è stato progettato per descrivere dati e per focalizzare l’attenzione su di essi • HTML è stato progettato per mostrare dati e per concentrare l’attenzione su di ess • XML è fatto per descrivere le informazioni, • HTML è fatto per visualizzare informazioni I problemi nel trattare i documenti Problema dei word processor odierni: nello scambiare documenti che formato usare? ASCII, RTF,PS,PDF,Tex,HTML Mescolare comandi che definiscono la visualizzazione con il contenuto crea problemi. Es. Word, Acrobat il linguaggio HTML Legano il documento all’applicativo ovvero alle sue caratteristiche di rendering. Un altro problema… Concentrarsi sulle proprietà visive piuttosto che sulla struttura del documento porta a non considerare il peso di ogni informazione Problema dei motori di ricerca La presentazione e l’informazione sono legate insieme nello stesso file *.htm o *.html Contenuto – Struttura - Stile XML nel futuro Sarà dappertutto Avrà successo quanto l’ HTML per la creazione di pagine web Sarà uno strumento utilizzato prevalentemente per le manipolazioni di dati e la loro trasmissione X La “X” in XML sta per EXTENSIBLE: Estensibilità significa che un linguaggio può essere ampliato per soddisfare esigenze specifiche. XML può essere definito un META LINGUAGGIO DI MARKUP utile a definire marcatori descrittivi adatti alle proprie necessità XML di per sé non è altro che un insieme standard di regole sintattiche per modellare la struttura di documenti e dati. Questo insieme di regole, dette più propriamente specifiche, definiscono le modalità secondo cui è possibile crearsi un proprio linguaggio di markup. Le specifiche ufficiali sono state definite dal W3C (Worl Wide Web Consortium) e sono consultabili a partire dall’indirizzo http://www.w3.org/XML. W3C W3C organizzazione mondiale per standard WEB • Recommendation – uno standard (più o meno); stabile; si può usare • Proposed Recommendation: – quasi standard; fissabile in 2-3 mesi; le feature possono essere usate • Working Draft: – Lavoro in fase di sviluppo; potrebbe diventare una Recommendation in meno di un anno; • Note: – idee completamente non affidabili Cos’e’ un linguaggio di markup? markup: Il processo di marcare (markup) i manoscritti per la composizione tipografica con istruzioni per l’uso di font, dimensioni, spaziatura, indentazione, ecc. (dal Chicago Manual of Style, una delle bibbie dell’editoria) Cos’e’ un linguaggio di markup? (segue) • Un linguaggio di markup e’ semplicemente un insieme di convenzioni per decidere quali parti di un documento vanno trattate in modo diverso dalle altre parti – esempio: l’uso dello stile nei documenti scritti • L’idea e’ di inserire specifiche sequenze di caratteri o codici (detti markup tag o tag) nel testo per permettere ai programmi di distinguere le varie parti di un documento – ad esempio, per decidere come visualizzarlo Quindi L’introduzione di elementi esterni (markup) al contenuto di un documento permette di: • Separare gli elementi logici del documento • Specificare le elaborazioni a cui devono essere sottoposti questi elementi. I Markup possono essere classificati come: Procedural Markup: riguarda la presentazione del testo, i suoi font gli spazi etc… i word processor e anche HTML (che è un text markup language) rientrano tra questi Descriptive or Declarative Markup: concerne la struttura o la funzione delle delle cose nei nei tag (XML, SGML) Esempio (Procedural) HTML <HTML> H2, tag titolo di livello 2 Prova verrà formattato con un carattere piu’ grande <BODY> <H2> Prova </H2> <P> una prova</P> <H1> titolo1 </H1> </BODY> </HTML> prova.xml Esempio: (Descriptive) una ricetta <ricetta> <titolo>Torta al cioccolato</titolo> <ingrediente> <quanto>3 cucchiai</quanto> <cosa>cioccolato</cosa> </ingrediente> <ingrediente> <quanto>540 grammi</quanto> <cosa>farina</cosa> </ingrediente> <ingrediente> <quanto>2 tazze</quanto> <cosa>latte</cosa> </ingrediente> <ingrediente> <quanto>1 dozzina</quanto> <cosa>uova</cosa> </ingrediente> <istruzioni>mescolare, impastare, cucinare a 250 gradi per 40 minuti </istruzioni> </ricetta> ricetta.xml Storia • XML deriva da SGML, un altro metalinguaggio noto solo in ambienti professionali (es. editoria) • Rispetto a SGML, XML è stato notevolmente semplificato, sono state aggiunte delle piccole estensioni per renderne l’uso più agevole. (XML è un sottoinsieme di SGML) La Famiglia di XML HTML DTD XHTML SGML XSL XML Schema MathML XML XSL-FO CML I vantaggi di XML • XML permette agli sviluppatori di creare linguaggi ad hoc per contenere informazione strutturata; • XML è completamente text-based, quindi leggibile anche dagli esseri umani e facilmente editabile anche a mano • Le strutture definite con XML sono utili anche per creare strutture dati indipendenti dalla piattaforma segue • L’elaborazione automatica di un linguaggio XML è particolarmente semplice ed efficiente. Le rigide regole grammaticali ne rendono il trattamento automatico molto conveniente. • Essendo puro testo (come HTML) i dati XML possono essere trasportati usando il protocollo http. XML: svantaggi • I documenti XML, a causa della loro struttura testuale e dei tag, tendono ad essere molto più ingombranti dei corrispondenti in formato binario. • In generale l’uso di XML si presenta più oneroso in termini di risorse necessarie (tempi di trasmissione, memoria e tempo di CPU necessari alla sua decodifica, ecc.) XML: applicazioni L’uso di XML è diffusissimo ed in continua espansione ¾ Web ed editoria XHTML, WML, VoiceML,XSL, XSL-FO,… ¾ Scienza MathML,CML…. ¾ Multimedia SMIL, SVG,…. ¾ Definizione di strutture formali XML Schema… ¾ Sicurezza XML Encryption, Xml Signature…. XML - La struttura Elementi, Attributi, TAG, … DTD Documenti XML • Un file XML è un semplice file di testo con TAG XML al suo interno – Esso ha una estensione .xml (nome_file.xml) • Un file XML contiene tre sezioni: – Una dichiarazione che si tratta di un file XML – Una definizione (opzionale) circa il tipo di documento e sul nome della DTD associata – Il contenuto del documento con tag XML Il CONTENUTO documento XML e’ composto da: • • • • • • • Elementi Tag Attributi entita’ carattere (character entities) PCDATA CDATA Commenti Struttura Gerarchica di un documento XML Un esempio <?xml version="1.0" ?> <articolo titolo="Titolo dell’articolo"> <paragrafo titolo="Titolo del primo paragrafo"> <testo> Blocco di testo del primo paragrafo </testo> <immagine file="immagine1.jpg"> </immagine> </paragrafo> <paragrafo titolo="Titolo del secondo paragrafo"> <testo> Blocco di testo del secondo paragrafo </testo> <codice> Esempio di codice </codice> <testo> Altro blocco di testo </testo> </paragrafo> <paragrafo tipo="bibliografia"> <testo> Riferimento ad un articolo </testo> </paragrafo> </articolo> esempio1.xml XML - la dichiarazione • Dichiarazione XML opzionale ma consigliata <?xml version=“1.0” standalone=“yes/no” encoding=“UTF-8”?> • Versione • Viaggia da solo? • Codifica (per adesso 1.0!) (DTD associata o no) (UTF-8 Default) Esempio <?xml version="1.0“ standalone=“yes” encoding=“UTF-8” ?> <memo> Prologo o Dichiarazione <a>tutti</a> <da>Mario Rossi</da> <data>15 gennaio 2002</data> <oggetto>cani e gatti</oggetto> <testo>Ricordatevi di chiudere tutti i cani e gatti in casa prima della notte</testo> </memo> <da>Mario Rossi</da> Tag di Apertura Elemento Tag di Chiusura Tag (Marcatore) • I tag vengono usati per delimitare gli elementi •Un tag di inizio del tipo <element_name> delimita l’inizio di un elemento, un tag di fine del tipo </element_name> delimita la fine di un elemento • NOTA: gli elementi vuoti hanno un solo tag (di inizio e fine insieme) del tipo <element_name /> • I tag XML sono case sensitive esempio: <Lettera> diverso da <lettera> Elementi • Sono i “mattoni” principali di cui un documento XML e’ costituito • Un elemento è delimitato da un tag di partenza e da un tag di chiusura -possono contenere lettere, numeri, e altri caratteri -non possono iniziare con un numero o un carattere di punteggiatura -non possono iniziare con le lettere xml (o XML, o Xml,…) -non possono contenere spazi Elementi (segue) • Consideriamo il seguente documento XML <data>9 settembre 2003</data> Questo documento è composto da un solo elemento di tipo data <data> tag di apertura o start tag </data> tag di chiusura o end tag Ogni cosa tra i due tag è detto contenuto in questo caso il contenuto è la stringa 9 settembre 2003 i caratteri < e > sono detti delimitatori di markup non è possibile usare delimitatori di markup nel contenuto di un elemento al loro posto: < e > Tipi di Elementi in base al contenuto • solo testo detto anche character data <data>9 settembre 2003</data> • solo elementi detti elementi figli <data> <giorno>9</giorno> <mese>settembre</mese> <anno>2003</anno> </data> • misto: testo e elementi <data>nel giorno <giorno>9</giorno> del mese di <mese>settembre</mese> nell'anno <anno>2003</anno> </data> • vuoto: nè testo nè elementi <data standard="20030916" valore="9 settembre 2003" ></data> <data standard="20030916" valore="9 settembre 2003"/> XML - Elementi (Annidamento) • Gli elementi devono essere annidati in modo corretto (non come HTML) • Esempio: <contact> <name> Pinco Pallino </name> <email> [email protected] </email> </contact> Attributi •Gli attributi forniscono informazioni extra su un elemento •Sono posti all’interno del tag di inizio •Ognuno e’ formato da una coppia attributo – valore <memo data="24/01/2001"> Oppure <memo data='24/01/2001'> Attributi (segue) • I Tag XML possono possedere un qualsiasi numero di attributi <shoe style=“elegant” coloring=“brown”> • Il valore di un attributo è sempre una stringa che può contenere anche spazi bianchi o altri simboli Attributi vs Elementi I seguenti 3 documenti xml contengono esattamente gli stessi dati. • nell’esempio che segue la parola DATA (temporale) viene usata come attributo <note date="12/11/99"> <from>Jani</from> <body>non mi dimenticare questo fine settimana!</body> </note> • nel 2° esempio che segue la parola DATA (temporale) viene usata come elemento: <note> <date>12/11/99</date> <from>Jani</from> <body>non mi dimenticare questo fine settimana!</body> </note> • nel 3° esempio che segue la parola DATA (temporale) viene usata come elemento esteso (forse la soluzione migliore) <note> <date> <day>12</day> <month>11</month> <year>99</year> </date> <from>Jani</from> <body>non mi dimenticare questo fine settimana!</body> </note> Attributi vs Elementi Questi sono alcuni problemi che possono presentarsi facendo uso di attributi. • gli attributi non possono contenere valori multipli ( elementi figli possono) • gli attributi non sono facilmente espandibili ( per ev.cambi futuri) • gli attributi non possono descrivere strutture ( elementi figli possono) • gli attributi sono più difficilmente manipolabili dal codice del programma Attributi vs Elementi Talvolta si assegnano degli ID di riferimento agli elementi. Questi riferimenti possono essere usati per accedere agli elementi. Questo esempio lo dimostra: <messages> <note ID="501"> <to>Tove</to> <from>Jani</from> <body>non mi dimenticare questo fine settimana!</body> </note> <note ID="502"> <to>Jani</to> <from>Tove</from> <body>non lo farò!</body> </note> </messages> L’ID in questo esempio è solo un contatore , o un identificativo univoco, per identificare i diversi messaggi nello stesso file xml , e non è una parte del dato del messaggio. METADATI ( dato del dato ) dovrebbero venire registrati come attributi , mentre i dati stessi dovrebbero essere registrati come elementi. Entita’ (predefinite) • variabili per definire dei caratteri o sequenze di caratteri • Le entita’ vengono “tradotte” da un XML parser Entita’ • Entita’ predefinite in XML: Carattere < < > > & & " “ ' ‘ XML - Entità (generali) • Le entità generali sono nella forma <! ENTITY nome “qualsiasi cosa”> <! ENTITY copyright “Pinco Pallino S.p.A.”> &nome_entità; (come in HTML); • Sostituisco banalmente il contenuto tra virgolette... XML - DOCTYPE La dichiarazione DOCTYPE serve a utilizzare le ENTITY in un documento XML Si trovano sempre dopo la dichiarazione XML <? xml version=“...” e la dichiarazione della DTD <! DOCTYPE mydoc [ … definizione delle entità … ]> <mydoc> … body del documento </mydoc> ESEMPIO- ENTITY (generali) <?xml version="1.0"?> <!DOCTYPE ricettario [ <!ENTITY g "grammi"> ]> <ricettario> <ricetta numero="1"> <titolo>...</titolo> <ingred>200 &g; di ... </ingred> <ingred>...</ingred> <passo numero="1">...</passo> <passo numero="2">...</passo> </ricetta> </ricettario> entità1.xml CHARACTER DATA Section All’interno di una CDATA Section si possono usare liberamente le <,>,& senza far ricorso alle entità predefinite. <![CDATA[testo]]> IL contenuto del testo non viene processato dal parser Esempio: <message> <![CDATA[Press the <<enter>> button]]> </message> ESEMPIO CDATA <?xml version="1.0"?> <!DOCTYPE ricettario[ <!ENTITY g "grammi"> ]> <ricettario> <ricetta numero="1"> <titolo>Titolo1</titolo> <ingred>200 &g; di zucchero </ingred> <ingred>300 &g; di farina</ingred> <passo numero="1">"impastare acqua zucchero e farina " </passo> <passo numero="2"> <![CDATA["cuocere ad 80 gradi"-premere il pulsante <<temperatura>>]]> </passo> </ricetta> </ricettario> cdata1.xml Commenti • I commenti in XML possono essere inseriti esattamente come si fa in HTML <!-- questo è un semplice commento --> – No “-” o “--” all’interno – No commenti dentro TAG – No dentro entità – Mai prima di <? xml versi…etc... ?> – No annidamenti! Istruzioni di Processing • La dichiarazione XML è già una istruzione di processing • Una istruzione di processing rappresenta una porzione di testo significativa per l’applicazione che usa il documento XML • non serve al parser ma all’applicazione che usa il parser <?name_of_application instructions?> <?JAVA_OBJECT JAR_FILE=“/java/.../myjar.jar” ?> Documenti Ben Formati Un documento XML si dice ben formato se e’ conforme ad una serie di regole generali: • Contiene uno o piu’ elementi • Ha un unico elemento radice • I tag XML sono annidati in modo corretto • Ogni tag di inizio ha un corrispettivo tag di fine I seguenti documenti sono ben formati? • • • • • <a></a><b></b> NO <a><b></a> NO <a><b></a></b> NO <a><b></b></a> SI <c><a><b></b></a></c> SI Documento XML Valido • Un documento XML è valido se • E’ ben formato • Rispetta una struttura descritta in una Document Type Definition o in uno Schema – I documenti XML devono essere validi nel caso di strutturazione di documenti di una certa importanza, ad esempio, in una azienda dove è fondamentale mantenere una stessa struttura Un Esempio SI <?xml version="1.0"?> <ricettario> <ricetta numero="1"> <titolo>...</titolo> <ingred>200 grammi di ... </ingred> <ingred>...</ingred> <passo numero="1">...</passo> <passo numero="2">...</passo> </ricetta> </ricettario> ricetta2.xml Un Esempio NO <?xml version="1.0"?> TAG non chiuso <ricettario> <ricetta numero="1"> <titolo>... <ingred>200 &g; di ... </ingred> <ingred>...</ingred> <passo numero=1>...</passo> <passo numero=2>...</passo> </ricetta> Valori non tra virgolette ricetta3.xml </ricettario> Il mio primo XML <?xml version = "1.0"?> <documento> <messaggio>Hello Word</messaggio> </documento> primoxml.xml Tutti sui computer! Si comincia. Internet Explorer è un parser di file XML (analizzatore non validante) Capiremo se il nostro documento è ben/mal formato. Apriamo blocco note di windows digitiamo il nostro primo file XML e diamogli un nome con l’estensione primoxml.xml DOCUMENTO BEN FORMATO: non ci sono messaggi d’errore Torniamo ora su blocco note e modifichiamo il file primoxml.xml scambiando gli ultimi due tag. DOCUMENTO MAL FORMATO: sono presenti messaggi d’errore Ben/Mal Formato • Se il documento XML è “well formed”, cioè sintatticamente corretto, il parser XML lo legge e lo fa visualizzare. • Se ci sono errori di sintassi, vengono visualizzati. • Gli errori in questa fase possono essere solo: -tag non chiusi -più di un elemento root -annidamento non corretto -valori degli attributi non tra “ ” -case sensitive Esercizio (1) Catalogo di una biblioteca • Una biblioteca è composta da tanti libri. • Ogni libro ha: - Titolo - Uno o più autori - Codice N.B.: Inserite dati a piacere Soluzione <?xml version="1.0" encoding="ISO-8859-1" ?> <biblioteca> <libro> <titolo>I promessi Sposi</titolo> <autore>Alessandro Manzoni</autore> <isbn>C6-01</isbn> </libro> <libro> <titolo>Linguaggio C</titolo> <autore>Dennis M. Ritchie</autore> <autore>Brian W. Kernighan</autore> <isbn>C4-A4</isbn> </libro> </biblioteca> Esercizio (2) • Il Menù di un ristorante • Possibili Elementi:Nome, Prezzo, Descrizione, Calorie…. Soluzione <?xml version="1.0" encoding="ISO8859-1" ?> <breakfast-menu> <food> <name>Belgian Waffles</name> <price>$5.95</price> <description>two of our famous Belgian Waffles with plenty of real maple syrup</description> <calories>650</calories> </food> <food> . . . </food> </breakfast-menu> Document Type Definition DTD: COSA SONO? • XML offre la libertà di definire i tag a seconda delle necessità, ma perché non si generi confusione è necessario un meccanismo che ne vincoli l'utilizzo all'interno dei documenti. Si può stabilire quali tag possono essere utilizzati e come per rispecchiare una struttura logica predefinita. • In altre parole abbiamo bisogno di definire una grammatica per il linguaggio di markup che abbiamo ideato. Una grammatica è un insieme di regole che indica quali vocaboli (elementi) possono essere utilizzati e con che struttura è possibile comporre frasi (documenti). • Una grammatica definisce uno specifico linguaggio di markup. Dunque se un documento XML rispetta le regole definite da una grammatica è detto valido per un particolare linguaggio. • La caratteristica di documento valido si affianca a quella di documento ben formato per costruire documenti XML adatti ad essere elaborati automaticamente. • C’è da sottolineare che un documento ben formato può non essere valido rispetto ad una grammatica, mentre un documento valido è necessariamente ben formato. Tra l’altro, un documento valido per una grammatica può non essere valido per un’altra grammatica. • Ma come si definisce una grammatica per descrivere un linguaggio di markup? Attualmente due sono gli approcci più diffusi alla creazione di grammatiche per documenti XML: DTD - Document Type Definition e XML Schema. Questi argomenti saranno affrontati in seguito. DTD - Well-formed e Valido • Un esempio Ben Formato sensa senso <complemento>l’XML</complemento> <predicato>imparo</predicato> <soggetto>Io</soggetto> • La DTD mette in ordine i termini corretti per dare un senso alle frasi del linguaggio <soggetto>Io</soggetto> <predicato>imparo</predicato> <complemento>l’XML</complemento> DTD - Descrizione • Document Type Defintion • Definisce – gli elementi, – gli attributi e – le relazioni che intercorrono (X può contenere Y o Z ma non entrambi) • Rappresenta un modo per fare un check sulla strutturazione corretta di un documento XML DTD - Descrizione • Utilizzo non obbligatorio (contrariamente ad SGML) • La DTD fornisce – una grammatica ed – il vocabolario per il linguaggio di markup • La DTD specifica tutto quello che un parser deve sapere per poter comprendere un documento XML Strumento per la validazione • Un documento XML viene processato e viene confrontato con la DTD associata (se ce ne è una) • Il confronto è un processo detto validazione – Un parser: software per il checking di documenti XML • non-validating parser controlla che segua le regole di sintassi XML • validating parser, parser controlla la sintassi ed il matching con la DTD • DTD necessaria solo per documenti XML validi Un esempio di DTD • DTD ricettario.dtd Dichiarazione di elemento <!ELEMENT ricettario (ricetta)*> <!ELEMENT ricetta (titolo, ingred+, passo+)> <!ATTLIST ricetta numero ID #REQUIRED> <!ELEMENT titolo (#PCDATA)> Dichiarazione di attributo <!ELEMENT ingred (#PCDATA)> <!ELEMENT passo (#PCDATA)> <!ATTLIST passo numero ID #REQUIRED> DTD interno La dichiarazione del DTD viene inclusa nella definizione DOCTYPE: <!DOCTYPE root-element [elementdeclarations]> DTD esterno Un riferimento al DTD viene incluso nella definizione DOCTYPE: <!DOCTYPE root-element SYSTEM “filename”> ESEMPIO (DTD interno) <?xml version="1.0"?> <!DOCTYPE nota [ <!ELEMENT nota (a,da,testo)> <!ELEMENT a (#PCDATA)> <!ELEMENT da (#PCDATA)> <!ELEMENT testo (#PCDATA)> ]> <nota> <a>Rudi</a> <da>Paolo</da> <testo>Ci vediamo alle 12</testo> </nota> ESEMPIO (DTD esterno) <?xml version="1.0"?> <!DOCTYPE nota SYSTEM “nota.dtd”> <nota> <a>Rudi</a> <da>Paolo</da> <testo>Ci vediamo alle 12</testo> </nota> <!ELEMENT nota (a,da,testo)> <!ELEMENT a (#PCDATA)> <!ELEMENT da (#PCDATA)> <!ELEMENT testo (#PCDATA)> nota.dtd XML - DOCTYPE La dichiarazione DOCTYPE serve a utilizzare le DTD e le ENTITY in un documento XML Si trovano sempre dopo la dichiarazione XML <? xml version=“...” e la dichiarazione della DTD <! DOCTYPE mydoc [ … definizione della DTD … ]> <mydoc> … body del documento </mydoc> Dichiarazione di elemento In un DTD, gli elementi vengono definiti con una dichiarazione del tipo: <!ELEMENT element-name (element-content)> Elementi vuoti Gli elementi vuoti vengono dichiarati con la categoria EMPTY <!ELEMENT element-name EMPTY> • esempio DTD: <!ELEMENT br EMPTY> • esempio XML: <br /> Elementi contenenti solo character data Vengono dichiarati con la categoria (#PCDATA) <!ELEMENT element-name (#PCDATA)> esempio: <!ELEMENT da (#PCDATA)> Elementi con contenuto qualsiasi • Vengono dichiarati con categoria ANY <!ELEMENT element-name ANY> esempio: <!ELEMENT nota ANY> Significato: “nota” contiene qualsiasi cosa che non vada contro le altre regole XML Elementi con figli (in sequenza) • Gli elementi con uno o piu’ figli vengono dichiarati con il nome dei figli tra parentesi • Quando i figli sono dichiarati come una sequenza separata da virgole, devono apparire nello stesso ordine nel documento <!ELEMENT element-name (child-element-name)> Oppure <!ELEMENT element-name (child-elementname, child-elementname,.....)> esempio: <!ELEMENT nota (a,da,testo)> Quante occorrenze dello stesso elemento? (1) • esattamente una: <!ELEMENT element-name (child-name)> esempio: <!ELEMENT nota (messaggio)> • almeno una: <!ELEMENT element-name (child-name+)> esempio: <!ELEMENT nota (messaggio+)> Quante occorrenze di un elemento? (2) • zero o piu’: <!ELEMENT element-name (child-name*)> esempio: <!ELEMENT nota (messaggio *)> • zero o una: <!ELEMENT element-name (child-name?)> esempio: <!ELEMENT nota (messaggio?)> Scelta fra contenuti • esempio: <!ELEMENT nota (a,da,(messaggio | testo))> L’elemento note deve contenere un elemento “a”, un elemento “da”, e un elemento “messaggio” oppure un elemento “testo” Contenuto misto • esempio: <!ELEMENT nota (#PCDATA|da|a|messaggio)*> L’elemento note puo’ contenere parsed character data, o un qualsiasi numero di elementi “a”, “da”, e “messaggio”, in qualsiasi ordine Dichiarazione di attributi • Una dichiarazione di attributo ha la seguente sintassi: <!ATTLIST element-name attribute-name attribute-type default-value> esempio DTD: <!ATTLIST pagamento type CDATA ”assegno"> esempio XML: <pagamento type=”assegno" /> Valori possibili di attribute-type CDATA Stringhe di tipo unparsed. PCDATA Stringhe di tipo parsed. ID nome che occorre unico all'interno dello stesso documento IDREF E' un riferimento ad un elemento che ha un attributo di tipo ID con valore IDREF IDREFS E' una lista di IDREF separati da uno spazio bianco ENTITY nome di una entità dichiarata ENTITIES E' una lista di ENTITY separati da uno spazio bianco NMTOKEN E' una stringa di una parola NMTOKENS E' una lista di NKTOKEN separati da uno spazio bianco Enumerazione E' una lista di nomi come valori che l'attributo può assumere.I nomi sono separati da virgola e la lista è racchiusa tra parentesi tonde Valori possibili di default-values • value il valore di default • #REQUIRED il valore dell’attributo deve essere incluso nell’elemento • #IMPLIED il valore dell’attributo non deve essere incluso • #FIXED il valore e’ fissato Dichiarazione di attributi (esempi) <!ATTLIST foto src CDATA #REQUIRED desc CDATA #IMPLIED> – src, nome del file bitmap necessario (#REQUIRED) – desc, descrizione può omettersi (#IMPLIED) <!ATTLIST telefono tipo (casa | ufficio | cellulare) 'casa'> – ha un attributo che ne identifica il tipo, – che indica se il numero è di casa, dell'ufficio o di un cellulare – il valore di default è 'casa’ DTD - Caratteri per la grammatica • In una DTD è possibile avere dichiarazioni di: • Elementi struttura degli elementi • Entità • Attributi e valori, richiesti o no • Uso di simboli precisi per definire la grammatica Character Significato + Una o più occorrenze * Zero o più occorrenze Zero o una occorrenza ? (opzionale) Un gruppo di espressioni () che facciano un match tra loro | OR (questo o quello) Strettamente ordinati , come un AND ELEMENT_A ELEMENT_B Non ordinati ELEMENT_C Un esempio completo - la DTD • DTD agenda.dtd <!ELEMENT agenda (contatto*)> <!ELEMENT contatto (nome, indirizzo+, telefono*, email*,foto?)*> <!ELEMENT nome (#PCDATA)> <!ELEMENT indirizzo (via, numero, citta, cap, provincia?)> <!ELEMENT via (#PCDATA)> <!ELEMENT numero (#PCDATA)> Dati <!ELEMENT citta (#PCDATA)> Parsed <!ELEMENT cap (#PCDATA)> <!ELEMENT provincia (#PCDATA)> <!ELEMENT telefono (#PCDATA)> Un esempio completo - la DTD • … continua Valore predefinito <!ATTLIST telefono tipo (casa |ufficio | cellulare)'casa'> <!ELEMENT email (#PCDATA)> <!ELEMENT foto EMPTY> Elemento vuoto <!ATTLIST foto src CDATA #REQUIRED desc CDATA #IMPLIED> <!ENTITY BO "40100"> <!ENTITY MO "41100"> <!ENTITY RE "42100"> Entit à Dichiarate Entità Un esempio completo - XML • Agenda.xml <?XML version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE agenda SYSTEM "agenda.dtd"> <agenda> Radice DTD associata <contatto> <nome>Pinco Pallino</nome> <indirizzo> <via>Via Incognita</via> Richiamo entit à <numero>10</numero> entità <citta>Bologna</citta> della DTD <cap>&BO;</cap> </indirizzo> …continua Un esempio completo - XML • … continua <telefono>051-123456</telefono> <telefono tipo="ufficio"> 051-654321</telefono> <email> [email protected] </email> <foto src="pinco.gif" desc="Una foto Elemento vuoto foto di Pinco Pallino"/> </contatto> </agenda> Esercizio (1) • Definire una DTD per un Archivio di CDROM Musicali con i seguenti vincoli: 1. Il documento deve essere composto dai seguenti elementi : CD (“titolo”, “artista” o “gruppo”)