元數據管理系統的研究與實現


 

我的新浪微博:http://weibo.com/freshairbrucewoo

 

歡迎大家相互交流,共同提高技術。

 

元數據管理系統的研究與實現

摘 要: 元數據就是描述數據的數據,隨着信息技術的快速向前發展,元數據在地理空間信息資源共享過程中起着關鍵的作用。元數據有自己的標准,這個標准的主要作用是介紹了元數據的組成元素和分類應用,提出了一些元數據建庫的基本原則,並且給出了基於XML格式的元數據管理的設計方案。本文主要是研究元數據的管理和標准,並根據此標准實現了元數據的建庫、編輯、導入導出、查詢和目錄關聯管理的功能。

關鍵詞:元數據; 標准; XML

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

目錄

1.概述... 2

2.元數據的標准... 2

3.建立元數據庫... 3

4.系統體系結構設計... 4

5.關鍵技術與現實方案... 5

5.1Tree控件與XML相互轉化... 5

5.2 Oracle與XML相互轉化... 7

6.總結... 8

參考文獻:... 8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.概述

隨着信息技術的快速發展,空間數據也在不斷的增多,並且變得非常復雜,對空間數據的管理變得更加的重要和困難。因為人們需要對所使用的空間數據進行分析和做不同的處理,例如查詢、計算和查看等等。但是面對網絡中分布的海里空間數據,我們應該怎樣查詢這些數據,我們又該如何很好的利用這些數據,這些數據本身的意義可能不是那么明顯。解決這些問題已經非常的急迫和重要,不然大量的空間數據信息就不能派上用場,或者是浪費大量的時間來管理和查詢這些空間數據。

元數據就是為了描述數據信息而誕生的,元數據通常來講就是描述“數據”的數據。由於空間數據復雜,用元數據來描述空間數據,可以大大提高管理和利用空間數據的效率,讓抽象的空間數據變得具體化,對於空間數據的利用也更加的准確和方便,對於空間數據的管理也更加的規范化,當然管理的手段就更加豐富。描述空間數據的數據我們稱為空間元數據,元數據的應用當然不僅僅在空間數據方面,只是在空間數據應用更加的貼切。空間元數據是對空間數據進行描述的數據,它以結構化的形式描述了地理數據集的內容、質量、表示方式、空間參考、管理方式以及數據集的其他特征。它不僅可以提供對空間信息數據的搜索、導航,而且便於數據的轉換、維護、理解和使用。它是實現地理空間信息共享的基礎,是數字地球的重要技術支撐條件之一。建立一套空間元數據管理系統,提供對元數據的采集、管理、維護與網絡發布,是元數據項目實施的當務之急。

對於元數據的管理是本文重點介紹的內容,主要的內容包括元數據的標准、元數據庫的建立、從XML格式的元數據導入數據庫中、從數據庫中導出數據為XML格式、元數據的目錄關聯管理、元數據的檢索以及元數據的編輯等。

 

2.元數據的標准

元數據由描述數據特征的元素組成。空間元數據標准一般都包括這么幾個部分:表示方法的說明、構成元數據的元素分類及定義(元數據字典) 、按層次關系的元素組織(元數據模式) 、元數據擴展方法與專用標准定義。本文討論一個具體的元數據標准,對於上面提到的幾個部分都有體現。本標准規定了8個必選元數據(數據集名稱、數據集出版日期、數據集摘要、數據集負責方、關鍵詞、數據集分類、數據志說明和元數據標識)和3個可選元數據,用以描述空間數據的標識、內容、管理等信息。元數據模式有一個xsd文件所定義,主要描述了對元數據的一些約束和層次關系。

在元數據標准里面涉及到一些專業術語,為了更加清楚的理解元數據以及元數據標准,我們需要先了解一下這些術語。

元數據元素(metadata element):元數據的基本單元,用以描述空間數據的某個特性。

元數據實體 (metadata entity):一組說明空間數據相關特性的元數據元素。

數據集(dataset):可標識的數據集合。

了解了什么事元數據的標准了就需要知道怎么利用這個標准,這個標准其實就是我們建立元數據庫的參考,我們必須嚴格按照標准的定義來建立元數據庫,包括它定義的數據之間的關系和每一條數據的約束,數據之間的關系主要是指主鍵和外鍵的關系,而約束主要指的是對每一條數據的數據類型和范圍的約束。

3.建立元數據庫

元數據庫指的就是存放元數據信息的數據庫系統,可以用任何的關系數據庫來建立。作為本文的一個實際項目案例,我采用的是Oracle 10g。采用Oracle數據庫有一個需要解決的問題就是:Oracle建立數據庫需要用專門的工具(也可以用命令,但是也很復雜),我希望的是通過程序就完全能夠做到,用戶可以在本系統上就能輕松的完成從建庫到管理等功能。SqlServer能夠通過簡單的Sql語句(調用執行Sql語句的接口)就能建立,Oracle不能這么輕松的完成。為了簡化程序功能,我采用一種巧妙的方法來實現:就是在已存在的Oracle數據庫實例上面,用數據庫的名字作為所有的表的前綴,后面就跟着具體的表名(具體表名就是這種格式:xxx_xxxxx)。這對用戶來說是完全透明的,只是我們用程序在后台處理好就可以了。

在介紹元數據標准里面說道,建立元數據庫必須嚴格按照元數據定義的標准來建立。而且元數據標准的定義是一個XML格式的文件,后綴名是.xsd,也稱它為XML模式定義文件,就是約束XML文件,使XML的格式更加規范。這個元數據標准文件里面有我們建立元數據庫的所有信息,包括數據庫的各個表名、各個表的主鍵和外鍵、各個表的字段類型和字段名稱等。

要通過元數據標准文件建立元數據庫,第一步需要做的是解析這個元數據標准文件。因為xsd文件時一個標准的格式定義,所以解析它不是很困難。這里推薦兩種解析方案,第一種相對來說比較簡單,利用微軟的一個解析xsd的工具,它會自動生成一個文件(C#的代碼文件),其實它生成的就是一個數據集(這個數據集是指的C#里面的數據集,專門用於管理數據集合,可以是一張物理表,也可以是多張表,而且它可以維護數據表之間的關系)。這個方案的好處是不用寫一行代碼就可以擁有一個完整的數據集來解析這個標准文件,而且這個數據集在以后管理一條元數據時非常方便。第二種方案就是完全按照個人的思路,把它當成普通的XML格式文件,讀入並自己分析他們之間的關系,可以專門寫一個這樣的解析類,同樣可以達到上面一樣的效果,只是程序相對來說比較復雜,而且維護元數據的時候還需要自己專門寫處理類。但是它的好處也是顯而易見的,就是更加靈活,怎樣解析完全由自己掌控,只要自己寫的解析類沒有bug,這種解析方案還是很不錯的。本系統采用的是第一種方案,因為這樣可以節約大量的時間,當然程序穩定性也會更加好。具體怎樣利用微軟的那個代碼生成工具可以在google上收索,而且操作也是相對簡單的。

 

4. 系統體系結構設計

本系統包含有元數據采集系統、元數據建庫和管理系統、基礎數據庫目錄查詢系統。實現本系統時,通過元數據編輯器,元數據管理工具(元數據服務配置管理工具、元數據導入導出工具、目錄管理工具)、元數據服務器、元數據查詢系統提供相應的功能和服務。

元數據管理詳細系統結構功能圖如下所示:

 

1)元數據編輯:負責元數據信息的采集,各種元數據的操作。

2)元數據庫創建:元數據庫用於存儲元數據,所以就是創建存儲元數據的數據庫。

3)元數據轉換:負責在Oracle數據庫與XML格式文件相互轉化。

4)元數據目錄關聯:負責建立目錄與元數據之間的關聯關系,這樣就可以通過目錄來查看元數據信息,也可以更好的對元數據進行分類管理。

5)元數據查詢系統:實現對元數據統一查詢。在元數據查詢子系統中用戶可以通過目錄結構查詢元數據,也可以通過關鍵詞查詢元數據。

6)顯示元數據的詳細信息:由於元數據的內容多,而且每一條元數據的格式可能不完全相同,所以單獨用一個模塊來展示一條元數據的詳細信息。

5.關鍵技術與現實方案

本系統采用的C#的WinForm工程實現的,所以以下所有技術的實現都是采用的C#語言。

5.1Tree控件與XML相互轉化

Tree控件就是常說的樹形控件,因為它的結構很像樹。Tree控件和XML格式上很相似,都有遞歸的思想在里面,所以它們之間可以通過程序相互轉化,程序中也會用到遞歸的思想。具體請參考下面的代碼,有詳細的注釋。

(1)XML向Tree轉化

 

 

 1 /// <summary>      
2
3 /// 遍歷XML並實現向tree的轉化
4
5 /// </summary>
6
7 /// <param name="strXmlFilePath">XML輸入路徑</param>
8
9 /// <param name="advTree">樹控件對象</param>
10
11 public static void XMLToTree(string strXmlFilePath, AdvTree advTree)
12
13 {
14
15 //新建XML文檔對象並載入XML文件數據
16
17 XmlDocument xmlDoc = new XmlDocument();
18
19 xmlDoc.Load(strXmlFilePath);
20
21 //找到根節點
22
23 XmlNodeList xnl = xmlDoc.GetElementsByTagName("metadata");
24
25 XmlNode root = xnl[0];
26
27 //根據找到的根節點遍歷整個XML文件的節點
28
29 foreach (XmlNode xn in root.ChildNodes)
30
31 {
32
33 //找到Tree對於的節點
34
35 Node n = advTree.FindNodeByName(xn.Name);
36
37 //如果有子節點就調用遞歸轉化函數
38
39 if (n.HasChildNodes)
40
41 {
42
43 //遞歸轉化XML文件的節點到Tree的節點
44
45 TransXMLToTree(xn.ChildNodes, advTree);
46
47 }
48
49 else
50
51 {
52
53 //如果節點的內容不為空就為Tree控件節點添加值
54
55 if (xn.InnerText != "")
56
57 {
58
59 //標記已經有值,方便以后對Tree的編輯操作
60
61 n.Tag = "yes";
62
63 n.Text += xn.InnerText;
64
65 //如果此節點有父親節點就把對於的父親節點也標記為有值
66
67 while (n.Parent != null)
68
69 {
70
71 Node np = n.Parent;
72
73 np.Tag = "yes";
74
75 n = n.Parent;
76
77 }
78
79 }
80
81 }
82
83 }
84
85 }


 

(2)Tree向XML轉化

 

 1 /// <summary>      
2
3 /// 遍歷treeview並實現向XML的轉化
4
5 /// </summary>
6
7 /// <param name="advTree">樹控件對象</param>
8
9 /// <param name="strXmlFilePath">XML輸出路徑</param>
10
11 public static void TreeToXML(AdvTree advTree, string strXmlFilePath)
12
13 {
14
15 XmlTextWriter xtw = new XmlTextWriter(strXmlFilePath, null);
16
17 XmlDocument xmlDoc = new XmlDocument();
18
19 //控制格式並寫XML的開頭
20
21 xtw.Formatting = Formatting.Indented;
22
23 xtw.WriteStartDocument(true);
24
25 xtw.WriteStartElement("metadata");
26
27 xtw.WriteStartAttribute("xsi","noNamespaceSchemaLocation", "http://www.w3.org/2001/XMLSchema-instance");
28
29 xtw.WriteEndAttribute();
30
31 xtw.WriteEndElement();
32
33 xtw.WriteEndDocument();
34
35 xtw.Close();
36
37
38
39 xmlDoc.Load(strXmlFilePath);
40
41 XmlNode xnRoot = xmlDoc.SelectSingleNode("metadata");
42
43 //遞歸轉化每一個節點
44
45 TransTreeToXml(xmlDoc, advTree.FindNodeByName("metadata").Nodes, (XmlElement)xnRoot, strXmlFilePath);
46
47 }


 

5.2 Oracle與XML相互轉化

XML格式的元數據是元數據的一種主要來源,把XML格式的元數據導入數據庫是所有工作的前提,也是很重要的一個功能。同樣把Oracle中的數據導出為XML格式有着同樣的意義。下面實現這兩個功能的具體代碼,用到了上面提到的數據集(通過微軟工具自動生成的NewDataSet數據集,管理有關一條元數據的15張表)。

(1)從Oracle中導出數據到XML文件中

 
 1 /// <summary>
2
3 /// 導出Oracle數據庫的數據到XML文件中
4
5 /// </summary>
6
7 /// <param name="strXmlPath">導出的目錄</param>
8
9 /// <param name="strDatabaseName">導出的數據庫名稱</param>
10
11 public static void ExportXmlFromOracle(string strXmlPath, string strDatabaseName)
12
13 {
14
15 NewDataSet nds;
16
17 SqlHelper sh = new SqlHelper();
18
19 string sql = string.Empty;
20
21 sql = "select mdid from " + strDatabaseName + "_metadata";
22
23 OracleDataReader odr = sh.ReturnDataReader(sql);
24
25
26
27 while (odr.Read())
28
29 {
30
31 string strMdid = odr[0].ToString();
32
33 //根據元數據的ID得到一條元數據
34
35 nds = GetOneMetaData(strMdid, strDatabaseName);
36
37 nds.WriteXml(strXmlPath + "\\" + strMdid + ".xml");
38
39 }
40
41 }

 

 

(2)導入XML中的數據到Oracle中

 

 

 1 /// <summary>
2 /// 導入XML文件的數據到Oracle數據庫中
3 /// </summary>
4 /// <param name="strXmlFileName">Xml文件名稱(完整的路徑)</param>
5 /// <param name="strDatabaseName">導入的數據庫名稱</param>
6 public static void ImportXmlToOracle(string strXmlFileName, string strDatabaseName)
7 {
8 NewDataSet nds = new NewDataSet();
9 string sql = string.Empty;
10 foreach (System.Data.DataTable dt in nds.Tables)
11 {
12 sql = "select * from ";
13
14 sql += strDatabaseName + "_" + dt.TableName;
15 OracleDataAdapter oda = new OracleDataAdapter(sql, ConfigurationSettings.AppSettings["ConnectionString"]);
16
17 OracleCommandBuilder builder = new OracleCommandBuilder(oda);
18
19 oda.Fill(nds.Tables[dt.TableName]);
20
21 }
22
23 nds.ReadXml(strXmlFileName);
24
25 foreach (System.Data.DataTable dt in nds.Tables)
26 {
27 if (dt.Rows.Count > 0)
28 {
29 string strTableName = strDatabaseName + "_" + dt.TableName;
30 sql = "select * from " + strTableName;
31 DataSet ds = new DataSet();
32 OracleDataAdapter oda = new OracleDataAdapter(sql, ConfigurationSettings.AppSettings["ConnectionString"]);
33 OracleCommandBuilder builder = new OracleCommandBuilder(oda);
34 oda.Fill(ds);
35 oda.Update(dt);
36 }
37 }
38 }

 

6.總結

本文詳解介紹了元數據的相關概念以及應用,對於元數據本身的管理是本文介紹的重點,元數據的管理同其他普通數據的管理有着相似也有特殊的地方。本文介紹的元數據管理系統能夠很好很方便的管理元數據,讓元數據發揮更加重要的作用。元數據的組織、存儲、表達、傳輸、查詢、管理等是元數據管理系統實現時必須考慮的一些問題。在將來的工作中,要結合信息技術領域的新進展,對元數據庫機制進一步完善,並在面向網絡的大型地理信息系統中發揮支柱作用。

參考文獻:

[1] 中國21世紀議程管理中心. 中國地理信息元數據標准研究[ C ].北京:科學出版社, 1999.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM