周鹏
2005-02-20
Oracle 9i提供的XML内置特性:
Oracle 9i支持XMLType类型,它是一种Oracle 9i系统定义的对象类型。XMLType有内置的函数,有力的提供了推XML的创建,索检,索引等功能。
用户可以使用SQL函数动态的产生XML文档。这些函数有:SYS_XMLGEN和SYS_XMLAGG和PL/SQL包DBMS_XMLGEN。
XML特性 |
描述 |
XMLType |
1、XMLType是oracle系统定义的数据类型,系统预定义了内部函数去访问XML数据。可以执行下面的任务: 2、创建XMLType列,在XMLType列上面使用内置的函数。 创建PL/SQL函数和存储过程,可以使用XMLType作为参数传入,或者作为返回参数传出。 3、在XMLType列上面存储、索引、处理XML数据。
|
DBMS_XMLGEN |
DBMS_XMLGEN是一个PL/SQL包,提转换一个sql查询的结果到标准的xml格式,返回的是一个XMLTye类型或者是CLOB,DBMS_GEN是用c语言实现,放置在数据库的内核中。DBMS_XMLGEN包和DBMS_XMLQuery包的功能相相似。 |
SYS_XMLGEN |
XMLGEN是一个SQL函数,它用来在sql查询中产生XML,DBMS_XMLGEN和其他包操作在查询水平, SYS_XMLGEN把一个值,对象类型,XMLType实例转换成一个XML文档。SYS_XMLGEN返回的类型是XMLType。
|
SYS_XMLAGG |
SYS_XMLAGG 是一个聚合函数,它聚合在XMLType类型上面。 SYS_XMLAGG聚合所有的输入的XML文档合片断并且通过连接XML片断合增加上一层的标签产生单个XML文档
|
UriTypes |
UriType 类型家族能够在数据库中存储和查询Ur-refs,SYS.UriType是一抽象的数据类型,它提供功能去访问URL指向的数据。SYS.HttpUriType和SYS.DBUriType是UriType的子类型。SYS.HttpUriType存储的是HTTP URLs,DBUriType存储的是intra-database 参考。你可以定义自己的SYS.UriType的子类型。
|
CREATE TABLE warehouses(
warehouse_id NUMBER(3),
warehouse_spec SYS.XMLTYPE,
warehouse_name VARCHAR2(35),
location_id NUMBER(4));
INSERT into warehouses (warehouse_id, warehouse_spec) VALUES (1001, sys.XMLType.createXML(
’<Warehouse whNo="100">
<Building>Owned</Building>
</Warehouse>’));
createXML的输入参数可以是任何的返回为varchar2的表达式或者式CLOB。CreateXML能够检测XML是否的符合合适的,但是它不能检查XML的有效性。
SELECT
w.warehouse_spec.extract('/Warehouse/Building/text()').getStringVal()
"Building"
FROM warehouses w
warehouse_spec是一个XMLType列,Extract()是操作在上面的函数
查询结果如下:
Building
-----------------
Owned
UPDATE warehouses SET warehouse_spec =
sys.XMLType.createXML(
’<Warehouse whono="200">
<Building>Leased</Building>
</Warehouse>’));
DELETE FROM warehouses e
WHERE e.warehouse_spec.extract(’//Building/text()’).getStringVal()
= ’Leased’;
具体的技术,请参考文档《Application Developer’s Guide – XML》
1、 数据的真实性:
XMLType字段能够象其他类型的一样进行增加、修改、删去、索引。我们
可以保存用户同步的原始数据。
2、 功能的可扩展性:
同步的信息是XML自描述内容,内容复杂多样:
u 不同的数据的xml描述不一样;
u 传输不同的内容格式不一样,vcard,vcalendar等等的数据格式不一样。
很难使用传统的表技术来解决这样的问题。
如果使用XML的转换技术,将来为不同的类型提供统一的接口。
我们现在还不是很了XMLType的查询性能问题。
1、 XML文件转换成对象的技术
JDK 1.4提供了把对象保存为XML文件,和把XML文件转换成对象的技术。
参考java.beans.Encode
java.beans.Decode
2、 动态把xml实例成对象
参考org.jibx.runtime.*