DB2 Viper 快速入门
您可能已经听到了关于 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 应用程序开发和相关内容。
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 应用程序开发和相关内容。
版权声明:本文由驱动中国整理发布,转载需注明出处与原文链接。如有疑问请联系
editor@qudong.com。
本文价值
★★★★★
—
成为第一个评分的人
登录后为本文打分
评论加载中…