如果把各种元素(element)看成是数据库表中的列字段,那么你可以将XML文档看作是关系表。因此,通过将各种元素映射到表,你可以在关系数据库中存储XML。这个映射过程被称为XML到SQL的映射技术。
Oracle发明了XML SQL(XSU)Java API来将XML转换成SQL,或者反过来映射。在你可以执行这种映射之前,你必须先创建你将要映射XML文档到的表。XSU映射XML元素到指定的数据库表中的列。你应该清楚使用XSU来将XML文档映射到数据库表的时候将不会保存这个XML文档的属性,但是你可以在保存文档之前先对该文档进行XSLT转换,将你需要的属性存储XML属性,这样你可以映射到数据库表中的列。XSU还让你从数据库中检索数据,并且将数据转换成XML文档。同样,使用XSU产生的XML文档不会包含属性,然而,你可以在XSU之后通过对XSU所产生的文档执行XSLT转换来重新创建属性。
在这篇文章中,你将了解将带有元素和属性的XML文档转换到Oracle 10g数据库中的表的必要步骤,并且通过将数据库列映射到XML文档来检索带有属性的XML文档的步骤。需要注意的是使用XSU来存储XML文档的功能并不仅仅限于Oracle,你可以在如MySQL等其他的关系数据库中方便的使用。
前期准备
为了使用Oracle数据库,你需要安装Oracle 10g数据库,包括样本数据库模式。你还需要XSU Java API classes。首先,下载并安装XDK 10g。将下面的三个文件加入到你的CLASSPATH变量中,其中代表你的安装路径:
/lib/xsu12.jar
/lib/xmlparserv2.jar
/lib/xdb.jar
创建一个数据库实例.在这篇文章中我将使用叫做OracleDB的数据库实例。为了和数据库建立JDBC连接,你需要合适的JDBC驱动.对于Oracle 10g,将下面的三个文件加入到你的CLASSPATH变量中,其中是你安装Oracle 10g的目录:
/jdbc/lib/ojdbc14.jar
/LIB/servlet.jar
/jdbc/lib/classes12dms.jar
在这篇文章中我将使用catalog.xml的XML文档作为例子,如Listing 1所示。
你需要创建一个数据库表,该表的每一列将对应示例XML文档中每个元素标签和属性。你可以使用下面的SQL脚本来创建一个包含合适列的、名为JOURNAL的数据库表:
CREATE TABLE OE.JOURNAL ( JOURNAL_TITLE VARCHAR(255), PUBLISHER VARCHAR(255), EDITION VARCHAR(255), ARTICLE_SECTION VARCHAR(255), TITLE VARCHAR(255), AUTHOR VARCHAR(255) ). |