# XML/Strutture dati di base

XML
Copertina Tutti i moduli · Sviluppo
PrefazioneXML/Prefazione
* IntroduzioneXML/Introduzione
* Entità singoleXML/Entità singole
* Strutture dati di baseXML/Strutture dati di base
* Relazione uno-moltiXML/Relazione uno-molti
* Relazione uno-unoXML/Relazione uno-uno
* Relazione molti-moltiXML/Relazione molti-molti
* Relazioni ricorsiveXML/Relazioni ricorsive
* Schemi di datiXML/Schemi di dati
* Document Type Definition (DTD)XML/DTD
* XHTMLXML/XHTML
* XPathXML/XPath
* XLinkXML/XLink
* CSSXML/CSS
* XSLT e fogli di stileXML/XSLT e fogli di stile
* CocoonXML/Cocoon
* Parsing di file XMLXML/Parsing di file XML
* XULXML/XUL
* Asynchronous JavaScript and XML (AJAX)XML/AJAX
* Web serviceXML/Web service
* XMLHttpRequestXML/XMLHttpRequest
* Database e XMLXML/Database e XML
* SVGXML/SVG
* VoiceXMLXML/VoiceXML
* DocBookXML/DocBook
* SMILXML/SMIL
* XBRLXML/XBRL
* WDDX
* RPCXML/RPC
* RDFXML/RDF - Resource Description Framework
* RSSXML/RSS
* NamespaceXML/Namespace
* Gestire XML con MySQL
* XML EncryptionXML/XML Encryption
* XQueryXML/XQuery
* XML e JDBC
* XFormsXML/XForms
* OpenOffice.org e l'OpenDocument FormatXML/OpenOffice.org e l'OpenDocument Format
* KML e Google EarthXML/KML
* Lo standard ACORD - XML nel settore delle assicurazioniXML/ACORD
Modifica il sommario
Obiettivi di apprendimento
* introdurre il concetto e gli usi delle strutture dati di base
* descrivere in che modo XML può essere utilizzato per rappresentare strutture di dati di base
* elencare considerazioni tecniche comuni

## Introduzione

Studiando i quattro problemi centrali nella gestione dei dati (acquisizione, archiviazione, recupero e scambio), chi usa XML incontra modelli fondamentali di struttura ricorrenti che si applicano a tutti i tipi di dati nelle fasi di archiviazione e scambio. Questi pattern ricorrono in modo coerente perché il loro uso va oltre i contesti particolari in cui vengono elaborati i dati sottostanti. Chiamiamo questi modelli "strutture dati" (o datatypes).
In questa sezione vedremo alcune delle più fondamentali "strutture dati di base" e spiegheremo perché sono utili, oltre a come lavorare con loro usando XML.
Iniziamo la nostra introduzione con un semplice esempio. Considera una normale lista della spesa di generi alimentari per una famiglia singola.
Esempio introduttivo di lista della spesa:
Quando analizziamo gli aspetti delle informazioni contenute in questa lista della spesa, possiamo fare alcune generalizzazioni:
* Portabilità: la lista della spesa può essere rappresentata e trasferita facilmente. Se necessario, potrebbe essere memorizzata in un database ed elaborata da un software progettato appositamente, ma potrebbe anche essere facilmente scritta su un pezzo di carta;
* Comprensibilità: la lista della spesa è prontamente compresa dal pubblico previsto (in questo caso, la persona che ha scritto la lista) e quindi non ha bisogno di ulteriori informazioni o strutture per essere immediatamente utilizzabile;
* Adattabilità: se sono necessari alcuni cambiamenti (come aggiunte o rimozioni alla lista) c'è una metodologia esistente e ben nota per farlo (per esempio, nel caso di un elenco scritto a mano, semplicemente annotare nuove voci o cancellare le voci indesiderate).

### Il concetto fondamentale delle strutture dati di base

Tenendo presente il precedente esempio, ora possiamo introdurre il concetto fondamentale di "struttura dati di base".
Definizione

## Strutture dati di base definite

Ora che abbiamo introdotto il concetto di strutture dati, possiamo iniziare con alcune definizioni concrete e quindi rivedere quelle definizioni nel contesto del nostro esempio della lista della spesa.

### Panoramica delle strutture dati "core"

I seguenti termini definiscono alcune strutture di dati "core" che usiamo in questo capitolo. Questa lista è ordinata per complessità crescente:
* SimpleBoolean: qualsiasi valore che può essere espresso come "True" o "False".
* SimpleString: una sequenza contigua di caratteri, compresi caratteri alfanumerici e non alfanumerici.
* SimpleSequence: un'enumerazione di elementi generalmente accessibili mediante indicizzazione numerica.
* Nome-valore coppia: un nome singolo arbitrario collegato a un valore singolare.
* SimpleDictionary: un'enumerazione di elementi generalmente accessibili mediante indicizzazione alfanumerica.
* SimpleTable: una disposizione ordinata di colonne e righe. Un SimpleTable può essere classificato come una struttura di dati "compositi" (ad es. SimpleSequence in cui ogni elemento della sequenza è un singolo SimpleDictionary).
Un punto importante da ricordare nello studio di queste strutture dati "fondamentali" è che sono "elementari" e "complementari". Cioè le strutture centrali, se utilizzate in combinazione, possono formare strutture più complesse. Una volta che il lettore capirà questo fatto, diventerà evidente che non ci sono applicazioni o specifiche di dati che non possono essere interamente descritte in XML usando nient'altro che queste strutture di dati "core".
Una volta comprese le strutture di dati "core", possiamo usarle in combinazione per rappresentare qualsiasi tipo di informazione strutturata.
Riprendiamo ora l'"Esempio introduttivo di lista della spesa". Quando lo confrontiamo con le strutture di dati "core" che abbiamo appena definito, possiamo fare alcune osservazioni abbastanza semplici:
* l'intera lista della spesa non può essere rappresentata utilizzando una struttura dati SimpleBoolean, perché le informazioni sono più complesse di "True" o "False";
* l'intera lista della spesa può essere rappresentata utilizzando una SimpleString;
* potrebbero esserci motivi per cui non vorremmo utilizzare una SimpleString per rappresentare l'intera lista della spesa. Ad esempio, potremmo voler trasferire l'elenco in un database o in un'altra applicazione software e quindi essere in grado di ordinare, interrogare, duplicare o altrimenti elaborare "singoli articoli" nell'elenco. Trattare l'intero elenco come SimpleString complicherebbe pertanto i nostri requisiti per l'elaborazione.

### SimpleString

Diversi modi per rappresentare una SimpleString in XML:

### SimpleSequence

Diversi modi per rappresentare SimpleSequence in XML:

### SimpleTable
#### Esempi side-by-side

SimpleTable (XML_Elem):
SimpleTable (XML_Attr):
SimpleTable (XML_Mixed):

## Strutture dati di base in programmazione

Per illustrare ulteriormente come le strutture di dati di base si applicano in molti contesti diversi, alcune delle strutture di dati di base enumerate in precedenza vengono esaminate e confrontate qui nel contesto della programmazione per computer.
Per la prima parte del confronto, esaminiamo la terminologia generica con riferimento a quella utilizzata comunemente nei linguaggi di programmazione:
* SimpleBoolean: è comunemente chiamato booleano e può solitamente assumere i valori true o false, 0 o 1, o altri valori, a seconda della lingua.
* SimpleString: comunemente chiamato string o stringBuffer.
* SimpleSequence: le variabili indicizzate attraverso numeri in programmazione sono comunemente rappresentate con un array.
* Coppia nome-valore (spiegato più in dettaglio di seguito)
* SimpleDictionary: questi sono comunemente rappresentati con un dizionario o un array associativo.
* SimpleTable (spiegato nel dettaglio di seguito)

## Considerazioni tecniche

Ora che abbiamo introdotto e discusso esempi specifici delle strutture dati di base, ci sono alcune considerazioni tecniche che si applicano a tutte le strutture di dati, e sono particolarmente importanti per chi è responsabile dell'implementazione e della progettazione di schemi XML, per gestire scenari di implementazione specifici.
* La terminologia esatta dipende dal contesto: sebbene le strutture "base" qui descritte si applichino a molti scenari diversi, i termini usati per descriverli possono sovrapporsi o entrare in conflitto. Ad esempio, il termine "SimpleSequence" usato qui coincide strettamente con quello che viene chiamato "array" in molti linguaggi di programmazione. Allo stesso modo, il termine "SimpleDictionary" è una scorciatoia per ciò che alcuni linguaggi di programmazione chiamano "array associativo". Sebbene questa stretta correlazione sia intenzionale, bisogna sempre ricordare che le sfumature specifiche di un'applicazione o di un linguaggio di programmazione richiedono un'attenzione supplementare. A volte sorgono piccoli conflitti o discrepanze quando si guarda nei dettagli per una specifica struttura di dati in un dato progetto o una data tecnologia.
* Le strutture di base sono concetti flessibili: le strutture possono essere definite in modo intercambiabile e alcune strutture possono essere applicate in modo ricorsivo. Ad esempio, si potrebbe facilmente definire una SimpleSequence usando una SimpleString insieme ad alcuni assunti di base (ad esempio, SimpleSequence è una stringa di caratteri alfanumerici in cui ogni elemento della sequenza è separato da uno o più caratteri di spazi vuoti: "uova pane burro latte").
* Le strutture astratte tendono a nascondere dettagli complicati: ad esempio, il termine "SimpleString" descrive la nozione astratta di una sequenza di caratteri (es. "0-596-00327-7" ). La nozione astratta è abbastanza intuitiva e semplice. Tuttavia, la notazione precisa usata per "implementare" quella nozione astratta e rappresentarla nel codice di lavoro reale è completamente diversa. Diversi linguaggi di programmazione e diversi ambienti possono utilizzare convenzioni diverse per rappresentare la stessa "stringa". A causa di questa variabilità, si può anche dire che la nozione astratta di "SimpleString" in XML è soggetta a rappresentazioni differenti, in base alle esigenze di ogni dato progetto.

## Note

* ↑ Una nota importante: i termini di base qui usati sono generalizzazioni. Sebbene possano coincidere con i termini utilizzati in software, linguaggi di programmazione o applicazioni specifiche, questi non sono intesi come definizioni tecnicamente precise. I concetti qui descritti sono presentati per aiutare a enfatizzare il principio dell'interoperabilità in XML.