# XML/Relazione uno-molti

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
* Scoprire le diverse tecniche di implementazione delle relazioni uno-a-molti in XML
* Creare tipi di dati personalizzati in uno schema XML
* Creare elementi vuoti con attributi in un documento XML
* Definire un layout di presentazione per un documento XML utilizzando una tabella con diversi colori di sfondo e caratteri differenti, e visualizzare le immagini in un foglio di stile XML

## Introduzione

In una relazione uno-a-molti, un oggetto può fare riferimento a più istanze di un altro oggetto. Un modello è mappato in uno schema in cui ogni entità del modello di dati diventa un tipo di elemento complesso. Ogni attributo del modello di dati diventa un semplice tipo di elemento e la relazione uno-a-molti viene registrata come una sequenza.
Nel capitolo precedente, abbiamo introdotto un semplice schema XML, un documento XML e un foglio di stile XML per un modello di dati a entità singola. Ora includiamo più funzionalità di ciascuno degli aspetti chiave di XML.

### Implementazione di una relazione uno-a-molti

Esistono tre diverse tecniche per implementare una relazione uno-a-molti:
Relazione di contenimento: è definita una struttura in cui un elemento è contenuto in un altro. L'elemento "contenuto" cessa di esistere quando viene rimosso l'elemento "contenitore". Ad esempio, se una città ha molti hotel, gli hotel sono "contenuti" nella città.
Rapporti interni a un documento: nel caso in cui hai una città con molti hotel, un hotel avrà una relazione "di posizione" con una città. Un identificativo della città viene utilizzato come riferimento sull'elemento dell'hotel. Pertanto, piuttosto che gli hotel che sono contenuti nella città, ora fanno semplicemente riferimento all'id della città tramite l'attributo cityRef. Questo è molto simile a una chiave esterna in un database relazionale.
Relazioni tra documenti: la relazione tra documenti è molto simile alla relazione interna a un documento. Utilizza inoltre gli attributi id e idRef per assegnare un attributo a un attributo padre. La differenza è che la relazione tra documenti viene utilizzata quando le tabelle, come le tabelle delle città e degli hotel, potrebbero vivere in diversi filesystem o tablespace.
Lista di controllo per decidere quale tecnica usare: :
| Tecnica | Trasferimento dati | Flessibilità | Facilità d'uso |
| Contenimento | Eccellente | Discreto | Eccellente |
| Interno a un documento | Buono | Buono | Buono |
| Tra documenti | Discreto | Eccellente | Discreto |

## Schema XML

Alcuni dei tipi di dati incorporati per uno schema XML sono stati introdotti nel capitolo precedente, ma ci sono anche altri che sono molto utili, come anyURI, date, time, year e month. Oltre ai tipi di dati integrati, il progettista dello schema può definire un tipo di dati personalizzato per accettare input di dati specifici. Come abbiamo imparato, i dati sono definiti in documenti XML utilizzando tag di markup definiti in uno schema XML. Tuttavia, alcuni elementi potrebbero non avere valori. Un tag elemento vuoto può essere utilizzato per affrontare questa situazione. Un tag elemento vuoto (e qualsiasi tag di markup personalizzato) può contenere attributi che aggiungono ulteriori informazioni sul tag senza aggiungere testo ulteriore all'elemento. Un esempio verrà mostrato nel capitolo, utilizzando gli attributi in un tag elemento vuoto.

### Elementi vuoti con attributi nel documento XML

Gli elementi possono avere diversi tipi di contenuto a seconda di come ciascun elemento è definito nello schema XML. I diversi tipi sono element content, mixed content, simple content e empty content. Un elemento XML è costituito da tutto, dal tag di apertura dell'elemento a quello di chiusura.
* Un elemento che contiene altri elementi è l'elemento radice - tutto ciò che si trova tra i tag di apertura e di chiusura è composto solo da elementi.
| Esempio: | <tourGuide> |
| | </tourGuide> |
* Un elemento di contenuto misto ha testo e altri elementi tra i suoi tag di apertura e di chiusura.
* <ristorante>Il mio ristorante preferito è
* <restaurantName>Ristorante italiano di Provino</restaurantName>
* </ristorante>
* Un semplice elemento di contenuto contiene solo testo tra i suoi tag di apertura e di chiusura.
| Esempio: | <restaurantName>Ristorante italiano di Provino</restaurantName> |
* Un elemento di contenuto vuoto, cioè un elemento vuoto, non contiene nulla tra i suoi tag di apertura e di chiusura.
| Esempio: | <hotelPicture filename="pan_pacific.jpg" size="80" |
| | value="Immagine di Pan Pacific" /> |
Un elemento vuoto è utile quando non è necessario specificarne il contenuto o quando le informazioni che descrivono l'elemento sono corrette. Due esempi illustrano questo concetto:
* un elemento immagine che fa riferimento alla fonte di un'immagine con i suoi attributi, ma non ha bisogno di specificare il contenuto del testo;
* il nome del proprietario è fisso per un'azienda, quindi può specificare le informazioni correlate all'interno del tag proprietario utilizzando gli attributi.
Un attributo è una meta-informazione, cioè un'informazione che descrive il contenuto dell'elemento.

### Tipi di dati dello schema XML

Alcuni dei tipi di dati comunemente usati, come stringhe, decimali, interi e booleani, sono stati introdotti nel capitolo 2. I seguenti sono alcuni altri tipi di dati utili.
Altri tipi di dati :
| Tipo | Formato | Esempio | Commento |
| anno | AAAA | 1999 | |
| month | YYYY-MM | 1999-03 | Il tipo di mese viene utilizzato quando il giorno è irrilevante per l'elemento dati |
| time | hh:mm:ss.sss con indicatore facoltativo del fuso orario | 20:14:05 | Z per UTC o uno di -hh:mm o +hh:mm per indicare la differenza rispetto a UTC. Questo tipo di orario viene utilizzato quando desideri che il contenuto rappresenti una determinata ora del giorno che ricorre ogni giorno, ad esempio alle 16:15. |
| data | AAAA-MM-DD | 1999/3/14 | |
| anyURI | Il nome di dominio specificato che inizia con http: // | http://www.panpacific.com | |

### Altri tipi di dati

Oltre ai tipi di dati integrati, è possibile creare tipi di dati personalizzati in base alle richieste. Un tipo di dati personalizzato può essere di tipo semplice o complesso. Per semplicità, creiamo un tipo di dati personalizzato di tipo semplice, il che significa che l'elemento non contiene altri elementi o attributi, ma contiene solo testo. La creazione di un tipo di dato semplice personalizzato inizia dall'utilizzo di un tipo semplice incorporato e applicandolo con restrizioni per limitare i valori accettabili del tag. Questo tipo di dato può essere con o senza nome. Se il tipo di dato deve essere utilizzato una sola volta, allora ha senso non nominarlo; quindi, quel tipo di dato verrà utilizzato solo nel punto in cui è definito. Poiché un tipo personalizzato denominato può essere referenziato (con il suo nome), quel tipo di dato può essere utilizzato ovunque sia necessario.
Un pattern può essere usato per specificare esattamente come dovrebbe apparire il contenuto dell'elemento. Ad esempio, si potrebbe voler specificare il formato di un numero di telefono, un codice postale o un codice prodotto. Avendo uno schema definito per determinati elementi, i dati scambiati saranno uniformi e i valori saranno coerenti se memorizzati in un database. Un modo utile per impostare i modelli è attraverso Regex, che sarà affrontato nei capitoli successivi.

### Esempi di schemi

Di seguito è riportato uno schema che estende lo schema introdotto nel capitolo precedente per includere una relazione uno-a-molti tra città e hotel con due esempi di tipi di dati personalizzati.
Importante: questo è un esempio continuo, quindi un nuovo codice viene aggiunto all'esempio dell'ultimo capitolo!

#### Esempio tra documenti

Fa riferimento al Capitolo 2: Una singola entità per le fasi di utilizzo di NetBeans per creare lo schema XML sopra.

## Documento XML
### Attributi

* La struttura di denominazione valida degli elementi si applica anche ai nomi degli attributi
* In un dato elemento, tutti i nomi degli attributi devono essere unici
* Un attributo non può contenere il simbolo '<' La stringa di caratteri '&lt;' può essere usata per rappresentarla
* Ogni attributo deve avere un nome e un valore (ad esempio <hotelPicture filename="pan_pacific.jpg" />, filename è il nome e pan_pacific.jpg è il valore)
* Se il valore assegnato contiene una stringa con virgolette, il tipo di virgolette deve differire da quello utilizzato per racchiudere l'intero valore (ad esempio, se le virgolette doppie vengono utilizzate per racchiudere l'intero valore, utilizzare le virgolette singole per la stringa: <name familiar="'Jack'">John Smith</name>)
Si veda il Capitolo 2 - Una singola entità per le fasi di utilizzo di NetBeans per creare il documento XML sopra.