Share via


Načtení informací o schématu datové sady z XML

Schéma DataSet (jeho tabulek, sloupců, relací a omezení) lze definovat programově, vytvořené metodami Fill nebo FillSchema nebo DataAdapternačtenými z dokumentu XML. Chcete-li načíst informace o schématu DataSet z dokumentu XML, můžete použít buď ReadXmlSchema , nebo InferXmlSchema metoda DataSet. ReadXmlSchema umožňuje načíst nebo odvodit informace o schématu datové sady z dokumentu obsahujícího schéma XSD (XML Schema Definition Language) nebo dokument XML s vloženým schématem XML. InferXmlSchema umožňuje odvodit schéma z dokumentu XML a současně ignorovat určité obory názvů XML, které zadáte.

Poznámka:

Řazení tabulek v datové sadě nemusí být zachováno při použití webových služeb nebo serializace XML k přenosu datové sady , která byla vytvořena v paměti pomocí konstruktorů XSD (například vnořených relací). Příjemce datové sady by proto neměl záviset na pořadí tabulek v tomto případě. Řazení tabulek je však vždy zachováno, pokud schéma přenášené datové sady bylo načteno ze souborů XSD místo vytváření v paměti.

Readxmlschema

Chcete-li načíst schéma DataSet z dokumentu XML bez načtení dat, můžete použít ReadXmlSchema metoda DataSet. ReadXmlSchema vytvoří schéma datové sady definované pomocí schématu XSD (XML Schema Definition Language).

Metoda ReadXmlSchema přebírá jeden argument názvu souboru, streamu nebo XmlReader obsahujícího dokument XML, který se má načíst. Dokument XML může obsahovat pouze schéma nebo může obsahovat schéma vložené s elementy XML obsahujícími data. Podrobnosti o zápisu vloženého schématu jako schématu XML naleznete v tématu Odvození relační struktury datové sady ze schématu XML (XSD).

Pokud dokument XML předaný readXmlSchemaneobsahuje žádné vložené informace schématu, ReadXmlSchema odvodí schéma z prvků v dokumentu XML. Pokud datová sada již obsahuje schéma, aktuální schéma bude rozšířeno přidáním nových tabulek, pokud ještě neexistují. Do existujících tabulek se nepřidají nové sloupce. Pokud přidaný sloupec již v datové sadě existuje, ale má nekompatibilní typ se sloupcem nalezeným v xml, vyvolá se výjimka. Podrobnosti o tom, jak ReadXmlSchema odvodí schéma z dokumentu XML, naleznete v tématu Odvození relační struktury datové sady z XML.

I když ReadXmlSchema načte nebo odvodí pouze schéma DataSet, readXml metoda DataSet načte nebo odvodí schéma i data obsažená v dokumentu XML. Další informace naleznete v tématu Načítání datové sady z XML.

Následující příklady kódu ukazují, jak načíst schéma datové sady z dokumentu XML nebo datového proudu. První příklad ukazuje název souboru schématu XML, který se předává metodě ReadXmlSchema . Druhý příklad ukazuje System.IO.StreamReader.

Dim dataSet As DataSet = New DataSet  
dataSet.ReadXmlSchema("schema.xsd")  
DataSet dataSet = new DataSet();  
dataSet.ReadXmlSchema("schema.xsd");  
Dim xmlStream As New System.IO.StreamReader("schema.xsd")
Dim dataSet As DataSet = New DataSet  
dataSet.ReadXmlSchema(xmlStream)  
xmlStream.Close()  
System.IO.StreamReader xmlStream = new System.IO.StreamReader("schema.xsd");  
DataSet dataSet = new DataSet();  
dataSet.ReadXmlSchema(xmlStream);  
xmlStream.Close();  

InferXmlSchema

DataSet můžete také instruovat jeho schéma z dokumentu XML pomocí metody InferXmlSchema DataSet. Funkce InferXmlSchema funguje stejně jako readXml s XmlReadMode inferSchema (načítá data i schéma odvozování) a ReadXmlSchema, pokud čtený dokument neobsahuje žádné vložené schéma. InferXmlSchema však poskytuje další funkce, které vám umožní určit konkrétní obory názvů XML, které se mají ignorovat při odvození schématu. InferXmlSchema má dva povinné argumenty: umístění dokumentu XML, určeného názvem souboru, datovým proudem nebo XmlReader; a řetězcové pole oborů názvů XML, které se mají ignorovat operací.

Představte si například následující kód 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>  

Vzhledem k atributům zadaným pro elementy v předchozím dokumentu XML by metoda ReadXmlSchema i ReadXml metoda s XmlReadMode of InferSchema vytvořily tabulky pro každý prvek v dokumentu: Categories, CategoryID, CategoryName, Description, Products, ProductID, ReorderLevel a Discontinued. (Další informace najdete v tématu Odvození relační struktury datové sady z XML.) Vhodnější strukturou by však bylo vytvořit pouze tabulky Kategorie a Produkty a potom vytvořit sloupce CategoryID, CategoryName a Description v tabulce Kategorie a IDproduktu, Změnit pořadíLevel a Ukončené sloupce v tabulce Produkty . Chcete-li zajistit, aby odvozené schéma ignoroval atributy zadané v elementech XML, použijte InferXmlSchema metoda a zadejte obor názvů XML pro officedata , který se má ignorovat, jak je znázorněno v následujícím příkladu.

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

Viz také