您可能已经听到了关于 DB2 的新 Viper 版本的一些议论 —— IBM 的第一个同时支持表格式(基于 SQL 的)和层次式(基于 XML 的)数据结构的数据库管理系统。如果您对 DB2 为 XML 提供新的 “原生支持”(Native Support)感到好奇,并且想快速地入门,那么这篇文章就是为您准备的。
?nANe84 4{o`[l|}I= 为了帮助您快速掌握 DB2 自身的 XML 特性,请完成几个普通的任务,比如:
4Ln4 Xx$ L?Wus[ 创建用于管理 XML 数据的数据库对象,包括一个测试数据库、一些示例表和视图。
<d"`EwR 使用 INSERT 和 IMPORT 语句将 XML 数据填充到数据库中。
(sp:>-)AcS 验证您的 XML 数据。使用 DB2 开发和注册您的 XML 模式,并在导入数据时使用 XMLVALIDATE 选项。
O+OU+!lE 后续文章将包括其他主题,比如使用 SQL 查询、更新和删除 DB2 XML 数据,使用 XQuery 查询 DB2 XML 数据,开发存取 DB2 XML 数据的 Java 应用程序和 Web 组件。
%Sj/ R>[5 9L.+p[z 创建数据库对象
PjT\yI P#"V `|m V 让我们先来创建一个单独的 DB2 Unicode 数据库。在 DB2 Viper 中,只有 Unicode 数据库才能同时存储 XML 文档和 SQL 数据的更多传统格式,比如整数、日期/时间、变长字符串,等等。随后,您将在这个数据库中创建对象来管理 XML 和其他类型的数据。
dRe z eY(@_ qT,[ 创建测试数据库
+.&d)ehTO }m2@o 为了创建一个新的 DB2 Unicode “测试” 数据库,打开 DB2 命令窗口,发出语句来指定 Unicode 编码集合和支持的区域,如 清单 1:
(}L6J}.E{ z'?bt51), c !;/~-1 <O_@{$Zb8X 清单 1. 创建用于存储 XML 数据的数据库
:&j;.YK,V x +)0n6 create database test using codeset UTF-8 territory us
?L_7 B[< r~BN `+ Zk)w`\W4W X s4CUij 一旦创建了 Unicode 数据库,您就不需要发出任何专门的命令或采取任何进一步措施来使 DB2 能够以它自身分层的格式存储 XML 数据,因为您的 DB2 系统已经准备好了。
1jX1(u< w! sJ671? 创建示例表
xS(r%fj a.jRd>7PYN 为了存储 XML 数据,请创建包含一个或多个 XML 列的表。这些表充当文档集合的逻辑容器;在幕后,DB2 实际上使用了不同的存储方案来存储 XML 和非 XML 数据。然而,使用表作为管理各种受支持的数据格式的逻辑对象,简化了管理和应用程序开发问题,特别是当需要在一个单独的查询中集成不同的数据格式时。
*/SINJ _(qiJPp 您可以对 DB2 表进行定义,使其只包含 XML 列、只包含传统 SQL 类型的列或者同时包含两者。本文对后一种情况进行了建模。清单 2 中的例子连接到 “测试” 数据库,并创建了两个表。第一个是 “items” 表,追踪关于货物的销售情况和顾客对货物的评价信息。第二个表追踪的是关于 “客户” 的信息,包括关于联系信息的数据。注意 “comments” 和 “contactinfo” 是基于新的 DB2 XML 数据类型,而所有其他的列都是基于传统 SQL 数据类型的。
hOG~ :P~3 Efd$u5A Ux*n@/K/Bt UwMWpb+o 清单 2. 创建用于 XML 数据的表
_!g6)VH2@ JUtRMA}t connect to test;
MFM3y create table items (
:E8H8U%4 id int primary key not null,
[ '3Z1^L: brandname varchar(30),
PHgxhlw& itemname varchar(30),
+= -9 sku int,
||6.[@M*Y srp decimal(7,2),
|R1s}-5e #p#分页标题#e# comments xml
#k:$ );
tRsO2 create table clients(
N\ )O]d id int primary key not null,
j(\2@Dg\ name varchar(50),
ufuEkr status varchar(10),
A&u`e contactinfo xml
\\B3 O );
7 D/ `U39 , g R'j uTY`%'M0w PP4`,~N( 如果您仔细地查看这些表定义例子,您将注意到 “comments” 和 “contactinfo” 列都没有进行 XML 文档内部结构的定义。这是 DB2 的一个重要特性。用户不需要为了存储数据而预定义一个 XML 数据结构(或者,更准确地说是一个 XML 模式)。事实上,DB2 可以在一个单独的列中存储任何格式良好的 XML 文档,这意味着不同模式的 XML 文档 —— 或没有和任何注册的模式关联的文档 —— 都可以存储在相同的 DB2 列中。当我们讨论如何在 DB2 中存储数据时,本文将深入讨论这个特性。
?_D oW > fBNgZ 创建视图
6ICCsVqp p3#rss 您可以随意地在包含 XML 数据的表上创建视图,就像您可以在只包含传统 SQL 数据类型的表上创建视图一样。清单 3 中的例子创建具有 “Gold” 状态的客户的一个视图:
C/ xs"+pX M" qQ l#}$.R8 e)6fP\l4# 清单 3. 创建一个包含 XML 数据的视图
eHI- >0w 24|/d create view goldview as
6yjcn"Q:0 select id, name, contactinfo
Tl?.=,k from clients where status='Gold';
8l ~/4 &8T-:" /M[}o't!]i 9ivfjKs$-G 关于索引的一点说明
Y $blfWli :6(D{-o 最后,没有必要在 XML 列上创建专门的索引来提高数据的查询速度。因为这是一篇介绍性文章,而且示例数据很少,所以本文不会涵盖到那个主题。然而,在生产环境中,定义一个适当的索引对实现最佳的性能来说很关键。查看本文结尾部分的 “参考资料”,以助于了解 DB2 的新索引技术。
a 3":L=BG Eg5Dvow 存储 XML 数据
w5Y Mksc z@x k$lO 创建好表之后,现在您就可以用数据填充它们了。您可以通过直接发出 SQL INSERT 语句来完成这项工作,或者通过调用 DB2 IMPORT 工具在后台发出 INSERT 语句。
b//?!4*J< N!UU4" 使用 INSERT 语句
g:!*}0%lu] 2l<{g{ 使用 INSERT,您可以直接向 DB2 中填充原始的 XML 数据。如果您已经编写了一个应用程序并在变量中存储了 XML 数据,那么这可能是最容易的方法。但是如果您只是刚开始使用 DB2 Viper,并且不想编写应用程序,那么您可以交互地发出 INSERT 语句(我发现使用 DB2 Command Editor 是很方便的,虽然您也可以使用命令行处理器,如果您更喜欢那么做的话)。
p[gWAQH v5=h6mV` 要使用 DB2 Command Editor,请启动 DB2 Control Center。从顶端的下拉菜单 “Tools” 中选择 Command Editor,将出现一个单独的窗口,如 图 1 所示。
,$GA=HF
F16)&qf@$ 3ywEYE3.P ?OI/Ui' 图 1. DB2 Command Editor
)7 XaS}j #p#分页标题#e#
1l*e }4\ xj( f?P1 在上面的窗格中输入下列语句:
mnjV?2` ]kc"FE F+nf:VZ5 h\c*I8| 清单 4. 交互地插入 XML 数据
+wrDF ^T jb!]:9H8 connect to test;
::9Nx` insert into clients values (77, 'John Smith', 'Gold',
3j0 4'n xmlparse(document '<addr>111 Main St., Dallas, TX, 00112</addr>'
l$ZkE3b preserve whitespace)
GkN5y*0'L )
:OrUWK' &~+]DF1\ Z,k7sf -_*H+0<Xf 单击左侧的绿色箭头来执行该命令。
!'>n;m )V =oQI@|,X 注意,联机提供 XML 数据(如 清单 4 所示)需要您调用 XMLPARSE 函数,以把文档从字符值转换成 XML 类型值。本例中的输入文档相当简单 。如果文档很大或者很复杂,把 XML 数据键入到像清单 4 所示的 INSERT 语句中是不切实际的。在大多数情况下,您使用主机变量或者参数标记编写一个应用程序来插入数据。您将发现本文带有一个简要的 Java 代码编写例子。然而,由于这是一个介绍性的教程,所以我们不会详细地讨论应用程序开发主题。相反,我们将讨论使用数据填充 DB2 XML 列的另一种选择 —— 使用 IMPORT 工具。
ZGQBEgD(bM 2N&Xf0,f 使用 DB2 IMPORT
c/AH`};, * @bLH^@X 如果您准备在文件中包含 XML 数据,DB2 IMPORT 工具为您提供了一个使用数据填充 DB2 表的简单方式。您不需要编写应用程序,只需要创建一个定界的 ASCII 文件,其中包含您想要装载到表中的数据。参数为存储在文件中的 XML 数据指定了适当的文件名称。
h|FK7H lAzGltqy 您可以使用选择的文本编辑器创建一个定界的 ASCII 文件。(按照惯例,这些文件通常都是 .del 类型的)。文件中的每一行都代表了导入到表中的一行数据。如果行中包含 XML Data Specifier (XDS),IMPORT 将读取包含在引用的 XML 文件中的数据,并把数据导入到 DB2 中。例如,图 2 中的第一行包含了 Ella Kimpton 的信息,包括她的 ID、姓名和顾客状态。她的联系信息也包括在 Client3227.xml 文件中。
`:S)p Y?S#zIm
WUY WSp %UZE$4 =F 图 2. 输入到 DB2 IMPORT 的示例定界 ASCII 文件
>3?I<`?mNx N Sh<2d>(B !blfv Client3227.xml 文件的内容如 图 3 所示。就像您看到的,文件包含了 Ella Kimpton 的地址、电话号码、传真号码和电子邮件等 XML 元素。
g #K.e(\ +qll{
V` z$N \*?"bd 图 3. 示例客户 XML 文件
SQf7qAW8 !vK\3- D Afs6</E\? 如果您并不是对所有希望插入的行都有 XML 文件,那么您可能对导入数据感到好奇。这是很容易做到的,忽略输入文件的 XDS 信息即可。例如,图 4 中的 items.del 文件忽略 Item 3641(“Dress to Impress” 套装)的 XML 文件名。结果这一行的 XML 列不包含任何数据。
%s_* J[| Rxsso=3 #p#分页标题#e#
:b>aK={pL flCqdzYr, 图 4. 示例定界 ASCII 文件中的一行没有 XML Data Specifier
~8So`o9q ^J38PQGYX X &+b:; 有了 XML 文件和定界的 ASCII 文件,您现在就可以使用 DB2 IMPORT 了。清单 4 中的下面这个语句将 C:/XMLFILES 目录中的 clients.del文件中指定的内容导入到 “clients” 表中。
7WroFA4 K 6hJea? oK0] .&At _!D{ 清单 4. 将数据导入到 “clients” 表中
L J0_o^Z pG|>Cd import from clients.del of del xml from C:/XMLFILES insert into user1.clients;
3Uz9b35$ Jm. F"BN ;uV8o< XZ HHw}!u 如 图 2 所示的 clients.del 包含了六行数据,包括对六个 XML 文件的引用。成功地执行 IMPORT 命令后的结果输出如 图 5 所示。
F~<%hQm/ @yu u~(x%
ep/{SR gTtw1^4) 图 5. DB2 IMPORT 的示例输出
!N9R|$$=2 2 T4`,FP QC"n66bR 独立软件供应商,例如 Exegenix,提供了将 Word、PDF和其他文档格式转换成 XML 的工具,以便于导入到 DB2 中。(参见 参考资料,获得关于 Exegenix 的更多信息。)
b8;l54j{> _go>g(GTO o`zl0 M 验证 XML 数据
ur.cJI4` A$:l^7 ! INSERT 和 IMPORT 示例只是讨论向表中写入格式良好的 XML 数据。它们并不对数据进行验证 —— 也就是说,它们不验证数据是否符合特定的 XML 模式,并因此坚持使用确定的结构。控制 DB2 那么做是可能的,然而,还是让我们研究另外一种方式来完成这项任务:
T]tTVh^ S_ yEs 步骤 1:创建 XML 模式
dt)I KC _K1*h^Fs 为了验证 XML 数据,您需要定义一个 XML 模式,来指定可接受的 XML 元素、它们的顺序和数据类型,等等。 XML 模式是一个 W3C 行业标准并且是用 XML 编写的。尽管解释 XML 模式的特性超出了本文的范畴,但是 Web 上有各种教程可供参考(参见 “参考资料”)。
swV6X; $P7ZzZ 有许多方式可以开发 XML 模式,从使用您喜爱的文本编辑器到手动创建模式,再到使用工具图形化地设计或生成模式。独立软件供应商,例如 MDXSYS Limited,提供了这样的 XML 工具,IBM 也通过它的 Java™ 集成开发环境提供了 XML 模式生成支持。
@xE7w;3Wx HgMN}r$ 例如,使用 IBM WebSphere® Studio,您可以将 Client3227.xml 文件(如 图 3 所示)导入到 Web 项目中。使用鼠标右击,并选择 Generate -> XML Schema。这将为特定的输入文件生成一个有效的 XML 模式,如 图 6 所示。然后您就可以修改该文件(如果需要)并将其注册到 DB2。
(OM/<yMe^ X<w* 2C. 
#p#分页标题#e#
{Un5y(W '>)*szp] 图 6. 使用 WebSphere Studio 从一个 XML 文件生成 XML 模式
q3=+kz aCf &_9 ZW{Q66 让我们假定您需要使 XML 模式相当灵活,从而使您可以收集不同顾客不同类型的联系信息。例如,某些顾客可能向您提供多个电话号码或电子邮件地址,而其他顾客则没有提供这么多。
;Kr#}y$dn 21(- * gf 图 7 所示的 XML 模式源自 WebSphere Studio 生成的模式,提供了这种灵活性。它包括关于给定元素所允许的最小和最大出现次数(“minOccurs” 和 “maxOccurs”)的附加规范。在本例中,不要求顾客向您提供任何您想要收集的联系信息。然而,如果顾客选择给您电子邮件信息,该模式将启用一致性文档来包含最多 5 个电子邮件地址(即 5 个 “email” 元素值)。
A>_=Y>u!S
jJr|FH(9P O{_oTX= ,bPZz[ L 图 7. 用于客户联系信息的示例 XML 模式
m"AEj4 H $h|9#R^HJ cwwY*Ldo3= 就像您已经注意到的那样,XML 模式也包含类型信息。尽管 图 7 所示的模式只指定所有的基本元素都被视为字符串,但是大部分生产 XML 模式也使用其他数据类型,比如整数、小数、日期,等等。如果您针对一个作为 INSERT 或 IMPORT 操作一部分的给定模式来验证 XML 文档,那么 DB2 将自动向您的 XML 文档添加类型注释。
'mIup] F. lirgTe 步骤 2: 注册 XML 模式
h lIB</~ 17o*ly_$ 创建了一个适当的 XML 模式之后,您就需要向 DB2 注册该模式。IBM 提供多种方式来完成这项任务。您可以从 DB2 Control Center 运行图形化的向导来指导您完成该过程,调用系统提供的存储过程,或直接发出 DB2 命令。在此让我们使用第二种方法,因为它能够帮助您更容易地理解在您那一端 DB2 实质上进行的操作。
;+TPE/- )=mI2 !p 如果您的模式非常大,您可能需要在尝试注册它之前增加应用程序堆的大小。例如,发出下列语句:
O9[G3x89 aJSFEuj# 5L4< ;p R;AR 清单 4. 增加应用程序堆大小
kp.AT>) gaMR;Dtc2M connect to test;
Ze1V _ update db cfg using applheapsz 10000;
BClmeN p:2 W]+) ]mc 7' ;Wh 3- 接下来,注册您的 XML 模式。如果您的 XML 模式没有引用其他 XML 模式,您可能需要用单个命令来注册并完成该过程。否则您还将需要发出单个命令来注册您最初的 XML 模式,添加其他需要的模式并完成注册过程。当模式文件变的非常大时,通常把它的内容分成多个文件来提高可维护性、可读性和重用性。这类似于把一个复杂的应用程序或组件分解为多个模块。关于这个主题的细节,请参考 W3C “XML Schema primer”(参见 “参考资料”)。
g:Ls*Bnz Pa3i~L,U 本文使用了一个简单、独立的 XML 模式。您可以使用下面这个命令将其向 DB2 注册:
~$nS\ 7B>4k4Tv b'rKg`d b%{Y</| 清单 5. 注册 XML 模式
B$ bjQBG%{ Qj#{vj8{ register xmlschema 'http://mysample.org' from 'C:/XMLFiles/ClientInfo.xsd' as
U^bhMDo> user1.mysample complete;
s7:*yxW%/U -I81d_" t*+5< b; hAt ^YWa #p#分页标题#e# 在本例中,ClientInfo.xsd 是 XML 模式文件的名称,它位于 C:/XMLFiles 目录中。该 XML 模式将被注册到 SQL 模式 “user1” 和 XML 模式 “mysample” 下的 DB2 的内部存储库中。本例中的 http://mysample.org 参数只是一个占位符,它指定 XML 实例文档所引用的统一资源标识符 (URI);许多 XML 文档使用名称空间,这是用 URI 指定的。最后,“complete” 子句将指示 DB2 完成 XML 注册过程,以便模式可以用于验证 XML 数据。
;;7 je ;D<~*O 值得注意的是,模式注册过程没有指定模式将应用到表的哪个(些)列。换句话说,模式不等于 SQL 列约束。一个给定的模式可以验证不同表中的各种 XML 列。然而,验证不是自动的。DB2 允许任何格式良好的 XML 文档存储在 XML 列中。如果您想在存储之前验证一个已注册的模式数据,那么您需要指示 DB2 完成这项任务。
sxC&wexNQV .\jQXk>T 步骤 3:导入具有验证的 XML 数据
DU>Aqk{8[ m!vK3Li< 当创建了一个 XML 模式,并将它完全注册到 DB2 中之后,您现在就可以在将 XML 数据插入或导入表中的时候,让 DB2 对这些数据进行验证。现在我们头脑中有了模式验证,再来回顾一下先前的 IMPORT 场景。
M8hFWQSk 0<@? 如果您已经填充了 “clients” 表,您会发现可以非常方便地删除它的内容,或者删除和重新创建表。这只在当您计划像以前一样向表中添加相同的数据时才需要。回想一下被定义为在客户 ID 列上具有一个主键的 “clients”,尝试导入重复的行将失败。
[{*YBx~25^ @Gr*B=d 为了在将 XML 数据导入到 “client” 表时能够对其进行验证,请使用 DB2 IMPORT 的 XMLVALIDATE 子句。清单 6 中的下面这个语句将指示 DB2 使用您先前注册的 XML 模式 (user1.mysample) 作为默认的 XDS (XML Data Specifier),在将它们插入到 “client” 之前验证 clients.del 文件中指定的 XML 文件。
TuF0Us* IF TYYj0\) xeXfQ4)w ifA5f3' 清单 6. 导入具有验证的 XML 数据
AU#?sZ'ms' cA7^(]@4? import from clients.del of del xml from C:/XMLFILES xmlvalidate using xds default
} 86*ng:P1 user1.mysample insert into user1.clients;
/ZRkSn~k% 3AE,5!t$ FuVIhEi* v"x%[_O% 如果 DB2 确定一个 XML 文档不符合指定的模式,那么与该文档相关的整个行都将会被拒绝。图 8 阐释了从 IMPORT 操作的示例输出,在该操作中的六行有一行因为它的 XML 文档不符合指定的模式而被拒绝。
^Yb5 +jd@ Z{b2
\fgs19@i tjt^ 9 图 8. 来自 DB2 IMPORT 的示例输出,其中一行被拒绝
{C7. PJ, !QdT.j93+ cH'*<iuK 值得注意的是,XMLVALIDATE 也可以与 INSERT 语句一起使用,以指示 DB2 在插入之前验证 XML 数据。该语法与 IMPORT 例子所示的相似,即在调用 XMLVALIDATE 子句时指定一个已注册(和已完成)的 XML 模式。(参见 “一个简单的 Java 例子”,获取关于这方面的更多信息。)
:$e/+N/Err C{`1_W n QeooW4O #-j8 kL\4 Up L>!#: ms0<;7x JR|,O/;V 回页首
`k~umT G X uJk 7g; c]3y<i, p6+9UGV*2 =yn<9MFe[ 结束语
.:r] n 7}{Aw<0( #p#分页标题#e# DB2 Viper 提供了一个重要的新能力来支持 XML,包括一个新的 XML 数据类型和底层的引擎级组件,能够以有效的方式自动存储和处理 XML 数据。为了帮助您快速掌握这些特性,这篇文章描述了如何创建一个用于存储 XML 文档的测试数据库和示例表。还回顾了如何用 XML 数据填充数据库。最后总结了 DB2 针对用户提供的模式来验证数据的能力,并提供了示例来向您展示如何入门。
!35z=v3ji q!([bIp+ 现在您已经学习了如何使用 DB2 的新的 “原生” XML 能力存储 XML 数据。至于如何查询那些数据,您将在后续文章中看到,后续文章将向您介绍 DB2 的新的 XQuery 支持,以及它对 SQL 的扩展(有时候叫做 “SQL/XML”)。
~~XsAA~" }:y,=X%- 致谢
d(8v&hI4 OBpGqIhf 感谢 Rav Ahuja、Matthias Nicola 和 Gary Robinson 对文本提出的宝贵意见。
qD e .gT wFnzo! IkG",dAE6 AxF7`: e* HJ^&tz{ e(e EnYEA }w_f:f _kc.GX 回页首
QT)AUP o/ 4Ihh~d y`m&t% L}+8[kd#kk {1'+NhE 下载
*CPF!| (;N#~4xry 描述 名字 大小 下载方法
D* Lg Qy Sample code samples.zip 4KB FTP|HTTP
u 0e?U\Rh X]CziYQ 关于下载方法的信息 Get Adobe® Reader®
V,C!=2 r&SQos@sT VXK<OPox giNL7"mZ~ 参考资料
7jmA Q7wx Upc/Uuy" 学习
V13:\&g ]FH@: ZPl 您可以参阅本文在 developerWorks 全球站点上的 英文原文。
DVQi5kL jl5wj -bG~ .FD DB2 Viper Web 站点: 更多地了解 DB2 对 XML 的支持。
sn6An} `6M%cWj{6` 1D1:Cca “DB2 Viper 新特性”(developerWorks,2006 年 2 月):获取关于 DB2 测试版中新的 XML 技术的概览。
.=zm:_EPp; hnK%>,iPB b5}3z$M Exegenix 提供了工具,可以帮助您将 Word、 PDF 和其他文档格式转换成 XML,用于导入到 DB2 中。
S\|1(`5D] I;L-?TPU Bc#uMYlx} XML 模式:
~FaB R=v Web 上可以得到的各种教程 解释了 XML 模式的特性。
RXoVA\J) oF{e-9+? z|c?v c W3C XML Schema primer 提供了一个关于 XML Schema 工具的轻松易读的描述,主要是帮助快速地理解如何使用 XML Schema 语言创建模式。
D,0h L%5 ktXIa?a( UFD{w9Ou “Firing up the Hybrid Engine”(DB2 Magazine,2005 年第 3 季度):阅读关于 IBM 的混合式数据库管理系统的更多资料。
a+LGUG]'Y V,Lz6WW2 o/ Dk" System RX: One Part Relational, One Part XML(SIGMOD conference,2005 年):了解关于构建一个复合关系型和 XML DBMS 的架构和设计方面的信息。
a2r{Ki IO|=~ b~j<l\ “Native XML Support in DB2 Universal Database”(VLDB conference,2005 年):阅读关于 DB2 XML 支持的更多资料。
U[yU?]ZbX ,*%22M #p#分页标题#e# *%5/mx9> “Managing XML for Maximum return”(IBM, 2005 年 11 月):这本白皮书研究了 DB2 对 XML 支持的业务收益。
\; ? _v.x^*9 mP,oWM “结合使用 DB2 原生 XML 与 PHP”(developerWorks,2005 年 11 月):使用传统关系型数据库技术对比和对照 DB2 的新 XML 支持。
]B?}2V^ 9q"t-L*X: Deqj2Jv 随时关注 developerWorks 技术活动和 webcasts。
BFk)|(Q,l m?jw+Ul' xDTy7$KZD developerWorks Information Management 专区:了解关于 DB2 的更多信息。寻找技术文档、how-to 文章、教程、下载、产品信息,等等。
=l.E+JX_Q ]<mwL. G 获得产品和技术
p.BD4t$ b _TNgY 使用 IBM 试用软件 构建您的下一个开发项目,该软件可以从 developerWorks 直接下载。
KN%N<!sz |'p dg! }b4= ~ r xc=["# 讨论
Y4}.];.;p <kW4gjQD 通过参与 developerWorks blogs 加入 developerWorks 社区。
$gEQy2# Z 6-Tf_Z,x m(Z6q0pE+ ~B1F5fW +*4UPh} | zrN7vB4 关于作者
q^ng$MB2)i ~/AE$!g L@_~5S !cA}cNS@}j C. M. Saracco 在 IBM 硅谷实验室的 DB2 XML 组织内工作。她主要的研究领域是数据库管理、XML、Web 应用程序开发和相关内容。