Guida XML: Il Documento XML
http://www.swprog.com/guide/xml-intro.php
23 Luglio 2008 XML




Introduzione

XML (eXtensible Markup Language) è un linguaggio di marcatura. È stato sviluppato a partire da SGML (Standard Generalized Markup Language) nel 1996, ed è diventato una raccomandazione del W3C nel febbraio del 1998 (XML 1.0). Nel corso degli anni vi sono state alcune revisioni, l'ultima delle quali, la quarta, è datata 16 Agosto 2006.
Nel febbraio del 2004 la versione successiva (XML 1.1) è diventata una raccomandazione del W3C. Anche per questa versione vi sono state delle revisioni, l'ultima delle quali, la seconda, è datata 16 Agosto 2006.

A differenza dell'HTML, che ha un insieme di tag (markup o marche o etichette) prefissato, XML consente di definire le tag che si vogliono utilizzare in ogni singolo documento XML.
Ogni documento XML ha associato un DTD (Document Type Definition) che indica la struttura del documento, le tag che possono essere utilizzate in quel documento, gli attributi, eccetera. 

La struttura

Un documento XML è costituito da un prologo e da una istanza di documento. Nel prologo, opzionale, sono presenti dichiarazioni xml e il dtd. L'istanza di documento è costituita da tag, da testo libero e da riferimenti alle entità.

Figura 1.
Il prologo inizia con questa dichiarazione

  1. <?xml version="1.0" ?>

in cui viene indicata la versione di XML. Eventualmente è possibile specificare la codifica

  1. <?xml version="1.0" encoding="ISO-8859-1" ?>

Può poi essere presente l'indicazione del file xsl (eXtensible Stylesheet Language) che sarà utilizzato per la visualizzazione del documento XML.

  1. <?xml-stylesheet href="biblio.xsl" type="text/xsl" ?>

In questo esempio per visualizzare il documento XML si utilizzerà il foglio di stile biblio.xsl.

Documenti ben formati

Un documento è detto ben formato (well formed) se rispetta le specifiche di XML
  • Il documento è costituito da elementi correttamente annidati
  • Ogni elemento deve avere le etichette di apertura e di chiusura
  • Esiste un unico elemento radice
  • XML è case sensitive. Per cui i tag di apertura e di chiusura devono coincidere anche per questo aspetto.
  • I valori degli attributi devono essere racchiusi tra apici (') o doppi apici(").
  • Una tag non può iniziale con "xml". Inoltre non possono essere presenti i caratteri normalmente utilizzati nelle etichette, come "<" o "&", nei valori di attributo.
Esempio
Il seguente è un esempio di documento ben formato

  1. <biblio>
  2. <articolo>
  3. <campo1>
  4. value
  5. </campo1>
  6. <campo2>
  7. value
  8. </campo2>
  9. </articolo>
  10. </biblio>

Quelli che seguono invece sono esempi di documenti non ben formati

  1. <biblio>
  2. <articolo>
  3. <campo1>
  4. value
  5. </campo1>
  6. <campo2>
  7. value
  8. </articolo>
  9. </biblio>

manca il tag di chiusura </campo2>

  1. <biblio>
  2. <articolo>
  3. <campo3>
  4. <campo4>
  5. value
  6. </campo3>
  7. </campo4>
  8. </articolo>
  9. </biblio>

Le tag non sono correttamente annidate. La tag di chiusura </campo3> è posizionata dopo la tag di apertura <campo4>.

  1. <biblio>
  2. <articolo>
  3. <caMpo1>
  4. value
  5. </campo1>
  6. <campo2>
  7. value
  8. </CAMPO2>
  9. </articolo>
  10. </biblio>

La tag di apertura <caMpo1> non coincide con la tag di chiusura </campo1>. La tag di apertura <campo2> non coincide con la tag di chiusura </CAMPO2>.

  1. <biblio>
  2. <articolo>
  3. <campo1
  4. attributo1='value'>
  5. </campo1>
  6. <campo2
  7. attributo2=value>
  8. </campo2>
  9. </articolo>
  10. </biblio>

Il valore dell'attributo attributo2 non è compreso tra apici (') o doppi apici (").

  1. <biblio>
  2. <articolo>
  3. <campo1>
  4. value
  5. </campo1>
  6. <campo2>
  7. value
  8. </campo2>
  9. </articolo>
  10. </biblio>
  11. <biblio1>
  12. <articolo>
  13. <campo1>
  14. value
  15. </campo1>
  16. <campo2>
  17. value
  18. </campo2>
  19. </articolo>
  20. </biblio1>

Ci sono due elementi radice

Vi sono dei siti che consentono di verificare se un documento XML è ben formato o è valido, tra questi validator.w3.org e validome.org. È anche possibile verificare se un documento XML è ben formato o è valido sia in java che in c++.

Documenti validi

Un documento è valido se è conforme con il dtd. Ovvero se la struttura del documento rispetta la struttura imposta dal dtd.

Esempio
Il seguente è un esempio di documento valido

  1. <?xml version="1.0"?>
  2. <!DOCTYPE biblio [
  3. <!ELEMENT biblio (article)+>
  4.  
  5. <!ELEMENT article (#PCDATA)>
  6. <!ATTLIST article
  7. title    CDATA  #REQUIRED
  8. year  CDATA  #REQUIRED>
  9. ]>
  10.  
  11. <biblio>
  12. <article
  13. title="Il MultiThreading in C in ambiente Windows"
  14. year="2008">
  15. </article>
  16. <article
  17. title="JDBC (Java DataBase Connectivity)"
  18. year="2007">
  19. </article>
  20. </biblio>

Quelli che seguono sono esempi di documenti non validi

  1. <?xml version="1.0"?>
  2. <!DOCTYPE biblio [
  3. <!ELEMENT biblio (article)>
  4.  
  5. <!ELEMENT article (#PCDATA)>
  6. <!ATTLIST article
  7. title    CDATA  #REQUIRED
  8. year  CDATA  #REQUIRED>
  9. ]>
  10.  
  11. <biblio>
  12. <article
  13. title="Il MultiThreading in C in ambiente Windows"
  14. year="2008">
  15. </article>
  16. <article
  17. title="JDBC (Java DataBase Connectivity)"
  18. year="2007">
  19. </article>
  20. </biblio>

Nel dtd è previsto un solo elemento article, mentre nell'istanza di documento ve ne sono due.

  1. <?xml version="1.0"?>
  2. <!DOCTYPE biblio [
  3. <!ELEMENT biblio (article)+>
  4.  
  5. <!ELEMENT article (#PCDATA)>
  6. <!ATTLIST article
  7. title    CDATA  #REQUIRED
  8. year  CDATA  #REQUIRED>
  9. ]>
  10.  
  11. <biblio>
  12. <article
  13. title="Il MultiThreading in C in ambiente Windows"
  14. argomento="Programmazione Concorrente"
  15. year="2008">
  16. </article>
  17. <article
  18. title="JDBC (Java DataBase Connectivity)"
  19. argomento="Database"
  20. year="2007">
  21. </article>
  22. </biblio>

L'attributo argomento dell'elemento article non è definito nel dtd.

  1. <?xml version="1.0"?>
  2. <!DOCTYPE biblio [
  3. <!ELEMENT biblio (article)+>
  4.  
  5. <!ELEMENT article (#PCDATA)>
  6. <!ATTLIST article
  7. title    CDATA  #REQUIRED
  8. year  CDATA  #REQUIRED>
  9. ]>
  10.  
  11. <biblio>
  12. </biblio>

L'elemento biblio non può essere vuoto, secondo il dtd vi deve essere almeno un elemento article.