intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Định vị các phần cụ thể của tài liệu XML với XPath, Phần 2 Cải tiến kết quả của XPath sử dụng vị từ phù hợp

Chia sẻ: Nguyen Nhi | Ngày: | Loại File: PDF | Số trang:74

120
lượt xem
7
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Brett McLaughlin , Tác giả, biên tập, O'Reilly Media Tóm tắt: Phần 1 của bài viết này đã đưa cho bạn biết lợi ích của XPath. Cách sử dụng ký tự dấu gạch chéo, các ký tự thay thế, tập hợp và văn bản đơn giản, đồng thời bạn cũng học cách làm thế nào xác định được các phần tử và các thuộc tính ở mọi vị trí của tài liệu XML. Tuy nhiên thỉnh thoảng có lúc bạn cần làm việc dựa vào tên của nút trong tài liệu. Khi sử dụng các vị từ để thực hiện...

Chủ đề:
Lưu

Nội dung Text: Định vị các phần cụ thể của tài liệu XML với XPath, Phần 2 Cải tiến kết quả của XPath sử dụng vị từ phù hợp

  1. Định vị các phần cụ thể của tài liệu XML với XPath, Phần 2 Cải tiến kết quả của XPath sử dụng vị từ phù hợp Brett McLaughlin , Tác giả, biên tập, O'Reilly Media Tóm tắt: Phần 1 của bài viết này đã đưa cho bạn biết lợi ích của XPath. Cách sử dụng ký tự dấu gạch chéo, các ký tự thay thế, tập hợp và văn bản đơn giản, đồng thời bạn cũng học cách làm thế nào xác định được các phần tử và các thuộc tính ở mọi vị trí của tài liệu XML. Tuy nhiên thỉnh thoảng có lúc bạn cần làm việc dựa vào tên của nút trong tài liệu. Khi sử dụng các vị từ để thực hiện tìm kiếm bạn có thể đánh giá được các giá trị của các thuộc tính và của nút cha và của các nút con của phần tử mục tiêu. Hơn thế nó cho phép bạn tìm một tập hợp các nút mở rộng và thực hiện cải tiến hay chọn lọc các cài đặt để bạn có thể thêm vào các khẳng định để cho phép các XPaths của bạn tìm kiếm chính xác các nút bạn muốn. Trước khi bạn bắt đầu Nghiên cứu làm thế nào để nhận được bài viết này và làm thế nào để thực hiện nó. Giới thiệu về bài viết này Bài viết này tập trung mô tả chi tiết về XPath, cho phép bạn xác định các phần khác nhau của tài liệu XML bằng cách sử dụng cú pháp dưới dạng thư mục. Bạn sẽ học cú pháp của XPath và bạn sẽ làm việc với các công cụ để thực thi XPath tương ứng. Đồng thời, sau khi bạn hoàn thành toàn bộ bài viết này bạn sẽ nắm được các khái niệm cơ bản của XPath và bạn sẽ hiểu rõ hơn cách sử dụng XPath trong các ứng dụng của bạn. Các mục tiêu Các từ viết tắt trong bài viết này API: giao diện lập trình ứng dụng  HTML: Ngôn ngữ đánh dấu siêu văn bản  URI: Uniform Resource Identifier 
  2. W3C: World Wide Web Consortium  XHTML: Ngôn ngữ đánh dấu siêu văn bản mở rộng  XML: Ngôn ngữ đánh dấu mở rộng  XSL: Extensible Stylesheet Language  XSLT: XSL Transformations  Phần 2 của bài viết này tập trung vào việc sử dụng các vị từ và đưa ra các vị từ phù hợp trong XPath của bạn. Bao gồm các lựa chọn XPath khá c nhau được cung cấp cho việc tìm kiếm của bạn. Nó cũng mô tả cách làm thế nào xây dựng các vị từ phức tạp thành tập câu lệnh phức tạp của các truy vấn bằng cách chỉ sử dụng cú pháp XPath chuẩn. Bạn cũng sẽ bắt đầu hiểu các ý tưởng ứng dụng của XPath và bạn cũng sẽ biết khi nào XPath là lựa chọn tốt nhất so với công nghệ XML khác như XQuery. Cuối cùng bạn sẽ biết cách làm việc với các kiểu dữ liệu đặc biệt khi bạn thực hiện so sánh các giá trị thuộc tính có giá trị số. Điều kiện tiên quyết Những bài viết khác trong loạt bài viết này Sử dụng XPath để định vị và lựa chọn các phần của tài liệu XML, Phần 1  Điều kiện cần thiết để bạn học bài viết này đó là bạn phải đã đọc và làm việc với Phần 1 (xem Tài nguyên). Bài viết đó giới thiệu đầy đủ các khái niệm cơ bản của XPath và cũng mô tả chi tiết về các nút và các thực hiện đánh giá các biểu thức XPath từng phần từng phần một. Thêm vào đó, bài viết này được viết bởi nhóm các tác giả và các lập trình về tài liệu XML. Vì thế bạn cũng cần biết cách đọc, viết và thực thi với XML. Bạn cũng nên có các khái niệm về XML, bao gồm: Elements - Các phần tử hay còn gọi là các thành phần  Attributes - Các thuộc tính 
  3. Text - Văn bản  The root element - Phần tử gốc  Mặc dù không yêu cầu nhưng nếu bạn đã làm việc với DOM thì điều đó rất tốt để giúp bạn hiểu về các nút. Nếu muốn nghiên cứu về DOM, ghé thăm Tài nguyên để tìm kiếm một số đường dẫn liên quan. Đồng thời bạn cũng nên tìm hiểu rõ về các phần liên quan đến nút trong Phần 1 của bài viết này. Bài viết này sẽ đề cập đến và xác định một số API khác nữa bao gồm: XSL, XSLT và XPath. Nếu có sự hiểu biết về từng phần này là rất tốt mặc dù không yêu cầu bắt buộc. Để có nhiều thông tin hơn về các phần này, ghé thăm Tài nguyên trong bài viết này.
  4. Đặt tham biến môi trường cho ví dụ Các tài liệu và cài đặt áp dụng cho bài viết này được sử dụng lại từ trong phần I vì thế nếu bạn đã làm việc được trong Phần 1 thì chúng ta sẵn sàng để đến Phần 2. Bạn cũng sẽ làm việc với tài liệu XML thông qua bài viết này. Bạn cần phải có tài liệu để truy cập đến trong máy của bạn và phải nắm được cấu trúc cơ bản của tài liệu tương ứng đó. Thêm vào đó bạn cũng cần có các công cụ để thực thi biểu thức XPath của bạn và trả lại kết quả dựa trên lựa chọn của bạn. Phần này diễn tả làm cách nào để có thể làm được các ví dụ của bài viết dựa trên phần môi trường cá nhân đã có. Thật không may mắn công cụ để đánh giá xác định XPath là không được xác định cho từng hệ thống xử lý khác nhau. Có một vài công cụ được tải xuống dưới dạng tệp .EXE và chạy trên nền Microsoft® Windows® nhưng sẽ không làm việc được trên Mac OS X. Tương tự, các công cụ để làm việc được trên hệ điều hành Mac OS X nhưng không chạy được trên Windows. Trong khi bạn sử dụng các chương tình Java™ và các lớp để tạo ra hệ thống độc lập với làm việc bài báo này thì tập trung vào nghiên cứu XPaths hơn là tập trung vào nghiên cứu bấy kỳ các ngôn ngữ lập trình khác Theo như các phần trên đã hiển thị chi tiết cách làm thế nào để có được các công cụ để làm việc với XPath trên cả Windows và Mác OS X. Bạn hãy chọn công cụ mà bạn muốn sử dụng để làm. Mỗi một công cụ, tất cả các cú pháp và các ví dụ hiển thị một cách đầy đủ vì thế bạn sẽ có được công cụ tương ứng của bạn để đánh giá các biểu thức XPath. Đánh giá các biểu thức XPath trên Windows Một trong các công cụ tốt nhất để làm việc với XPath trên hệ điều hành Windows đó là Stylus Studio (xem tại Tài nguyên để có đường dẫn tới trang Stylus Studio Web và tải về). Tải bất kỳ một trong các phiên bản sau —Enterprise Suite, Professional Suite, hay Home Edition— và cài đặt trên nền hệ điều hành tương ứng Mỗi khi bạn cài Stulus Studio bạn phải chắc chắn có thể xử lý được XPaths từ phần đầu tiên của bài báo này; sau đó bạn sẽ biết các để sẵn sàng làm gì tiếp theo. Kết quả màn hình của bạn sẽ có dạng như Hình 1.
  5. Hình 1. Stylus Studio cho phép đánh giá xác định biểu thức XPath Đánh giá biểu thức XPath trên hệ điều hành Mac OS X Các công cụ để làm việc với XPath trên hệ điều anh Mác OS X— mà không sử dụng lớp Java— là có ít cải tiến và tinh tế hơn so với làm việc trên hệ điều hành Window. Hầu hết các công cụ được sử dụng là AquaPath, là phần mềm mã nguồn mở và tải miễn phí (ghé thăm trang để tải về tại Tài nguyên). Tải AquaPath dưới dạng ảnh của đĩa và đơn giản chỉ cần thực hiện di chuyển ứng dụng AquaPath từ hình ảnh thể hiện vào thư mục ứng dụng Web của bạn. Nháy đúp chuột vào ứng dụng AquaPath cài đặt mới, bạn sẽ nhìn thấy màn hình có dạng giống như trong Hình 2.
  6. Hình 2. AquaPath cung cấp cách xử lý XPath trên Mac OS X Có thể trông nó chưa giống nhiêu nhưng khi bạn bắt đầu tải các tài liệu XML và đánh vào đó biểu thức XPath thì công cụ này —trông giống như Stylus Studio— khi thực hiện Kiểm tra tài liệu XML XPath là làm việc nhiều về XML so với bất kỳ ngôn ngữ lập trình nào khác. Vì thế hầu hết các chương trình đều sử dụng XPath thông qua các API kể từ Java hay C# chính vì vậy bài viết này tập trung vào xử lý các XPath dựa trên tài liệu XML. Chính vì thế mà nói rằng làm việc với tài liệu XML là làm việc với XPath. Để phục vụ cho bài viết này thì bạn cần có tài liệu XML minh họa ngắn gọn (tầm khoảng 50 dòng) và tài liệu này có một số các phần tử cũng như các thuộc tính mang giá trị dữ liệu nào đó. Ví dụ 1 hiển thị một phần của tài liệu XML được sử dụng, tài liệu này được Ant xây dựng từ Apache Xerces2 Java Parser. Tài liệu này bao gồm nhiều nhưng trong ví dụ này chỉ hiển thị tóm tắt. Tuy nhiên bạn có thể tải đầy đủ tài liệu XML từ Tài nguyên.
  7. Ví dụ 1. Tài liệu mẫu XML cho bài viết này
  8. Read the README file for build instruction. Authors: Stefano Mazzocchi Anupam Bagchi Andy Clark, IBM $Id: build.xml 567790 2007-08-20 19:16:53Z mrglavas $ ==================================================================== -->
  9. Hãy đảm bảo rằng bạn đã có xerces-build.xml và công cụ XPath đã được cài đặt và sẵn sàng sử dụng. Và bạn đã sẵn sàng để bắt đầu.
  10. Thực hiện lựa chọn dựa vào các vị từ Tất cả các XPath bạn đã viết trong phần 1 của bài viết này tập trung vài việc xác định các nút trong từng bước tại một thời điểm khi bạn di chuyển đến nút địch. Ví dụ, trong biểu thức XPath //target/copy/fileset, nút đích là fileset là nút chứa trong phần tử copy, là nút được chứa trong phần tử target, với phần tử target được đặt ở bất kỳ vị trí nào của tài liệu nguồn. Công việc này là thực hiện hiệu quả khi bạn cần tìm tập hợp các nút được xác định dựa vào các phần tử hoặc các thuộc tính (hoặc dựa vào cả nếu có thêm dấu |). Tuy nhiên, XPaths cũng có giới hạn của nó. Chúng hữu dụng —và trong rất nhiều trường hợp chúng là những gì bạn cần— nhưng chúng không thu được thuận lợi của các thông tin trong tài liệu XML. Ví dụ, bạn không có công cụ để cho phép sử dụng tất cả các giá trị của các thuộc tính trong tài liệu XML gốc. Bạn cũng không có cách nào để sử dụng những kết quả trả lại tương ứng đó khi các phần tử chỉ có thể là các thuộc tính hay các phần tử con. Bạn có thể trả lại các thuộc tính hay các phần tử con bằng cách sử dụng XPath có dạng như sau //target/copy/*, cái này trả lại các phần tử con của phần tử copy là các phần tử nằm trong các phần tử target. Nhưng nếu bạn không muốn những phần tử con này? Nếu bạn muốn tất cả các phần tử copy mà có chứa phần tử con? Khi bạn muốn giới hạn hay chọn lọc các kết quả của bạn dựa tr ên điều kiện thông qua tên của các phần tử và các thuộc tính và đường dẫn tới những phần từ và thuộc tính bạn cần vị từ. Vị từ là một biểu thức rút gọn được nhúng vào cặp dấu ngoặc vuông ([ và ]), đó là ký hiệu để chỉ đến một tập hợp nút trong biểu thức XPath của bạn. Vị từ cho phép bạn cải tiến các XPath của bạn và thêm vào lượng lớn các ràng buộc vào công cụ XPath. Thêm chọn lựa cho thuộc tính và phần tử riêng rẽ Biểu mẫu cơ bản nhất là nhận tập hợp nút và kiểm tra để xem có các nút nào có các thuộc tính và các phần tử con. Thêm chọn lựa cho thuộc tính riêng lẻ Hỗ trợ bạn cách để tìm tất cả các phần tử copy nằm trong các phần tử target. Để đơn giản hãy sử dụng XPath có dạng như: //target/copy. Tuy nhiên trong tệp mà Ant xây dựng — có tên là xerces-build.xml, là tệp ví dụ của bài viết này— các phần tử copy được chia làm hai dạng: Phần tử rỗng: Có thuộc tính file và thuộc tính tofile, trong đó tệp dùng để  copy tạo thành tệp mới để sử dụng. Biểu mẫu này được cho dưới dạng như sau:
  11.  Biểu mẫu với các phần tử con: Thuộc tính todir là năm trong phần tử  copy, nhưng các thông tin liên quan đến copy là trong các phần tử con. Biểu mẫu này có dạng như sau:  Biểu thức XPath //target/copy trả lại cả hai trong số biểu mẫu này. Hơn thế nữa, nếu bạn muốn khôi phục lại chính xác phần tử fileset nằm trong phần tử copy, bạn có thể sử dụng XPath có dạng như //target/copy/fileset. Bạn cũng có thể nhanh chóng khôi phục todir hay các thuộc tính file sử dụng XPath có dạng //target/copy/@todir hay //target/copy/@file. Trong trường hợp này, bạn lựa chọn hoặc biểu mẫu của copy với các phần tử con chứa bên trong (bằng việc lựa chọn thuộc tính todir attribute) hoặc biểu mẫu rỗng (bằng việc lựa chọn thuộc tính file). Trong cả hai trường hợp, các tập hợp nút kết quả vẫn chứa các thuộc tính, nh ưng phải các phần tử của copy.
  12. Nhưng nếu muốn chỉ trả lại các phần tử copy với thuộc tính file? Khi đó cần phải xác định cho phù hợp với từng nút mục tiêu tương ứng. Ví dụ 2 hiển thị cú pháp để sử dụng vị từ để phù hợp thuộc tính. Ví dụ 2. Lựa chọn các phần tử dựa trên sự tồn tại của thuộc tính //target/copy[@file] Di chuyển đến phần đầu và đánh biểu thức XPath vào trong bộ xử lý XPath của bạn. Bạn sẽ nhận được các kết quả trông có dạng như Hình 3.
  13. Hình 3. Cho phép chỉ lựa chọn phần tử copy với thuộc tính tệp Phần đầu tiên của XPath này trông có dạng như: //target/copy. Phần tiếp theo là đặt trong cặp dấu ngoắc vuông: [@file]. Dấu ngoắc vuông dùng để xác nhận. Điều này có nghĩa rằng cái đó được đánh giá nhưng bộ xử lý thực hiện trên từng nút trong tập nút trả lại bằng cách quãng XPath. Vì thế để có các nút được trả lại bằng //target/copy, nút này được đánh giá một lần nữa bằng vị từ [@file]. Vị từ này chỉ ra rằng bạn cần các thứ của có dạng khi bỏ cặp dấu đóng ngoặc vuông @file. Biểu thức XPath này chỉ định rằng làm việc với thuộc tính có tên file. Sau đó đặt tất cả các phần này vào với nhau thì mỗi nút từ //target/copy được kiểm tra để trả lại xem thuộc tính có phải có tên là file. Nếu kết quả là đúng thì tập hợp các nút sẽ được trả lại trong tập kết quả. Nếu có bất kỳ các nút nào không có thuộc tính file thì trả lại kết quả false và nút này sẽ bị từ chối. Vì thế tập các nút kết quả
  14. được mô phỏng trong Hình 3, Hình này chỉ hiển thị các phần tử copy mà bạn muốn là các phần tử chứa thuộc tính file trong đó. Cách làm là tương tự để nhận phần tử copy nhưng với các thuộc tính khác, giống như thuộc tính todir. Ví dụ 3 Thể hiển công việc này. Ví dụ 3. Lựa chọn các phần tử trên các thuộc tính tồn tại khác //target/copy[@todir] Thêm điều kiện kiểm tra cho từng phần tử con riêng biệt Thực hiện kiểm tra các phần tử con là đơn giản hơn việc thực hiện kiểm tra các thuộc tính. Với mục đích bạn cần tất cả các phần tử copy kèm với các phần tử con fileset của nó. Tuy nhiên, khó có thể giả thiết rằng phần tử copy có các phần tử con bởi vì nó có thể có cả các thuộc tính todir. Hơn thế nữa khi thực hiện kiểm tra thuộc tính bạn muốn lựa chọn các phần tử copy dựa trên sự tồn tại của từng phần tử con riêng biệt. Bạn có thể sử dụng XPath dưới dạng như trongVí dụ 4. Ví dụ 4. Lựa chọn các phần tử dựa trên sự tồn tại của phần tử con //target/copy[fileset] Bạn sẽ nhận được các kết quả trong Hình 4. Chú ý rằng không phải tất cả các phần tử copy đều được lựa chọn mà chỉ những phần tử được chỉ định là phần tử con mới được chọn. Hình 4. Chỉ các phần tử copy tương ứng tương ứng với phần tử con fileset
  15. được lựa chọn Rõ ràng nhận thấy rằng một tập hợp nút được sinh từ biểu thức XPath //target/copy, sau đó vị từ [fileset] mới được áp dụng tiếp. Khi không có ký tự @, từ fileset được hiểu rằng như phần tử con của tập phần tử hiện tại. Vì vậy tất cả các phần tử copy gồm cả các phần tử con có tên fileset đều nhận giá trị true, và các phần tử này được trả lại bởi biểu thức XPath. Các phần tử copy mà không có phần tử con là sẽ không được trả lại. Các vị từ có thể áp dụng cho nhiều mức lồng nhau Bạn không bị giới hạn để có được các thuộc tính của tập hợp các nút trong ví dụ hiện tại thậm chí cũng không giới hạn các phần tử con của phần tử đó. Điều đó có nghĩa là thay vì muốn có các phần copy mà chứa phần tử con fileset, bạn cần chỉ chính xác phần tử target mà contain những phần tử copy này. Vì vậy khi bạn muốn tìm kiếm các phần tử target với các phần tử lồng copy, thì bạn cần phải xác định được phần tử con lồng có tên là (fileset). Sự thực hiện này bạn có thể thấy rõ trong Ví dụ 5. Ví dụ 5. Lựa chọn các phần tử dựa trên sự tồn tại của các phần tử con
  16. //target[copy/fileset] Khi thực hiện ví dụ này, kết quả của bạn sẽ có dạng như Hình 5. Hình 5. Biểu thức này thực hiện lựa chọn chỉ các phần tử copy với các con lồng riêng biệt Bạn có thể nhận được kết quả nhanh chóng bằng cách sử dụng các vị từ trong biểu thức XPath của bạn. Từ đó bạn cũng có thể xây dựng được nhiều vị từ XPath phức tạp hơn, ví dụ như trong Ví dụ 6. Ví dụ 6. Các vị ngữ có thể có vài mức lồng nhau
  17. //target[java/classpath/pathelement/@path] Hình 6 hiển thị các kết quả tập hợp nút. Trong trường hợp này chỉ có một nút phù hợp với tài liệu nguồn. Hình 6. Các vị từ có thể kết hợp phần tử và các đường dẫn thuộc tính XPaths có thể làm cho bản nản chí một chút đặt biệt khi mà vị từ là rất dài trong một biểu thức XPath. Tuy nhiên nếu bạn thực hiện suy nghĩ từng bước từng bước một bạn sẽ thấy có ít rắc rối để làm việc với chúng. Cuối cùng, vấn đề phức tạp có thể xảy ra khi mà trả lại bất kỳ tập hợp các nút tương ứng của biểu thức XPath dài. Với việc sử dụng vị từ và phần tử cũng như thuộc tính phù hợp bạn sẽ không mất nhiều thời gian để kết thúc biểu thức XPath của bạn ở tại vị trí nút bạ n muốn trả lại.
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
3=>0