DTD & XML Schema Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis
DTD & XML Schema2 Agenda Document Type Definition XML Schema Namespace
Document Type Definition
DTD & XML Schema4 XML ben formati ed XML validi I due diversi livelli di controllo del documento generano due livelli di correttezza: XML ben formato: XML valido Es: Titolo è ben formato ma non è tipicamente valido La buona formazione può essere valutata conoscendo solo XML La validazione dipende dalla specifica applicazione XML e cioè dallo specifico linguaggio
DTD & XML Schema5 La forma di un documento XML Ogni documento XML inizia con un prologo che contiene: una XML declaration eventualmente una Doctype Declaration (la dichiarazione della DTD a cui il documento si riferisce) eventualmente una serie di processing instruction Le processing instruction sono utilizzate raramente, servono più che altro per laggiunta di fogli di stile
DTD & XML Schema6 Dichiarazione XML Un documento XML può includere una dichiarazione XML. Questa specifica le caratteristiche opzionali del documento in questione. Poiché esse sono ridotte al minimo, la dichiarazione XML è brevissima La sintassi usata per la dichiarazione XML è quella delle processing instructions La non obbligatorietà della dichiarazione XML è dovuta a motivi di convenienza, per poter usare la grande quantità di documenti HTML e SGML che sono ben formati senza richiedere modifiche anche stupide. In assenza di dichiarazione XML, si assume la forma:
DTD & XML Schema7 Esistono esattamente tre valori che possono essere messi in una dichiarazione XML: Il parametro version identifica quale versione di XML si sta usando. Per il momento, lunico valore possibile è 1.0. Necessario. Il parametro encoding permette di specificare, se il dubbio può sorgere, quale codifica di caratteri viene usata per il documento. Facoltativo. Il parametro standalone permette di specificare se tutto il contenuto del documento è interno alla risorsa o se ne esiste parte anche all'esterno (ad esempio in un'entità posta nel DTD esterno). Facoltativo. Se è assente è false. Dichiarazione XML
DTD & XML Schema8 La Document Type Definition Una DTD è costituita da un elenco di dichiarazioni (markup declaration) che descrivono la struttura del documento Le dichiarazioni di una DTD definiscono: gli elementi strutturali (element) di un documento mediante un identificatore generico il modello di contenuto di ogni elemento (content model) ovvero gli elementi che contiene ed i loro rapporti (un elemento può essere vuoto) la lista degli attributi associati a ciascun elemento e il loro tipo
DTD & XML Schema9 La Document Type Definition XML non fornisce alcun modo per definire la semantica di una DTD ogni elemento è definito esclusivamente interamente dal suo nome e dal suo contenuto ogni altra specificazione semantica va fornita mediante documentazione in lingua naturale o in altre notazioni logiche I DTD XML e SGML sono molto simili. A parte minime modifiche, ogni DTD XML è anche un DTD SGML.
DTD & XML Schema10 La dichiarazione di tipo Il è la dichiarazione del tipo di documento. Essa permette alle applicazioni XML di determinare le regole sintattiche da applicare alla verifica e validazione del documento. La dichiarazione non è, ma contiene o fa riferimento alla Document Type Definition, dove vengono elencati gli elementi validi e i loro vincoli. Il DTD può essere posto in un file esterno, internamente al documento, o in parte esternamente ed in parte internamente. N.B.: In XML il nome del DOCTYPE deve essere il nome del tag radice.
DTD & XML Schema11 Dichiarazione del DTD: 1. La prima forma di dichiarazione indica che il DTD è contenuto in un file esterno (external subset). 2. La seconda forma precisa il DTD internamente (internal subset). 3. La terza forma precisa una parte del DTD come contenuta in un file esterno ed una parte come propria del documento.
DTD & XML Schema12 Tipi di elementi Il DTD definisce i tipi di elementi che possono occorrere nel file xml Per ogni tipo di elemento viene indicato il tipo di contenuto, che può essere: Any content: indica che ogni contenuto è ammissibile. Es: Empty content: un elemento vuoto non può contenere alcun testo tra il tag di inizio e quello di chiusura e può quindi essere rappresentato da un tag vuoto. Es: Simple content: è un elemento il cui contenuto è composto da testo. In questo caso #PCDATA è acronimo di Parsed Character Data. Es: Element content: è il caso tipico in cui il contenuto è composto da sottoelementi. Es: Mixed content: sono elementi che contendono testo misto ad altri elementi
DTD & XML Schema13 Element content - sequenza Un elemento composto da una sequenza deve contenere una lista dei sottoelementi elencati, con un elemento per ogni tipo I singoli sottoelementi sono divisi da virgole DTDXML valido
DTD & XML Schema14 Element content - alternativa Indica che il contenuto deve essere uno tra quelli elencati I singoli sottoelementi sono divisi da barre verticali (lor del C) DTDXML valido
DTD & XML Schema15 Element content - ripetizione E possibile definire in vari modi le cardinalità dei sottoelementi: Nessuna specifica: largomento deve comparire esattamente una volta è permesso solo ?: opzione. Specifica che il sottoelemento è facoltativo sono leciti sia che +: ripetizione. Il sottoelemento deve figurare una o più volte,, ecc... *: ripetizione. Il sottoelemento può figurare un numero qualsiasi di volte, o anche non figurare affatto,,, ecc...
DTD & XML Schema16 Element content complessi I costrutti possono combinarsi dando origine ad espressioni regolari ogni sezione ha un titolo, può avere un abstract opzionale, seguito da almeno un paragrafo Dentro allelemento sezione ci deve essere un titolo, seguito da almeno un abstract o un para, che poi possono ripetersi in qualunque ordine e numero Ogni elemento sezione è composto da un titolo, da una sequenza opzionale di abstract e da una sequenza si para composta da almeno un para Ogni sezione è data da un titolo, da uno tra sottotitolo ed abstract, che possono però anche mancarem e da una serie di para Come sopra, ma sottotitolo ed abstract possono coesistere
DTD & XML Schema17 Contenuto misto In XML il contenuto di testo #PCDATA ed il contenuto di elementi possono combinarsi solo nella forma seguente: Ogni paragrafo contiene un testo in cui si possono trovare, opzionalmente, degli elementi ed. Es: Questo testo contiene delle sezioni in grassetto ed in corsivo, ma potrebbe anche non averne
DTD & XML Schema18 Attributi Il DTD permette anche di vincolare gli attributi dei singoli tag, cioè dei singoli elementi. In generale gli attributi vengono specificati con ATTLIST: I tipi definiscono linsieme o la tipologia dei valori assumibili dallattributo I modificatori identificano le condizioni di obbligatorietà o opzionalità dellattributo ed, eventualmente, un valore di default per lo stesso
DTD & XML Schema19 Attributi stringa In questo caso lattributo lang è una stringa Se lattributo è presente nel file il suo valore è quello specificato Altrimenti viene assunto il valore di default Italiano … Remember the meeting … Ricordati lappuntamento
DTD & XML Schema20 Attributi per enumerazione Il titolo di ogni persona assume valori nellinsieme indicato In mancanza del parametro si assume per default Mr Luke Brown
DTD & XML Schema21 Tipi di attributi predefiniti DTD definisce alcuni tipi speciali, che aiutano il progettista soprattutto per quanto riguarda le relazioni tra elementi ID: identificativo univoco allinterno del file IDREF: riferimento ad un identificativo univoco definito nel file IDREFS: come IDREF, ma può esserci una lista di riferimenti NMTOKEN o NMTOKENS: stringa (o lista di stringhe) di caratteri senza spazi o caratteri di interpunzione ENTITY o ENTITIES: il valore deve essere unentità
DTD & XML Schema22 Modificatori Valore di default: espresso da una stringa indica il valore da assegnare allattributo in mancanza di diverse indicazioni Valore fisso: definito da #FIXED più il valore. Lattributo assume obbligatoriamente il valore assegnato e lautore del documento XML non può modificarlo: Specifica di obbligatorietà: #REQUIRED. Indica che lattributo deve essere sempre presente in ogni elemento Specifica di opzionalità: #IMPLIED. Indica che lattributo è opzionale e può non essere specificato dallautore del documento. Se combinato con ID indica che il sistema genererà un identificativo automaticamente
DTD & XML Schema23 Entità Le entità del DTD sono frammenti ricorrenti di contenuti testuali a cui vengono associati degli identificatori che possono essere espansi come macro allinterno del documento prima di procedere al parsing vero e proprio La definizione avviene secondo lo schema: Lutilizzo avviene inserendo nel testo la sequenza: &nomeEntità; Esempio: Introduzione ad XML &autore;
DTD & XML Schema24 Entità esterne Le entità esterne vengono recuperate da un file esterno allXML Es: E possibile specificare entità da non parsare, tipicamente come entità di dati binari.. &text;
DTD & XML Schema25 Entità predefinite Sono predefinire tutte le entità associabili ai singoli caratteri sulla base del codice (unicode) degli stessi. Ad esempio lentità corrisponde al carattere ASCII 10. Alcuni caratteri, tra cui < ed &, creano problemi quando vengono mischiati al testo. Per questo sono predefinire alcune entità che possono sostituire questi caratteri: Equivalente a : << >> && ' "
DTD & XML Schema26 Entità parametriche Sono entità definite nel DTD ed utilizzate allinterno del DTD stesso Vengono sostituite durante la lettura del DTD Contengono frammenti ricorrenti del modello di contenuto Es: volendo definire in un unico punto il tipo di testo che contiene sezioni in grassetto:
DTD & XML Schema27 Cosa cè di sbagliato nelle DTD Troppo document oriented DTD è stato sviluppato per interfacciarsi con tool per il trattamento del testo Limitato nella rappresentazione di strutture complesse Non cè la nozione di ereditarietà/sub-typing Content-model ambiguo Troppi modi per rappresentare la stessa cosa I nomi sono globali, non locali
DTD & XML Schema28 Utilizzo delle DTD Validazione Storage XML efficiente (persistenza, estensione, o database storage) Documentazione Parsing efficiente Design di tool di supporto
XML Schema
DTD & XML Schema30 XML Schema Schema è un termine generale, dal vocabolario inglese: a structured framework or plan Quando si parla di XML Schema si intende usualmente il W3C XML Schema Language … e il suo acronimo XSD DTD, XML Schema, e RELAX NG sono tutti linguaggi di schema XML
DTD & XML Schema31 Perchè XML Schema? DTD fornisce specifiche deboli Nessuna restrizione sul contenuto del testo Poco controllo sui contenuti misti (mixed content, text + elements) Poco controllo sullordinamento degli elementi DTD è scritto in un formato non-XML Parser separati per DTD e XML XML Schema Definition Language risolve questi problemi Più controllo su strutture e contenuti XSD è scritto in XML
DTD & XML Schema32 Riferirsi ad uno schema Per la DTD il riferimento va prima del root element:... Per lXML Schema il riferimento va nel root element: (dove trovare lo Schema definition voluto)...
DTD & XML Schema33 Il documento XSD: lo schema Lestensione è.xsd Lelemento root è Il documento XSD parte con: Attenzione: documento XSD stesso è scritto in XML
DTD & XML Schema34 Lelemento può avere attributi: xmlns:xs=" Specifica dove i tag dello schema sono specificati elementFormDefault="qualified" Tutti gli elementi devono essere qualificati da un namespace È altamente desiderabile qualificare ogni tag
DTD & XML Schema35 Elementi semplici e complessi Un elemento semplice contiene solo testo Non ha attributi Non contiene altri elementi Non può essere vuoto Ci possono essere varie restrizioni applicate al contenuto Un elemento complesso Può avere attributi Può essere vuoto, contenere testo, altri elementi, o sia testo che altri elementi.
DTD & XML Schema36 Definire un elemento semplice Un elemento semplice è definito come: dove: name è il nome dellelemento Valori comuni per type sono xs:booleanxs:integer xs:datexs:string xs:decimalxs:time Altri attributi di element sono: default="default value se non ci sono altri valori specificati fixed="value" nessun altro valore specificato
DTD & XML Schema37 Definire un attributo Gli attributi sono dichiarati sempre come tipi semplici Definito come dove: name e type sono gli stessi che per xs:element Altri attributi che gli elementi semplici possono avere: default=" default value " se nessun valore è specificato fixed=" value nessun altro valore può essere specificato use="optional" non richiesto (default) use="required" richiesto
DTD & XML Schema38 Restrizioni, o facets La forma generale delle restrizioni è: (o xs:attribute )... the restrictions... Ad esempio:
DTD & XML Schema39 Restrizioni su numeri minInclusive -- numero deve essere di value minExclusive -- numero deve essere > di value maxInclusive -- numero deve essere di value maxExclusive -- numero deve essere < di value totalDigits -- numero deve avere value cifre fractionDigits -- numero deve avere non più di value cifre dopo il punto decimale
DTD & XML Schema40 Restrizioni su stringhe length -- la stringa deve contenere value caratteri minLength -- la stringa deve contenere almeno value caratteri maxLength -- la stringa deve contenere non più di value caratteri pattern -- value è una espressione regolare da soddisfare whiteSpace -- dice come trattare gli spazi bianchi value="preserve" li mantiene value="replace" rinpiazza con spazi value="collapse" rimuove gli spazi iniziali, finali e rimpiazza le sequenze con uno spazio singolo
DTD & XML Schema41 Enumerazioni Restringe il range di possibili valori ad una loro enumerazione Esempio:
DTD & XML Schema42 Elementi Complessi Un elemento complesso è definito da:... information about the complex type... Esempio:
DTD & XML Schema43 Definizioni locali e globali Elementi di chiarati al top level dello sono disponibili per luso in tutto lo schema Elementi dichiarati in un xs:complexType sono locali Così, in Gli elementi firstName e lastName sono dichiarati solo localmente Lordine delle dichiarazioni nel top level dello non specifica lordine di apparizione nel documento che usa tale schema
DTD & XML Schema44 Dichiarazione ed uso Per sfruttare un tipo lo si usa in type="..." Esempi: Lo scope (visibilità) è importante: non si può usare un tipo al di fuori del suo scope
DTD & XML Schema45 xs:sequence Consente di specificare lordine di apparizione degli elementi
DTD & XML Schema46 xs:all xs:all consente lapparizione in qualsiasi ordine A dispetto del nome i membri del gruppo xs:all possono occorrere una sola volta o per niente Si può usare minOccurs="0" per specificare che un elemento è opzionale (il valore di default è 1) In questo contesto, maxOccurs è sempre 1
DTD & XML Schema47 Definisce un insieme di elementi tra cui effettuare una scelta
DTD & XML Schema48 Riferimenti Dopo avere definito elementi con name="...", si può far loro riferimento con ref="..." Esempi: Oppure
DTD & XML Schema49 Elementi misti Elementi misti possono contenere sia testo che altri elementi Attributo mixed = "true sullelemento xs:complexType Il testo stesso non è menzionato nellelemento e può essere messo dove si vuole
DTD & XML Schema50 Estensioni Un tipo complesso può essere la base di un nuovo tipo...new stuff...
DTD & XML Schema51 Tipi di stringa predefiniti Abbiamo detto che un tipo semplice è definito da: Alcuni possibili tipi: xs:string -- una stringa xs:normalizedString -- una stringa che non contiene tabs, newlines, or carriage returns xs:token -- una stringa che non contiene whitespace oltre che gli spazi singoli Restrizioni sulle stringhe: enumeration, length, maxLength, minLength, pattern, whiteSpace
DTD & XML Schema52 Date e tempo xs:date -- Una data nel formato CCYY-MM-DD, for example, xs:time -- Una data nel formato hh:mm:ss (hours, minutes, seconds) xs:dateTime -- Il formato è CCYY-MM-DD T hh:mm:ss La T è parte della sintassi Restrizioni consentite: enumeration, minInclusive, minExclusive, maxInclusive, maxExclusive, pattern, whiteSpace
DTD & XML Schema53 Tipi numerici predefiniti Tipi numerici predefiniti: Allowable restrictions on numeric types: enumeration, minInclusive, minExclusive, maxInclusive, maxExclusive, fractionDigits, totalDigits, pattern, whiteSpace xs:decimalxs:positiveInteger xs:bytexs:negativeInteger xs:shortxs:nonPositiveInteger xs:intxs:nonNegativeInteger xs:long
Namespace
DTD & XML Schema55 Mischiare i tag Sistema di elaborazione semplice: il documento viene elaborato da una sola applicazione (esempio il viewer) Sistema complesso: parti diverse del documento vengono elaborate da applicazioni diverse … Parser XML viewer Parser XML viewer Book agent
DTD & XML Schema56 Mischiare i tag Cosa accade se due applicazioni definiscono lo stesso elemento? nome cognome Mario Bianchi Luca Rossi Comodino ordine prodotto 1 Comodino viene riconosciuto dal viewer HTML o dal gestore dellarredo?
DTD & XML Schema57 I namespace Ogni nome di elemento (tag) XML è preceduto da un prefisso che lo rende univoco (tag qualificato) La struttura del tag è: prefisso:nometag ordine prodotto 1 Comodino
DTD & XML Schema58 I namespace Ma non basta: Il prefisso potrebbe ripetersi Documenti diversi potrebbero identificare lo stesso namespace logico con identificativi differenti Imporre lunicità porterebbe a ns lunghissimi ed a codici illeggibili I prefissi usati vengono introdotti tramite lattributo predefinito xmlns Quello che conta è lURI univoco associato al prefisso: <h:table xmlns:h= xmlns:fur=
DTD & XML Schema59 Namespace di default Quando largomento di un XML è prevalentemente riferito ad un namespace è possibile definirlo come default e sottointendere la qualificazione <table xmlns= xmlns:fur= ordine prodotto 1 Comodino
DTD & XML Schema60 Scope dei prefissi I prefissi possono essere definiti allinterno di ogni tag di inizio o vuoto. Lassociazione tra prefisso e NS dura per tutto lelemento Se un prefisso viene ridefinito in un sottoelemento valgono le solite regole di visibilità (il blocco interno nasconde quello esterno) ordine prodotto 1 Comodino
DTD & XML Schema61 Attributi Anche gli attributi, essendo legati alla particolare applicazione, possono essere qualificati con un prefisso Il namespace contiene tre partizioni di nomi: Element Type Partition: contiene i nomi degli elementi del namespace Global Attribute Partition: nomi degli attributi qualificati Per-Element Partition: nomi non qualificati degli attributi locali ad un elemento Comodino