# XML/Relazioni ricorsive

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
* Comprendere il concetto di relazione ricorsiva
* Creare uno schema per una relazione ricorsiva uno-a-uno
* Creare uno schema per una relazione ricorsiva uno-a-molti
* Creare uno schema per una relazione ricorsiva molti-a-molti
* Definire un identificatore univoco in uno schema
* Creare una relazione con chiave primaria/chiave esterna
Le relazioni ricorsive sono un concetto interessante e più complesso rispetto alle relazioni che hai visto nei capitoli precedenti. Una relazione ricorsiva si verifica quando esiste una relazione tra un'entità e se stessa. Ad esempio, una relazione ricorsiva uno-a-molti si verifica quando un dipendente è il responsabile di altri dipendenti. L'entità dipendente è correlata a se stessa e vi è una relazione uno-a-molti tra un dipendente (il manager) e molti altri dipendenti (le persone che fanno riferimento al manager). A causa della natura più complessa di queste relazioni, avremo bisogno di metodi leggermente più complessi per mapparli in uno schema e visualizzarli in un foglio di stile.

## La relazione uno-a-uno ricorsiva

Continuando con il modello della guida turistica, svilupperemo uno schema che mostra le città che hanno ospitato le Olimpiadi e la precedente città ospitante. Dal momento che l'host precedente è un'altra città e solo una città può essere l'host precedente questa è una relazione ricorsiva uno a uno.

### host.xml (documento XML per un modello ricorsivo uno-a-uno)
## La relazione ricorsiva uno-a-molti

Un ipotetico team sportivo è diviso in squadre, ognuna delle quali ha un capitano. Ogni persona della squadra è un giocatore, indipendentemente dal fatto che sia un capitano di squadra. Poiché un capitano di squadra è un giocatore, questa situazione incontra la definizione di una relazione ricorsiva: un capitano di squadra è anche un giocatore e ha una relazione uno-a-molti con gli altri giocatori. Si tratta di una relazione ricorsiva uno-a-molti perché un capitano ha molti giocatori sotto di sé. L'esempio seguente mostra come come modellare la relazione.

### team.xml (documento XML per un modello ricorsivo uno-a-molti)
#### Struttura ricorsiva naturale uno-a-molti

Un approccio più naturale per la maggior parte delle relazioni ricorsive uno-a-molti è quello di utilizzare la natura gerarchica di XML per rappresentare direttamente la gerarchia. Considerare le posizioni:

## La relazione ricorsiva molti-a-molti

Ti senti già ferrato sulle relazioni ricorsive? Beh, c'è ancora la terza e ultima relazione da aggiungere al tuo bagaglio di conoscenze: il rapporto ricorsivo molti-a-molti. Un esempio comune di una relazione ricorsiva molti-a-molti è quando un elemento può essere composto da molti elementi dello stesso tipo di dati, e ciascuno di questi sotto-elementi può appartenere ad un altro elemento padre dello stesso tipo di dati. Sembra confuso? Vediamo l'esempio di un prodotto che può consistere di un singolo elemento o di più elementi (ad esempio, un prodotto confezionato). L'esempio che segue descrive i prodotti turistici che possono essere confezionati insieme per creare un nuovo prodotto.