如何從 XSD 架構建立資料集映射
此樣本闡釋如何從提供的 XML 結構定義語言 (XSD) 架構建立資料集映射。通常情況下,架構是中繼資料,或是關於資料的資料,但 XSD 架構還包括資料類型之間的關係。從一個架構中,可以建立表和列的關係結構以儲存符合所提供的架構的資料。這就是架構的資料集關係映射。
| |
| VB DataSetMapXSDSchema.aspx |
[運行樣本] | [查看原始碼] |
DataSet 類與 XmlDataDocument 類有緊密的從屬關係。DataSet 類提供通過 XmlDataDocument 載入的 XML 資料的關係視圖。要產生這兩種視圖間的關係映射,需要使用資料集的 ReadXmlSchema 方法。當您建立 XmlDataDocument 時可使用此方法,如下面的 XmlDataDocument.DataSet.ReadXmlSchema 調用所示。現在,對資料集所做的任何更改都將反映在 XmlDataDocument 中,反之亦然。
為了闡釋這種關係,下列範例程式碼讀取 books.xsd 架構檔案並將它載入到 XmlDataDocument 的 DataSet 屬性中。請注意 ReadXmlSchema 方法是如何使用載入到 StreamReader 中的架構並產生關係映射的。如果在 XmlDataDocument 中已定義了一個關係視圖,則該樣本將引發異常。
StreamReader myStreamReader = null; try { Console.WriteLine("Reading Schema file ..."); myStreamReader = new StreamReader(schema); myXmlDataDocument.DataSet.ReadXmlSchema(myStreamReader); } catch (Exception e) { Console.WriteLine ("Exception: {0}", e.ToString()); } finally { if (myStreamReader != null) myStreamReader.Close(); }
Dim myStreamReader as StreamReader = nothing try myStreamReader = new StreamReader(schema) Console.WriteLine("Reading Schema file ...") myXmlDataDocument.ReadXmlSchema(myStreamReader) catch e as exception Console.WriteLine ("Exception: " & e.ToString()) finally If Not myStreamReader Is Nothing myStreamReader.Close() end if end try |
| C# |
VB |
|
那麼如何知道從架構產生的內部表是什麼樣子的呢?資料集有一個 Tables 屬性,它是內部表的集合。每個表都有一個列 (Columns) 集合,並且每列都有一個列名稱 (ColumnName) 和一個資料類型 (DataType)。只需重複這些集合并設定輸出的格式,即可顯示從提供的架構產生的內部表結構,如下列代碼所示。
// Displays the DataSet tables structure private void DisplayTableStructure() { Console.WriteLine("\r\nTable structure \r\n"); Console.WriteLine("Tables count=" + myXmlDataDocument.DataSet.Tables.Count.ToString()); for (int i = 0; i < myXmlDataDocument.DataSet.Tables.Count; i++) { Console.WriteLine("\tTableName='" + myXmlDataDocument.DataSet.Tables[i].TableName + "'."); Console.WriteLine("\tColumns count=" + myXmlDataDocument.DataSet.Tables[i].Columns.Count.ToString()); for (int j = 0; j < myXmlDataDocument.DataSet.Tables[i].Columns.Count; j++) { Console.WriteLine("\t\tColumnName='" + myXmlDataDocument.DataSet.Tables[i].Columns[j].ColumnName + "', type = " + myXmlDataDocument.DataSet.Tables[i].Columns[j].DataType.ToString()); } } }
' Displays the DataSet tables structure private sub DisplayTableStructure() Console.WriteLine() Console.WriteLine("Table structure") Console.WriteLine() Console.WriteLine("Tables count=" & myXmlDataDocument.Tables.Count.ToString()) Dim i,j as integer for i = 0 to (myXmlDataDocument.Tables.Count - 1) Console.WriteLine("TableName='" & myXmlDataDocument.Tables(i).TableName & "'.") Console.WriteLine("Columns count=" & myXmlDataDocument.Tables(i).Columns.Count.ToString()) for j = 0 to (myXmlDataDocument.Tables(i).Columns.Count - 1) Console.WriteLine(Strings.chr(9) & "ColumnName='" & _ myXmlDataDocument.Tables(i).Columns(j).ColumnName & _"', type = " & _ myXmlDataDocument.Tables(i).Columns(j).DataType.ToString()) next Console.WriteLine() next end sub |
| C# |
VB |
|
下列輸出顯示由 books.xsd 架構的 DisplayTableStructure 方法所顯示的表名、列名和列類型。
Table structureTables count=3TableName='bookstore'.Columns count=1ColumnName='bookstore_Id', type = System.Int32TableName='book'.Columns count=5ColumnName='title', type = System.StringColumnName='price', type = System.DecimalColumnName='genre', type = System.StringColumnName='book_Id', type = System.Int32ColumnName='bookstore_Id', type = System.Int32TableName='author'.Columns count=3ColumnName='first-name', type = System.StringColumnName='last-name', type = System.StringColumnName='book_Id', type = System.Int32
摘要
- 通常情況下,架構是中繼資料,或是關於資料的資料,但 XSD 架構還包括資料類型之間的關係。
- 從 XSD 架構中,可以建立表和列的關係結構以儲存符合所提供的架構的資料。這就是資料集映射。
- 資料集的 ReadXmlSchema 方法從所提供的架構產生內部映射。