You are on page 1of 17

Khai thc cc ch mc XML tng hiu nng truy

vn XML trong DB2 9


Muc d: Trung bnh
Matthias Nicola, Chuyn gia DB2 , IBM Silicon Valley Laboratory
23 11 2009
Cp nht 29 07 2009
DB2 9 dam bao luu tru pureXML v cung cp XQuery v SQL/XML nhu l cc ngn ngu truy vn. Cc chi
muc XML rt cn thit cho hiu sut truy vn cao, nhung vic su dung chng d dnh gi truy vn phu thuc
vo cch tao nn cc vi tu truy vn. Bi vit ny trnh by mt tp cc huong dn d vit cc truy vn XML v
tao cc chi muc XML mt cch ph hop d cho cc chi muc tng tc d truy vn cua ban nhu mong mun.
Ngoi ra hoc d tm kim trong cc k hoach thuc hin truy vn XML nhm pht hin cc vn d hiu nng v
tm ra cch sua chua chng. Mt "cm nang" ("cheat sheet") c th tai v tm tt cc huong dn quan trong
nht. [30.07.2009: Bi vit ny d duoc cap nhat cho DB2 9.5 v 9.7, trong d c thm cc truy van th du
SQL/XML.--Bin tap.]
Gii thiu
DB2 9 cung cp luu tru pureXML, cng voi cc chi muc XML, XQuery v SQL/XML nhu ngn ngu truy vn, h tro luo
d XML, cc mo rng XML dn cc tin ch nhu: Nhp/Xut v Chay bo co trang thi (Runstats). Cung nhu di voi c
truy vn quan h, cc chi muc l diu quyt dinh di voi hiu sut cao cua XQuery v cc cu lnh SQL/XML cua ban.
DB2 cho php ban dinh nghia cc chi muc XML voi duong dan cu th trn cc ct XML. Diu d c nghia ban c th su
dung chng d dnh chi muc cc phn tu v cc thuc tnh duoc chon, thuong duoc su dung trong cc vi tu v cc php k
ni. V du, khi su dung du liu mu trong Hnh 1, chi muc sau l idx1 s c ch cho vic tm kim bang v cc kt ni du
vo cc dinh danh (ID) tc gia trn tt ca cc ti liu trong ct XML bookinfo cua bang books.



Hnh 1. Ti liu XML th d theo d|nh dng vn ban (tun t) v d|nh dng (phn cp) d duc phn tch


Do DB2 khng bt buc ban phai kt hop mt luoc d XML don voi tt ca cc ti liu trong mt ct XML, cc kiu du li
ceafe fab1e books{book1nfo XML}

ceafe 1ndex 1dx1 on books{book1nfo}
geneafe keys us1ng xm1paffen /book/aufhos/aufho/01d /book/aufhos/aufho/01d /book/aufhos/aufho/01d /book/aufhos/aufho/01d
as sq1 doub1e
Page 1 of 17 Khai thc cc chi muc XML d tng hiu nng truy vn XML trong DB2 9
cho cc phn tu v cc thuc tnh cu th khng c quyn uu tin (a-priori) d bit. V vy, mi chi muc XML di hoi ban
phai chi dinh mt kiu dch. Ban s thy sau trong bi vit ny l do cc kiu lai quan trong. Cc kiu du liu c sn cho c
chi muc XML l:
VARCHAR(n): Cho cc nt c cc gi tri chui c chiu di ti da n d bit.
VARCHAR HASHED: Cho cc nt c cc gi tri chui c d di ty . Chi muc ny c chua cc gi tri bm (hash)
cua chui thuc t v c th duoc su dung chi cho cc vi tu so snh bng, khng cho vi tu so snh xp hang (range).
DOUBLE: Cho cc nt c kiu s bt ky.
DATE and TIMESTAMP: Cho cc nt c cc gi tri ngy thng hoc du thoi gian.
Chiu di cua mt chi muc VARCHAR(n) l mt su rng buc cung nhc. Nu ban chn mt ti liu vo ch m o d gi
tri cua mt phn tu c chi muc hoc thuc tnh vuot qu d di ti da n, vic chn s khng thnh cng. Tuong tu, cu lnh
create index cho mt chi muc VARCHAR(n) khng chay nu bt gp mt gi tri lon hon n.
Theo mc dinh, cc kiu du liu cho cc chi muc DOUBLE, DATE hoc TIMESTAMP khng phai l mt su rng buc
kh thuc hin. V du, chi muc idx1 trn thuc tnh dinh danh (ID) tc gia duoc dinh nghia l DOUBLE v nguoi ta mong
ID ny c gi tri s. Nu ban chn thm mt ti liu vo ch m o d mt ID cua tc gia c gi tri "MN127", dy khng
phai s, ti liu vn duoc chn vo, nhung gi tri " MN127" khng duoc thm vo chi muc. Diu ny l chnh xc v an
ton v chi muc DOUBLE chi c th dnh gi cc vi tu s s khng bao gio khop voi gi tri "MN127". Nhu vy, gi tri n
c th duoc loai bo khoi chi muc mt cch an ton.
Tu DB2 9.5 ban c th thm cu ty chon REJECT INVALID VALUES vo dinh nghia chi muc XML cua ban. Cu ny
buc tun theo cc kiu DOUBLE, DATE hoc TIMESTAMP cua cc chi muc nhu l mt su rng buc cung nhc. Nu
ban dinh nghia chi muc sau dy, mt ti liu m o d mt dinh danh (ID) tc gia c gi tri "MN127" khng th duoc b
sung v cn khng c mt trong ct XML, khi ban tao chi muc ny.

Ban c th tm thy thm cc chi tit v dinh nghia cc chi muc XML trong "DB2 pureXML Cookbook". Trong thao lun
sau dy v cch su dung chi muc XML chng ti cung gia dinh rng ban d quen thuc voi cc khi nim co ban v truy
vn du liu XML trong DB2. D bit thm thng tin, tham khao cc bi vit truoc dy, "Query DB2 XML Data with
SQL" (Truy vn du liu XML DB2 voi SQL) (developerWorks, 03.2006) v "Query DB2 XML data with XQuery" (Truy
vn du liu XML DB2 voi Xquery) (developerWorks, 04.2006) cho mt su khoi du, cung nhu "pureXML in DB2 9:
Which way to query your XML data?" (pureXML trong DB2 9: Dng cch no d truy vn du liu XML cua ban)
(developerWorks, 06.2006) voi nhiu v du v chi tit hon.




Tnh hp l ca chi mc XML di vi cc cu lnh XQuery v
SQL/XML
Cung nhu di voi cc truy vn quan h, cc chi muc l diu quyt dinh dam bao hiu nng cao cua cc cu lnh XQuery v
SQL/XML cua ban. Khi ung dung cua ban trnh ra mt truy vn quan h hay truy vn XML cho DB2, trnh bin dich truy
vn so snh cc vi tu truy vn voi cc dinh nghia chi muc hin c v quyt dinh xem c th su dung bt ky cc chi muc c
sn no d thuc hin truy vn khng. Qu trnh ny duoc goi l "khop chi muc" v tao mt tp (c th rng) cua cc chi
muc hop l di voi truy vn cu th. Tp ny l du vo cho trnh ti uu ha (optimizer) theo chi ph, n quyt dinh c hay
khng su dung cc chi muc hop l bt ky. Trong bi vit ny, tp trung vo khop chi muc chu khng phai lua chon chi m
cua trnh ti uu ha. Khng c nhiu thu m ban c th lm voi cc quyt dinh cua trnh ti uu ha, tru chay "runstats" d
dam bao trnh ti uu ha voi cc thng k chnh xc v du liu cua ban. Tuy nhin, c rt nhiu thu m ban c th lm d
dam bao khop chi muc.
Khop chi muc thuong l d trong kiu quan h. DB2 c th su dung mt chi muc duoc dinh nghia trn mt ct quan h duy
nht d tra loi bt ky vi tu bng hay vi tu xp hang trn ct ny. Tuy nhin, voi cc ct XML diu ny phuc tap hon. Trong
khi mt chi muc trn mt ct quan h chua tt ca cc gi tri tu ct d, mt chi muc XML chi chua cc gi tri cua cc nt m
n khop ca hai mu XML v kiu du liu XML trong dinh nghia chi muc. V th, mt chi muc XML c th duoc dng d
ceafe 1ndex 1dx1 on books{book1nfo}
geneafe keys us1ng xm1paffen /book/aufhos/aufho/01d
as sq1 doub1e kLJLC1 lNvALlD vALuL5 kLJLC1 lNvALlD vALuL5 kLJLC1 lNvALlD vALuL5 kLJLC1 lNvALlD vALuL5
Page 2 of 17 Khai thc cc chi muc XML d tng hiu nng truy vn XML trong DB2 9
dnh gi mt vi tu truy vn XML chi khi chi muc ny c kiu du liu "dng" v chua t nht tt ca cc nt XML no thoa
mn vi tu d. Do d, c hai yu cu quan trong d lua chon chi muc XML:
1. Dinh nghia chi muc XML l bng hoc t han ch hon vi tu truy vn (bao hm - "containment").
2. Kiu du liu cua cc chi muc khop voi kiu du liu trong vi tu truy vn.
Bi vit ny giai thch cch thit k cc chi muc XML v cc truy vn cua ban d dam bao rng cc yu cu ny duoc dp
ung v cch trnh nhung cam by ph bin. Diu ny bt du voi su hiu bit cc k hoach thuc hin truy vn cua ban. C
cng cu giai thch hin c trong DB2, chng han nhu Visual Explain (Giai thch truc quan) v db2exfmt, c th duoc su
dung d xem cc k hoach thuc hin truy vn XQuery v SQL/XML ging nhu khi chng c th lm cho SQL truyn
thng.




nh gi truy vn XML: Cc k hoach thc hin v cc ton t
mi
D thuc hin cc truy vn XML, DB2 9 gioi thiu ba ton tu truy vn bn trong moi, duoc goi l XSCAN, XISCAN v
XANDOR. Cng voi cc ton tu truy vn hin c (nhu TBSCAN, FETCH v SORT) cc ton tu moi ny cho php DB2
tao ra cc k hoach thuc hin cho SQL/XML v XQueries. By gio hy xem xt ba ton tu moi v cch chng lm vic
cng nhau voi cc chi muc XML trong mt k hoach thuc hin truy vn.
XSCAN (XML Document Scan-Qut ti liu XML)
DB2 su dung ton tu XSCAN d nghin cuu cc cy ti liu XML v nu cn, d dnh gi cc vi tu v trch ra cc doan t
liu v cc gi tri. XSCAN khng phai l mt "hoat dng qut bang XML" nhung n c th xut hin trong mt k hoach
thuc hin sau khi vic qut bang xu l mi mt ti liu.
XISCAN (XML Index Scan-Qut chi mc XML)
Cung ging nhu ton tu qut chi muc quan h hin c cho cc chi muc quan h (XSCAN), ton tu XISCAN thuc hin cc
vic tra cuu hoc qut trn cc chi muc XML. XISCAN ly mt vi tu gi tri lm du vo, chng han nhu mt cp duong
dn- gi tri nhu /book[price = 29] hoc where $i/book/price = 29. N tra v mt tp cc dinh danh (ID) hng v
cc dinh danh nt. Cc ID hng chi r cc hng c chua cc ti liu du tiu chun v cc ID nt chi r cc nt du tiu chu
trong cc ti liu ny.
XANDOR (XML Index AND'ing-AND chi mc XML)
Ton tu XANDOR dnh gi dng thoi hai hoc nhiu vi tu bng bng cch diu khin nhiu XISCAN. N tra v cc ID
hng cua cc ti liu dp ung tt ca cc vi tu ny.
By gio hy xem xt mt truy vn mu (trong k hiu XQuery v SQL/XML tuong duong) d hiu k hoach thuc hin cu
n khi khng c chi muc, c mt chi muc v c nhiu chi muc:

Trong Hnh 2, ban thy ba k hoach thuc hin khc nhau cho truy vn ny (don gian ha kt qua du ra tu db2exfmt). T
nht l doc cc k hoach thuc hin tu ton tu bn tri thp nht trong cy d, do lung logic trong k hoach l tu duoi dy
ln trn dinh v tu tri sang phai.
-- Xquey:
xquey fo $1 1n db2-fn:xm1co1umn{"8OOk5.8OOklNIO"}
Whee $1/book/f1f1e = "Dafabase sysfems" and $1/book/p1ce = 29
efun $1/book/aufhos

-- 5qL/XML:
se1ecf XMLquLkY{$1/book/aufhos pass1ng book1nfo as "1"}
fom books
Whee XMLLXl515{$1/book|f1f1e = "Dafabase sysfems" and p1ce = 29]
pass1ng book1nfo as "1"}

-- 1Wo lndexes:
ceafe 1ndex 1dx1 on books{book1nfo} geneafe keys
us1ng xm1paffen /book/f1f1e as sq1 vacha{50}

ceafe 1ndex 1dx2 on books{book1nfo} geneafe keys
us1ng xm1paffen /book/p1ce as sq1 doub1e
Page 3 of 17 Khai thc cc chi muc XML d tng hiu nng truy vn XML trong DB2 9
K hoach tn cng bn tri (a) duoc su dung nu khng c chi muc hop l no cho cc vi tu trong truy vn ny. Ton tu
qut bang (TBSCAN) doc tat ca cc hng tu bang "BOOKS". Di voi mi hng, ton tu kt ni lp lng nhau (NLJOIN)
chuyn mt con tro toi ti liu XML tuong ung voi ton tu XSCAN. Nhu vy, NLJOIN khng hnh dng nhu php kt n
kinh din voi hai chn du vo, nhung tao diu kin truy cp du liu XML cho ton tu XSCAN. Ton tu XSCAN duyt
tung ti liu, dnh gi cc vi tu v trch ra tu phn tu tc gia ("authors") nu cc vi tu duoc thoa mn. Ton tu RETURN
hon thnh vic thuc hin truy vn v tra v kt qua truy vn toi API.

Hnh 2. Ba k hoch thc hin (a) khng c chi mc no, (b) mt chi mc, (c) hai chi mc

Nu ban c mt chi muc cho mt trong hai vi tu, v du nhu chi muc idx1 trn /book/price, ban s thy mt k hoach th
hin tuong tu nhu k hoach (b) trong Hnh 2. XISCAN khao st k chi muc voi cp duong dn-gi tri (/book/price, 29)
v tra v cc ID hng cho cc ti liu o d c gi l 29. Cc ID hng ny duoc sp xp d loai bo cc hng trng lp (nu
c) v ti uu ha cc I/O k tip vo bang. Ton tu qut ID hng (RIDSCN) qut cc ID hng, kch hoat hng, v chuyn
cc ID hng dn ton tu FETCH. Di voi mi ID hng, ton tu FETCH doc hng tuong ung tu bang. Loi ch cua k hoach
ny l chi c mt phn nho trong s cc hng trong bang duoc ly ra, c nghia l chi nhung hng m "gi" l 29. Cch lm
ny rt loi so voi vic qut ton b bang d doc moi hng. Di voi mi hng duoc ly v, ton tu XSCAN xu l ti liu
XML tuong ung. N dnh gi vi tu theo "tiu d" ("title") v nu vi tu thoa mn, trch ra phn tu "authors". C th c nhi
ti liu m vi tu thu hai khng dng v XSCAN vn c th thuc hin rt nhiu cng vic d loai chng ra. V th, thm ch
ban c th thy hiu nng tt hon nu vi tu thu hai cung duoc dng mt chi muc.
Nu ban c cc chi muc cho ca hai vi tu ban c th xem k hoach thuc hin (c) trong Hnh 2. K hoach ny su dung hai
XISCAN, mt cho mi vi tu v chi muc. Ton tu XANDOR su dung cc XISCAN d khao st lun phin trong hai chi m
d tm cc ID hng cua cc ti liu khop voi ca hai mt cch hiu qua. Ton tu FETCH sau d chi ly ra cc hng ny, do
d giam thiu I/O dn bang. Di voi mi ti liu, XSCAN trch ra phn tu "authors" k tip nhau. Nu cc vi tu cua ban bao
gm // hoc * trong duong dn hoc nu ban su dung cc php so snh thu hang (nhu l < v >), ban s thy ton tu V
(AND) (IXAND) chi muc, thay cho XANDOR. Diu hop l l, ca hai du thuc hin cng nhim vu nhung voi cc kiu c
vi tu khc nhau v voi vic ti uu khc nhau.
Trnh ti uu ha c th quyt dinh khng su dung mt chi muc ngay ca khi n cn duoc dng. V du, trnh ti uu ha c th
chon k hoach (b) hon l k hoach (c) nu chi muc thu hai khng lm giam dng k s hng duoc ly tu bang, chng han
nhu nu chi ph truy cp chi muc lon hon chi ph duoc loi v I/O dn bang. Tuy vy, ban mun chc chn rng trnh ti u
ha xem xt tt ca cc chi muc hop l d sau d chon k hoach c chi ph thp nht v thoi gian thuc hin ngn nht. Ni
cch khc, ban mun quan st ca hai yu cu di voi tnh hop l cua chi muc XML:
Chi muc XML chua t nht tt ca cc nt XML thoa mn vi tu d.
Kiu du liu trong vi tu truy vn v dinh nghia chi muc du tuong thch.



Page 4 of 17 Khai thc cc chi muc XML d tng hiu nng truy vn XML trong DB2 9

Cc k t dai din trong cc chi mc XML v cc v[ t truy vn
Cc k tu dai din // v * c th anh huong dn mi quan h bao hm giua mt chi muc v mt vi tu truy vn. Diu ny l
do cc biu thuc duong dn nhu l /book/price v //price khc nhau. Duong dn /book/price nhn bit tt ca cc
phn tu price l phn tu con truc tip cua phn tu "book" Tuy nhin, duong dn //price nhn bit cc phn tu price
bt ky o du tai muc bt ky cua mt ti liu XML. Nhung, /book/price nhn bit mt tp con cua cc phn tu
duoc //price chi r. Nguoi ta ni rng //price "c chua" /book/price nhung khng xoay trn.
By gio xem cch m n anh huong dn lua chon chi muc nhu th no. Hy ly truy vn sau dy lm mt v du. N chi ra
bn muc d thay di cua mnh d where cua n trong Bang 1.

Hai ct du mt bn phai trong Bang 1 trnh by hai dinh nghia chi muc thay th v cc hng trong bang chi ra cc hng n
cua cc vi tu c th (+) hoc khng th (-) duoc dnh gi boi mt trong s cc chi muc. By gio hy buoc qua cc hng
trong Bang 1 d nghin cuu lua chon chi muc cho tung vi tu.
Di voi vi tu du tin, chi muc trn /book/price khng hop l v n chi chua cc phn tu "gi" (price) l phn tu con tr
tip cua phn tu "book". Chi muc khng chua phn tu "price" o muc su hon, muc ny c th tn tai trong bang v c cc
su khop tim nng voi duong dn vi tu $i//price. V vy, nu DB2 d su dung chi muc trn /book/price n c th tr
v mt kt qua khng dy du. Chi muc thu hai, trn //price, c hop l v n c chua tt ca cc phn tu price o muc t
liu bt ky, cn thit cho vi tu d.
Vi tu thu ba su dung du sao (*) l mt k tu dai din nhu l n tm kim bat kv phn tu con no duoi "book" c gi tri l
29. Khng chi c cc phn tu "price" c th dp ung vi tu ny. V du, mt ti liu c gi tri 29 trong phn tu /book/title
s l su khop hop l. Tuy nhin, cc phn tu tiu d (title) khng duoc bao gm trong mt trong hai chi muc trong Bang
1. V vy, nguoi ta khng th su dung ca hai chi muc v DB2 c th tra v cc kt qua khng dy du cho vi tu ny.


Bang 1. Tnh hp l v chi mc vi cc k t di din trong cc chi mc v cc v| t XML

Vi tu thu tu $i/*/price = 29 tm kim cc phn tu price trong phn tu gc bat kv, khng chi " book". Nu c mt ti
liu c mt duong dn /journal/price, th n c th thoa mn vi tu $i/*/price = 29, nhung n s khng c trong
chi muc trn /book/price. Do d, nguoi ta khng th su dung chi muc ny v DB2 mt ln nua s c nguy co tra v m
kt qua truy vn khng dy du. Tuy nhin, chi muc trn //price chua phn tu price bt ky, khng phn bit phn tu gc.
Tm lai, trnh bin dich truy vn DB2 lun cn c kha nng chung to duoc chi muc l nhu nhau hoc t han ch hon vi tu
d n chua tt ca moi thu m vi tu dang tm kim.
Hy nhn thuc rng vic su dung cc k tu dai din trong cc dinh nghia chi muc c th v tnh lm cho chi muc c thm
nhiu nt hon cn thit. Bt cu o du c th, nn su dung duong dn chnh xc dn cc phn tu hoc cc thuc tnh mong
mun trong cc dinh nghia chi muc v cc truy vn, m khng dng cc k tu dai din. C th dng cc mu chi muc XML
rt chung chung nhu l //* hoc //text() nhung nn su dung cn thn. Mt chi muc trn //* s thm ch dnh chi mu
cc phn tu khng phai l, chng thuong khng c loi v c th d dng vuot qu su rng buc v d di cua mt chi mu
Varchar(n).


XquLkY
fo $1 1n db2-fn:xm1co1umn{"8OOk5.8OOklNIO"}
Whee $1/book/p1ce = 29
efun $1/book/aufhos
#
Predicate/Index
Definition
...using xmlpattern '/book/price' as sql
double;
...using xmlpattern '//price' as sql
double;
1 where $i//price = 29 - +
2 where $i/book/price = 29 + +
3 where $i/book/* = 29 - -
4 where $i/*/price = 29 - +
Page 5 of 17 Khai thc cc chi muc XML d tng hiu nng truy vn XML trong DB2 9


Cc vng tn trong cc chi mc v cc v[ t truy vn XML
Tnh hop l v chi muc XML di hoi su ch cua ban nu c bao gm cc vng tn. Truoc ht, nu cc ti liu XML trong
bang cua ban chua cc vng tn, ri dinh nghia chi muc s cn phai tnh dn n. Diu ny lai dn dn bao hm chi muc/v
tu. Hy ly ti liu XML v dinh nghia chi muc sau lm mt v du:



Chi muc idx3 ny khng chua bt ky dim vo chi muc no cho ti liu mu ny boi v n duoc dinh nghia l mt chi m
cho cc phn tu /book/price voi mt vng tn rng. Tuy nhin, bt ky trong s cc dinh nghia chi muc sau dy c th
duoc su dung d dnh chi muc phn tu price mt cch ph hop:

Chi muc idx4 khai bo vng tn v tin t tuong minh d khop voi ti liu. Chi muc idx5 khai bo vng tn nhu l mt
vng tn mc dinh v do d khng su dung mt tin t trong mu XML /book/price v cc vng tn mc dinh l ngm
dinh. Chi muc idx6 chi don gian su dung cc k tu dai din d khop voi vng tn bt ky. Cng cc ty chon du duoc ph
khi ban tao cc vi tu trong cc cu lnh XQuery hoc SQL/XML:
Truy vn 4:

Truy vn 5:

Truy vn 6:
<bk:book xm1ns:bk="hffp://mybooks.og" xm1ns:bk="hffp://mybooks.og" xm1ns:bk="hffp://mybooks.og" xm1ns:bk="hffp://mybooks.og">
<bk:f1f1e>Dafabase 5ysfems</bk:f1f1e>
<bk:p1ce>29</bk:p1ce>
</bk:book>
CkLA1L lNDLX 1dx3 ON books{book1nfo}
GLNLkA1L kLY5 u5lNG XMLPA11LkN /book/p1ce A5 5qL DOu8LL
CkLA1L lNDLX 1dx4 ON books{book1nfo} GLNLkA1L kLY5 u5lNG XMLPA11LkN
dec1ae namespace bk="hffp://mybooks.og" /bk:book/bk:p1ce A5 5qL DOu8LL

CkLA1L lNDLX 1dx5 ON books{book1nfo} GLNLkA1L kLY5 u5lNG XMLPA11LkN
dec1ae defau1f e1emenf namespace "hffp://mybooks.og" /book/p1ce A5 5qL DOu8LL

CkLA1L lNDLX 1dx6 ON books{book1nfo} GLNLkA1L kLY5 u5lNG XMLPA11LkN
/":book/":p1ce A5 5qL DOu8LL
-- Xquey:
XquLkY dec1ae namespace bk="hffp://mybooks.og" dec1ae namespace bk="hffp://mybooks.og" dec1ae namespace bk="hffp://mybooks.og" dec1ae namespace bk="hffp://mybooks.og"
fo $b 1n db2-fn:xm1co1umn{"8OOk5.8OOklNIO"}/bk:book
Whee $b/bk:p1ce < 10
efun $b

-- 5qL/XML:
se1ecf book1nfo
fom books
Whee XMLLXl515{dec1ae namespace bk="hffp://mybooks.og" dec1ae namespace bk="hffp://mybooks.og" dec1ae namespace bk="hffp://mybooks.og" dec1ae namespace bk="hffp://mybooks.og"
$b/bk:book|bk:p1ce < 10]
pass1ng book1nfo as "b"}
-- Xquey:
XquLkY dec1ae defau1f e1emenf namespace "hffp://mybooks.og" dec1ae defau1f e1emenf namespace "hffp://mybooks.og" dec1ae defau1f e1emenf namespace "hffp://mybooks.og" dec1ae defau1f e1emenf namespace "hffp://mybooks.og"
fo $b 1n db2-fn:xm1co1umn{"8OOk5.8OOklNIO"}/book
Whee $b/p1ce < 10
efun $b

-- 5qL/XML:
se1ecf book1nfo
fom books
Whee XMLLXl515{dec1ae defau1f e1emenf namespace "hffp://mybooks.og" dec1ae defau1f e1emenf namespace "hffp://mybooks.og" dec1ae defau1f e1emenf namespace "hffp://mybooks.og" dec1ae defau1f e1emenf namespace "hffp://mybooks.og"
$b/book|p1ce < 10]
pass1ng book1nfo as "b"}
-- Xquey:
Page 6 of 17 Khai thc cc chi muc XML d tng hiu nng truy vn XML trong DB2 9

Bang 2 c mt hng cho mi mt truy vn trong ba truy vn ny v mt ct cho mi mt trong cc chi muc tu idx3 dn
idx6 d dinh nghia o trn. Ban c th thuc hin mt s cc quan st quan trong tai Bang 2. Truoc tin, idx3 khng c m
vng tn s khng th duoc su dung cho cc truy vn bt ky xem xt cc vng tn. Tip theo, ban thy rng cc hng cho
truy vn 4 v truy vn 5 c cc dim vo ging nhau v cc ct cho cc chi muc idx4 v idx5 cung c cc dim vo chi
muc ging nhau. Diu ny l do cc dinh nghia vng tn tuong minh v cc dinh nghia vng tn mc dinh l cng logic v
chi l k php khc nhau cho cng mt thu. Ban c th su dung chi muc no cung duoc m khng anh huong dn su khop
chi muc. Chi muc idx6 c cc k tu dai din cua vng tn l hop l cho tt ca cc truy vn mu cua ban v thm ch n c
th duoc su dung cho mt vi tu khng c mt vng tn, chng han nhu $b/price < 10. Chi muc idx6 cung l chi muc
duy nht khop voi vi tu trong truy vn 6. Cc chi muc idx4 v idx5 chua cc dim vo chi muc cho mt vng tn cu th
nhung khng th duoc su dung cho truy vn 6 dang tm kim gi cua sch trong vng tn bat kv. Do d, yu cu v tnh bao
hm bi vi pham.

Bang 2. La chn chi mc vi cc vng tn trong cc chi mc v cc v| t XML




Kiu d liu trong cc chi mc XML v cc v[ t truy vn
Ngoi cc chi muc thch hop hoc tnh bao hm vi tu voi cc k tu dai din v cc vng tn, yu cu thu hai di voi tnh
hop l v chi muc l cc kiu du liu cua cc vi tu v cc chi muc cn phai khop. Trong tt ca cc v du truoc, phn
tu /book/price lun lun duoc dnh chi muc l DOUBLE. Nhung, ban c th quyt dinh dnh chi muc cc gi sch nh
l VARCHAR, nhu chi ra trong Bang 3. Tuy nhin, luu rng cc vi tu gi tri cung c mt kiu du liu do kiu gi tri b
chu xc dinh. Mt gi tri trong cc du nhy kp lun lun l mt chui, nhung mt mt gi tri s khng c du nhy kp
duoc th hin nhu l mt s. Nhu ban thy trong Bang 3, mt vi tu chui chi c th duoc dnh gi bng mt chi muc XML
cua kiu VARCHAR, trong khi mt vi tu s chi c th duoc dnh gi bng mt chi muc cua kiu DOUBLE.
Cc kiu du liu cua cc chi muc quan h lun lun duoc kiu ct c chi muc xc dinh. Tuy nhin, do DB2 khng bt bu
ban phai kt hop mt luoc d XML voi mt ct XML, cc kiu du liu cho cc phn tu hoc cc thuc tnh khng duoc x
dinh truoc. V vy, mi chi muc XML di hoi mt kiu dch. V kiu l quan trong. Gia su mt phn tu gi (price) c gi
9. Mt vi tu chui "9" < "29" l sai, trong khi mt so snh s 9 < 29 l dng. Diu ny nhn manh rng ban nn su dung c
chi muc DOUBLE nu ban mun cc so snh s chnh xc theo ngu nghia. Phn tu "price"c kha nng lp chi muc tt nh
l DOUBLE.

Bang 3. Cc kiu d liu trong cc chi mc v cc v| t XML

XquLkY fo $b 1n db2-fn:xm1co1umn{"8OOk5.8OOklNIO"}/" "" ":book
Whee $b/" "" ":p1ce < 10
efun $b

-- 5qL/XML:
se1ecf book1nfo
fom books
Whee XMLLXl515{$b/" "" ":book|" "" ":p1ce < 10]
pass1ng book1nfo as "b"}
#|nh ngha truy vn/ch mc
idx3 (khng c
vng tn)
idx4 (vng tn r
rng)
idx5 (vng tn
mqc d|nh)
idx6 (cc k t dqi din
ca vng tn)
1 Truy vn 4 (vng tn r rng) - + + +
2
Truy vn 5 (vng tn mc
dinh)
- + + +
3
Query 6 (cc k tu dai din
cua vng tn)
- - - +
#
|nh ngha v| t hoqc ch
mc
...using xmlpattern '/book/price' as sql
double;
...using xmlpattern '/book/price' as sql
varchar(10);
1 where $i/book/price < "29" - +
2 where $i/book/price < 29 + -
Page 7 of 17 Khai thc cc chi muc XML d tng hiu nng truy vn XML trong DB2 9



S dng cc chi mc cho cc v[ t kt ni XML
Trong cc v du truoc, ban d thy cc vi tu gi tri chua cc gi tri bng chu. Nhung gi tri bng chu ny xc dinh cc ki
du liu so snh. Su xc dinh nhu vy thuong khng th c cho cc vi tu kt ni. Gia su ban c mt bang "cc tc
gia" ("authors") voi cc thng tin chi tit v tc gia theo mt dinh dang XML, bao gm cc ID tc gia m xut hin trong d
liu sch cua ban. Ban mun su dung mt kt ni d ly ra du liu chi tit v tc gia chi dnh cho cc tc gia sch trong
bang sch. Dinh nghia cc chi muc theo cc ID cua tc gia c ve c ch:

Truy vn ny ly ra cc thng tin tc gia mong mun, nhung n s khng su dung chi muc d xu l kt ni. Luu rng vi
kt ni trn ID tc gia khng chua mt gi tri bng chu thuong cho bit kiu du liu cua so snh. Do vy, DB2 cn xem x
khop cc ID tc gia cua kiu du liu bt ky. V du, xem xt cun sch v du liu tc gia trong Bang 4. Tc gia John Doe c
mt gi tri ID s (47), trong khi tc gia Tom Noodle c mt gi tri ID khng phai l s (TN28). Ca hai du c khop hop l
trong bang khc. V vy, ca hai cn c trong cc kt qua cua kt ni d. Tuy nhin, nu DB2 d su dung cc chi muc s
authorIdx1 hoc authorIdx2, n s khng tm thy ID cua tc gia "TN28" v tra v mt kt qua kt ni khng dy du. V
vy, DB2 khng th su dung cc chi muc d v phai dng dn vic qut bang d dam bao mt kt qua truy vn dng.

Bang 4. Cun sch th d v d liu tc gia

Tuy nhin, trong nhiu truong hop ban c l khng c mt su pha trn giua cc gi tri s v khng phai l s trong mt
phn tu hay thuc tnh d cho cua cc ti liu cua ban. Nu ban bit rng tt ca cc ID tc gia l cc s, ban c th chi thi
diu ny trong truy vn cua ban d cho php DB2 su dung cc chi muc DOUBLE. Truy vn sau dy tao khun mu tuong
minh cho ca hai pha cua vi tu kt ni theo DOUBLE. Diu ny chi yu cu mt so snh s v r rng bo qua su n khop
cua kt ni khng phai s. Do vy, DB2 c th su dung mt chi muc DOUBLE d xu l kt ni nhanh hon.
ceafe fab1e books {book1nfo xm1 xm1 xm1 xm1}
ceafe fab1e aufhos {aufho1nfo xm1 xm1 xm1 xm1}

ceafe 1ndex aufholdx1 on books{book1nfo} geneafe key us1ng
xm1paffen /book/aufhos/aufho/01d /book/aufhos/aufho/01d /book/aufhos/aufho/01d /book/aufhos/aufho/01d as sq1 doub1e

ceafe 1ndex aufholdx2 on aufhos{aufho1nfo} geneafe key us1ng
xm1paffen /aufho/01d /aufho/01d /aufho/01d /aufho/01d as sq1 doub1e

XquLkY
fo $1 1n db2-fn:xm1co1umn{"8OOk5.8OOklNIO"}
fo $ 1n db2-fn:xm1co1umn{"Au1hOk5.Au1hOklNIO"}
Whee $1/book/aufhos/aufho/01d = $/aufho/01d $1/book/aufhos/aufho/01d = $/aufho/01d $1/book/aufhos/aufho/01d = $/aufho/01d $1/book/aufhos/aufho/01d = $/aufho/01d
efun $
Cun sch Tc gi

<book>
<aufhos>
<aufho 1d="47">John Doe</aufho>
</aufhos>
<f1f1e>Dafabase 5ysfems</f1f1e>
<p1ce>29</p1ce>
</book>

<aufho 1d="47">
<name>John Doe</name>
<add>
<sfeef>555 8a11ey Av</sfeef>
<c1fy>5an Jose</c1fy>
<counfy>u5A</counfy>
</add>
<phone>404511234</phone>
</aufho>

<book>
<aufhos>
<aufho 1d="1N2">1om Nood1e</aufho>
</aufhos>
<f1f1e>lnfenaf1ona1 Pasfa</f1f1e>
<p1ce>19.95</p1ce>
</book>

<aufho 1d="1N2">
<name>1om Nood1e</name>
<add>
<sfeef>213 k1gafon1 koad</sfeef>
<c1fy>1oonfo</c1fy>
<counfy>Canada</counfy>
</add>
<phone>4162050745</phone>
</aufho>
XquLkY
fo $1 1n db2-fn:xm1co1umn{"8OOk5.8OOklNIO"}
fo $ 1n db2-fn:xm1co1umn {"Au1hOk5.Au1hOklNIO"}
Page 8 of 17 Khai thc cc chi muc XML d tng hiu nng truy vn XML trong DB2 9

Do truy vn ny khng chua vi tu gi tri no d han ch bang cua ca cc sch ln tc gia, DB2 phai thuc hin vic qut ba
trn mt trong hai bang d doc tt ca cc ID cua tc gia. Di voi mi ID cua tc gia, mt chi muc duoc su dung d thm d
ID c xay ra trong bang khc khng. Diu ny l nhanh hon nhiu so voi mt kt ni lp lng nhau theo hai ln qut bang
m khng su dung bt k chi muc no. Trnh ti uu ha dua trn chi ph cua DB2 quyt dinh qut bang no v truy cp ba
no thng qua cc chi muc. Bang 5 cho thy hai k hoach thuc hin thay th ny. Hai k hoach thuc hin ny du l kha
nng nu ban vit kt ni ging nhau theo k hiu SQL/XML nhu mt trong hai cch sau dy:
Truy vn 1:

Truy vn 2:

Luu rng Truy vn 1 v Truy vn 2 khc nhau theo "huong" cua vi tu XMLEXISTS. Trong ca hai truy vn, vi tu kt n
duoc th hin trong cc du ngoc vung. Trong Truy vn 1, vi tu trong ngoc vung l mt vi tu trn biu thuc bt du v
$b, do d, n l mt vi tu trn bang books. Trong Truy vn 2, diu kin kt ni l mt vi tu trn biu thuc bt du voi $a;
d l, mt vi tu trn bang authors. DB2 9.7 khng d dn su khc bit c php ny v chon mt k hoach thuc hin re
hon trong hai k hoach thuc hin trong Bang 5, dua trn dnh gi chi ph v thu hang.
Tuy nhin, truoc DB2 9.7, "huong" cua vi tu XMLEXISTS trong Truy vn1 v Truy vn 2 xc dinh k hoach no duoc s
dung trong s hai k hoach thuc hin trong Bang 5. Do Truy vn 1 biu din vi tu kt ni trn bang books, DB2 9.1 v 9.5
thuc hin vic qut bang trn authors sau d su dung chi muc AUTHORIDX1 d thm d trong bang cc sch. Diu ny
duoc hin thi bn tri trong Bang 5.
Truy vn 2 p dung vi tu kt ni vo bang authors. Do vy, DB2 9.1 v 9.5 thuc hin vic qut bang trn books v sau
su dung chi muc AUTHORIDX2 thm d trong bang authors (bn phai cua Bang 5). V vy, cch m ban vit vi tu
XMLEXISTS c th anh huong dn thu tu kt ni trong cc phin ban truoc ny cua DB2. Nu vic qut bang khng th
trnh duoc, c gng qut bang nho hon.

Bang 5. Cc k hoch thc hin cho cc truy vn kt ni XML, duc db2exfmt to ra
Whee $1/book/aufhos/aufho/01d/xs:doub1e{.} = $/aufho/01d/xs:doub1e{.} $1/book/aufhos/aufho/01d/xs:doub1e{.} = $/aufho/01d/xs:doub1e{.} $1/book/aufhos/aufho/01d/xs:doub1e{.} = $/aufho/01d/xs:doub1e{.} $1/book/aufhos/aufho/01d/xs:doub1e{.} = $/aufho/01d/xs:doub1e{.}
efun $
se1ecf aufho1nfo
fom books, aufhos
Whee xm1ex1sfs{$b/book/aufhos|aufho/01d/xs:doub1e{.} = $a/aufho/01d/xs:doub1e{.}] $b/book/aufhos|aufho/01d/xs:doub1e{.} = $a/aufho/01d/xs:doub1e{.}] $b/book/aufhos|aufho/01d/xs:doub1e{.} = $a/aufho/01d/xs:doub1e{.}] $b/book/aufhos|aufho/01d/xs:doub1e{.} = $a/aufho/01d/xs:doub1e{.}]
pass1ng book1nfo as "b", aufho1nfo as "a"}
se1ecf aufho1nfo
fom books, aufhos
Whee xm1ex1sfs{$a/aufho|01d/xs:doub1e{.} = $b/book/aufhos/aufho/01d/xs:doub1e{.}] $a/aufho|01d/xs:doub1e{.} = $b/book/aufhos/aufho/01d/xs:doub1e{.}] $a/aufho|01d/xs:doub1e{.} = $b/book/aufhos/aufho/01d/xs:doub1e{.}] $a/aufho|01d/xs:doub1e{.} = $b/book/aufhos/aufho/01d/xs:doub1e{.}]
pass1ng book1nfo as "b", aufho1nfo as "a"}
Truy vn 1 Truy vn 2
koWs
kL1ukN
{ 1}
Cosf
l/O
|
3.591e-005
NLJOlN
{ 2}
5410.62
743
/-------+-------\
1.29454e-007 27
NLJOlN NLJOlN
{ 3} { 6}
4311.96 109.66
570 173
/---+--\ /-+\
556 2.3231e-010 139 2
185CAN X5CAN IL1Ch X5CAN
{ 4} { 5} { 7} { 11}
106.211 7.5643 47.237 7.56421
14 1 34 1
| /---+---\
556 139 556
koWs
kL1ukN
{ 1}
Cosf
l/O
|
.37914e-015
NLJOlN
{ 2}
5410.63
743
/--------+--------\
1.29454e-007 6.47269e-00
NLJOlN NLJOlN
{ 3} { 6}
4311.96 109.67
570 173
/---+--\ /---+--\
556 2.3231e-010 139 4.65661e-010
185CAN X5CAN IL1Ch X5CAN
{ 4} { 5} { 7} { 11}
106.211 7.56429 47.2365 7.5643
14 1 34 1
| /---+---\
556 139 556
Page 9 of 17 Khai thc cc chi muc XML d tng hiu nng truy vn XML trong DB2 9

D tm tt loi khuyn cho cc truy vn kt ni XML, lun lun d vi tu kt ni voi kiu chi muc XML s duoc su dung.
Nu khng, cc ngu nghia truy vn khng cho php su dung chi muc. Nu dinh nghia chi muc XML l DOUBLE, ban tao
khun mu vi tu kt ni bng xs:double. Nu dinh nghia chi muc XML l VARCHAR, ban cho vi tu kt ni voi fn:string,
v v.v nhu thy trong Bang 6. (Ni dng ra, DB2 9.7 khng cn nht thit di hoi su dung fn:string nua d kch hoat cc ch
muc VARCHAR cho cc vi tu kt ni. Nhung, n vn duoc yu cu trong 9.5 v n khng bi coi l dc bit trong cc vi
cua ban).

Bang 6. To khun mu v| t kt ni d cho php su dng chi mc XML




H tr chi mc cho cc v[ t "gia"
XQuery khng c mt hm hay mt ton tu dc bit tuong tu nhu cc vi tu quan h "giua" ("between"). Ngoi ra, ban ch
tn tai cua cc vi tu so snh chung XQuery yu cu ch khi ban th hin mt diu kin "between".
Gia su ban mun tm cc cun sch c gi tu 20 dn 30. Qua truc gic ban c c th su dung vi tu /book[price > 20
and price < 30], nhung n khng tao nn vi tu giua". Diu ny c nghia l nu ban c mt chi muc
trn /book/price, DB2 khng th thuc hin vic qut dai chi muc tu 20-30 d tm cc sch trong dai gi d. Diu ny l
do mt ti liu sch c th c th c nhiu gi con, nhu trong v du sau dy:

Do cc php so snh chung (>, <, = , <=, etc.) c ngu nghia hin thuc, vi tu /book[price > 20 and price < 30]
chon mt phn tu sch nu o d tn tai mt phn tu con "price" c mt gi tri lon hon 20 v nu o d tn tai mt phn tu
con gi "price" c mt gi tri duoi 30. Nhung thu d c th l mt v cng mt phn tu hoc hai phn tu voi gi ("price")
khc nhau. Ti liu th du trn thoa mn vi tu d boi v c mt gi lon hon 20 v cung c mt gi (khc) thp hon 30. Tuy
vy, khng c hai gi tu 20 dn 30.
Nu DB2 d su dung vic qut dai chi muc duy nht tu 20 dn 30, n s mt ti liu ny v tra v mt kt qua truy vn
khng dy du. Thay vo d DB2 cn phai tnh ton giao dim hai hoat dng qut chi muc, m thuong l tn km hon dng

1A8LL: MA11hlA5 klD5CN 1A8LL: MA11hlA5
Au1hOk5 { } 8OOk5
15.2133
2
|
139
5Ok1
{ 9}
15.2129
2
|
139
Xl5CAN
{ 10}
15.1542
2
|
556
XMLlN: MA11hlA5
Au1hOklDX1

1A8LL: MA11hlA5 klD5CN 1A8LL: MA11hlA5
8OOk5 { } Au1hOk5
15.212
2
|
139
5Ok1
{ 9}
15.2124
2
|
139
Xl5CAN
{ 10}
15.1537
2
|
556
XMLlN: MA11hlA5
Au1hOklDX2
Kiu SQL ca ch mc Tqo khun mu v| t kt ni khi s dng: Ghi ch
DOUBLE xs:double Di voi su so snh s bt ky
VARCHAR(n), VARCHAR HASHEDfn:string Di voi su so snh chui bt ky
DATE xs:date Di voi su so snh ngy thng
TIMESTAMP xs:dateTime Di voi vi tu du thoi gian
<book>
<f1f1e>Dafabase 5ysfems</f1f1e>
<p1ce cuency="kM8">40 40 40 40</p1ce>
<p1ce cuency="u5D">10 10 10 10</p1ce>
</book>
Page 10 of 17 Khai thc cc chi muc XML d tng hiu nng truy vn XML trong DB2 9
k. Su khc nhau trong cc k hoach thuc hin duoc chi ra trong Hnh 3. K hoach thuc hin bn tri cho thy k hoach ch
muc V (AND) m DB2 s phai xem xt d dp ung ti liu th du cua ban. K hoach ny khng hiu qua v ca hai
XISCAN tao ra s rt lon tim tng cua cc ID hng, m nhiu ID hng cn duoc ton tu IXAND o trn loai bo. Diu ny l
do nhiu cun sch c gi trn $20, v nhiu cun thp hon $30. Trong thuc t, ca hai XISCAN duoc kt hop tao ra nhiu
ID hng hon s luong hng trong bang. Diu ny di hoi lm vic nng n voi ton tu IXAND chi d tm ra phn giao nh
tim tng.
Nu dinh cua ban l mt vi tu "between" thuc, th k hoach thuc hin o bn phai tt hon, boi v vic qut dai don voi vi
khoi dng chi cung cp cc ID hng vua khop. C nhiu truy cp chi muc t v khng dng chi muc V (AND), cho php
hiu sut tng th tt hon c th l mt hoc hai cp, ty vo su chon lua vi tu.

Hnh 3. Chi mc V so vi hot dng qut dai don d dnh gi mt c}p cc v| t xp hng

Mt cp cc vi tu xp hang trn cng mt muc du liu c th duoc trnh bin dich DB2 hiu nhu l mt vi tu
"giua" ("between") v duoc dnh gi boi vic qut dai chi muc don, chi khi DB2 c th suy din rng cc muc d l mt c
th chu khng phai l mt chui hon mt muc. Ni cch khc, vi tu cn duoc hnh thnh sao cho ca hai phn o giua > v
l lun lun duoc p dung cho cng mt muc don. Diu ny c th dat duoc bng cc php so snh gi tri (>, <, =, v.v),
cng mt truc hoc cc thuc tnh.
Php so snh gi tr|
Nu ban bit rng mt cun sch khng c hon mt phn tu gi, ban c th vit truy vn khi su dung cc php so snh gi
tri XQuery, chng bt buc cc ton hang so snh l mt c th. V du, /book[price gt 20 and price lt 30] ch
chn c th hiu l gi o "giua" v duoc dnh gi boi vic qut dai don cua chi muc gi. Nu gp phai cun sch c nhiu
hon mt phn tu con gi, truy vn tht bai voi li khi chay.
Cng mt trc
Nhu l mt su thay th cho cc php so snh gi tri, ban c th su dung cng mt truc (biu thi bng mt du chm ".") d
din ta mt vi tu "giua". Cng mt truc trong biu thuc /book/price[. > 20 and . < 30] dam bao rng ca hai vi tu
p dung cho cng mt phn tu gi. Diu ny tao thnh mt vi tu "giua" do cng mt truc lun lun dnh gi cho c th. V
tu ny cho php mt cun sch c nhiu gi nhung di hoi tt ca trong cc gi d c mt gi tri o giua 20 v 30. Uu dim
cua su dung cc php so snh gi tri l ban khng bi li khi chay.
Cc thuc tnh
Nu gi cua sch l mt thuc tnh, th n c th xut hin nhiu hon mt ln cho mi phn tu sch. Trong biu thuc /book
[@price>20 and @price<30] cc ton hang cua cc vi tu xp hang l cc c th don, do d DB2 c th thuc hin vi
qut chi muc don d dnh gi vi tu "giua".



kL1ukN
|
NLJOlN
|
/-+-\
/ \
IL1Ch X5CAN
|
/---+---\
/ \
klD5CN 1A8LL:
| 8OOk5
5Ok1
|
lXAND lXAND lXAND lXAND
|
/---+---\
Xl5CAN Xl5CAN p1ce > 20 p1ce < 30 Xl5CAN Xl5CAN p1ce > 20 p1ce < 30 Xl5CAN Xl5CAN p1ce > 20 p1ce < 30 Xl5CAN Xl5CAN p1ce > 20 p1ce < 30


kL1ukN
|
NLJOlN
|
/-+-\
/ \
IL1Ch X5CAN
|
/---+---\
/ \
klD5CN 1A8LL:
| 8OOk5
5Ok1
|
Xl5CAN 20 < p1ce < 30 Xl5CAN 20 < p1ce < 30 Xl5CAN 20 < p1ce < 30 Xl5CAN 20 < p1ce < 30

Page 11 of 17 Khai thc cc chi muc XML d tng hiu nng truy vn XML trong DB2 9


nh chi mc cc nt vn bn v buc XPath "/text()"
Nhc lai khi nim v nt vn ban. Hnh 4 cho thy mt ti liu th du v dinh dang phn cp cua n trong m hnh du li
XML. Mi nt phn tu m ta mt phn tu v cc nt vn ban m ta cc gi tri du liu thuc t. Trong m hnh du liu XML,
gi tri cua mt phn tu duoc dinh nghia nhu l su mc ni cua tt ca cc nt vn ban trong cy con duoi phn tu d. Nhu
vy, gi tri cua cc phn tu "book" l Cc h thng co so du liu 29 ("Database Systems29"). Gi tri cua mt phn tu o m
thp nht bng voi nt vn ban cua n, v du nhu gi tri cua cc phn tu "gi" l "29".

Hnh 4. M hnh d liu XML cua ti liu th d
Cc biu thuc /book/price v /book/price/text() l khc nhau. Ci du nhn dang nt phn tu "price", cc sau tro
dn nt vn ban c gi tri "29". Do d, hai truy vn sau dy tra v cc kt qua khc nhau.

Truy vn du tin tra v nt phn tu dy du, tuc l <price>29</price>, trong khi truy vn thu hai chi tra v gi tri nt
vn ban cua n l 29. Nu mt biu thuc XPath khng su dung /text() trong mt vi tu truy vn, chng han nhu $b/book
trong truy vn sau, DB2 s tu dng su dung gi tri cua phn tu d dnh gi vi tu d. Do gi tri cua phn tu "book" l
"Database Systems29", truy vn ny s tra v ti liu th du nhu l mt khop hop l.

Tuy nhin, truy vn tip theo, o d ban thm /text() tvo duong dn trong mnh d where, cung khng tra v ti liu th
du cua ban. Diu ny l do khng c nt vn ban no ngay duoi phn "book".

V th, trong truong hop chung, cc ngu nghia truy vn khc nhau ty thuc vo vic su dung /text(). Cc phn tu o m
thp nht m n chi c mt nt vn ban don c th hin thi cng hnh vi, khi c v khng c /text(). V du, hai truy v
tip theo c th tra v kt qua nhu nhau, nhung chi khi bt gp tt ca cc cc phn tu "price" trong qu trnh thuc hin truy
vn c mt nt vn ban don v khng c cc nt con no khc.

<book>
<f1f1e>Dafabase 5ysfems</f1f1e>
<p1ce>29</p1ce>
</book>
XquLkY fo $b 1n db2-fn:xm1co1umn{"8OOk5.8OOklNIO"}/book
efun $b/p1ce

XquLkY fo $b 1n db2-fn:xm1co1umn{"8OOk5.8OOklNIO"}/book
efun $b/p1ce/fexf{}
XquLkY fo $b 1n db2-fn:xm1co1umn{"8OOk5.8OOklNIO"}
Whee $b/book = "Dafabase 5ysfems29"
efun $b
XquLkY fo $b 1n db2-fn:xm1co1umn{"8OOk5.8OOklNIO"}
Whee $b/book/fexf{}= "Dafabase 5ysfems29"
efun $b
XquLkY fo $b 1n db2-fn:xm1co1umn{"8OOk5.8OOklNIO"}
Whee $b/book/p1ce < 10
efun $b
Page 12 of 17 Khai thc cc chi muc XML d tng hiu nng truy vn XML trong DB2 9

Do /text() thuong tao ra mt su khc bit di voi ngu nghia truy vn, n cung tao ra mt su khc bit di voi tnh hop l
cua chi muc. Trong Bang 7 ban thy rng mt vi tu voi /text() chi c th duoc dnh gi boi mt chi muc cung dinh
r /text() trong mu XML cua n. Nu chi muc cua ban khng dng /text(), cc vi tu cua ban cung khng nn su
dung /text().

Bang 7. Cc chi mc v cc v| t c v khng c /text()

D don gian chng ti khuyn ban khng su dung /text() trong hoc cc dinh nghia chi muc XML hoc cc vi tu truy
vn. C th tam thoi dinh nghia mt chi muc trn mu XML //text() d h tro cc vi tu cho bt ky biu thuc duong d
no kt thc bng /text(). Tuy nhin, mt chi muc nhu vy c chua tat ca cc gi tri nt vn ban tu tat ca cc ti liu trong
ct XML. Do d, chi muc s rt lon v tn km cho vic bao tr khi chn, cp nht v xa. Ni chung ban nn trnh mt ch
muc nhu vy, tru khi ung dung cua ban chu yu l chi doc v ban thuc su khng th du don duoc phn tu no s duoc su
dung trong cc diu kin tm kim.




nh chi mc cc phn t khng phi l
Trong phn truoc, ban d thy mt vi tu trn phn tu /book duoc goi l mt phn tu khng phai l (hay khng nguyn tu
v n c chua cc phn tu khc. Mc d ban c th dinh nghia chi muc trn cc phn tu khng phai l, chng chi c ch
trong s t cc truong hop. Xem xt ti liu XML sau. Mt chi muc trn mu XML /book s chua mt dim vo chi muc
duy nht cho ti liu ny v gi tri dim vo chi muc d l "John DoePeter PanDatabase Systems29SQLrelational." Diu
ny khng c ch do cc truy vn din hnh s khng su dung cc gi tri duoc kt ni nhu vy trong cc vi tu cua chng.
Hu ht cc chi muc lun lun o trn cc phn tu l.

C mt vi truong hop, trong d cc chi muc trn cc phn tu khng phai l c th c nghia. V du, gia su cc truy vn
cua ban c chua cc vi tu trn cc m vng v s din thoai dy du. Trong truong hop d, ban c th chon d thit k cc
phn tu din thoai cua ban nhu duoc hin thi trong ti liu ny.

XquLkY fo $b 1n db2-fn:xm1co1umn{"8OOk5.8OOklNIO"}
Whee $b/book/p1ce/fexf{} < 10
efun $b
|nh ngha v| t hay ch mc
...using xmlpattern '/book/title/text()' as
sql varchar(128);
...using xmlpattern '/book/title' as
sql varchar(128);
where $i/book/title = "Database
Systems"
- +
where $i/book/title/text() =
"Database Systems"
+ -
<book>
<aufhos>
<aufho 1d="47">John Doe</aufho>
<aufho 1d="5">Pefe Pan</aufho>
</aufhos>
<f1f1e>Dafabase 5ysfems</f1f1e>
<p1ce>29</p1ce>
<keyWods>
<keyWod>5qL</keyWod>
<keyWod>e1af1ona1</keyWod>
</keyWods>
</book>
<aufho 1d="47">
<name>John Doe</name>
<phone>
<aeacode>40</aeacode>
<numbe>4511234</numbe>
</phone>
</aufho>
Page 13 of 17 Khai thc cc chi muc XML d tng hiu nng truy vn XML trong DB2 9

Sau d, ban c th dinh nghia mt chi muc XML trn phn tu khng phai l "phone" v mt chi muc trn phn tu
"areacode":

Diu ny s cho php ca hai cc truy vn sau dy su dung truy cp duoc dnh chi muc, thay cho vic qut bang.

Cc chi muc XML khng th l cc chi muc kha ghp nhu cc chi muc quan h nhiu ct. Tuc l, ban khng th dinh
nghia mt chi muc don trn hai hay nhiu mu XML. Tuy nhin, di khi c th bt chuoc mt chi muc ghp, nu cc ph
tu cua ban duoc lng nhau thch hop. V du, chi muc phoneidx o trn hnh dng ging nhu mt chi muc ghp
trn /phone/areacode v /phone/number.



Trung hp dc bit, d khng th s dng chi mc XML

Cc trung hp dc bit vi XMLQUERY v XMLEXISTS
Tt ca cc huong dn d thao lun d tnh hop l chi muc p dung cho ca hai truy vn XQuery XML v SQL/XML. Ngo
ra, c mt s l do cn nhc cu th cho cc hm SQL/XML XMLQUERY v XMLEXISTS.
Nu ban su dung cc vi tu XML trong hm XMLQUERY trong mnh d select cua mt cu lnh SQL, cc vi tu ny
khng loai tru bt ky cc hng no tu tp kt qua v do d khng th su dung mt chi muc. Chng chi p dung cho mt t
liu cng mt lc v c th tra v mt doan (c th rng) cua mt ti liu. V vy, ban nn dt bt ky cc vi tu ti liu v
loc-hng no vo trong mt vi tu XMLEXISTS trong mnh d where cua cu lnh SQL/XML cua ban.
Khi ban biu din cc vi tu trong XMLEXISTS, hy chc chn rng ban su dung cc du ngoc vung nhu trong
$a/author[phone=4084511234] hon l $a/author/phone=4084511234. Ci sau trong hai vi tu ny l mt vi tu
Boolean tra v "sai" nu cc phn tu phone khng c gi tri mong mun. Do XMLEXISTS tht su kim tra su tn tai cua
mt gi tri, ngay ca su tn tai cua cc gi tri "sai" thoa mn XMLEXISTS sao cho ti liu bt ky hop l cho tp kt qua.
Nu ban su dung cc du ngoc vung, th biu thuc XPath dnh gi chui rng, m tht bai khi thu nghim su tn tai v
loai bo hng tuong ung (nu ti liu khng c s din thoai mong mun).
D bit thm cc v du chi tit v cc ngu nghia XMLQUERY v XMLEXISTS, hy tham khao " 15 cch thuc hnh tt
nht d thuc hin pureXML trong DB2 9" (developerWorks, 10.2006).

Cc mnh d let v return
Nn bit rng cc vi tu trong cc mnh d let v return cua XQuery khng loc cc tp kt qua. V vy, khng th trng
mong su dung cc chi muc nu cn kin thit phn tu. Hai truy vn tip theo khng th su dung mt chi muc boi v mt
phn tu "phone408" cn phai duoc tra v cho moi tc gia, ngay ca khi n l mt phn tu rng cho cc tc gia bn ngoi m
vng 408.
ceafe 1ndex phone1dx on aufhos{aufho1nfo} geneafe key us1ng
xm1paffen /aufho/phone /aufho/phone /aufho/phone /aufho/phone as sq1 doub1e

ceafe 1ndex aea1dx on aufhos{aufho1nfo} geneafe key us1ng
xm1paffen /aufho/phone/aeacode /aufho/phone/aeacode /aufho/phone/aeacode /aufho/phone/aeacode as sq1 doub1e
se1ecf aufho1nfo fom aufhos
Whee xm1ex1sfs{$a/aufho|phone=404511234] $a/aufho|phone=404511234] $a/aufho|phone=404511234] $a/aufho|phone=404511234] pass1ng aufho1nfo as "a"}

se1ecf aufho1nfo fom aufhos
Whee xm1ex1sfs{$a/aufho|phone/aeacode=40 $a/aufho|phone/aeacode=40 $a/aufho|phone/aeacode=40 $a/aufho|phone/aeacode=40] pass1ng aufho1nfo as "a"}
XquLkY fo $a 1n db2-fn:xm1co1umn{"Au1hOk5.Au1hOklNIO"}/aufho
1ef $p := $a/phone|aeacode="40"]//fexf{}
efun <phone40>{$p}</phone40>

XquLkY fo $a 1n db2-fn:xm1co1umn{"Au1hOk5.Au1hOklNIO"}/aufho
efun <phone40>{$a/phone|aeacode="40"]//fexf{}}</phone40>
Page 14 of 17 Khai thc cc chi muc XML d tng hiu nng truy vn XML trong DB2 9


Cc buc cha m
DB2 9 cung khng su dung mt chi muc cho cc vi tu xay ra trong mt buoc cha me (".."), nhu l vi tu theo "price" trong
hai truy vn sau dy:

Dy khng phai l mt han ch c nghia boi v ban lun c th biu thi cc vi tu ny m khng c truc cha me:


Mt trung hp dc bit vi hai du gach cho (//)
Mt truong hop khc cn ch l khi ban su dung cc vi tu voi truc con chu hoc cng mt truc, thuong vit tt bng //.
Gia su ban mun tm cc cun sch cho cc tc gia c ID l 129. Nu cc thuc tnh ID tc gia xut hin o nhiu muc ho
nu ban khng chc chn o muc no hoc duoi phn tu no c dt cc thuc tnh ID, ban c th vit cu truy vn khng
thch hop sau dy:
SAI!

Muc dch cua cc truy vn ny l d kim tra cc thuc tnh ID bt ky o du trong hoc duoi phn tu "authors". Tuy nhin,
mt du gach cho hoc mt du gach cho di (/ hoc //) o pha truoc cua mt vi tu trong cc du ngoc vung khng
thuc ngu canh v v th huong dn gc cua ti liu. Do d, truy vn s tra v cc ti liu sau dy nhu l mt kt qua d
khng nhu mong mun.

D trnh diu ny, ban cn phai thm mt du chm (cng mt truc) d cho bit rng ban mun p dung con chu hay cng
mt truc (//) tu phn tu "authors" tro xung trong cy ti liu.
DNG!

Diu ny cung cho php DB2 su dung mt chi muc duoc dinh nghia trn /book//@id hay //@id. Khng c chi muc n
duoc su dung nu khng c du chm.
XquLkY fo $b 1n db2-fn:xm1co1umn{"8OOk5.8OOklNIO"}/book/f1f1e|../p1ce < 10]
efun $b

XquLkY fo $b 1n db2-fn:xm1co1umn{"8OOk5.8OOklNIO"}/book/f1f1e
Whee $b/../p1ce < 10
efun $b
XquLkY fo $b 1n db2-fn:xm1co1umn{"8OOk5.8OOklNIO"}/book|p1ce < 10]/f1f1e
efun $b

XquLkY fo $b 1n db2-fn:xm1co1umn{"8OOk5.8OOklNIO"}/book
Whee $b/p1ce < 10
efun $b/f1f1e
se1ecf book1nfo
fom books
Whee XMLLXl515{$b/book/aufhos|//01d = 129]
pass1ng book1nfo as "b"}
<book 1d="129">
<aufhos>
<aufho 1d="47">John Doe</aufho>
<aufho 1d="5">Pefe Pan</aufho>
</aufhos>
<f1f1e>Dafabase 5ysfems</f1f1e>
<p1ce>29</p1ce>
</book>
se1ecf book1nfo
fom books
Whee XMLLXl515{$b/book/aufhos|.//01d = 129]
pass1ng book1nfo as "b"}
Page 15 of 17 Khai thc cc chi muc XML d tng hiu nng truy vn XML trong DB2 9
Ban c th tm thm cc v du v cch cc ngu nghia ngn ngu XQuery v SQL/XML tc dng dn tnh hop l chi muc
trong bi vit "Trn duong dn dn cc truy vn XML hiu qua."




Tm tt
Cc chi muc XML rt quan trong d tng hiu nng truy vn XML nhung cc k tu dai din, cc vng tn, cc kiu du li
cc kt ni, cc nt vn ban v cc kha canh ngu nghia khc cua cc truy vn XML xc dinh liu mt chi muc no d c
th hoc khng duoc su dung. Mt s ch cn thit d dam bao rng cc dinh nghia chi muc XML v cc vi tu truy vn l
tuong thch. Bi vit ny d trnh by mt tp hop cc huong dn v cc v du d cho bit cc chi muc XML duoc su dung
nhu th no d trnh vic qut bang v dam bao hiu nng truy vn cao. Cc huong dn quan trong nht duoc tm tt trong
trang cm nang tai v.


Li cm on
Voi tro gip cua ho cho bi vit ny, ti mun cam on Andrey Balmin, Kevin Beyer, Christina Lee, Henrik Loeser, Fatma
zcan, Bryan Patterson, Vitor Rodrigues, Marcus Roy v Cindy Saracco.




Cc ti v


Ti nguyn
Hc tp
Hy tham khao DB2 pureXML Cookbook (IBM Press) voi cc tin tuc ton din v pureXML trn tt ca cc nn ta
duoc h tro: DB2 9.x cho Linux, UNIX v Windows v DB2 9 cho z / OS.

Tm hiu cch d Nng cao hiu bit v kha nng mo rng cua du liu XML voi cc tnh nng pureXML DB2 9.7
moi.

Xem Query DB2 XML Data with SQL d tm hiu cch truy vn du liu duoc luu tru trong cc ct XML khi su
dung SQL v SQL/XML.

Doc bi vit Query DB2 XML data with XQuery d tm hiu cch su dung ngn ngu XQuery trong DB2.

Xem pureXML in DB2 9: Dng cch no d truy vn du liu XML cua ban? cho nhiu thng tin chi tit v truy v
du liu XML trong DB2 v huong dn d chon phuong php dng cho nhu cu cua ban.

Xem 15 bi thuc hnh tt nht cho hiu nng cua pureXML trong DB2 9 voi mt s loi khuyn v hiu nng cua
XML cu th.

Theo st Trn duong dn dn cc truy vn hiu qua XML d trnh nhung by li ph bin voi XQuery, SQL/XML,
M ta Tn Kch thuc Phuong thc tai
Cheat Sheet cheat_sheet.pdf 56KB
HTTP
DB2 XML Index Exploitation - DDLandQueries.txt DDLandQueries.txt 8KB
HTTP
Thng tin v phuong thuc tai Tai v Adobe Reader
Page 16 of 17 Khai thc cc chi muc XML d tng hiu nng truy vn XML trong DB2 9
v cc chi muc XML.

Khm ph hm XMLTABLE linh hoat trong XMLTABLE by Example.

Tm hiu cch d Cp nht XML trong DB2 9.5 voi XQuery Update Facility (Phuong tin cp nht XQuery).

Duyt DB2 pureXML Wiki voi cc bi vit k thut, cc giai php, cc trnh din, cc cu chuyn thnh cng v
nhiu ngun ti nguyn khc xung quanh DB2 pureXML.

Xem kt qua dim chun XML moi nht.


Ly san phm v cng ngh
Nhn cc bi thuc hnh voi pureXML DB2 v tai ban DB2 Express-C, ban min ph d tai, trin khai v phn ph

Xy dung du n pht trin tip theo cua ban voi phn mm dng thu cua IBM, c sn d tai v truc tip tu
developerWorks.


Thao lun
Tham gia vo Din dn thao lun pureXML DB2 o dy ban c th hoi v tra loi cc cu hoi lin quan dn pureXML.


i nt v tc gi







Matthias Nicola nguoi lnh dao k thut v hiu nng co so du liu XML tai Silicon Valley Lab cua IBM. C
vic cua ng tp trung vo tt ca cc linh vuc v hiu nng XML trong DB2, bao gm XQuery, SQL/XML v
tt ca cc tnh nng pureXML trong DB2. Matthias Nicola cng tc cht ch voi cc di pht trin XML DB2
cung nhu voi cc khch hng v cc di tc kinh doanh nhung nguoi dang su dung XML, h tro ho trong vic
thit k, trin khai thuc hin v ti uu ha cc giai php XML. Truoc khi gia nhp IBM, Matthias d lm v
hiu nng kho du liu cho Informix Software. ng nhn bng tin si khoa hoc my tnh vo nm 1999 o Dai h
K thut Aachen, Duc.
Page 17 of 17 Khai thc cc chi muc XML d tng hiu nng truy vn XML trong DB2 9

You might also like