Ngơn ngữ truy vấn Xpath

Một phần của tài liệu Nghiên cứu xây dựng hệ thống tổng hợp, phân loại thông tin tự động trên Web (Trang 67 - 71)

CHƢƠNG 1 : KHAI PHÁ DỮ LIỆU

3.2. Giải pháp và cơng nghệ sử dụng

3.2.2. Ngơn ngữ truy vấn Xpath

Xpath – XML Path – là một ngơn ngữ truy vấn đƣợc định nghĩa bởi W3C, sử dụng để truy vấn các node hoặc tính tốn các giá trị lấy trong một tài liệu XML. Một tài liệu XML đƣợc xem nhƣ là một sự thể hiện của cấu trúc phân cấp ở dạng cây của nhiều phần tử, mỗi phần tử đƣợc xem nhƣ là một node của cây, XPath đem lại khả năng duyệt các node trên cây hoặc lựa chọn chúng theo các tiêu chí nào đĩ, dựa trên các mối quan hệ nhƣ cha - con, tổ tiên - con cháu. Một biểu thức XPath (Xpath expression) cĩ thể chọn một node hoặc một tập hợp các node, hoặc nĩ cĩ thể trả lại một giá trị dữ liệu dựa trên một hoặc nhiều node trong tài liệu.

3.2.2.1. Cú pháp và ngữ nghĩa

Một biểu thức XPath cĩ thể là một đƣờng dẫn vị trí (location path), đây là loại biểu thức quan trọng nhất trong XPath. Một location path bao gồm một hoặc nhiều bƣớc (location step). Mỗi bƣớc gồm cĩ 3 thành phần sau:

 Một axis specifier (chỉ định hƣớng).  Một node test.

 Một hoặc nhiều predicate.

Biểu thức XPath luơn đƣợc đánh giá một cách tƣơng đối đối với một node ngữ cảnh (context node). Một chỉ định hƣớng (axis specifier) “child” sẽ cho biết hƣớng di chuyển (để tìm kiếm) sẽ là hƣớng đến các node con của node ngữ cảnh. Node test và predicate sẽ dùng để lọc các node thu đƣợc một cách chi tiết hơn. Ví dụ node test “A” địi hỏi tất cả các node nhận đƣợc phải cĩ tên là “A”. Một predicate dùng để chỉ ra các node này phải cĩ một số đặc điểm nào đĩ nữa. Cú pháp của biểu thức XPath cũng cĩ thể ở hai dạng: rút gọn và đầy đủ.

Cú pháp rút gọn:

Ví dụ một tài liệu XML nhƣ sau: <?xml version=”1.0” encoding=”UTF-8”?> <A> <B> <C/> </B> </A>

Một biểu thức XPath đơn giản: /A/B/C

Biểu thức XPath này sử dụng giá trị mặc định của các axis specifier đĩ là giá trị child, và các step của biểu thức đều khơng sử dụng predicate. Biểu thức này chọn ra các phần tử C nào mà là con của các phần tử B, và các phần tử B này cũng phải là con của các phần tử A. Cú pháp này của XPath cĩ nét tƣơng đồng với cú pháp của URI (Uniform Resource Identifier) cũng nhƣ cú pháp đƣờng dẫn file của các hệ điều hành Unix.

Một biểu thức phức tạp hơn: A//B/*[1]

Biểu thức này chọn ra phần tử cĩ tên tùy ý và phải là phần tử đầu tiên (“[1]”) trong các phần tử con của phần tử B, phần tử B này phải là con hoặc cháu chắt (“//”) của một phần tử A nào đĩ, phần tử A này lại là con của node ngữ cảnh (do biểu thức khơng bắt đầu bởi “/”). Nếu phần tử A cĩ nhiều node con cháu cùng tên B thì biểu thức này sẽ trả về một tập các node con đầu tiên của các phần tử B này.

Cú pháp đầy đủ:

Hai biểu thức XPath ở trên khi đƣợc viết lại ở dạng đầy đủ thì chúng sẽ nhƣ sau: /child::A/child::B/child::C

child::A/descendant-or-self::node()/child::B/child::*[position()=1]

Cĩ thể thấy ở dạng đầy đủ, axis specifier đƣợc viết tƣờng minh trong mỗi step của biểu thức, nối tiếp bởi hai dấu hai chấm ::, rồi đến node test nhƣ A, B hoặc node() trong ví dụ trên.

3.2.2.2. Cú pháp XPath

Bảng 3.1. Một số cú pháp của XPath

Cú pháp đầy đủ Cú pháp rút gọn Ví dụ

ancestor

ancestor-or-self

attribute @ @abc là viết tắt của attribute::abc

child xyz là viết tắt của child::xyz

descendant

descendant-or-self // //B là viết tắt của descendant-or- self::node()/child::B

following

following-sibling namespace

parent .. A/../B là viết tắt của

A/parent::node()/child::B preceding

preceding-sibling

self . . là viết tắt của self::node()

3.2.2.3. Node test

Một số node test:

 comment(): tìm một node chú thích, ví dụ <!-- comment -->.

 text(): tìm một node cĩ kiểu là text, ví dụ hello trong <a>hello<b> world</b></a>.

 processing-instruction(): tìm các chỉ dẫn xử lý của XML, ví dụ processing-instruction(„php‟) sẽ trả về node <?php echo $a; ?>.

 node(): tìm bất kỳ node nào.

3.1.2.4. Predicate

Một bƣớc của biểu thức XPath cĩ thể cĩ nhiều predicate. Mỗi predicate cũng đƣợc viết dƣới dạng biểu thức và nằm trong cặp ngoặc vuơng [ ], các node nhận đƣợc của biểu thức sẽ phải thỏa điều kiện của các predicate. Ví dụ a[@href=‟help.php‟] sẽ chỉ trả về các phần tử cĩ tên là a (trong các node con của node ngữ cảnh) và cĩ một thuộc tính href với giá trị help.php. Các predicate cĩ thể trả về giá trị boolean, số nguyên, hoặc một tập các node. Nếu giá trị trả về của predicate là số nguyên thì giá trị này đƣợc hiểu là vị trí của node cần tìm, ví dụ p[1] trả về phần tử p đầu tiên, p[last()] trả về phần tử p cuối cùng. Trong trƣờng hợp trả về một tập node thì khi tập node khác rỗng giá trị sẽ đƣợc hiểu là true, ví dụ p[@id] trả về các node p cĩ thuộc tính id.

3.1.2.5. Các hàm và tốn tử

XPath định nghĩa 4 kiểu dữ liệu: kiểu tập node (node-set), kiểu chuỗi ký tự (string), kiểu số (number) và kiểu logic (boolean).

Các tốn tử phổ biến đƣợc dùng trong XPath:

 Tốn tử hội “|“ để tìm hội của hai tập node.

 Tốn tử logic “and” và “or” (và một hàm not(boolean) để phủ định một biểu thức boolean).

 Các tốn tử cộng trừ nhân chi “+”, “-“, “*”, “div” và “mod”.  Các tốn tử so sánh “=”, “!=”, “<”, “>”, “<=”, “>=”.

Các hàm phổ biến trong thự viện hàm của XPath 1.0:

 position(): trả về giá trị kiểu số thể hiện vị trí của node trong một chuỗi các node.

 string(object?): chuyển bất kỳ kiểu dữ liệu nào thành kiểu chuỗi. Nếu tham số là kiểu node-set thì hàm này trả về giá trị chuỗi của node đầu tiên trong node-set (theo thứ tự xuất hiện trong tài liệu).

 contains(s1, s2): trả về true nếu s1 chứa s2.

 true(), false(): trả về các giá trị true, false tƣơng ứng.

Một số ví dụ:

//item[@price > 2*@discount]

Trả về các node item cĩ thuộc tính price lớn hơn hai lần giá trị thuộc tính discount của nĩ;

//product*contains(comment, ‘bad’)+

Trả về các node product cĩ node con comment chứa từ „bad‟.

Một phần của tài liệu Nghiên cứu xây dựng hệ thống tổng hợp, phân loại thông tin tự động trên Web (Trang 67 - 71)

Tải bản đầy đủ (PDF)

(82 trang)