介绍
解决把 xml 有效的.自动的转换出入关系数据库的问题有各种方式.数据库厂商比如 ibm.microsoft.oracle 与 sybase 已经开发了转换 xml 到数据库表中的辅助工具.各种解决方案如下. oracle xml sql utility 把 xml 文档元素建模为一组嵌套的表.通过使用 oracle 对象数据类型建模套入的元素."sql-to-xml"转换使用被对象数据类型引用的表,与嵌套的元素之间的一到一关联来构造 xml 文档."xml-to-sql"可能要求数据模型的改进(从关系转换到对象-关系)或重新构造最初的 xml 文档. ibm db2 xml extender 允许存储 xml 文档为 blob 式的对象或分解到一组表中.后者得变换叫做 xml 收集,以 xml 1.0 语法定义. microsoft 通过扩展 sql-92 并介入 openxml 行集来解决问题. sybase adaptive server 介入 resultsetxml java 类作为在两个方向上处理 xml 文档的基础. 在这篇文章中,我们将详细讨论这些厂商的解决方案.此后,我们将尝试回答下列问题: 我们可以调整并简化问题吗? 在异构数据库环境中正确的途径是什么? 我将使用下列词汇表作为一个例子. <!-- 简单类型 --> <!element currency1 (#pcdata)> <!attlist currency1 e-dtype nmtoken #fixed "string" e-dsize nmtoken #fixed "3"> <!element currency2 (#pcdata)> <!attlist currency2 e-dtype nmtoken #fixed "string" e-dsize nmtoken #fixed "3"> <!element amount (#pcdata)> <!attlist amount e-dtype nmtoken #fixed "decimal"> <!element settlement (#pcdata)> <!attlist settlement e-dtype nmtoken #fixed "date"> <!element bankcode (#pcdata)> <!attlist bankcode e-dtype nmtoken #fixed "string"> <!element bankacct (#pcdata)> <!attlist bankacct e-dtype nmtoken #fixed "string"> <!-- 派生类型 --> <!element account (bankcode, bankacct)> <!element fxtrade (currency1, currency2, amount, settlement, account)>oracle xml-sql utility (xsu)
sql 到 xml 的映射 oracle 把对象引用链从数据库转换到 xml 文档的层次结构中.在对象-关系数据库,在表 fxtrade 中的字段 account 被建模为类型 accounttype 的一个对象引用: create table fxtrade { currency1 char (3), currency2 char (3), amount numeric (18,2), settlement date, account accounttype // 对象引用 } create type accounttype as object { bankcode varchar (100), bankacct varchar (100) } 从给定的对象-关系模型生成相应的 xml 文档(使用 "select * from fxtrade")如下 <?xml version="1.0"?> <rowset> <row num="1"> <currency1>gbp</currency1> <currency2>jpy</currency2> ... 下一页