Linguaggi di schema per XML e modelli astratti di documenti Tesi di Laurea di Daniele Gubellini Relatore: Chiar.mo Prof. Fabio Vitali Bologna, 23 marzo 2005 L’ ingegneria dei documenti Le componenti di un documento Contenuto: informazione allo stato puro (“la mia data di nascita”). Struttura: risponde alla domanda “dov’è” un dato e conferisce metainformazioni. Presentazione: formattazione visiva. Esempio: 01/03/1978. Sintassi Esempio: 01031978 ? XML, markup descrittivo. Vincoli Linguaggi di schema: DTD, XML Schema. L’obiettivo Identificare gli schemi utili e potenzialmente ricchi di significato Eliminare i costrutti sintattici non necessari nella costruzione di strutture significative. Definire un linguaggio di schema minimale che permetta l’espressione di tutti e soli gli schemi catalogati. Content model DTD inutili: esempi Descrizione Content model DTD Presenza di alcuni frammenti di content model come “(B|C)*” in più dichiarazioni. Aggiungendo un elemento K si avrebbe incoerenza semantica? “(B|C)*” sono logicamente indissolubili o indipendenti? <!ELEMENT E1 (X,(B|C)*> <!ELEMENT E2 (Y,(B|C)*> Ripetizione di sequenze. Un’eventuale relazione semantica tra A e B non è rafforzata dalla sintassi. <!ELEMENT E (A,B)*> Sequenza di elementi non ripetibili ed elementi ripetibili. T sembra un’informazione unica che dice qualcosa sulla lista di B. Questo fatto non è rafforzato dalla sintassi. <!ELEMENT E (T,B*)> Normalizzazione Documenti ben ingegnerizzati Definizione delle dipendenze funzionali: fondamentali per modellare i dati in modo elegante, riutilizzabile e con una semantica precisa e non ambigua. Normalizzazione: applicata ai contenitori logici che danno profondità e struttura al documento. Esempio: TeiLight, elemento “div” ((argument|byline|dateline|docAuthor|docDate|epigraph|head|opener| salute|signed|anchor|gap|index|interp|interpGrp|lb|milestone|pb)*,(((div |divGen),(anchor|gap|index|interp|interpGrp|lb|milestone|pb)*)+|(((eg| bibl|biblFull|ab|l|lg|p|sp|figure|cit|q|label|list|listBibl|note|stage|table ),(anchor|gap|index|interp|interpGrp|lb|milestone|pb)*)+,((div|divGen),( anchor|gap|index|interp|interpGrp|lb|milestone|pb)*)*)),((byline|closer| dateline|epigraph|salute|signed|trailer),(anchor|gap|index|interp| interpGrp|lb|milestone|pb)*)*) La soluzione Adozione di Pattern Adozione di wrapper. Semplificazione della sintassi: DTD- Espressione di strutture utili e potenzialmente ricche di significati. Rendere leciti (esprimibili) solo i Pattern. Conversione di strutture DTD in DTD--. Pattern di design (1/2) Marker “BR”: <BR/> Record “Persona”: <Persona> <Nome>Daniele</Nome> <Cognome>Gubellini</Cognome> <Indirizzo>C. Italia 19</Indirizzo> <Comune>S.G.Persiceto</Comune> </Persona> Blocco “Testo”: <Testo> Questo è un testo con elementi tipografici come <bold>grassetto</bold> e <ita>italico</ita> oppure <bold><ita>grassetto e italico</ita></bold> <BR/> </Testo> Atomo “Giorno”: <Giorno>23</Giorno> Tabella “Persone”: <Persone> <Persona> <Nome>Daniele</Nome> <Cognome>Gubellini</Cognome> <Indirizzo>C. Italia 19</Indirizzo> <Comune>S.G.Persiceto</Comune> </Persona> <Persona> <Nome>Mara</Nome> <Cognome>Serra</Cognome> <Indirizzo>C. Italia 19</Indirizzo> <Comune>S.G.Persiceto</Comune> </Persona> </Persone> Pattern di design (2/2) Contesto Additivo “Contratto”: <Contratto> ... <Firma>Daniele Gubellini</Firma> ... </Contratto> Firma può apparire ovunque all’interno di Contratto. È possibile limitare ad uno l’occorrenza dell’elemento Firma. Contesto Sottrattivo “Nota”: <Testo> <Paragrafo> Questo è un paragrafo con note. <Nota> Una nota contiene paragrafi <Paragrafo>Una nota può contenere altre note</Paragrafo> </Nota> </Paragrafo> </Testo> Proibisco la presenza di Note all’interno di Note. I wrapper (Studente,(Cellulare|Telefono)*) e (Prof,(Cellulare|Telefono)*) Strutture logicamente indissolubili: (Studente,recapitiTelefonici) e (Prof,recapitiTelefonici) dove recapitiTelefonici=(Cellulare|Telefono)* Strutture logicamente separate: (Studente,recapitiTelefoniciStudente) e (Prof,recapitiTelefoniciProf) dove recapitiTelefoniciStudente=recapitiTelefoniciProf=(Cellulare|Telefono)* Possibile aggiungere a recapitiTelefoniciProf un TelefonoUfficio. (Domanda,Risposta)* Rafforzare il legame semantico tra Domanda e Risposta: (FAQ*) dove FAQ=(Domanda,Risposta). (Titolo,Capitolo*) Titolo è riferito alla lista dei capitoli: (Titolo,Capitoli) dove Capitoli=(Capitolo*). Il metalinguaggio DTD- Espressione di tutte e sole le strutture dei Pattern. Sintassi Minimalità sintattica: SCHEMA = ISTANZA. L’opzionalità del DTD è meno problematica. Lo schema diventa più espressivo grazie all’astrazione dei Pattern. Sintassi instance based:scrivere uno schema diventa semplice come scrivere un’istanza. Literate programming. DTD--: sintassi dei Pattern Marker, Atomo, Record. Tabella “Persone”: <Persone> <Persona> <Nome>Nome</Nome> <Cognome>Cognome</Cognome> <Indirizzo>Via e n.civico</Indirizzo> <Comune>Comune</Comune> </Persona> <dtd:etc/> </Persone> Contesto Additivo “Contratto”: <Contratto dtd:include=“!Firma”> .... <Firma>Daniele Gubellini</Firma> .... </Contratto> Blocco “Testo”: <Testo dtd:type=“T”> Questo è un testo con elementi tipografici come bold <bold dtd:type=“T”/> e ita<ita dtd:type=“T”/>. Può contenere anche linee <BR/>. </Testo> Contesto Sottrattivo “Nota”: <Testo dtd:type=“T”> Questo testo contiene paragrafi <Paragrafo dtd:type=“T”/>e note <Nota dtd:type=“T” dtd:exclude=“Nota” /> </Testo> Tool di conversione Da DTD a DTD- Da istanze/schemi a DTD- Vengono semplificati e convertiti i DTD in sintassi DTD--. Test di affinità con il nuovo modello di design. Spunto critico per una rimodellazione dello schema. Unificazione di istanze e schemi DTD-- in un unico schema. Schemi (A|B). Da DTD-- a SchemaPath Tappa intermedia del processo di validazione. Conclusioni Design basato su Pattern Abbassa l’incertezza sintattica, permette “visualizzazioni” astratte, forza un design semplice e chiaro, migliora il rapporto tra contenuto e struttura. Favorisce il processo di normalizzazione. Autoreferenzialità: la minimalità sintattica risolve in parte il problema dell’opzionalità del DTD. Semplifica eventuali processi di conversione. Sviluppi futuri: nuovi pattern? DTD- Linguaggio di schema semplice, basato su XML, di facile apprendimento. Sviluppi futuri: co-constraints, tipi di dato per Atomo ecc.