Ładowanie informacji o schemacie elementu DataSet z pliku XML

Schemat (DataSetjego tabele, kolumny, relacje i ograniczenia) można zdefiniować programowo, utworzony przez metody DataAdapterFill lub FillSchema elementu lub załadowany z dokumentu XML. Aby załadować informacje o schemacie zestawu danych z dokumentu XML, możesz użyć metody ReadXmlSchema lub InferXmlSchema zestawu danych. Narzędzie ReadXmlSchema umożliwia ładowanie lub wnioskowanie informacji o schemacie zestawu danych z dokumentu zawierającego schemat języka definicji schematu XML (XSD) lub dokumentu XML ze wbudowanym schematem XML. InferXmlSchema umożliwia wnioskowanie schematu z dokumentu XML przy jednoczesnym ignorowaniu określonych przestrzeni nazw XML.

Uwaga

Kolejność tabel w zestawie danych może nie być zachowywana w przypadku używania usług sieci Web lub serializacji XML do transferu zestawu danych utworzonego w pamięci przy użyciu konstrukcji XSD (takich jak relacje zagnieżdżone). W związku z tym odbiorca zestawu danych nie powinien zależeć od kolejności tabel w tym przypadku. Jednak kolejność tabel jest zawsze zachowywana, jeśli schemat przesyłanego zestawu danych został odczytany z plików XSD, a nie tworzony w pamięci.

Readxmlschema

Aby załadować schemat zestawu danych z dokumentu XML bez ładowania żadnych danych, możesz użyć metody ReadXmlSchema zestawu danych. ReadXmlSchema tworzy schemat Zestawu danych zdefiniowany przy użyciu schematu języka definicji schematu XML (XSD).

Metoda ReadXmlSchema przyjmuje jeden argument nazwy pliku, strumienia lub elementu XmlReader zawierającego dokument XML do załadowania. Dokument XML może zawierać tylko schemat lub może zawierać schemat wbudowany z elementami XML zawierającymi dane. Aby uzyskać szczegółowe informacje na temat pisania schematu wbudowanego jako schematu XML, zobacz Wyprowadzanie struktury relacyjnej zestawu danych ze schematu XML (XSD).

Jeśli dokument XML przekazany do elementu ReadXmlSchema nie zawiera informacji o schemacie wbudowanym, funkcja ReadXmlSchema wywnioskuje schemat z elementów w dokumencie XML. Jeśli zestaw danych zawiera już schemat, bieżący schemat zostanie rozszerzony przez dodanie nowych tabel, jeśli jeszcze nie istnieją. Nowe kolumny nie zostaną dodane do istniejących tabel. Jeśli dodawana kolumna już istnieje w zestawie danych , ale ma niezgodny typ z kolumną znalezioną w pliku XML, zgłaszany jest wyjątek. Aby uzyskać szczegółowe informacje na temat sposobu wnioskowania schematu ze schematu z dokumentu XML, zobacz Wnioskowanie struktury relacyjnej zestawu danych z pliku XML.

Mimo że readXmlSchema ładuje lub wywnioskuje tylko schemat zestawu danych, metoda ReadXml zestawu danych ładuje lub wywnioskuje zarówno schemat, jak i dane zawarte w dokumencie XML. Aby uzyskać więcej informacji, zobacz Ładowanie zestawu danych z pliku XML.

W poniższych przykładach kodu pokazano, jak załadować schemat zestawu danych z dokumentu XML lub strumienia. W pierwszym przykładzie pokazano nazwę pliku schematu XML przekazywaną do metody ReadXmlSchema . Drugi przykład przedstawia element 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

Można również poinstruować zestaw danych , aby wywnioskował jego schemat z dokumentu XML przy użyciu metody InferXmlSchema zestawu danych. Funkcja InferXmlSchema działa tak samo jak funkcja ReadXml z elementem XmlReadMode inferSchema(ładuje dane, a także schemat wnioskowania) i ReadXmlSchema, jeśli odczytywany dokument nie zawiera schematu wbudowanego. Jednak inferXmlSchema zapewnia dodatkową możliwość umożliwiającą określenie określonych przestrzeni nazw XML, które mają być ignorowane, gdy schemat zostanie wywnioskowany. InferXmlSchema przyjmuje dwa wymagane argumenty: lokalizację dokumentu XML, określoną przez nazwę pliku, strumień lub element XmlReader, oraz tablicę ciągów przestrzeni nazw XML, które mają być ignorowane przez operację.

Rozważmy na przykład następujący kod 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>  

Ze względu na atrybuty określone dla elementów w poprzednim dokumencie XML, zarówno metoda ReadXmlSchema, jak i metoda ReadXml z elementem XmlReadModeinferSchema tworzy tabele dla każdego elementu w dokumencie: Categories, CategoryID, CategoryName, Description, Products, ProductID, ReorderLevel i Discontinued. (Aby uzyskać więcej informacji, zobacz Wnioskowanie struktury relacyjnej elementu DataSet z pliku XML). Jednak bardziej odpowiednią strukturą byłoby utworzenie tylko tabel Category i Products, a następnie utworzenie kolumn CategoryID, CategoryName i Description w tabeli Categories oraz Kolumny ProductID, ReorderLevel i Discontinued w tabeli Products. Aby upewnić się, że wywnioskowany schemat ignoruje atrybuty określone w elementach XML, użyj metody InferXmlSchema i określ przestrzeń nazw XML dla danych officedata do zignorowania, jak pokazano w poniższym przykładzie.

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");  

Zobacz też