Obiettivi della progettazione in relazione all'XML in .NET Framework

Gli obiettivi dell'XML in .NET Framework sono:

  • Aderenza agli standard W3C.
  • Estensibilità.
  • Architettura a collegabilità immediata.
  • Prestazioni.
  • Stretta integrazione con ADO.NET.

Aderenza agli standard

Per aderenza agli standard si intende una conformità totale delle classi agli standard attualmente raccomandati da W3C in relazione a XML, spazi dei nomi, XSLT, XPath, Schema e DOM (Document Object Model). Tale conformità garantisce l'interoperabilità e agevola lo sviluppo di applicazioni su diverse piattaforme.

In maniera più specifica, viene supportata la raccomandazione W3C XML Schema Definition language (XSD) 1.0. Da alcune classi XML in .NET Framework è fornita la convalida ed è disponibile un modello di oggetti per la generazione di Schemi XSD in memoria. Il parser veloce, di tipo forward-only con il quale è possibile eseguire la convalida in base agli schemi, ai DTD, agli XDR e XSD è chiamato XmlValidatingReader. XmlValidatingReader è un parser conforme a XML. La classe XmlSchemaCollection può essere utilizzata per memorizzare nella cache gli schemi XSD o XDR utilizzati di frequente quando si utilizza XmlValidatingReader.

In .NET Framework è disponibile un gruppo di classi XML da cui deriva un modello SOM (Schema Object Model) che consente di generare e compilare schemi XSD a livello di codice. La classe XmlSchema rappresenta uno schema XSD. È possibile caricare tali schemi e mantenerli tramite le classi XmlReader e XmlWriter.

Le raccomandazioni del DOM (Document Object Model) di livello 1 e livello 2 sono implementate dalla classe XmlDocument personalizzata in base alle indicazioni di progettazione comuni di .NET Framework. I nomi dei metodi, ad esempio, vengono scritti in lettere maiuscole.

La classe XslTransform è conforme alle raccomandazioni XSL Transformations (XSLT) Version 1.0 e XML Path Language (XPath) 1.0 per trasformare i documenti utilizzando l'XSLT.

Estensibilità

L'XML in .NET Framework è estensibile tramite le classi astratte di base e i metodi virtuali. Questa estensibilità, o creazione di sottoclassi, viene illustrata dalle classi astratte XmlReader, XmlWriter e XPathNavigator, che consentono lo sviluppo di nuove implementazioni su più archivi e origini di dati e l'esposizione dell'XML. Nell'API XPathNavigator, ad esempio, è incorporato un modulo di gestione delle query XPath che può essere implementato sugli archivi, come i file system, i registri e i database relazionali. In questo modo non solo vengono visualizzati i dati come l'XML, ma viene fornito anche il supporto delle query XPath su origini di dati diverse, utilizzando l'implementazione predefinita dei metodi delle query API XPath, come Select.

Un altro esempio di estensibilità è costituito da XmlReader, che fornisce un'API per l'analisi rapida di tipo forward-only di un archivio e che espone l'Infoset XML che rileva all'interno del flusso. L'XML in .NET Framework ha implementazioni di XmlReader chiamate classe XmlTextReader per la lettura dei flussi, classe XmlNodeReader per la lettura delle strutture di nodi e XmlValidatingReader per il supporto della convalida dei livelli su un XmlTextReader.

XmlWriter consente di generare un flusso di XML utilizzando un'API basata sul metodo push. In .NET Framework è presente un'implementazione di XmlWriter chiamata XmlTextWriter.

Le implementazioni di queste classi possono essere ulteriormente derivate per creare altri reader per l'implementazione di un'elaborazione specifica. Da XmlTextReader si potrebbe ad esempio derivare un reader personalizzato, chiamato MyXmlTextReader, e creare in tal modo una versione del reader con una logica specifica per le proprie esigenze di elaborazione applicativa.

Nella classe astratta XmlResolver viene fornito un hook per le risorse esterne a cui si fa riferimento in un documento XML. Perciò derivando da questa classe, è possibile memorizzare nella cache le risorse in un modo specifico dell'applicazione, per esempio di un database, o risolvere le risorse con diversi protocolli. Le implementazioni di XmlResolver, XmlUrlResolver e XmlSecureResolver,consentono di risolvere le risorse con i protocolli http://, https:// e file://.

Architettura a collegabilità immediata

L'XML in .NET Framework è caratterizzato da un'architettura a collegabilità immediata. In questa architettura basata su flussi, il concetto di collegabilità immediata si riferisce al fatto che i componenti basati su queste classi astratte all'interno di .NET Framework possono essere facilmente sostituiti. Per architettura a collegabilità immediata si intende anche che è possibile creare un flusso di dati tra i componenti, e che l'elaborazione può essere alterata dall'inserimento di nuovi componenti in questo flusso. È possibile ad esempio analizzare un flusso di XML di un servizio Web XML con XmlTextReader. XmlTextReader può essere utilizzato per creare un XmlDocument, che può essere utilizzato a sua volta per la creazione di un XmlNodeReader.

Un altro esempio consiste nel caricare il DOM (classe XmlDocument) da un XmlReader e nel salvare l'output utilizzando un XmlWriter. Creando implementazioni personalizzate di queste classi estendendo quelle esistenti, si potrà influire sul comportamento della classe XmlDocument. Se, ad esempio, è stata creata un'implementazione di XmlReader, chiamata MyXmlFileReader in grado di esporre un file system come XML, è possibile caricare un XmlDocument da questo reader. Si potrebbe in alternativa ereditare da un XmlTextReader per creare un nuovo reader personalizzato in grado di convertire un documento incentrato sugli attributi in un documento incentrato sugli elementi che potrebbe essere utilizzato per caricare XmlDocument. In questo modo per le nuove classi basate su quelle esistenti viene fornita un'architettura collegabile.

Un altro esempio di collegamento tra componenti è l'uso di diversi archivi di dati, come XPathDocument e XmlDocument, nel processo di trasformazione. È possibile trasformare questi archivi di dati con la classe XslTransform e l'output potrà allora essere inserito in un flusso in un altro archivio o restituito come flusso da un servizio Web XML. Nell'illustrazione che segue viene illustrato quanto detto sopra.

Inserimento di dati in un flusso con la classe XslTransform

Qualsiasi archivio che consente di implementare un XPathNavigator, utilizzando l'interfaccia IXPathNavigable, può essere collegato nella classe XslTransform per consentire le trasformazioni XSLT su quell'archivio. Le classi XmlDocument, XPathDocument e XmlDataDocument sono in grado di eseguire questa operazione. È possibile quindi inviare l'output inserito in un flusso da XslTransform a XmlReader o XmlWriter nello stile dell'architettura collegabile.

Prestazioni

Le classi XML in .NET Framework rappresentano i componenti per l'elaborazione XML di basso livello che vengono utilizzati, non solo come parte di .NET Framework, ma per integrare l'XML nelle applicazioni. È necessario che le classi abbiano prestazioni estremamente buone.

Le classi XML in .NET Framework sono progettate per supportare un modello basato sullo streaming grazie alle caratteristiche seguenti:

  • Minimo utilizzo della cache durante l'analisi di tipo forward-only svolta con XmlReader secondo il metodo pull.
  • Convalida di tipo forward-only con XmlValidatingReader.
  • Nuovo tipo di navigazione a cursore di XPathNavigator grazie alla quale la creazione di nodi è ridotta a un singolo nodo virtuale, fornendo tuttavia l'accesso casuale al documento. In questo modo non è necessario che venga creata in memoria una struttura di nodi come il DOM.
  • Output incrementale di flusso dalla classe XslTransform.

XPathDocument è un archivio ottimizzato, di sola lettura per le query XPath ed è consigliato ogni volta che è necessaria un'elaborazione XSLT. Utilizzando questo archivio e la classe XslTransform, è possibile ottenere trasformazioni XSLT efficienti.

Integrazione con ADO.NET

In .NET Framework i dati relazionali e l'XML vengono combinati da una stretta integrazione tra le classi XML e ADO.NET.

Grazie al componente DataSet, che rappresenta un database non connesso, è possibile leggere e scrivere l'XML utilizzando le classi XmlReader e XmlWriter, mantenere la struttura interna degli schemi relazionali come gli Schemi XML (XSD), e ipotizzare la struttura dello schema da un documento XML.

XmlDataDocument va oltre i limiti dei modelli basati sui dati XML e relazionali sincronizzando un DataSet con un XmlDocument in modo che i dati gestiti in uno dei due ambienti vengano aggiornati nell'altro, dove applicabile. Poiché XmlDocument ha la capacità di memorizzare dati semistrutturati, tutte le funzionalità di un archivio XML vengono acquisite, mentre grazie al DataSet si avrà una vista relazionale dell'XML sulla base del suo schema.

Per ulteriori informazioni su come .NET Framework consente un accesso sincrono, in tempo reale alle rappresentazioni relazionali e gerarchiche dei dati, attraverso l'oggetto DataSet e l'oggetto XmlDataDocument, vedere Integrazione XML con dati relazionali e ADO.NET

Vedere anche

Modello a oggetti di documenti XML (Document Object Model, DOM) | Lettura dell'XML con XmlReader | Scrittura dell'XML con XmlWriter | Trasformazioni XSLT con la classe XslTransform | XPathNavigator in .NET Framework | SOM (Schema Object Model) XML | Convalida dell'XML con gli schemi | Integrazione XML con dati relazionali e ADO.NET | Risoluzione di risorse XML esterne specificate da un URI | Codifica dei caratteri dei nomi XML e conversione dei tipi di dati XML | Conversione dei tipi di dati XML | Spazi dei nomi in un documento XML