Caricamento delle informazioni relative allo schema di un DataSet da XML

È possibile definire a livello di programmazione lo schema di un DataSet (le tabelle, le colonne, le relazioni e i vincoli di un DataSet), creare tale schema mediante i metodi Fill o FillSchema di un DataAdapter o caricarlo da un documento XML. Per caricare informazioni relative allo schema di un DataSet da un documento XML, è possibile utilizzare il metodo ReadXmlSchema o il metodo InferXmlSchema del DataSet. Il metodo ReadXmlSchema consente di caricare o inferire le informazioni relative allo schema del DataSet dal documento contenente lo schema XSD (Schema Definition Language) di XML o da un documento XML con schema XML inline. Il metodo InferXmlSchema consente di inferire lo schema dal documento XML, ignorando allo stesso tempo determinati spazi dei nomi XML specificati dall'utente.

ReadXmlSchema

Per caricare lo schema di un DataSet da un documento XML, senza caricare alcun dato, è possibile utilizzare il metodo ReadXmlSchema del DataSet. Tale metodo consente di creare uno schema di DataSet definito tramite lo schema XSD (Schema Definition Language) di XML.

Il metodo ReadXmlSchema accetta come unico argomento un nome file, un flusso o un XmlReader contenente il documento XML da caricare. È possibile che nel documento XML sia contenuto solo lo schema, oppure che in tale documento sia contenuto lo schema inline con elementi XML contenenti dati. Per informazioni sulla scrittura di uno schema inline come schema XML, vedere Generazione della struttura relazionale di un DataSet dallo schema XML (XSD).

Se nel documento XML passato a ReadXmlSchema non sono contenute informazioni relative allo schema inline, lo schema viene inferito da ReadXmlSchema sulla base degli elementi presenti nel documento XML. Se nel DataSet è già presente uno schema, lo schema corrente viene esteso tramite l'aggiunta di nuove colonne alle tabelle esistenti e tramite l'aggiunta di nuove tabelle, nel caso in cui non esistessero già. Se una colonna aggiunta esiste già nel DataSet ma il tipo di tale colonna non è compatibile con la colonna rilevata nel documento o flusso XML, verrà generata un'eccezione. Per informazioni sulla modalità di inferenza dello schema da un documento XML da parte di ReadXmlSchema, vedere Inferenza della struttura relazionale del DataSet da XML.

Mentre ReadXmlSchema consente di caricare o inferire solo lo schema di un DataSet, il metodo ReadXml del DataSet consente di caricare o inferire sia lo schema che i dati contenuti nel documento XML. Per ulteriori informazioni, vedere Caricamento di un DataSet da XML.

Nell'esempio di codice seguente viene illustrato il caricamento dello schema di un DataSet da un documento o flusso XML. Nel primo esempio viene mostrato il passaggio di un nome file dello schema XML al metodo ReadXmlSchema. Nel secondo esempio viene mostrato un System.IO.StreamReader.

Dim myDS As DataSet = New DataSet
myDS.ReadXmlSchema("schema.xsd")
[C#]
DataSet myDS = new DataSet();
myDS.ReadXmlSchema("schema.xsd");
[Visual Basic]
Dim xmlStream As System.IO.StreamReader = New System.IO.StreamReader ("schema.xsd");
Dim myDS As DataSet = New DataSet
myDS.ReadXmlSchema(xmlStream)
xmlStream.Close()
[C#]
System.IO.StreamReader xmlStream = new System.IO.StreamReader("schema.xsd");
DataSet myDS = new DataSet();
myDS.ReadXmlSchema(xmlStream);
xmlStream.Close();

InferXmlSchema

È possibile anche impostare il DataSet in modo che lo schema venga inferito da un documento XML mediante il metodo InferXmlSchema del DataSet. L'utilizzo di tale metodo è simile all'utilizzo di ReadXml con XmlReadMode pari a InferSchema (consente il caricamento dei dati e l'inferenza dello schema) e di ReadXmlSchema, nel caso in cui nel documento letto non sia presente alcuno schema inline. Il metodo InferXmlSchema offre un'ulteriore possibilità, consentendo di specificare dei particolari spazi dei nomi XML da ignorare durante l'inferenza dello schema. Il metodo InferXmlSchema accetta due argomenti necessari: la posizione del documento XML, specificata da un nome file, un flusso o un XmlReader e una matrice di stringhe degli spazi dei nomi XML che verranno ignorati dall'operazione.

Si consideri ad esempio il seguente elemento XML:

<NewDataSet xmlns:od="urn:schemas-microsoft-com:officedata">
<Categories>
  <CategoryID od:adotype="3">1</CategoryID> 
  <CategoryName od:maxLength="15" od:adotype="130">Beverages</CategoryName> 
  <Description od:adotype="203">Soft drinks and teas</Description> 
</Categories>
<Products>
  <ProductID od:adotype="20">1</ProductID> 
  <ReorderLevel od:adotype="3">10</ReorderLevel> 
  <Discontinued od:adotype="11">0</Discontinued> 
</Products>
</NewDataSet>

A causa degli attributi specificati per gli elementi del precedente documento XML, sia il metodo ReadXmlSchema che il metodo ReadXml con XmlReadMode pari a InferSchema consentono di creare tabelle per tutti gli elementi presenti nel documento: Categories, CategoryID, CategoryName, Description, Products, ProductID, ReorderLevel e Discontinued. Per ulteriori informazioni, vedere Inferenza della struttura relazionale del DataSet da XML. Una struttura più appropriata implicherebbe tuttavia la creazione delle sole colonne Categories e Products, seguita dalla creazione delle colonne CategoryID, CategoryName e Description nella tabella Categories e delle colonne ProductID, ReorderLevel e Discontinued nella tabella Products. Per assicurarsi che gli attributi specificati negli elementi XML vengano ignorati dallo schema inferito, utilizzare il metodo InferXmlSchema e fare in modo che lo spazio dei nomi XML per officedata venga ignorato, come illustrato nell'esempio seguente.

Dim myDS As DataSet = New DataSet
myDS.InferXmlSchema("input_od.xml", New String[] {"urn:schemas-microsoft-com:officedata"})
[C#]
DataSet myDS = new DataSet();
myDS.InferXmlSchema("input_od.xml", new string[] "urn:schemas-microsoft-com:officedata");

Vedere anche

XML e il DataSet | Generazione della struttura relazionale di un DataSet dallo schema XML (XSD) | Inferenza della struttura relazionale del DataSet da XML | Caricamento di un DataSet da XML | Creazione e utilizzo di DataSet