Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Schéma DataSet (jeho tabulek, sloupců, relací a omezení) lze definovat programaticky, vytvořit pomocí metod Fill nebo FillSchema, nebo načíst z dokumentu XML. K načtení DataSet informací o schématu z dokumentu XML můžete použít metodu ReadXmlSchemaInferXmlSchemaDataSet.
ReadXmlSchema umožňuje načíst nebo odvodit DataSet informace o schématu z dokumentu obsahujícího schéma jazyka XSD (XML Schema Definition Language) nebo z dokumentu 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 objektu DataSet nemusí být zachováno při použití webových služeb nebo serializace XML k přenosu DataSet vytvořené v paměti pomocí konstruktorů XSD (například vnořených relací). Příjemce DataSet by proto neměl záviset na řazení tabulek v tomto případě. Řazení tabulek je však vždy zachováno, pokud schéma DataSet přenášeného souboru bylo načteno ze souborů XSD místo vytváření v paměti.
ReadXmlSchema
Pokud chcete načíst schéma DataSet z dokumentu XML bez načtení dat, můžete použít ReadXmlSchema metodu DataSet.
ReadXmlSchema vytvoří DataSet schéma definované pomocí schématu XSD (XML Schema Definition Language).
Metoda ReadXmlSchema přebírá jeden argument názvu souboru, datového proudu 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ý ReadXmlSchema neobsahuje žádné vložené informace schématu, ReadXmlSchema odvodí schéma z elementů v dokumentu XML.
DataSet Pokud již schéma obsahuje, 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 souboru DataSet XML existuje, ale má nekompatibilní typ se sloupcem nalezeným v jazyce 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.
Přestože ReadXmlSchema načítá nebo odvozuje pouze schéma datové sady, metoda ReadXmlDataSet načítá nebo odvozuje jak schéma, tak 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 DataSet schéma 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
Můžete také dát pokyn DataSet k odvození jeho schématu z dokumentu XML pomocí InferXmlSchema metody DataSet.
InferXmlSchema funguje stejně jako ReadXml s XmlReadMode a InferSchema (načítá data stejně jako odvozuje schéma), a ReadXmlSchema pokud čtený dokument neobsahuje žádné vložené schéma. Poskytuje však další možnosti, InferXmlSchema které umožňují určit konkrétní obory názvů XML, které se mají při odvození schématu ignorovat.
InferXmlSchema přebírá dva požadované 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é má operace ignorovat.
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 jak ReadXmlSchema metoda, tak ReadXml metoda s XmlReadMode u InferSchema vytvořily tabulky pro každý prvek v dokumentu: Categories, CategoryID, CategoryName, Description, Products, ProductID, ReorderLevel a Discontinued. (Další informace naleznete v tématu Odvození relační struktury datové sady z XML.) Vhodnější strukturou by však bylo vytvořit pouze tabulky Categories a Products pak vytvořit CategoryID, CategoryName a Description sloupce v Categories tabulce a IDProduktu, ReorderLevel a Discontinued sloupce v Products tabulce. Chcete-li zajistit, aby odvozené schéma ignoroval atributy zadané v elementech XML, použijte metodu InferXmlSchema a zadejte obor názvů XML, který officedata 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");