Integrazione dell'XML con dati relazionali e ADO.NET

La classe XmlDataDocument è una classe derivata di XmlDocument e che contiene dati XML. Il principale vantaggio è costituito dal fatto che XmlDataDocument costituisce un ponte tra i dati relazionali e quelli gerarchici. Si tratta infatti di un elemento di XmlDocument che può essere associato a un DataSet ed entrambe le classi sono in grado di sincronizzare le modifiche apportate ai dati che contengono. Utilizzando un elemento di XmlDocument associato a un DataSet è possibile integrare XML con i dati relazionali senza dover rappresentare i dati in formato relazionale o XML. È possibile utilizzare entrambe le rappresentazioni, senza essere costretti a utilizzarne una sola.

La possibilità di visualizzare i dati in due modi diversi comporta i seguenti vantaggi:

  • La parte strutturata di un documento XML può essere mappata a un dataset per aumentare l'efficacia delle operazioni di archiviazione, indicizzazione e ricerca.
  • Le operazioni di trasformazione, convalida ed esplorazione possono avvenire in modo efficace tramite un modello a cursore per i dati XML archiviati in modo relazionale. A volte queste operazioni si rivelano più efficaci se eseguite in strutture relazionali, anziché con dati XML memorizzati in un modello XmlDocument.
  • Parte dell'XML può essere memorizzata in un DataSet. Questo significa che è possibile utilizzare XPath o XslTransform per archiviare in un DataSet solamente gli elementi e gli attributi desiderati. È quindi possibile apportare le modifiche a un sottoinsieme di dati più piccolo e filtrato, per poi propagarle a gruppi di dati più grandi nella classe XmlDataDocument.

È inoltre possibile eseguire una trasformazione dei dati caricati in un DataSet da SQL Server e associare controlli Web Form e Windows Form gestiti costituiti da classi di .NET Framework a un DataSet popolato da un flusso di input XML.

Oltre a supportare XslTransform, una classe XmlDataDocument consente di esporre i dati relazionali alle operazioni di convalida e query XPath. Fondamentalmente, per i dati relazionali sono disponibili tutti i servizi XML. Le funzionalità relazionali, quali le associazioni del controllo, la chiamata codegen e così via sono inoltre disponibili nelle proiezioni strutturate di XML, senza compromettere la rispondenza XML.

Essendo ereditata dalla classe XmlDocument, la classe XmlDataDocument fornisce un'implementazione della struttura DOM del W3C. L'associazione di XmlDataDocument a un DataSet e il fatto che un sottoinsieme dei dati di questa classe sia memorizzato in un DataSet non ne restringono né modificano in alcun modo l'utilizzo come XmlDocument. Il codice scritto per gli elementi XmlDocument funziona anche con XmlDataDocument. Il DataSet consente una visualizzazione relazionale degli stessi dati attraverso la definizione di tabelle, colonne, relazioni e vincoli e costituisce un archivio dei dati utente autonomo e residente in memoria.

Nella figura seguente sono mostrate le diverse associazioni dei dati XML con gli oggetti DataSet e XmlDataDocument.

Come si può vedere dalla figura, i dati XML possono essere caricati direttamente in un DataSet, per consentirne un'elaborazione diretta con XML in modo relazionale. In alternativa, i dati XML possono essere caricati in una classe derivata della struttura DOM, la classe XmlDataDocument, e successivamente caricati e sincronizzati con il DataSet. Poiché gli oggetti DataSet e XmlDataDocument sono sincronizzati rispetto a un unico insieme di dati, le modifiche apportate ai dati di un archivio si riflettono nell'altro archivio.

XmlDataDocument eredita tutte le funzionalità di modifica e di spostamento da XmlDocument. A volte può risultare più conveniente utilizzare un elemento XmlDataDocument con le relative funzionalità ereditate, sincronizzato con un DataSet, anziché caricare i dati XML direttamente in un DataSet. Nella tabella riportata di seguito sono indicati gli elementi di cui tenere conto nella scelta del metodo da utilizzare per caricare il DataSet.

Quando caricare i dati XML direttamente in un DataSet Quando sincronizzare una classe XmlDataDocument con un DataSet
È più semplice effettuare query di dati in un DataSet utilizzando SQL e non XPath. È necessario effettuare query XPath nei dati del DataSet.
Non è necessario conservare l'ordine degli elementi nel documento XML di origine. È necessario conservare l'ordine degli elementi nel documento XML di origine.
Non è necessario mantenere gli spazi vuoti tra gli elementi e la formattazione nel documento XML di origine. È necessario mantenere gli spazi vuoti tra gli elementi e la formattazione nel documento XML di origine.

Per informazioni sul caricamento e la scrittura di XML direttamente in e da un DataSet, vedere Caricamento di un DataSet da XML e Scrittura di un DataSet sotto forma di dati XML.

Per informazioni sul caricamento di un DataSet da una classe XmlDataDocument, vedere Synchronizing a Datasetwith an XML Document.

Vedere anche

XML e il DataSet