原着:Igor Dayen
June 20, 2001
翻译:寒蝉退士(mhss)
译者声明:译者对译文不做任何担保,译者对译文不拥有任何权利并且不负担任何责任和义务。
原文:http://www.xml.com/pub/a/2001/06/20/databases.html
介绍:
解决把 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 的一个对象引用:






