Adatkészletséma adatainak betöltése XML-ből
Egy (táblák, oszlopok, kapcsolatok és megkötések) sémája DataSet programozott módon határozható meg, amelyet egy DataAdapterXML-dokumentum Fill vagy FillSchema metódusai hoznak létre. A DataSet sémainformációinak XML-dokumentumból való betöltéséhez használhatja a ReadXmlSchema vagy az Adatkészlet InferXmlSchema metódusát. A ReadXmlSchema lehetővé teszi a DataSet sémainformációinak betöltését vagy következtetését az XML-sémadefiníciós (XSD) sémát tartalmazó dokumentumból vagy egy beágyazott XML-sémával rendelkező XML-dokumentumból. Az InferXmlSchema lehetővé teszi a séma következtetését az XML-dokumentumból, miközben figyelmen kívül hagy bizonyos megadott XML-névtereket.
Feljegyzés
Előfordulhat, hogy az adatkészletek táblázatrendezése nem marad meg, ha webszolgáltatásokkal vagy XML-szerializálással XSD-szerkezetek (például beágyazott kapcsolatok) használatával a memóriában létrehozott adathalmazt továbbítja. Ezért az Adatkészlet címzettje ebben az esetben nem függhet a táblarendezéstől. A táblázatrendezés azonban mindig megmarad, ha az átvitt adathalmaz sémája XSD-fájlokból lett beolvasva ahelyett, hogy a memóriában lett volna létrehozva.
ReadXmlSchema
Ha egy ADATHALMAZ sémáját egy XML-dokumentumból szeretné betölteni adatok betöltése nélkül, használhatja az Adathalmaz ReadXmlSchema metódusát. A ReadXmlSchema XML-sémadefiníciós (XSD) sémával definiált DataSet-sémát hoz létre.
A ReadXmlSchema metódus egyetlen argumentumot használ a betöltendő XML-dokumentumot tartalmazó fájlnévből, streamből vagy XmlReaderből . Az XML-dokumentum csak sémát tartalmazhat, vagy adatokat tartalmazó XML-elemekkel beágyazott sémát is tartalmazhat. A beágyazott sémák XML-sémaként való írásával kapcsolatos részletekért lásd: DataSet Relational Structure from XML Schema (XSD) (DataSet Relational Structure from XML Schema, XSD).
Ha a ReadXmlSchema számára átadott XML-dokumentum nem tartalmaz beágyazott sémainformációt, a ReadXmlSchema az XML-dokumentum elemeiből fogja kikövetkeztetni a sémát. Ha az Adatkészlet már tartalmaz sémát, az aktuális séma új táblák hozzáadásával bővül, ha még nem léteznek. A rendszer nem ad hozzá új oszlopokat a meglévő táblákhoz. Ha egy hozzáadott oszlop már létezik az Adatkészletben , de nem kompatibilis az XML-ben található oszlopmal, a rendszer kivételt jelez. További információ arról, hogy a ReadXmlSchema hogyan következtet egy sémára egy XML-dokumentumból: Adathalmaz relációs struktúrájának következtetése XML-ből.
Bár a ReadXmlSchema csak egy Adathalmaz sémáját tölti be vagy következteti, az Adatkészlet ReadXml metódusa betölti vagy kikövetkezetezteti mind a sémát, mind az XML-dokumentumban található adatokat. További információ: Adathalmaz betöltése XML-ből.
Az alábbi példakód bemutatja, hogyan tölthető be adathalmazséma XML-dokumentumból vagy streamből. Az első példa egy XML-sémafájl nevét mutatja be, amely a ReadXmlSchema metódusnak van átadva. A második példa egy System.IO.StreamReadert mutat be.
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
Arra is utasíthatja az Adatkészletet, hogy az adathalmaz InferXmlSchema metódusával következtetsen a sémájára egy XML-dokumentumból. Az InferXmlSchema ugyanúgy működik, mint a ReadXml az InferSchema XmlReadMode-jával (betölti az adatokat és a következtetési sémát), és a ReadXmlSchema is, ha az olvasott dokumentum nem tartalmaz beágyazott sémát. Az InferXmlSchema azonban lehetővé teszi, hogy bizonyos XML-névtereket figyelmen kívül hagyjon a séma következtetésekor. Az InferXmlSchema két kötelező argumentumot vesz fel: az XML-dokumentum helyét egy fájlnév, egy stream vagy egy XmlReader által megadott helyen, valamint egy XML-névterekből álló karakterlánctömböt, amelyet a művelet figyelmen kívül hagy.
Vegyük például a következő XML-t:
<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>
Az előző XML-dokumentum elemeihez megadott attribútumok miatt a ReadXmlSchema metódus és az InferSchema XmlReadMode-jávalrendelkező ReadXml metódus is táblákat hozna létre a dokumentum minden eleméhez: Kategóriák, CategoryID, CategoryName, Description, Products, ProductID, ReorderLevel és Discontinued. (További információ:Adathalmaz relációs szerkezetének következtetése XML-ből.) A megfelelőbb struktúra azonban csak a Kategóriák és termékek táblák létrehozása, majd a Kategóriák tábla CategoryID, CategoryName és Description oszlopainak, valamint a Termékek tábla ProductID, ReorderLevel és Megszüntetett oszlopainak létrehozása. Annak érdekében, hogy a következtetett séma figyelmen kívül hagyja az XML-elemekben megadott attribútumokat, használja az InferXmlSchema metódust, és adja meg az officedata figyelmen kívül hagyandó XML-névterét az alábbi példában látható módon.
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");