元数据入库的总结

关于元数据入库的总结

一,关于什么是空间数据的元数据?

  元数据的英文名称是“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()

                                            

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