1 / 61

DTD & XML Schema

DTD & XML Schema. Laurea Magistrale in Informatica Reti 2 (2005/06). dott. Francesco De Angelis francesco.deangelis@unicam.it. Agenda. Document Type Definition XML Schema Namespace. Document Type Definition.

mikaia
Télécharger la présentation

DTD & XML Schema

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. DTD & XML Schema Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it

  2. Agenda • Document Type Definition • XML Schema • Namespace DTD & XML Schema

  3. Document Type Definition

  4. I due diversi livelli di “controllo” del documento generano due livelli di “correttezza”: XML ben formato: XML valido Es: <title><book/><book> Titolo </book></title> è 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 XML ben formati ed XML validi DTD & XML Schema

  5. 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 l’aggiunta di fogli di stile <?xml-stylesheet type=“text/css” href=“esempio.css”?> DTD & XML Schema

  6. Dichiarazione XML <?XML version=“1.0” encoding=“UTF-16” standalone=“yes” ?> • 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: <?XML version=“1.0” ?> DTD & XML Schema

  7. Dichiarazione XML • 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, l’unico 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. DTD & XML Schema

  8. 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 Schema

  9. 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 Schema

  10. La dichiarazione di tipo • Il <!DOCTYPE … > è 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 Schema

  11. Dichiarazione del DTD: <!DOCTYPE … > • <!DOCTYPE mydoc SYSTEM “document.dtd“> La prima forma di dichiarazione indica che il DTD è contenuto in un file esterno (external subset). • <!DOCTYPE mydoc [ <!ELEMENT …]> La seconda forma precisa il DTD internamente (internal subset). • <!DOCTYPE mydoc SYSTEM “document.dtd” [ <!ELEMENT …]> La terza forma precisa una parte del DTD come contenuta in un file esterno ed una parte come propria del documento. DTD & XML Schema

  12. 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: <!ELEMENT memo ANY> • 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: <!ELEMENT br EMPTY> • Simple content: è un elemento il cui contenuto è composto da testo. In questo caso #PCDATA è acronimo di “Parsed Character Data”.Es: <!ELEMENT message (#PCDATA)> • Element content: è il caso tipico in cui il contenuto è composto da sottoelementi.Es: <!ELEMENT note (to, from, title, message)> • Mixed content: sono elementi che contendono testo misto ad altri elementi DTD & XML Schema

  13. 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 DTD & XML Schema

  14. Element content - alternativa • Indica che il contenuto deve essere uno tra quelli elencati • I singoli sottoelementi sono divisi da barre verticali (l’or del C) DTD & XML Schema

  15. Element content - ripetizione • E’ possibile definire in vari modi le cardinalità dei sottoelementi: • Nessuna specifica: l’argomento deve comparire esattamente una volta<!ELEMENT a (b)> è permesso solo <a><b/></a> • ?: opzione. Specifica che il sottoelemento è facoltativo<!ELEMENT a (b?)> sono leciti sia <a/> che <a><b/></a> • +: ripetizione. Il sottoelemento deve figurare una o più volte<!ELEMENT a (b+)> <a><b/></a>, <a><b/><b/></a>, ecc... • *: ripetizione. Il sottoelemento può figurare un numero qualsiasi di volte, o anche non figurare affatto<!ELEMENT a (b*)> <a/>, <a><b/></a>, <a><b/><b/></a>, ecc... DTD & XML Schema

  16. Element content complessi • I costrutti possono combinarsi dando origine ad espressioni regolari • <!ELEMENT sezione (titolo, abstract?, para+)>ogni sezione ha un titolo, può avere un abstract opzionale, seguito da almeno un paragrafo • <!ELEMENT sezione (titolo, (abstract | para)+)>Dentro all’elemento sezione ci deve essere un titolo, seguito da almeno un abstract o un para, che poi possono ripetersi in qualunque ordine e numero • <!ELEMENT sezione (titolo, abstract*, para+)>Ogni elemento sezione è composto da un titolo, da una sequenza opzionale di abstract e da una sequenza si para composta da almeno un para • <!ELEMENT sezione (titolo, (sottotitolo | abstract)?, para+)>Ogni sezione è data da un titolo, da uno tra sottotitolo ed abstract, che possono però anche mancarem e da una serie di para • <!ELEMENT sezione (titolo, sottotitolo?, abstract?, para+>Come sopra, ma sottotitolo ed abstract possono coesistere DTD & XML Schema

  17. Contenuto misto • In XML il contenuto di testo #PCDATA ed il contenuto di elementi possono combinarsi solo nella forma seguente:<!ELEMENT para (#PCDATA | bold | italic)*> • Ogni paragrafo contiene un testo in cui si possono trovare, opzionalmente, degli elementi <bold> ed <italic>. Es: <para> <bold>Questo</bold> testo contiene delle sezioni in <bold>grassetto</bold> ed in <italic>corsivo</italic>, ma potrebbe anche non averne</para> DTD & XML Schema

  18. Attributi • Il DTD permette anche di vincolare gli attributi dei singoli tag, cioè dei singoli elementi. • In generale gli attributi vengono specificati con ATTLIST:<!ATTLIST elemento attributo1 tipo1 modificatore1 attributo2 tipo2 modificatore2 attributo-n tipo-n modificatore-n> • I tipi definiscono l’insieme o la tipologia dei valori assumibili dall’attributo • I modificatori identificano le condizioni di obbligatorietà o opzionalità dell’attributo ed, eventualmente, un valore di default per lo stesso DTD & XML Schema

  19. Attributi stringa <!ATTLIST message lang CDATA “Italiano”> • In questo caso l’attributo lang è una stringa • Se l’attributo è presente nel file il suo valore è quello specificato • Altrimenti viene assunto il valore di default “Italiano” <note> … <message lang=“English”> Remember the meeting </message> </note> <note> … <message> Ricordati l’appuntamento </message> </note> DTD & XML Schema

  20. Attributi per enumerazione <!ATTLIST person salutation (Mr | Mrs | Miss | Dr) “Mr”> • Il titolo di ogni persona assume valori nell’insieme indicato • In mancanza del parametro si assume per default “Mr” <person salutation=“Dr”> <name>Luke</name> <surname>Brown</name> </person> DTD & XML Schema

  21. Tipi di attributi predefiniti • DTD definisce alcuni tipi speciali, che aiutano il progettista soprattutto per quanto riguarda le relazioni tra elementi • ID: identificativo univoco all’interno del file <!ATTLIST User login ID #REQUIRED> • IDREF: riferimento ad un identificativo univoco definito nel file <!ATTLIST User userClass IDREF #REQUIRED> • 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 un’entità DTD & XML Schema

  22. Modificatori • Valore di default: espresso da una stringa indica il valore da assegnare all’attributo in mancanza di diverse indicazioni • Valore fisso: definito da #FIXED più il valore. L’attributo assume obbligatoriamente il valore assegnato e l’autore del documento XML non può modificarlo:<!ATTLIST persona numeroGambe CDATA #FIXED “2”> • Specifica di obbligatorietà: #REQUIRED. Indica che l’attributo deve essere sempre presente in ogni elemento<!ATTLIST misura val CDATA #REQUIRED> • Specifica di opzionalità: #IMPLIED. Indica che l’attributo è opzionale e può non essere specificato dall’autore del documento. Se combinato con ID indica che il sistema genererà un identificativo automaticamente DTD & XML Schema

  23. Entità • Le entità del DTD sono frammenti ricorrenti di contenuti testuali a cui vengono associati degli identificatori che possono essere “espansi” come macro all’interno del documento prima di procedere al parsing vero e proprio • La definizione avviene secondo lo schema: <!ENTITY nomeEntità valore> • L’utilizzo avviene inserendo nel testo la sequenza: &nomeEntità; • Esempio: <!ENTITY autore “Francesco De Angelis”> <document><title>Introduzione ad XML</title><author>&autore;</author> </document> DTD & XML Schema

  24. Entità esterne • Le entità esterne vengono “recuperate” da un file esterno all’XML <!ENTITY nomeEntità SYSTEM “url del file”> • Es: <!ENTITY text SYSTEM “book.txt”> • E’ possibile specificare entità da non parsare, tipicamente come entità di dati binari <!ENTITY immagine SYSTEM “img.gif” NDATA gif> <book> <title>..</title> <text>&text;</text> </book> DTD & XML Schema

  25. Entità predefinite • Sono predefinire tutte le entità associabili ai singoli caratteri sulla base del codice (unicode) degli stessi. Ad esempio l’entità &#10; 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 : <![CDATA [<]]> DTD & XML Schema

  26. Entità parametriche • Sono entità definite nel DTD ed utilizzate all’interno 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: <!ENTITY % testo “#PCDATA”> <!ENTITY % testoConBold “(%testo;|bold)*”> <!ELEMENT testo %testoConBold;> DTD & XML Schema

  27. 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 Schema

  28. Utilizzo delle DTD • Validazione • Storage XML efficiente (persistenza, estensione, o database storage) • Documentazione • Parsing efficiente • Design di tool di supporto DTD & XML Schema

  29. XML Schema

  30. 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 Schema

  31. Perchè XML Schema? • DTD fornisce specifiche deboli • Nessuna restrizione sul contenuto del testo • Poco controllo sui contenuti misti (mixed content, text + elements) • Poco controllo sull’ordinamento 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 Schema

  32. Riferirsi ad uno schema • Per la DTD il riferimento va prima del root element: <?xml version="1.0"?> <!DOCTYPE rootElement SYSTEM "url"> <rootElement> ... </rootElement> • Per l’XML Schema il riferimento va nel root element: <?xml version="1.0"?> <rootElement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"(riferimeno richiesto a XML Schema Instance) xsi:noNamespaceSchemaLocation="url.xsd">(dove trovare lo Schema definition voluto) ... </rootElement> DTD & XML Schema

  33. Il documento XSD: “lo schema” • L’estensione è .xsd • L’elemento root è <schema> • Il documento XSD parte con: <?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.rg/2001/XMLSchema"> Attenzione: documento XSD stesso è scritto in XML DTD & XML Schema

  34. <schema> • L’elemento <schema> può avere attributi: • xmlns:xs="http://www.w3.org/2001/XMLSchema" • 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 Schema

  35. 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 Schema

  36. Definire un elemento semplice • Un elemento semplice è definito come: <xs:element name="name” type="type” /> dove: • name è il nome dell’elemento • Valori comuni per type sono xs:boolean xs:integer xs:date xs:string xs:decimal xs:time • Altri attributi di element sono: • default="default value” se non ci sono altri valori specificati • fixed="value" nessun altro valore specificato DTD & XML Schema

  37. Definire un attributo • Gli attributi sono dichiarati sempre come tipi semplici • Definito come <xs:attribute name="name” type="type” /> dove: • name e type sono gli stessi che perxs:element • Altri attributi che gli elementi semplici possono avere: • default="defaultvalue" se nessun valore è specificato • fixed="value”nessun altro valore può essere specificato • use="optional" non richiesto (default) • use="required"richiesto DTD & XML Schema

  38. Restrizioni, o “facets” • La forma generale delle restrizioni è: <xs:element name="name"> (o xs:attribute) <xs:restriction base="type">... the restrictions ... </xs:restriction></xs:element> • Ad esempio: <xs:element name="age"> <xs:restriction base="xs:integer"> <xs:minInclusive value="0"> <xs:maxInclusive value="140"> </xs:restriction></xs:element> DTD & XML Schema

  39. 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 valuecifre • fractionDigits -- numero deve avere non più di valuecifre dopo il punto decimale DTD & XML Schema

  40. Restrizioni su stringhe • length -- la stringa deve contenere valuecaratteri • minLength -- la stringa deve contenere almeno valuecaratteri • maxLength -- la stringa deve contenere non più di valuecaratteri • 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 Schema

  41. Enumerazioni • Restringe il range di possibili valori ad una loro enumerazione • Esempio: <xs:element name="season"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="Spring"/> <xs:enumeration value="Summer"/> <xs:enumeration value="Autumn"/> <xs:enumeration value="Fall"/> <xs:enumeration value="Winter"/> </xs:restriction> </xs:simpleType></xs:element> DTD & XML Schema

  42. Elementi Complessi • Un elemento complesso è definito da: <xs:element name="name"> <xs:complexType>... information about the complex type... </xs:complexType> </xs:element> • Esempio: <xs:element name="person"> <xs:complexType> <xs:sequence> <xs:element name="firstName" type="xs:string" /> <xs:element name="lastName" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> DTD & XML Schema

  43. Definizioni locali e globali • Elementi di chiarati al “top level” dello <schema> sono disponibili per l’uso in tutto lo schema • Elementi dichiarati in un xs:complexType sono locali • Così, in <xs:element name="person"> <xs:complexType> <xs:sequence> <xs:element name="firstName" type="xs:string" /> <xs:element name="lastName" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> Gli elementi firstName e lastName sono dichiarati solo localmente • L’ordine delle dichiarazioni nel “top level” dello <schema>non specifica l’ordine di apparizione nel documento che usa tale schema DTD & XML Schema

  44. Dichiarazione ed uso • Per sfruttare un tipo lo si usa in type="..." • Esempi: • <xs:element name="student" type="person"/> • <xs:element name="professor" type="person"/> • Lo scope (visibilità) è importante: non si può usare un tipo al di fuori del suo scope DTD & XML Schema

  45. xs:sequence • Consente di specificare l’ordine di apparizione degli elementi <xs:element name="person"> <xs:complexType> <xs:sequence> <xs:element name="firstName" type="xs:string" /> <xs:element name="lastName" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> DTD & XML Schema

  46. xs:all • xs:all consente l’apparizione in qualsiasi ordine <xs:element name="person"> <xs:complexType> <xs:all> <xs:element name="firstName" type="xs:string" /> <xs:element name="lastName" type="xs:string" /></xs:all> </xs:complexType> </xs:element> • A dispetto del nome i membri del gruppo xs:all possono occorrere una sola volta o per niente • Si può usareminOccurs="0"per specificare che un elemento è opzionale (il valore di default è 1) • In questo contesto, maxOccurs è sempre 1 DTD & XML Schema

  47. <xs:choice> • Definisce un insieme di elementi tra cui effettuare una scelta <xs:element name="person"> <xs:complexType> <xs:choice> <xs:element name="firstName" type="xs:string" /> <xs:element name=“surName" type="xs:string" /></xs:choice> </xs:complexType> </xs:element> DTD & XML Schema

  48. Riferimenti • Dopo avere definito elementi con name="...", si può far loro riferimento con ref="..." • Esempi: • <xs:element name="person"> <xs:complexType> <xs:all><xs:element name="firstName" type="xs:string" /> <xs:element name="lastName" type="xs:string" /></xs:all></xs:complexType> </xs:element> <xs:element name="student" ref="person"> Oppure<xs:element ref="person"> DTD & XML Schema

  49. Elementi misti • Elementi misti possono contenere sia testo che altri elementi • Attributo mixed = "true” sull’elemento xs:complexType • Il testo stesso non è menzionato nell’elemento e può essere messo dove si vuole <xs:complexType name= "paragraph” mixed="true"> <xs:sequence> <xs:element name= "someName” type= "xs:anyType"/> </xs:sequence></xs:complexType> DTD & XML Schema

  50. Estensioni • Un tipo complesso può essere la base di un nuovo tipo <xs:complexType name="newType"> <xs:complexContent> <xs:extension base="otherType">...new stuff... </xs:extension> </xs:complexContent></xs:complexType> DTD & XML Schema

More Related