元數據入庫的總結

關於元數據入庫的總結

一,關於什麼是空間數據的元數據?

  元數據的英文名稱是“Metadata"它是“關於數據的數據”在地理空間信息中用於描述地理數據集的內容、質量、表示方式、空間參考、管理方式以及數據集的其他特徵,它是實現地理空間信息共享的核心標準之一。

 

二,元數據入庫,到底入庫的元數據是什麼呢?存儲到哪個數據庫呢?

1,元數據是數據的數據,對數據的描述和說明,元數據也可以對數據進行管理和控制。元數據產生伴隨着地理數據入庫,使用,更新,停止使用整個生命週期。通過元數據一方面可以很方便的給用戶的使用提供方便,另一方面也可以管理數據的使用。

2,要入庫的是用來描述地理數據的文件,我們採用XML來記錄記錄空間數據的元數據,主要XML有很多優點:1XML文檔的內容和結構完全分離; 2)互操作性強3)規範統一4)支持多種編碼5)可擴展性。

3,我們把元數據存儲到Oracle數據庫中,選擇Oracle的數據庫的原因:

  Oracle中可以提供了建立XmlType類型的表,可以直接存儲XML,很方便的進行數據的導入,查詢,更新,刪除。

三,怎麼XML元數據文件在Oracle中的存儲,查詢,更新,刪除。

這一部分是總結的重要內容,也是實現此功能的核心所在。經過了一段時間在完成此功能的摸索,現總結如下:

1,XML文件在4K以內的話,需要使用的sql如下:

1)創建元數據表SQL

       CREATE TABLE METADATATABLE (ID NUMBER , LAYERNAME CHAR2(100) , METADATA SYS.XMLTYPE)

       2)插入一條記錄SQL

       INSERT INTO METADATATABLE (ID , LAYERNAME , METADATA) VALUES ( 1 , ‘圖層名稱‘ , SYS.XMLTYPE.CREATEXML(‘元數據內容’)

       注意到要通過 SYS.XMLTYPE.CREATEXML(‘元數據內容’)來將單引號內的字符串轉換爲xmltype,才能存儲到xmltype類型字段的表中。

3)查詢一條記錄SQL:

SELECT I. METADATA.EXTRACT(‘//Metadata’).getStringVal() FROM  METADATATABLE I WHER I.METADATA.EXTRACT(‘//mdFileID’).getStringVal()= ‘查詢值’;

4) 更新一條記錄SQL:

       UPDATE METADATETABLE SET METADATA = SYS.CREATEXML(‘元數據值’) WHERE LAYERNAME = ‘圖層名’ ;

      5) 刪除一條記錄SQL

        DELETE FROM METADATETABLE WHERE LAYERNAME = ‘圖層名’ ;

 

2, 元數據文件超過4K的時候,數據的插入,查詢,更新,會有不同。

   1) 插入一條記錄SQL

首先要先建立一個帶有CLOB類型的臨時表:

CREATE TABLE METADATETABLE_TEMP (ID NUMBER, LAYERNAME varchar2(200), METADATE clob)

 

然後利用參數的方式插入一條記錄:

insert into METADATETABLE_TEMP (ID,LayerName,MetaDate) values ( 1, '圖層名稱', :pMetadate)

   OracleParameter pOracleParameter = new OracleParameter(":pMetadate", OracleType.Clob);

         pOracleParameter.Value = “元數據字符串內容”;

 

 2) 查詢一條記錄SQL

        SELECT t.MetaDate.getclobval() FROM METADATETABLE t WHERE t.MetaDate.extract('//Metadata/mdFileID/text()').getStringVal() = ‘查詢的圖層名稱

 

 注意:通過t.MetaDate.getclobval() 這句將XMLTYPE 轉換爲了Clob類型,才能取出元數據內容,小於4k可以通過,METADATA.EXTRACT(‘//Metadata’).getStringVal() 取出元數據內容。

 

3)更新一條元數據

  也是要採用參數的形式來更新元數據

 首先,向臨時表插入元數據:

         INSERT INTO METADATETABLE_TEMP (ID,LayerName,MetaDate) values ( 1, '圖層名稱', :pMetadate)

         OracleParameter pOracleParameter = new OracleParameter(":pMetadate", OracleType.Clob);

          pOracleParameter.Value = newValue;

 然後,從臨時表中獲取數據來更新元數據表,由於取出來的CLOB類型,需要通過sys.xmlType.createXML() 轉換爲xmltype類型的。

        update METADATETABLE set METADATE= (sys.xmlType.createXML((SELECT t.MetaDate FROM  METADATETABLE_TEMP  t  WHERE t.LayerName= '圖層名稱'))) WHERE  LayerName='圖層名稱'

 

總結:在寫sql語句操作數據的時候,要注意Oracle數據庫中表的不同字段類型之間的相互轉換。sys.xmlType.createXML() t.MetaDate.getclobval()

                                            

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章