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

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

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

Thông tin tài liệu

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.

Các hàm API XPath c"a Java Page of 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 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 cách nhanh nh t n gi n nh t nhúng bi u th c XPath vào bên ch ng trình Java™ Java 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 tài li u XML v i XPath 27/06/2007 - T góp ý c a ng i c, tác gi biên d ch (tham kh o ph n mã ng n Ví d 3) ã c p nh t bi u th c XPath ã c 25/08/2008 - T góp ý c a ng i c, tác gi ã thay "http://www.example.org/books" thành "http://www.example.com/books" Ví d 6, khơng gian tên (namespace) c c p n o n v n tr c Ví d 9, Ví d N u b n g i m t ó mua cho b n m t chai s a b n s ngh nh th n ng i ó nh h mua cho b n? "Làm n mua h m t chai s a" nói " i ngồ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 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 bàn toán Thanh tố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 th t 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 m t chai s a" Các ngơn ng truy v n c ch tìm ki m c"a máy tính c$ng t ng t nh Vi c "Tìm b n c"a Cryptonomicon" d dàng h n vi c vi t m t c u trúc logic chi ti t tìm ki m m t s c s d li u B i thao tác tìm ki m có logic r t gi ng nên b n có th a ngơn ng t%ng qt có th th c hi n câu l nh nh "Tìm t t c quy n sách c"a tác gi Neal Stephenson," sau ó vi t m t c ch x lý truy v n ó d a vào kho d li u ó XPath Trong r t nhi u ngôn ng truy v n, Ngôn ng Truy v n Có c u trúc (SQL) ngơn ng c thi t k cho phép th c hi n truy v n c s d li u quan h Có m t s ngơn ng truy v n bao g m Ngôn ng truy v n i t ng (OOL) XQuery Tuy nhiên, ch" c"a vi t v XPath ngôn ng truy v n c thi t k th c hi n x lý truy v n tài li u XML Ví d&, m t truy v n XPath n gi n tìm tiêu c"a t t c quy n sách 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 Ví d Mã DOM tìm t t c tiêu ! & ' " " ( # # " c a ph n t book có giá tr Neal Stephenson $ % ! ! ! # # )) * # ! " # $ % ! # & & + ' + ( ! i d ng nh Ví d& 1: ! +)) * Các hàm API XPath c"a Java " # Page of " # # + ! , !$ && ! # !$ && & ' & ( ! ! % ! )) * %".%/ 01" * 3 & ! * 3 & * ! & + ' " + ( # $ % ! ! # + ! # +)) * 3 i u có th tin ho'c khơng, o n mã DOM Ví d& th c s khơng mang tính t%ng qt dõ dàng b(ng bi u th c XPath n gi n Cái mà cho phép b n có th vi t, s a l)i 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 ngôn ng Java th c t , XPath khơng hồn tồn m t ngơn ng l p trình Có nhi u v n b n khơng th th y c XPath, th m chí k c câu l nh truy v n c$ng không th c t o XPath Ví d&, XPath khơng khơng th tìm th y quy n sách ã ng ký s qu c t (ISBN) n u ki m tra không phù h p mã ch s hay tác gi c"a cu n sách ó c l y t c s d li u tài kho n bên Th t may m+n, b n tích h p XPath vào ch ng trình Java 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 ch ng trình Java s d&ng t o câu truy v n XPath khác d a c ch XPath Xalan có m t API, Saxon có m t lo i khác c ch khác s có API khác i u 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 ó c"a b n Theo m t ý ó, b n có th làm th nghi m v i c ch khác có c 'c tr ng c b n khác mà không ph c t p ho'c không c n ph i vi t l i o n mã Vì lý này, Java gi i thi u gói javax.xml.xpath cung c p y " c ch , ng d&ng mơ hình i t ng c l p th vi n XPath Gói c$ng có th áp d&ng c Java 1.3 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 s n ph,m khác, Xalan 2.7 Saxon bao g m th c thi c"a th vi n M t ví d n gi n Tôi s b+t u b(ng vi c mô ph-ng m t cách xác b c th c hành ph n 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 danh sách quy n sách c"a tác gi Neal Stephenson Trong tr ng h p này, danh sách bi u m#u c hi n th nh Ví d& 2: Ví d Tài li u XML ch a thông tin quy n sách ( ( 6''' , ( 5 ( 5'77889':79( 5;< :7( ( ( ( ( ( ( 5 ( 5 Các hàm API XPath c"a Java ( 6''7 5$ ! % ( - ( 5= > ( 5> ( 5'? ! ! # , )) ! F 01" "% * 3 Mơ hình d li u XPath Khi b n tr n hai ngôn ng khác nh XPath Java, b n c n ý t i 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 XPath không ph i hai h th ng gi ng h t 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 ki u d&ng it ng c nh ngh*a b i ng is H u h t bi u th c XPath, 'c bi t ng d#n, s 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 quy n sách có 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 Các hàm API XPath c"a Java Page of quy n sách c"a tác gi Neal Staphenson tài li u ng sai n u n u có h n 10 c l i n u có h n 10 quy n sách tài li u, Ph ng th c evaluate() c mô t tr l i Object i t ng c tr l i xác tùy thu c vào k t qu bi u th c XPath ki u c"a i t ng c$ng t ng ng v i ki u b n a Ki Ki Ki Ki u s t ng ng v i gói java.lang.Double u chu)i ký t t ng ng v i gói java.lang.String u logic t ng ng v i gói java.lang.Boolean 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 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 t t c h(ng s u l u n(m l p javax.xml.xpath.XPathConstants: XPath Gi s b n ang làm vi c v i XPath 1.0 XPath cho phép m r ng s d&ng l i ki u h th ng c b n S thay %i Java XPath API cho phép h) tr XPath thêm vào m t s ki u d li u m i c"a XPath XPathConstants.NODESET XPathConstants.BOOLEAN XPathConstants.NUMBER XPathConstants.STRING XPathConstants.NODE Tr ng h p cu i XPathConstants.NODE không th c s phù h p ki u c"a XPath B n s d&ng b n bi t 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 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 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 b n s d&ng XPathConstants.NODE ph ng th c evaluate() tr l i giá tr r)ng N u chuy n %i theo yêu c u không XPathException Các ng c th c hi n ph ng th c evaluate() b+t c ngo i l c nh không gian tên (Namespace contexts) N u ph n t tài li u n(m m t khơng gian tên bi u th c XPath cho truy v n th c hi n ph i s d&ng úng không gian tên Bi u th c XPath không c n s d&ng ti n t gi ng mà ch c n s d&ng khơng gian tên URI gi ng Vì v y, tài li u XML s d&ng không gian tên m'c nh 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 Tuy nhiên, Ch ng trình Java khơng ph i 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 b n cung c p i t ng t ng ng v i d ng ti n t t i khơng gian tên URI i t ng ví d& c"a giao di n javax.xml.namespace.NamespaceContext Ví d&, gi s tài li u v quy n sách c l u khơng gian tên http://www.example.com/books có d ng nh Ví d& 5: Ví d Tài li u XML s d ng không gian tên m c ( ( F# J 6''' 5 , ( 5 ( 5'77889':79( 5;< :7( ( ( ( ( ( ( (BCC # ( - CC5 F # # ( 5 nh Các hàm API XPath c"a Java Page of Bi u th c XPath th c hi n tìm ki m tiêu c"a t t 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 có chút r+c r i ó giao di n NamespaceContext khơng ph i giao di n th c thi m'c nh 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 r t khó th c thi theo yêu c u c"a b n Ví d& 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 M t ng c nh # # # + + - F F# + - F F# n gi n # # ! ! & F & & nh E I > & th c hi n bu c m t không gian tên v i giá tr m c , # , # KLE F F # # ! # & F > 4 F# M , & F & F / /KLE K , * "F J F # M / M , F * & F # /KLE % # G > & F ! ! K & > * "F ! ! % # G E ! & > & F K > ! ! * "F 3 Th t khơng khó s d&ng m t ánh x th c hi n l u tr thông tin ã c g+n vào thêm vào 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 b n t o i t ng NamespaceContext thay v y cài 't i t ng XPath tr c th c hi n biên d ch bi u th c T th i i m 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 phía tr c Ví d&: Ví d Truy v n XPath s d ng không gian tên > > F > F D & & # "F F > D E > , F > # , F F # J + F & ' # J ( G H > ! ! # G , )) ! J F 01" "% * Các trình phân tích hàm Trong m t s tr ng h p, r t hi u qu nh ngh*a hàm m r ng ngôn ng Java s d&ng bi u th c XPath Các hàm th c hi n nhi m v& khó mà khơng th th c hi n b(ng XPath thu n túy Tuy nhiên, hàm theo ngh*a nên úng hàm v y hàm không th ph ng th c n gi n c (Các hàm XPath có th c ánh giá theo nhi u cách nhi u th i i m khác nhau.) Các hàm API XPath c"a Java Page of 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 khai báo m t ph ng th c dánh giá n gi n: + - ! > D "F Ph ng th c nên tr l i m t n m ki u giá tr mà ngôn ng Java XPath: có th chuy n %i c sang String Double Boolean Nodelist Node C& th , Ví d& hi n th hàm m r ng xác nh giá tr ki m tra ISBN tr l i k t qu có ki u Boolean Nguyên t+c c b n c"a ki m tra t%ng m t chín s u tiên c nhân b i v trí c"a ( ó là, s u ch l n m t, s th hai ch l n hai, ) Các giá tr c thêm vào c nh+c l i sau th c hi n chia cho 11 có c k t qu N u s l i m i s cu i c xác nh X Ví d Hàm m r ng XPath dành cho vi c ki m tra ISBNs # # # + + - F F# ! F # I I E $ # # % # + & > - ! D # ! ! N > B ! ! ; * > D ! # "F * * D "F O & ! # - C ! + & # ' & & ! & $ & & & & & ! E ! ! ! ' ! ! * # ' % F , = - ; < 10M 6H # ! % F , = - G 10M - * > D "F , - ! # & ! # & B , ;' $ D " ' ' # ) ( : )) ); I * CG'G ! & ! $ # P ;; ) G'G %LK" : QQ : G.G RR ! ;' * $ D " 3 B c ti p theo t o hàm m r ng c h) tr ch ng trình Java làm i u b n cài 't i t ng XPath tr c ti n hành biên d ch javax.xml.xpath.XPathFunctionResolver Các hàm API XPath c"a Java Page of bi u th c Trình phân tích hàm th c hi n ánh x tên XPath không gian tên URI cho hàm t i l p Java th c thi hàm ó Ví d& 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 Ví d& Ví d&, bi u th c XPath //book [not(pre:valid-isbn(isbn))] th c hi n tìm t t c quy n sách có ki m tra ISBN khơng phù h p v i quy nh Ví d Ch c n ng ng c nh công nh n hàm m r ng valid-isbn # # + - F F# + - F F# # S F E $ D - , & S # > & S F # J D # # I # # F # # # - D E $ D E $ > , H S F # # D # H RR L - * C * ; * 3 B i hàm m r ng ph i 't không gian tên nên b n ph i s d&ng NamespaceResolver ti n hành ánh giá bi u th c ch a hàm m r ng, n u tài li u ang c th c hi n truy v n khơng c s d&ng khơng gian tên B i XPathFunctionResolver, XPathFunction, NamespaceResolver giao di n,n u thu n ti n b n có th 't chúng ngang hàng vào m t l p K t lu n Nh n th y r(ng vi c vi t câu truy v n b(ng ngôn ng khai báo nh SQL XPath d dàng h n nhi u so v i vi c vi t câu truy v n ngôn ng m nh l nh nh Java C ng th i ng c l i th c hi n vi t c u trúc logic ph c t p ngôn ng ki u máy Turing nh Java C l i d dàng h n nhi u so v i vi c vi t ngôn ng khai báo nh SQL XPath Nh ng th t may ta có th k t h p tr n c hai l i v i cho phép s d&ng API d i d ng nh Java Database Connectivity (JDBC) javax.xml.xpath Khi mà ph n l n d li u th gi i c h ng chuy n sang XML javax.xml.xpath s tr thành quan tr ng nh java.sql Tài nguyên H ct p ""B+t u v i XPath 2.0" c"a tác gi Bent Marchal (developerWorks, May 2006): V i s gia t ng s c m nh tính hi u qu c"a XPath phiên b n 2.0, h c cách vi t d dàng yêu c u ph c t p v i mơ hình d li u m i "Làm vi c v i ng c nh không gian tên JAXP:" Norm Walsh bi n h cho ng c nh không gian tên XML in a Nutshell (Elliotte Rusty Harold and W Scott Means, O'Reilly, 2005): y " h ng d#n ng+n v XPath 1.0, c$ng nh DOM JAXP c tham kh o developerWorks Java technology zone: Khám phá hàng tr m 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 công ngh liên Các hàm API XPath c"a Java quan Page of c ch ng nh n b i IBM XML: Th m developerWorks XML Zone v i r t nhi u vi t m.o, h sách - c"a IBM ng d#n, tiêu chu,n Web qu ng bá 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 công ngh JAXP Project: T i 1.3 cho Java 1.3 1.4 t java.net Xalan 2: Khám phá c) máy XSLT c"a d án Apache mà h) tr hàm API XPath vi t SAXON 8: Th c) máy XSLT c"a Michael Kay mà c$ng h) tr API XPath vi t c th o lu n 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 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 New Orleans, n i mà ông th ng xuyên tr v th ng th c m p tây Tuy nhiên, ông s ng Prospect Heights c nh Brooklyn v i v tên Beth hai Charm Marjorie Ông 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 l p trình h ng i t ng ... S thay %i Java XPath API cho phép h) tr XPath thêm vào m t s ki u d li u m i c"a XPath XPathConstants.NODESET XPathConstants.BOOLEAN XPathConstants.NUMBER XPathConstants.STRING XPathConstants.NODE... th c XPath 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 t t c h(ng s u l u n(m l p javax.xml .xpath. XPathConstants: XPath Gi s b n ang làm vi c v i XPath 1.0 XPath. .. n t o XPathFactory: > D & > Sau ó b n s d&ng factory > it > F & D E t o it ng XPath: > ng XPath th c hi n biên d ch bi u th c XPath: "F F F # Cu i cùng, b n th c hi n ánh giá bi u th c XPath

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

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan