Linguaggi di markup Marco Mesiti [email protected] Esempio: contatti in rubrica Laura Papaleo 123.2342323232 [email protected] Franco Tallero Via degli Ulivi 19/19 Genova, 16100 010.28389239 (preferito) 346.92938281 [email protected] Esempio: address book in XML <?xml version="1.0"?> <address-book> <entry> <name>Laura Papaleo </name> <tel> 123.2342323232 </tel> <email href=" [email protected]"/> </entry> <entry> <name>Franco Tallero</name> <address> <street>Via degli Ulivi 19/19</street> <postal-code>16100</postal-code> <locality> Genova</locality> </address> <tel preferred="true"> 010.28389239</tel> <tel> 346.92938281</tel> <email href="[email protected] "/> </entry> </address-book> XML Sintassi: Elemento Un elemento è un blocco elementare dei documenti XML Elemento Start-tag Contenuto End-tag Un elemento è una parte del documento delimitata da 2 TAG Esempio: <AUTHOR> Laura Papaleo </AUTHOR> XML Sintassi: Tag (1/2) I tag appaiono, normalmente, in coppia, tag di apertura (start-tag) tag di chiusura (end-tag) <NOME_TAG> Laura Papaleo </NOME_TAG> Il tag rappresenta il nome dell’elemento XML: Struttura gerarchica degli elementi Libro libro Capitolo sezione Capitolo Capitolo Capitolo sezione sezione sezione Struttura gerarchica degli elementi No! Libro Capitolo sezione Capitolo sezione Ogni elemento deve essere completamente incluso da un altro elemento Contenuto di un Elemento altri elementi (sub-elements) <address> <street> 33, Terry Dr.</street> <city> Morristown </city> </address> testo (data content) <street> 33, Terry Dr.</street> contenuto misto (mixed content) <par>Today, <date>05-06-2000</date> Mr. <name>Bill Gates</name> is in California to talk to ... </par> Elemento documento (Document Element) E’ l’elemento più esterno in un documento XML Viene anche detto elemento radice Contiene tutti gli elementi del documento esempio: <libro> … … </libro> Deve sempre esistere Elemento documento (Document Element) No! Capitolo sezione Capitolo sezione Non è possibile avere più elementi a livello radice Elemento vuoto (Empty Elements) E’ un elemento senza contenuto Non ha il tag finale Ha una particolare rappresentazione del Tag iniziale Esempio: <foto source=“ciao.gif”/> <email indirizzo=“[email protected]”/> XML: Definire gli attributi Un elemento può avere degli attributi Gli attributi possono essere pensati come aggettivi che descrivono gli elementi Ogni attributo ha nome e valore Tutti gli attributi di un elemento devono essere distinti <AUTHOR nome_attributo=”valore_attributo"> Marco Mesiti </AUTHOR> Esempio di elemento con attributi <AUTHOR laurea=”informatica"> Laura Maria Rita </AUTHOR> <AUTHOR laurea=”informatica"> <name>Laura</name> <name>Maria Rita</name> <lastname>Papaleo</lastname> </AUTHOR> <AUTHOR laurea=”informatica” name1=”Laura” name2=”Maria Rita” lastname=”Papaleo”/> Elementi Vs Attributi Quando è meglio usare elementi o attributi per rappresentare un’informazione? Sicuramente elementi se si tratta di informazione strutturata Un elemento, quando: Si richiede di recuperare i dati velocemente E’ visibile a tutti E’ rilevante per il significato del documento Un attributo, quando: Esprime una scelta E’ utilizzato dal sistema Non è rilevante per il significato del documento Un documento 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 dichiarazione (opzionale) del tipo di documento e sul nome della DTD associata Il contenuto del documento con tag XML Un esempio di documento XML (1) BOOKS.xml <?xml version="1.0"?> <BOOKLIST> <BOOK> <TITLE edition=”2000">XML Tutorial</TITLE> <AUTHOR>Laura Papaleo</AUTHOR> </BOOK> … <BOOK> <TITLE edition=”2003" type=”XML"> Strutturare le informazioni nel web </TITLE> <AUTHOR>Laura Papaleo</AUTHOR> <AUTHOR>Franco Tallero</AUTHOR> <AUTHOR>Marco Mesiti</AUTHOR> </BOOK> </BOOKLIST> Un esempio di documento XML (2) ORDERS.xml <?xml version="1.0"?> <Orders> <SalesOrder SONumber="12345"> <Customer CustNumber="543"> <CustName>ABC Industries</CustName> <Street>123 Main St.</Street> <City>Chicago</City> <State>IL</State> <PostCode>60609</PostCode> </Customer> <OrderDate>981215</OrderDate> <Line LineNumber="1"> <Part PartNumber="123"> <Description> Turkey wrench: Stainless steel, one piece construction, lifetime guarantee. </Description> <Price>9.95</Price> </Part> <Quantity>10</Quantity> </Line> </SalesOrder> </Orders> Un semplice esempio (3) LEASE.xml <?xml version="1.0"?> <Lease> <Leasee>ABC Industries </Leasee> agrees to lease the property at <Address> 123, Main St., Chicago, IL </Address> from <Lessor> XYZ Properties </Lessor> for a term of not less than <LeaseTerm TimeUnit=“Months”> 18 </LeaseTerm> at the cost of the <Price Currency=“USD” TimeUnit=“Months”> 1000 </Price> </Lease> Dichiarazione di documento XML Un file XML comincia sempre con una dichiarazione XML Sta ad indicare che il documento è un file XML la versione di XML usata (attualmente sempre 1.0) La dichiarazione XML è del tipo: <?xml version="1.0"?> Dichiarazione di documento XML Oltre all’indicazione della versione può essere inserito: il set di caratteri utilizzato attributo encoding il fatto che l’interpretazione del documento dipende da altri documenti attributo standalone <?xml version="1.0” encoding = “UTF-8” standalone = “no”?> Questi sono i valori di default. E’ possibile non specificarli Dichiarazione della DTD del documento Prima del root element (l’elemento radice) può essere dichiarata la DTD che verrà utilizzata Es: <!DOCTYPE Libro SYSTEM “libro.dtd”> Vedremo in seguito come può essere strutturata tale dichiarazione DTD Document Type Definition Sintassi Di Una DTD DTD - Document Type Definition E’ opzionale, ma è consigliabile la presenza E’ un insieme di regole per definire la struttura di un documento XML Tali regole: stabiliscono gli elementi che possono essere usati stabiliscono gli attributi da inserire negli elementi impongono vincoli sulle relazioni tra gli elementi (fratelli, elemento-sottoelemento,...) Il DTD è un modo per fare un check sulla strutturazione corretta di un documento XML Perché è importante usare i DTD? Sono utili per i programmatori. E’ la definizione del tipo di documento che andranno a processare Utili per definire fogli di stile Utile per creare documenti “corretti”. Il DTD può essere visto come un vincolo sull’informazione da inserire nel documento Utili per creare interfacce dinamiche per i documenti XML DTD - rappresentazione ad albero Un DTD può essere visto come un albero Libro Capitolo + I nodi dell’albero rappresentano: elementi attributi Par + Sezioni I nomi di elementi e attributi possono essere seguiti da caratteri speciali (+,*,?) Gli archi dell’albero permettono di rappresentare la relazione elemento-sottoelemento, elemento-attributo Document Type Definition: Elementi Gli elementi possono essere contenitori o essere vuoti Gli elementi contenitori possono contenere: testo altri elementi (sottoelementi) un mix dei precedenti Nel caso di elementi che contengono sottoelementi, con il DTD si può specificare come i “sottoelementi occorrono” Document Type Definition: occorrenza di un sottoelemento Un sottoelemento potrebbe essere obbligatorio Ad esempio un libro deve avere un titolo, quindi l’elemento libro deve avere un sottoelemento titolo titolo Usando la grammatica della DTD <!ELEMENT libro (… titolo …)> Document Type Definition: Occorrenza di un sottoelemento Un sottoelemento può essere opzionale Ad esempio, un libro può avere un sottotitolo, quindi l’elemento sottotitolo è opzionale per l’elemento libro sottotitolo Usando la grammatica della DTD <!ELEMENT libro (… sottotitolo? …)> Document Type Definition: Occorrenza di un sottoelemento Un sottoelemento può essere ripetibile Ad esempio, un libro ha degli autori, almeno uno Quindi l’elemento libro può avere una lista di elementi autore, comunque almeno uno autore Usando la grammatica della DTD <!ELEMENT libro (… autore+ …)> DTD - occorrenza di un sottoelemento Un sottoelemento può essere ripetibile e opzionale Ad esempio, un libro può avere dei traduttori, oppure no Quindi l’elemento libro può avere una lista di elementi traduttore, ma anche nessuno traduttore Usando la grammatica della DTD <!ELEMENT libro (… traduttore* …)> DTD - Sequenze di sottoelementi Un libro presenta diverse informazioni: gli autori, il titolo, eventualmente i traduttori e così via. L’elemento libro può contenere quindi una sequenza di sottoelementi titolo autore sottotitolo Usando la grammatica della DTD <!ELEMENT libro (titolo, autore*, sottotitolo?, …)> Nota: è rilevante l’ordine DTD - Alternative di sottoelementi Un libro può avere un IBDN oppure un codice ISBN codice Usando la grammatica della DTD <!ELEMENT libro (… ISBN | codice …)> DTD - Riassumendo I costrutti visti possono essere combinati nel modo preferito, al fine di modellare l’informazione <!ELEMENT A (B*, C, D?)> <!ELEMENT A (B | C+)> <!ELEMENT A (B, (C | D+)?, E*)> DTD per una ricetta DTD ricettario.dtd <!ELEMENT ricettario (ricetta)*> <!ELEMENT ricetta (titolo, ingred+, passo+, note?)> <!ATTLIST ricetta numero ID #REQUIRED> <!ELEMENT titolo (#PCDATA)> <!ELEMENT ingred (#PCDATA)> <!ELEMENT passo (#PCDATA)> <!ELEMENT note ANY> <!ATTLIST passo numero ID #REQUIRED> Dichiarare un elemento non vuoto (1/2) <!ELEMENT agenda (contatto*)> <!ELEMENT contatto (nome, indirizzo+, telefono*, email*, foto?)> L'agenda sarà composta da zero o più contatti con: un nome; uno o più (simbolo +) indirizzi; zero o più numeri di telefono; zero o più indirizzi di email; una o nessuna (simbolo ?) fotografia. Dichiarare un elemento non vuoto (2/2) <!ELEMENT nome (#PCDATA)> Il nome è semplicemente una stringa di caratteri, Eventuali entità presenti nella stringa vengono trasformate nei caratteri corrispondenti Dichiarazione di un elemento vuoto <!ELEMENT foto EMPTY> Ad esempio l’oggetto foto potrebbe pensarsi equivalente al tag HTML <IMG> Pertanto non ha un marcatore di chiusura né tantomeno un contenuto Possiede solo degli attributi Dichiarazione di un elemento ANY <!ELEMENT note ANY> Indica che il contenuto dell’elemento può essere arbitrario In altre parole, non viene fissato alcun vincolo sul contenuto dell’elemento Dichiarazione elemento “mixed-content” Abbiamo detto che un elemento può avere un contenuto misto Questo può essere richiesto a livello di DTD La dichiarazione di un elemento a contenuto misto deve seguire le seguenti regole viene dichiarato una alternativa di sottoelementi il primo sottoelemento deve essere #PCDATA L’alternativa di sottoelementi deve essere ripetibile Dichiarazione elemento “mixed-content” Vediamo un esempio: <!ELEMENT emph (#PCDATA|sub|super)*> <!ELEMENT sub (#PCDATA)> <!ELEMENT super (#PCDATA)> <emph> H <sub>2</sub> O è l’acqua </emph> Dichiarazione di attributi <!ATTLIST foto src CDATA #REQUIRED desc CDATA #IMPLIED> src, nome del file bitmap necessario (#REQUIRED) desc, descrizione è opzionale (#IMPLIED) <!ATTLIST telefono tipo (casa | ufficio | cellulare) 'casa'> l’elemento telefono ha un attributo tipo, che indica se il numero è di casa, dell'ufficio o di un cellulare il valore di default è 'casa’ Tipi degli attributi (1/2) CDATA Stringhe di caratteri. 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 Tipi degli attributi (2/2) 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 par. tonde Valori di default per gli attributi #REQUIRED Obbligatorio #IMPLIED Non obbligatorio e non viene assegnato un valore di default "valore" Non è obbligatorio specificare un valore per l'attributo #FIXED "valore" Non è obbligatorio specificare un valore per l'attributo ma se lo specifica, il valore può essere quello prefissato si solo Uso di identificatori e riferimenti <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ATTLIST biblioteca (autori,libri)> autori (autore)*> libri (libro)*> autore (nome,cognome,dataNascita)> autore ident ID #REQUIRED> <!-- … dichiarazione elementi di autore --> <!ELEMENT libro (titolo, scrittoDa, data)> <!ELEMENT scrittoDa (#PCDATA)> <!-- … dichiarazione elementi di libro --> <!ATTLIST scrittoDa autore IDREFS> … Uso di identificatori e riferimenti <biblioteca> <autori> <autore ident=“001”> … </autore> <autore ident=“002”> … </autore> <autore ident=“003”> … </autore> … </autori> <libri> <libro scrittoDa=“001”> … </libro> <libro scrittoDa=“002 003”> … </libro> <libro scrittoDa=“003 001 002”> z … </libro> … </libri> 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)> <!ELEMENT citta (#PCDATA)> <!ELEMENT cap (#PCDATA)> <!ELEMENT provincia (#PCDATA)> <!ELEMENT telefono (#PCDATA)> Dati Parsed Un esempio completo - la DTD … continua <!ATTLIST telefono tipo (casa |ufficio | cellulare)'casa'> Valore predefinito <!ELEMENT email (#PCDATA)> <!ELEMENT foto EMPTY> Elemento vuoto <!ATTLIST foto src CDATA #REQUIRED desc CDATA #IMPLIED> <!ENTITY BO "40100"> Entità <!ENTITY MO "41100"> Dichiarate <!ENTITY RE "42100"> Un esempio completo - XML Agenda.xml <?XML version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE agenda SYSTEM "agenda.dtd"> Radice <agenda> DTD associata <contatto> <nome>Pinco Pallino</nome> <indirizzo> <via>Via Incognita</via> <numero>10</numero> <citta>Bologna</citta> <cap>&BO;</cap> </indirizzo> Richiamo entità della DTD …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 di Pinco Pallino"/> </contatto> </agenda> Elemento vuoto foto Un altro esempio <!DOCTYPE Orders[ <!ELEMENT Orders(SalesOrder)+> <!ELEMENT SalesOrder(Customer,OrderDate,Line*)> <!ELEMENT Customer(CustName,Street,City,State,PostCode,tel*)> <!ELEMENT CustName (#PCDATA)> <!ELEMENT Street (#PCDATA)> <!ELEMENT State (#PCDATA)> <!ELEMENT PostCode (#PCDATA)> <!ELEMENT tel (#PCDATA)> <!ELEMENT OrderDate (#PCDATA)> <!ELEMENT Line (Part,Quantity)> <!ELEMENT Part(Description,Price)> <!ELEMENT Quantity (#PCDATA)> <!ELEMENT Description (#PCDATA)> <!ELEMENT Price (#PCDATA)> <!ATTLIST SalesOrder SONumber CDATA #REQUIRED> <!ATTLIST Customer CustNumer CDATA #REQUIRED> <!ATTLIST Line LineNumber CDATA #IMPLIED> <!ATTLIST Part PartNumber CDATA #REQUIRED> Un altro esempio 2 <!DOCTYPE WorldLawBulletin[ <!ELEMENT WorldLawBulletin (Law*,BluePageReport?)> <!ELEMENT Law (Topic,Summary)> <!ELEMENT Topic (#PCDATA)> <!ELEMENT Summary ANY> <!ELEMENT BluePageReport (Section+)> <!ELEMENT Section (Law+)> <!ATTLIST WorldLawBulletin Date CDATA #REQUIRED> <!ATTLIST Law Id ID #REQUIRED Country CDATA #REQUIRED RelatedLaws IDREFS #IMPLIED> <!ATTLIST Section GeoArea CDATA #REQUIRED> ]> Un altro esempio 2 <WorldLawBulletin Date=“8/8/1999”> <Law Country=“USA” RelatedLaws = “LK75”/> <Topic>Taxation</Topic> <Summary>...</Summary> </Law> <Law Id=“LK75” Country=“Italy”/> <Topic>Import-Export</Topic> <Summary>...</Summary> </Law> <BluePageReport> <Section GeoArea=“Europe”> <Law Country=“Germany”/> <Topic>Guns</Topic> <Summary>...</Summary> </Law>... </Section> <Section GeoArea=“NorthAmerica”> <Law Country=“USA”/> <Topic>Transportation</Topic> <Summary>...</Summary> </Law> ... </Section> </BluePageReport> </WorldLawBulletin> Struttura fisica di un documento XML Le entità XML: Dichiarazione ed utilizzo di Entità Abbiamo visto come organizzare logicamente l’informazione Al fine di razionalizzare, riusare e rendere modulare l’informazione dal punto di vista fisico, vengono introdotte le entità Inoltre, le entità vengono utilizzate per rappresentare dati non XML (ad esempio: dati binari) caratteri non standard abbreviazioni per frasi e markup Generalizzando le entità possono essere viste come delle macro XML: Dichiarazione ed utilizzo di Entità Le entità risultano utili quando l’informazione: è utilizzata in posti diversi e la duplicazione può causare errori e spreco di tempo può essere rappresentata differentemente in sistemi eterogenei è parte di un documento di grandi dimensioni e per ragioni pratiche è meglio spezzarla in più parti è di un formato diverso da quello di XML XML: Definizione di Entità Entità Unità di informazione identificata da un nome Entità documento (document entity) file utilizzato per rappresentare l’intero documento L’entità documento, a differenza delle altre entità, non ha nome L’entità documento può: essere un contenitore di altre entità (entità componenti) contenere direttamente tutto il documento XML: Dichiarazione ed utilizzo di Entità Dichiarare entità all'interno di una DTD valore nome <!ENTITY xml "eXtensible Markup Language"> Ogni qual volta il parser incontra l'entità &xml; questa viene sostituita con la stringa associata. <!ENTITY cap1 SYSTEM ”/book/capitolo1.xml"> Ogni qual volta il parser incontra l'entità &cap1; al suo posto viene inserito il contenuto del file specificato Dichiarazione di entità Vs riferimento ad entità XML: Nome di un’entità Il nome di un’entità deve seguire la seguente grammatica [ L | - | : ]{ L | . | _ | - | : | D }* dove L è un lettera dell’alfabeto e D un digit Es: :myEnt, my.Ent12 Il nome è case-sensitive Es: myEnt è diverso da MyEnt XML: Valore di un’entità Il valore di un’entità è racchiuso tra “ ” oppure ‘ ’ Esempio “World Wide Web” o ‘World Wide Web’ Si usano ‘ ’ quando all’interno si usano “ ” Esempio ‘Egli disse “Arrivederci” e se ne andò’ XML: Entità built-in Ogni processore XML ha un piccolo insieme di entità predefinite Ad esempio: < > & ' " ‘<’ ‘>’ ‘&’ ‘‘’ ‘“’ Queste entità sono usate per non creare problemi al processore XML XML: Entità carattere Una entità carattere viene introdotta per rappresentare un carattere in un certo set di caratteri Un riferimento ad entità carattere ha lo stesso formato di un riferimento ad entità testuale Viene aggiunto un # tra & e il nome dell’entità Es: < è uguale a ‘<’ in ASCII;   = blank_space XML: Entità testuali interne DTD Internal Text Entity Declaration <!ENTITY WWW "World Wide Web"> XML Entity Reference <p>We all use the &WWW;.</p> Logically equivalent to actually appearing <p>We all use the World Wide Web.</p> External Text Entities Mylife.xml DTD… <mylife> Chap1.xml <teen>yada yada</teen> Chap2.xml <adult>… … … … </adult> </mylife> Gli elementi logici possono essere divisi in entità fisiche distinte External Text Entities DTD External Text Entity Declaration <!ENTITY chap1 SYSTEM "http://...chap1.xml"> XML Entity Reference URL <mylife> &chap1; &chap2;</mylife> <mylife> <teen>yada yada</teen> <adult> blah blah</adult> </mylife> Logically equivalent to inlining file contents Entità: Unparsed (& "Binary") DTD <!ENTITY fusion SYSTEM "http://... fusion.ps" NDATA ps> <!attlist fullPaper source ENTITY #REQUIRED> <!NOTATION ps SYSTEM "ghostview.exe"> XML <fullPaper source="fusion"/> XML Entità: Dichiarazione di notazioni <!NOTATION GIF SYSTEM "GIF"> Quando ci si riferisce a dati binari esterni, occorre dichiarare una notation che identifichi il tipo di dati a cui ci si riferisce L'applicazione che riceve l'informazione di notazione provvederà ad utilizzarla per interpretare correttamente l'entità esterna XML Entità: Dichiarazione Entità Parametriche Vengono espanse e interpretate nella DTD e non espanse e passate all’applicazione Presenti solo nella DTD con % davanti <!ENTITY % indr_corto citta)>’> ‘<!ELEMENT indirizzo (via, <!ENTITY % indr_lungo ‘<!ELEMENT indirizzo (via, numero, citta, cap, provincia)>’> poi utilizzo... <!ELEMENT contatto (nome, cognome,%indr_corto;)> … XML Entità: Esempio di entità parametriche Common.dtd <!ENTITY % alarmStatusType "UnderRepair | Critical | … "> <!ENTITY % availabilityStatusType "InTest | Failed | PowerOff | OffLine | … "> … … <!ENTITY % statusAttributes "alarmStatus (%alarmStatusType;) #REQUIRED availabilityStatus (%availabilityStatusType;) #REQUIRED controlStatus (%controlStatusType;) #REQUIRED standByStatus (%standByStatusType;) #REQUIRED unknownStatus (%boolean;) #REQUIRED"> Character Set Set di caratteri I markup di XML e il contenuto dei documenti possono essere riconosciuti solo quando i caratteri utilizzati conformano a uno schema di codifica standard Gli standard più importanti: ASCII ISO 8859 UNICODE ISO 10646 Documento XML: I Caratteri Un documento XML è una sequenza di caratteri (characters) che descrivono: Contenuto del documento Tags Le macchine “non capiscono” i caratteri Per memorizzare i caratteri si usano codici T 84 Character Set Character set insieme di corrispondenze numero-carattere Font insieme di corrispondenze numero-“formato carattere” Ci possono essere dei problemi quando si passa da una macchina all’altra perché cambia il legame numero-carattere ASCII: American Standard Code for Information Interchange Standard per un set di caratteri Assegna un significato comune per i caratteri utilizzati Esempio in ASCII il numero 84 rappresenta la ‘T’ ASCII definisce un valore per solo 127 caratteri (rappresentazione a 7-bit) American Standard Code for Information Interchange L’ottavo bit viene lasciato come check-bit ASCII è uno standard ISO/IEC 646 Problema: Come faccio a rappresentare altri caratteri, oltre ai 127? Extended ASCII Nei sistemi più moderni non è necessario un bit di controllo rappresentazione a 8 bit (255 caratteri) Nuovo problema non c’era accordo su quali caratteri rappresentare con i “nuovi” 128 numeri Esempio: Apple: MS-DOS: è – 142 è – 130 Extended ASCII Questo problema è stato affrontato da ISO 8859 che definisce (tra gli altri) un character set standard per l’alfabeto latino (chiamato 8859/1) Questo standard è utilizzato da Web browsers, Microsoft Windows, Sun OS UNIX Compatibile con ISO 646. L’ottavo bit è 0 per i primi 127 caratteri Extended ASCII ‘/1’ identifica solo una versione di 8859 Ci sono però altre varianti per coprire i requisiti di altre lingue Esempio: ISO 8859/6 ASCII + Arabic ISO 8859/7 ASCII + Greco moderno Problema: Si riescono a rappresentare ancora “pochi caratteri” UNICODE e ISO/IEC 10646 Per affrontare i problemi dei precedenti standard si è pensato di usare più di un byte per codificare ogni carattere Nascono così due nuovi standard: UNICODE ISO/IEC 10646 Standard UNICODE: Caratteristiche Versione attuale 2.1 Primo tentativo ad usare 2 byte per rappresentare caratteri (65.535 caratteri) ...ma continua ad avere problemi per rappresentare il cinese viene introdotto ISO/IEC 10646: usa fino a 4 byte (oltre 2 milioni di caratteri) XML ha adottato lo standard ISO 10646 come formato di codifica dei caratteri ISO/IEC 10646 ISO 10646 è formato da un insieme di schemi di codifica: UCS (Universal Character Set) BMP (Basic Multilanguage Plane) Schema fisso UTF (UCS Trasformation Format) UTF-8 UTF-16 Schema variabile Dichiarazione set di caratteri in XML Nella dichiarazione di “documento XML” <?xml ... encoding=“UTF-8” ... ?> Questo è il formato di default (questo attributo non è obbligatorio) Curiosità si assume che il formato di un documento è XML se i primi 4 byte del file sono ‘3C 3F 78 6D’ (corrispondono a ‘<?xm’) Dichiarazione set di caratteri in XML Si richiede la dichiarazione della codifica del documento per gli standard diversi da UTF-8 e UTF-16 Esempio Per dichiarare ISO 8859 occorre: <?xml ... encoding=“ISO-8859-1” ... ?> Riferimenti per gli standard di codifica ISO (International Organization for Standardization). ISO/IEC 10646-1993 (E). Information technology -- Universal Multiple-Octet Coded Character Set (UCS) -- Part 1: Architecture and Basic Multilingual Plane. [Geneva]: International Organization for Standardization, 1993 (plus amendments AM 1 through AM 7). ISO/IEC 10646-2000 ISO (International Organization for Standardization). ISO/IEC 10646-1:2000. Information technology -- Universal Multiple-Octet Coded Character Set (UCS) -- Part 1: Architecture and Basic Multilingual Plane. [Geneva]: International Organization for Standardization, 2000. Unicode The Unicode Consortium. The Unicode Standard, Version 2.0. Reading, Mass.: Addison-Wesley Developers Press, 1996. Unicode3 The Unicode Consortium. The Unicode Standard, Version 3.0. Reading, Mass.: Addison-Wesley Developers Press, 2000. ISBN 0-201-61633-5. Documenti well-formed e documenti validi Documento XML ben formato (1/2) Presenza “elemento radice” cioè un elemento che contiene tutti gli elementi del documento Bilanciamento dei marcatori Ad ogni marcatore di apertura deve corrisponderne uno di chiusura a meno di un elemento vuoto --> in questo caso <tagvuoto/> Valori degli attributi tra virgolette <img src="image.gif" width="50" height="40" border="0"/> Documento XML ben formato (2/2) Uso di entità dichiarate L'utilizzo di entità è consentito solo previa dichiarazione delle stesse all'inizio del documento XML o nella DTD Al posto dei caratteri speciali &, <, >, ', ", devono essere usate le entità interne predefinite & < > ' " Tutti gli altri caratteri speciali devono essere dichiarati prima di poter essere usati Un esempio SI! <?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> Un esempio NO! <?XML version="1.0"?> <!DOCTYPE ricettario SYSTEM “ricettario.dtd”> Entità speciale <ricettario> non dichiarata <ricetta numero="1"> <titolo>... <ingred>200 &g; di ... </ingred> <ingred>...</ingred> Tag non <passo numero=1>...</passo> chiuso <passo numero=2>...</passo> </ricetta> </ricettario> Valori non tra virgolette Documento XML Valido Un documento XML è valido se E’ ben formato Rispetta una struttura descritta in una Document Type Definition I documenti XML devono essere validi nel caso di strutturazione di documenti di una certa importanza Esempio: in una azienda dove è fondamentale mantenere una stessa struttura Document Type Definitions (DTDs) Quando un documento XML viene processato, esso viene confrontato con la DTD associata (se ce ne è una) Questo confronto è un processo che viene definito validazione e viene attuato dal parser Un parser è un software che fa un check per assicurarsi che il documento XML segua una particolare sintassi Parser per XML Un non-validating parser controlla che un documento segua le regole di sintassi XML costruisce un albero dai TAG del documento Un validating parser controlla la sintassi corretta del documento costruisce l'albero dei tag confronta l'uso dei tag nel documento per essere conforme alle regole della DTD la DTD è necessaria solo nel caso in cui si voglia creare un documento XML valido Namespace XML: Namespace (Raccom. W3C 1999) Attraverso i Namespace è possibile dichiarare un insieme di nomi il cui significato non è ambiguo, cioè tutti sono d’accordo sul loro significato i Namespace permettono di distinguere 2 elementi con stesso nome, ma con significato diverso Un Namespace XML è una collezione di nomi identificati da un URL vengono usati nel doc. XML come nomi di elementi e di attributi XML: Namespace Identificare i namespaces che verranno usati Identificare dove i tag che hanno bisogno di namespace sono posizionati Il tag lo si fa precedere dal namespace relativo Il nome di un elemento/attributo è composto da 2 parti: prefix:name Dichiarare e usare i Namespaces A livello di documento <document xmlns:name_sp=“fixed_URL”> <name_sp:tag_nm> content </tag_nm> ambiguità <Info> <person> <name>Rosalie Panelli</name> <address>33 Terry Dr.</address> </person> <webSite> <name>XML Italia</name> <address>http://www.xml.it</address> </webSite> </Info> Dichiarare e usare i Namespaces Soluzione all’esempio <Info> <person xmlns:person=“http://namespaces.xml.it/person”> <person:name>Rosalie Panelli</person:name> <person:address>33 Terry Dr.</person:address> </person> <webSite xmlns:webSite=“http://namespaces.xml.it/webSite”> <webSite:name> XML Italia </webSite:name> <webSite:address> http://www.xml.it </webSite:address> </webSite> </Info> Dichiarare e usare i Namespaces all’interno di DTD Il namspace può essere dichiarato a livello di DTD Tutti i documenti che conformano con il DTD usano tale namespace <!ELEMENT person (person:name, person:address)> <!ATTLIST person xmlns:person CDATA #FIXED “http://namespaces.xml.it/person”> <!ELEMENT person:name (#PCDATA)> <!ELEMENT person:address (#PCDATA)>