1. Trang chủ
  2. » Thể loại khác

Giới thiệu về Xpath (XML Path Language)

9 143 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 9
Dung lượng 246,27 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Như các bạn đã biết XML là một ngôn ngữ tuyệt vời để mô tả và lưu trữ dữ liệu. Tuy nhiên với tốc độ phát triển của công nghệ thông tin, nhu cầu của các ứng dụng không chỉ dừng lại ở mức lưu trữ, các hệ thống cần trao đổi thông tin với nhau. Để trao đổi thông tin trong các tài liệu XML, người ta cần một chuẩn chung để truy xuất dữ liệu. Giải quyết vấn đề đó, XML Path Language (XPath) được sinh ra. XPath là một ngôn ngữ thiết kế ra với mục đích giúp cho ứng dụng có thể di chuyển bên trong XML document và truy xuất các giá trị cũng như thuộc tính của các elements. Để có thể tiếp cận được Xpath nhanh nhất, trước tiên bạn cần hiểu về những ngôn ngữ đặc tả giống như XML, HTML.

Trang 1

Các hàm API XPath c a Java

M c : Trung bình

Elliotte Rusty Harold, K s ph n m m, Polytechnic University

17 07 2009

C p nh t 25 08 2008

Vi t các bi u th c XPath d h n r t nhi u nhi u so v i vi c vi t mã chuy n h ng Mô hình

i t ng tài li u (Document Object Model - DOM) chi ti t Khi b n c n rút trích thông tin

t tài li u XML thì cách nhanh nh t và n gi n nh t là nhúng bi u th c XPath vào bên

trong ch ng trình Java™ Java 5 gi i thi u gói java.xml.xpath, m t th vi n c l p mô

hình i t ng XML dùng truy v n các tài li u XML v i XPath

27/06/2007 - T các góp ý c a ng i c, tác gi ã c p nh t các bi u th c XPath ã c

biên d ch (tham kh o ph n mã ng n Ví d 3)

25/08/2008 - T các góp ý c a ng i c, tác gi ã thay "http://www.example.org/books"

thành "http://www.example.com/books" trong Ví d 6, không gian tên (namespace) c

c p n trong o n v n tr c Ví d 9, và Ví d 9

N u b n g i m t ai ó mua cho b n m t chai s a thì b n s ngh nh th nào n ng i ó nh h mua cho b n? "Làm n mua h tôi m t chai s a" hay là nói " i ra ngoài thông qua c a tr c R trái

ph n v a hè dành cho ng i i b i b qua ba ngã t R ph i i b thêm m t o n n a R ph i và i vào c a hàng i t i gian th t i b kho ng n m mét r i i xu ng gian d i R trái C m l y m t h p

s a Mang h p s a ra bàn thanh toán Thanh toán ti n cho chai s a ó Và sau ó i ng c l i o n ng

v a i i v nhà b n." i u này th t là n c c i H u h t a tr! u " thông minh bi t cách mang

h p s a v nhà v i m t l i ch d#n n gi n "Làm n mua h tôi m t chai s a"

Các ngôn ng truy v n và c ch tìm ki m c"a máy tính c$ng t ng t nh nhau Vi c "Tìm b n sao c"a Cryptonomicon" d dàng h n là vi c vi t ra m t c u trúc logic chi ti t tìm ki m m t s c s d li u

B i vì các thao tác tìm ki m có logic r t gi ng nhau nên b n có th a ra các ngôn ng t%ng quát có

th th c hi n câu l nh nh "Tìm t t c các quy n sách c"a tác gi Neal Stephenson," và sau ó vi t m t c

ch x lý các truy v n ó d a vào các kho d li u nào ó

XPath

Trong r t nhi u ngôn ng truy v n, Ngôn ng Truy v n Có c u trúc (SQL) là ngôn ng c thi t k và cho phép th c hi n truy v n trên các c s d li u quan h Có m t s ít các ngôn ng truy v n bao g m Ngôn ng truy v n i t ng (OOL) và XQuery Tuy nhiên, ch" chính c"a bài vi t này là v XPath cho nên ngôn ng truy v n c thi t k th c hi n x lý truy v n trên các tài li u XML Ví d&, m t truy v n XPath n gi n là tìm ra các tiêu c"a t t c các quy n sách trong tài li u c"a tác gi Neal Stephenson, truy v n ph i trông có d ng nh sau:

Ng c l i, c ch tìm ki m DOM thu n túy cho phép có thông tin cho d i d ng nh trong Ví d& 1:

Ví d 1 Mã DOM tìm t t c các tiêu c a các ph n t book có giá tr Neal Stephenson

! " # $ % ! #

! " # $ % ! #

&

Trang 2

i u này có th tin ho'c không, o n mã DOM trong Ví d& 1 th c s không mang tính t%ng quát và dõ dàng b(ng các bi u th c XPath n gi n Cái mà cho phép b n có th vi t, s a l)i và b o trì c t t h n? Tôi ngh* câu tr l i ã r t rõ dàng

Có m t i u ph i nh r(ng XPath không ph i là ngôn ng Java trong th c t , XPath không hoàn toàn là

m t ngôn ng l p trình Có nhi u v n b n không th th y c trong XPath, th m chí k c các câu

l nh truy v n c$ng không th c t o ra trong XPath Ví d&, XPath không không th tìm th y các quy n sách ã ng ký s qu c t (ISBN) n u ki m tra không phù h p các mã ch s hay các tác gi c"a cu n sách ó c l y t c s d li u tài kho n bên ngoài Th t may m+n, khi b n tích h p XPath vào trong

ch ng trình Java thì b n có th t n d&ng c u th c"a c hai ngôn ng này: Java s gi i quy t t t

nh ng v n liên quan n Java, t ng t XPath s gi i quy t t t nh ng v n liên quan t i XPath Cho n th i i m g n ây, giao di n l p trình ng d&ng (API) c các ch ng trình Java s d&ng t o

ra các câu truy v n XPath khác nhau d a trên c ch XPath Xalan có m t API, Saxon có m t lo i khác và các c ch khác s có các API khác i u này có ngh*a r(ng o n mã c"a b n theo yêu c u h ng vào m t

s n ph,m nào ó c"a b n Theo m t ý nào ó, b n có th làm th nghi m v i các c ch khác nhau có

c các 'c tr ng c b n khác nhau mà không quá ph c t p ho'c không c n ph i vi t l i o n mã

Vì lý do này, Java 5 gi i thi u gói javax.xml.xpath cung c p y " các c ch , ng d&ng và mô hình

i t ng c l p th vi n XPath Gói này c$ng có th áp d&ng c trong Java 1.3 và các phiên b n sau

n u b n có cài 't ph n Java API for XML Processing (JAXP) 1.3 N(m trong các s n ph,m khác, Xalan 2.7 và Saxon 8 bao g m các th c thi c"a th vi n này

M t ví d n gi n

Tôi s b+t u b(ng vi c mô ph-ng m t cách chính xác các b c th c hành trong ph n này Sau ó tôi

s t p trung nghiên c u vào m t s v n chi ti t c& th Gi s b n mu n truy v n ra danh sách các

quy n sách c"a tác gi Neal Stephenson Trong tr ng h p này, danh sách trong bi u m#u c hi n th

nh trong Ví d& 2:

Ví d 2 Tài li u XML ch a thông tin các quy n sách

! ,

!$ && !$ &&

#

-& ! % %".%/ 01" *

3 3

3

3

! " # $ % ! #

# + 3

3

3

( 5'77889':79( 5

( 5;< :7( 5

Trang 3

Truy v n XPath cho phép tìm ra t t

c các quy n sách m t cách n

gi n: //book[author="Neal

Stephenson"] tìm tiêu c"a

nh ng cu n sách này thì n gi n

ch làm thêm m t b c và lúc ó

bi u th c s có d ng //book

[author="Neal

Stephenson"]/title Cu i cùng,

n u b n mu n truy v n các nút con

c"a ph n t title B n s ph i làm

thêm m t b c n a có m t bi u th c y " nh sau //book[author="Neal

Stephenson"]/title/text()

Bây gi tôi s a ra m t ch ng trình n gi n th c hi n tìm ki m này t ngôn ng Java và sau ó in

ra tiêu c"a t t c các quy n sách tìm c u tiên b n c n ph i t i c toàn b tài li u vào i t ng DOM Document n gi n, tôi s gi nh r(ng tài li u c s d&ng là t p books.xml n(m trong cùng

th m&c làm vi c hi n th i ây là m t phân mã n gi n th c hi n phân tích tài li u và t o ra i

t ng Document t ng ng:

Ví d 3 S phân tích tài li u b ng JAXP

ây là chu,n JAXP và DOM, là chu,n ã c trình bày và c nghiên c u

Ti p theo b n t o ra XPathFactory:

Sau ó b n s d&ng factory t o ra i t ng XPath:

i t ng XPath th c hi n biên d ch bi u th c XPath:

Cu i cùng, b n th c hi n ánh giá bi u

th c XPath nh n c k t qu Khi

( 5'?<8<;@:;'( 5

( 5'7787?89@6( 5

(BCC # CC5

Các nhà máy tr u t ng

XPathFactory là m t nhà máy tr u t ng (abstract factory) Các m#u thi t k tr u t ng nhà máy này cho phép m t API h) tr các mô hình i t ng khác nhau nh DOM, JDOM, và Xom ch n m t mô hình khác, b n truy n m t URI xác nh

mô hình i t ng t i ph ng th c XPathFactory.newInstance() Ví d&, http://xom.nu/ có l

ch n XOM Tuy nhiên, trong th c t , DOM là mô hình i t ng duy nh t mà API này h) tr n gi

.> D & > D E

.> F & >

ánh giá chung: N u b n ch s d&ng bi u th c XPath

Trang 4

bi u th c c ánh giá v i m&c ích a

ra n i dung c& th c"a nút thì trong

tr ng h p này c n ph i làm vi c bên

trong toàn b tài li u Nó c$ng c n thi t

ph i xác nh ki u tr l i:

Sau ó b n có th g p k t qu t i DOM NodeList và th c hi n l'p i l'p l i tìm ra t t c các tiêu :

Ví d& 4 't t t c vào thành m t ch ng trình n gi n Chú ý r(ng các ph ng th c này c$ng có th n+m b+t c m t s ngo i l ki m tra vì th ph i mô t thêm m nh throws:

Ví d 4 M t ch ng trình hoàn thi n th c hi n truy v n tài li u XML v i m t bi u th c XPath xác nh

Mô hình d li u XPath

Khi b n tr n hai ngôn ng khác nhau nh XPath và Java, b n c n chú ý t i các i m n i c"a hai ngôn ng

ó T t nhiên không ph i m i i u phù h p u úng Ngôn ng Java và XPath không ph i là hai h th ng

gi ng h t nhau XPath 1.0 ch có b n ki u c b n sau:

T p h p nút (node-set)

Ki u s (number)

Ki u logic (boolean)

Ki u chu)i ký t (string)

Trong ngôn ng Java có nhi u ki u h n bao g m c các ki u i t ng c nh ngh*a b i ng i s d&ng

H u h t các bi u th c XPath, 'c bi t là các ng d#n, s là các b nút Tuy nhiên, có th có m t s kh

n ng khác Ví d&, Bi u th c count(//book) tr l i s các quy n sách có trong tài li u Bi u th c XPath count(//book[@author="Neal Stephenson"]) > 10 tr l i m t lu n lý: úng n u có nhi u h n 10

m t l n, b n mu n b- qua b c biên d ch và g i ph ng

th c evaluate() trên i t ng XPath thay th Tuy nhiên, n u b n s d&ng l i bi u th c m#u này thì trình biên

d ch làm vi c có v! nhanh h n

0 + F - H > , 01" "%

3

# + - E0"F

# ! 8 # I

# ! F# F "F

# + - F F# I

# + - F F# F I

.> "F # *

> , & ! "F H "F H

E0"F H > "F "F *

.> D & > D E

.> F & >

.> "F F

0 + F - H > , 01" "%

3

3

3

Trang 5

quy n sách c"a tác gi Neal Staphenson trong tài li u ng c l i n u có ít h n 10 quy n sách trong tài li u, sai n u n u có ít h n 10

Ph ng th c evaluate() c mô t tr l i Object i t ng gì c tr l i chính xác tùy thu c vào

k t qu trong bi u th c XPath và ki u c"a i t ng c$ng t ng ng v i ki u các b n a ra

Ki u s t ng ng v i gói java.lang.Double

Ki u chu)i ký t t ng ng v i gói java.lang.String

Ki u logic t ng ng v i gói java.lang.Boolean

Ki u t p h p nút t ng ng v i gói org.w3c.dom.NodeList

Khi b n th c hi n ánh giá bi u th c XPath

trong Java, tham bi n th hai xác nh ki u tr

l i mà b n mu n Có n m kh n ng có th và

t t c các h(ng s u l u n(m trong l p

Tr ng h p cu i cùng XPathConstants.NODE không th c s phù h p trong ki u c"a XPath B n s d&ng nó khi b n bi t chính xác bi u th c XPath s ch tr l i m t nút ho'c b n không mu n có nhi u h n

m t nút k t qu N u bi u th c XPath tr l i nhi u h n m t nút thì b n ph i xác nh b(ng cách s d&ng XPathConstants.NODE, sau ó dùng ph ng th c evaluate() tr l i nút u tiên trong tài li u cho phép N u bi u th c XPath l a ch n m t t p h p r)ng và b n s d&ng XPathConstants.NODE thì

ph ng th c evaluate() tr l i giá tr r)ng

N u chuy n %i theo yêu c u không c th c hi n thì ph ng th c evaluate() b+t c ngo i l

XPathException

Các ng c nh không gian tên (Namespace contexts)

N u các ph n t trong tài li u n(m trong m t không gian tên thì bi u th c XPath cho truy v n khi th c

hi n thì ph i s d&ng úng không gian tên Bi u th c XPath không c n s d&ng các ti n t gi ng nhau mà

ch c n s d&ng các không gian tên URI gi ng nhau Vì v y, khi tài li u XML s d&ng không gian tên m'c

nh thì bi u th c XPath ph i s d&ng ti n t m'c dù m&c tiêu tài li u không s d&ng nó

Tuy nhiên, Ch ng trình Java không ph i là m t tài li u XML nên gi i pháp không gian tên thông th ng không áp d&ng Thay vì b n cung c p i t ng t ng ng v i các d ng ti n t t i các không gian tên URI i t ng này là ví d& c"a giao di n javax.xml.namespace.NamespaceContext Ví d&, gi s tài li u v các quy n sách c l u trong không gian tên http://www.example.com/books có d ng nh trong Ví d& 5:

Ví d 5 Tài li u XML s d ng không gian tên m c nh

XPath 2

Gi s b n ang làm vi c v i XPath 1.0 XPath 2 cho phép m r ng và s d&ng l i ki u h th ng c b n S thay %i chính trong Java XPath API cho phép h) tr XPath 2 thêm vào m t s ki u d li u m i c"a XPath

( 5'77889':79( 5

( 5;< :7( 5

(BCC # CC5

Trang 6

Bi u th c XPath th c hi n tìm ki m các tiêu c"a t t c các quy n sách c"a tác gi Neal Staphenson có

d ng nh sau //pre:book[pre:author="Neal Stephenson"]/pre:title/text() Tuy nhiên, b n

ph i xác nh thêm ti n t pre t i a ch URI http://www.example.com/books Nh ng i u này có chút r+c r i ó là giao di n NamespaceContext không ph i là giao di n th c thi m'c nh trong b công c& phát tri n ph n m m Java (JDK) ho'c JAXP, nh ng i u ó không quan tr ng l+m Tuy nhiên, v n này

r t là khó th c thi theo yêu c u c"a chính b n Ví d& 6 mô ph-ng m t th c thi n gi n cho m t không gian tên xác nh B n nên xác nh t ng ng thêm ti n t xml rõ ràng h n

Ví d 6 M t ng c nh n gi n th c hi n bu c m t không gian tên cùng v i giá tr m c nh

Th t không khó s d&ng m t ánh x th c hi n l u tr các thông tin ã c g+n vào và thêm vào các

ph ng th c kh i t o cho phép s d&ng d&ng l i nhi u h n ng c nh không gian tên

Sau khi b n t o ra i t ng NamespaceContext thay vì v y cài 't trên i t ng XPath tr c khi th c

hi n biên d ch bi u th c T th i i m này tr i b n có có th th c hi n truy v n b(ng cách s d&ng

nh ng d ng ti n t này phía tr c Ví d&:

Ví d 7 Truy v n XPath s d ng các không gian tên

Các trình phân tích hàm

Trong m t s tr ng h p, nó r t hi u qu khi nh ngh*a các hàm m r ng trong ngôn ng Java s d&ng trong các bi u th c XPath Các hàm này th c hi n các nhi m v& khó mà không th th c hi n b(ng XPath thu n túy Tuy nhiên, các hàm theo ngh*a nên úng là các hàm vì v y các hàm này không th là các

ph ng th c n gi n c (Các hàm XPath có th c ánh giá theo nhi u cách và nhi u th i i m khác nhau.)

# + - E

# + - F F# I

! ! # KLE ! & F *

& F# 4 & F M , M / /KLE M , K / /KLE

3

! ! > & F ! *

3

E ! > & F ! *

3

3

.> D & > D E > F & >

.> "F F

0 + F - H > , 01" "%

3

Trang 7

Các hàm m r ng th c hi n truy c p thông qua Java XPath API ph i th c thi c giao di n

javax.xml.xpath.XPathFunction Giao di n này khai báo m t ph ng th c dánh giá n gi n:

Ph ng th c này nên tr l i m t trong n m ki u giá tr mà ngôn ng Java có th chuy n %i c sang XPath:

String

Double

Boolean

Nodelist

Node

C& th , Ví d& 8 hi n th hàm m r ng xác nh giá tr ki m tra trong ISBN và tr l i k t qu có ki u Boolean Nguyên t+c c b n c"a ki m tra t%ng này là m t trong chín s u tiên c nhân b i v trí c"a

nó ( ó là, s u ch l n m t, s th hai ch l n hai, và ) Các giá tr này c thêm vào và c nh+c l i sau khi th c hi n chia cho 11 có c k t qu N u s còn l i là m i thì s cu i cùng c xác nh là

X

Ví d 8 Hàm m r ng XPath dành cho vi c ki m tra ISBNs

B c ti p theo là t o ra hàm m r ng c h) tr ch ng trình Java làm i u này b n cài 't

# + -

# + - F F# F I

# ! 8 # I

& ! N B ; *

.> D "F O ! # & ! # - C 3

!

& #

# '

-# ! % F , 3

*

3

,

# '

3

$ %LK"

3

$ D "

3

3

Trang 8

bi u th c Trình phân tích hàm th c hi n ánh x tên XPath và không gian tên URI cho hàm t i l p Java

th c thi hàm ó Ví d& 9 là trình phân tích hàm n gi n cho phép ánh x hàm bi u th c valid-isbn v i không gian tên http://www.example.com/books t i l p trong Ví d& 8 Ví d&, bi u th c XPath //book [not(pre:valid-isbn(isbn))] th c hi n tìm t t c các quy n sách có ki m tra ISBN không phù h p

v i quy nh

Ví d 9 Ch c n ng ng c nh công nh n hàm m r ng valid-isbn

B i vì các hàm m r ng ph i 't trong các không gian tên nên b n ph i s d&ng NamespaceResolver khi ti n hành ánh giá bi u th c ch a các hàm m r ng, n u tài li u ang c th c hi n truy v n thì không c s d&ng không gian tên B i vì XPathFunctionResolver, XPathFunction, và

NamespaceResolver là các giao di n,n u thu n ti n b n có th 't chúng ngang hàng nhau cùng vào

m t l p

K t lu n

Nh n th y r(ng vi c vi t các câu truy v n b(ng các ngôn ng khai báo nh SQL và XPath là d dàng h n nhi u so v i vi c vi t các câu truy v n này trong các ngôn ng m nh l nh nh Java và C ng th i ng c

l i th c hi n vi t các c u trúc logic ph c t p trong ngôn ng ki u máy Turing nh Java và C l i d dàng

h n nhi u so v i vi c vi t trong các ngôn ng khai báo nh SQL và XPath Nh ng th t may ta có th k t

h p tr n c hai l i v i nhau cho phép s d&ng các API d i d ng nh Java Database Connectivity (JDBC)

và javax.xml.xpath Khi mà ph n l n d li u trên th gi i c h ng chuy n sang XML thì

javax.xml.xpath s tr thành quan tr ng nh là java.sql

Tài nguyên

H c t p

""B+t u v i XPath 2.0" c"a tác gi Benoît Marchal (developerWorks, May 2006): V i s gia t ng

s c m nh và tính hi u qu c"a XPath phiên b n 2.0, h c cách vi t d dàng các yêu c u ph c t p v i

mô hình d li u m i

"Làm vi c v i các ng c nh không gian tên JAXP:" Norm Walsh bi n h cho các ng c nh không gian tên

XML in a Nutshell (Elliotte Rusty Harold and W Scott Means, O'Reilly, 2005): c bài tham kh o

y " này và bài h ng d#n ng+n v XPath 1.0, c$ng nh DOM và JAXP

developerWorks Java technology zone: Khám phá hàng tr m bài vi t v m i khía c nh c"a l p trình Java

Ch ng ch IBM XML 1.1: H c cách tr thành nhà phát tri n XML 1.1 và các công ngh liên

# + - F F# # S #

# + - F F# F I

E $ 2 3

3

3

Trang 9

quan c ch ng nh n b i IBM

XML: Th m developerWorks XML Zone v i r t nhi u bài vi t và m.o, h ng d#n, tiêu chu,n và các sách - c"a IBM

Web qu ng bá và các s ki n k thu t c"a developerWorks: C p nh t ki n th c công ngh c"a b n

ây

L y s n ph m và công ngh

JAXP Project: T i 1.3 cho Java 1.3 và 1.4 t java.net

Xalan 2: Khám phá c) máy XSLT c"a d án Apache mà h) tr các hàm API XPath trong bài vi t này

SAXON 8: Th c) máy XSLT c"a Michael Kay mà c$ng h) tr API XPath c th o lu n trong bài vi t này

Ph n m m dùng th c"a IBM: Xây d ng d án ti p theo c"a b n v i ph n m m dùng th t i v t developerWorks

Th o lu n

Các di n àn th o lu n v XML: Tham d vào các di n àn XML

developerWorks blogs: Tham gia vào c ng ng developerWorks

ôi nét v tác gi

Elliotte Rusty Harold sinh ra New Orleans, n i mà ông th ng xuyên tr v th ng th c món m p tây Tuy nhiên, ông s ng Prospect Heights c nh Brooklyn v i v tên là Beth và hai con là Charm và Marjorie Ông là tr lý giáo s ngành khoa h c máy tính t i tr ng i h c Polytechnic University, n i

mà ông d y môn Java và l p trình h ng i t ng

Ngày đăng: 24/08/2018, 13:54

TỪ KHÓA LIÊN QUAN

w