XQuery - Hướng dẫn nhanh
XQuery là gì
XQuery là một ngôn ngữ chức năng được sử dụng để truy xuất thông tin được lưu trữ ở định dạng XML. XQuery có thể được sử dụng trên các tài liệu XML, cơ sở dữ liệu quan hệ có chứa dữ liệu ở định dạng XML hoặc Cơ sở dữ liệu XML. XQuery 3.0 là một khuyến nghị của W3C từ ngày 8 tháng 4 năm 2014.
Định nghĩa của XQuery được đưa ra trong tài liệu chính thức của nó như sau:
XQuery là một ngôn ngữ chuẩn hóa để kết hợp các tài liệu, cơ sở dữ liệu, trang Web và hầu hết mọi thứ khác. Nó được thực hiện rất rộng rãi. Nó mạnh mẽ và dễ học. XQuery đang thay thế các ngôn ngữ phần mềm trung gian độc quyền và các ngôn ngữ phát triển Ứng dụng Web. XQuery đang thay thế các chương trình Java hoặc C ++ phức tạp bằng một vài dòng mã. XQuery đơn giản hơn để làm việc và dễ bảo trì hơn nhiều lựa chọn thay thế khác.
Nét đặc trưng
Functional Language - XQuery là một ngôn ngữ để lấy / truy vấn dữ liệu dựa trên XML.
Analogous to SQL - XQuery là XML, SQL là của cơ sở dữ liệu.
XPath based - XQuery sử dụng các biểu thức XPath để điều hướng qua các tài liệu XML.
Universally accepted - XQuery được hỗ trợ bởi tất cả các cơ sở dữ liệu chính.
W3C Standard - XQuery là một tiêu chuẩn W3C.
Lợi ích của XQuery
Sử dụng XQuery, có thể truy xuất cả dữ liệu phân cấp và dữ liệu dạng bảng.
XQuery có thể được sử dụng để truy vấn cấu trúc cây và đồ họa.
XQuery có thể được sử dụng trực tiếp để truy vấn các trang web.
XQuery có thể được sử dụng trực tiếp để xây dựng các trang web.
XQuery có thể được sử dụng để chuyển đổi các tài liệu xml.
XQuery lý tưởng cho cơ sở dữ liệu dựa trên XML và cơ sở dữ liệu dựa trên đối tượng. Cơ sở dữ liệu đối tượng linh hoạt và mạnh mẽ hơn nhiều so với cơ sở dữ liệu dạng bảng thuần túy.
Chương này trình bày chi tiết cách thiết lập thư viện XQuery trong môi trường phát triển cục bộ.
Chúng tôi đang sử dụng bộ xử lý XQuery độc lập mã nguồn mở Saxon Home Edition (Saxon-HE) được sử dụng rộng rãi. Bộ xử lý này hỗ trợ XSLT 2.0, XQuery 3.0 và XPath 3.0 và được tối ưu hóa cao cho hiệu suất. Bộ xử lý Saxon XQuery có thể được sử dụng mà không cần có bất kỳ cơ sở dữ liệu XML nào. Chúng tôi sẽ sử dụng một tài liệu XML đơn giản làm cơ sở dữ liệu trong các ví dụ của chúng tôi.
Để sử dụng bộ xử lý Saxon XQuery, bạn nên có saxon9he.jar, saxon9-test.jar, saxon9-unpack, saxon9-xqj.jar trong classpath của ứng dụng. Các tệp jar này có sẵn trong tệp tải xuốngSaxonHE9-6-0-1J.zipTải xuống SaxonHE9-6-0-1J.zip .
Thí dụ
Chúng tôi sẽ sử dụng bộ xử lý Saxon XQuery dựa trên Java để kiểm tra books.xqy, một tệp chứa biểu thức XQuery dựa trên tài liệu XML mẫu của chúng tôi, tức là books.xml.
Trong ví dụ này, chúng ta sẽ xem cách viết và xử lý một truy vấn để lấy các phần tử tiêu đề của sách có giá lớn hơn 30.
books.xml
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book category="JAVA">
<title lang="en">Learn Java in 24 Hours</title>
<author>Robert</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="DOTNET">
<title lang="en">Learn .Net in 24 hours</title>
<author>Peter</author>
<year>2011</year>
<price>40.50</price>
</book>
<book category="XML">
<title lang="en">Learn XQuery in 24 hours</title>
<author>Robert</author>
<author>Peter</author>
<year>2013</year>
<price>50.00</price>
</book>
<book category="XML">
<title lang="en">Learn XPath in 24 hours</title>
<author>Jay Ban</author>
<year>2010</year>
<price>16.50</price>
</book>
</books>
books.xqy
for $x in doc("books.xml")/books/book where $x/price>30
return $x/title
XQueryTester.java
package com.tutorialspoint.xquery;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import javax.xml.xquery.XQConnection;
import javax.xml.xquery.XQDataSource;
import javax.xml.xquery.XQException;
import javax.xml.xquery.XQPreparedExpression;
import javax.xml.xquery.XQResultSequence;
import com.saxonica.xqj.SaxonXQDataSource;
public class XQueryTester {
public static void main(String[] args){
try {
execute();
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (XQException e) {
e.printStackTrace();
}
}
private static void execute() throws FileNotFoundException, XQException{
InputStream inputStream = new FileInputStream(new File("books.xqy"));
XQDataSource ds = new SaxonXQDataSource();
XQConnection conn = ds.getConnection();
XQPreparedExpression exp = conn.prepareExpression(inputStream);
XQResultSequence result = exp.executeQuery();
while (result.next()) {
System.out.println(result.getItemAsString(null));
}
}
}
Các bước thực thi XQuery dựa trên XML
Step 1 - Sao chép XQueryTester.java vào bất kỳ vị trí nào, chẳng hạn như, E: > java
Step 2 - Sao chép books.xml vào cùng một vị trí, E: > java
Step 3 - Sao chép books.xqy vào cùng một vị trí, E: > java
Step 4- Biên dịch XQueryTester.java bằng giao diện điều khiển. Đảm bảo bạn đã cài đặt JDK 1.5 trở lên trên máy của mình và các đường dẫn classpath đã được định cấu hình. Để biết chi tiết về cách sử dụng JAVA, hãy xem Hướng dẫn sử dụng JAVA của chúng tôi
E:\java\javac XQueryTester.java
Step 5 - Thực thi XQueryTester
E:\java\java XQueryTester
Đầu ra
Bạn sẽ nhận được kết quả sau:
<title lang="en">Learn .Net in 24 hours</title>
<title lang="en">Learn XQuery in 24 hours</title>
Hiểu ví dụ
books.xml đại diện cho dữ liệu mẫu.
books.xqy đại diện cho biểu thức XQuery sẽ được thực thi trên books.xml. Chúng ta sẽ hiểu biểu thức chi tiết trong chương tiếp theo.
XQueryTester, một chương trình thực thi XQuery dựa trên Java, đọc books.xqy, chuyển nó đến bộ xử lý biểu thức XQuery và thực thi biểu thức. Sau đó, kết quả được in ra.
Thí dụ
Sau đây là một tài liệu XML mẫu chứa các bản ghi của một kho sách gồm nhiều sách khác nhau.
books.xml
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book category="JAVA">
<title lang="en">Learn Java in 24 Hours</title>
<author>Robert</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="DOTNET">
<title lang="en">Learn .Net in 24 hours</title>
<author>Peter</author>
<year>2011</year>
<price>70.50</price>
</book>
<book category="XML">
<title lang="en">Learn XQuery in 24 hours</title>
<author>Robert</author>
<author>Peter</author>
<year>2013</year>
<price>50.00</price>
</book>
<book category="XML">
<title lang="en">Learn XPath in 24 hours</title>
<author>Jay Ban</author>
<year>2010</year>
<price>16.50</price>
</book>
</books>
Sau đây là một tài liệu Xquery mẫu chứa biểu thức truy vấn sẽ được thực thi trên tài liệu XML ở trên. Mục đích là để lấy các phần tử tiêu đề của các nút XML đó ở đó giá lớn hơn 30.
books.xqy
for $x in doc("books.xml")/books/book
where $x/price>30 return $x/title
Kết quả
<title lang="en">Learn .Net in 24 hours</title>
<title lang="en">Learn XQuery in 24 hours</title>
Xác minh kết quả
Để xác minh kết quả, hãy thay thế nội dung của books.xqy (được đưa ra trong chương Thiết lập môi trường ) bằng biểu thức XQuery ở trên và thực thi chương trình java XQueryTester.
Biểu thức XQuery
Hãy để chúng tôi hiểu từng phần của biểu thức XQuery ở trên.
Sử dụng các chức năng
doc("books.xml")
doc () là một trong những hàm XQuery được sử dụng để định vị nguồn XML. Ở đây chúng tôi đã vượt qua "books.xml". Xem xét đường dẫn tương đối, books.xml nên nằm trên cùng một đường dẫn nơi books.xqy hiện diện.
Sử dụng các biểu thức XPath
doc("books.xml")/books/book
XQuery sử dụng nhiều biểu thức XPath để định vị phần XML cần thiết để thực hiện tìm kiếm. Ở đây chúng tôi đã chọn tất cả các nút sách có sẵn trong nút sách.
Lặp lại các đối tượng
for $x in doc("books.xml")/books/book
XQuery xử lý dữ liệu xml như các đối tượng. Trong ví dụ trên, $ x đại diện cho nút đã chọn, trong khi vòng lặp for lặp qua tập hợp các nút.
Áp dụng điều kiện
where $x/price>30
Vì $ x đại diện cho nút đã chọn, "/" được sử dụng để nhận giá trị của phần tử bắt buộc; mệnh đề "where" được sử dụng để đặt một điều kiện cho kết quả tìm kiếm.
Trả kết quả
return $x/title
Vì $ x đại diện cho nút đã chọn, "/" được sử dụng để lấy giá trị của phần tử được yêu cầu, giá, tiêu đề; mệnh đề "return" được sử dụng để trả về các phần tử từ kết quả tìm kiếm.
FLWOR là từ viết tắt của "For, Let, Where, Order by, Return". Danh sách sau đây cho thấy những gì chúng chiếm trong biểu thức FLWOR:
F - Đối với - Chọn một tập hợp tất cả các nút.
L - Cho - Đặt kết quả trong một biến XQuery.
W - Ở đâu - Chọn các nút được chỉ định bởi điều kiện.
O - Thứ tự theo - Thứ tự các nút được chỉ định theo tiêu chí.
R - Return - Trả về kết quả cuối cùng.
Thí dụ
Sau đây là một tài liệu XML mẫu chứa thông tin về một bộ sưu tập sách. Chúng tôi sẽ sử dụng biểu thức FLWOR để truy xuất tên sách của những cuốn sách có giá lớn hơn 30.
books.xml
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book category="JAVA">
<title lang="en">Learn Java in 24 Hours</title>
<author>Robert</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="DOTNET">
<title lang="en">Learn .Net in 24 hours</title>
<author>Peter</author>
<year>2011</year>
<price>70.50</price>
</book>
<book category="XML">
<title lang="en">Learn XQuery in 24 hours</title>
<author>Robert</author>
<author>Peter</author>
<year>2013</year>
<price>50.00</price>
</book>
<book category="XML">
<title lang="en">Learn XPath in 24 hours</title>
<author>Jay Ban</author>
<year>2010</year>
<price>16.50</price>
</book>
</books>
Tài liệu Xquery sau đây chứa biểu thức truy vấn sẽ được thực thi trên tài liệu XML ở trên.
books.xqy
let $books := (doc("books.xml")/books/book) return <results> { for $x in $books where $x/price>30
order by $x/price return $x/title
}
</results>
Kết quả
<title lang="en">Learn XQuery in 24 hours</title>
<title lang="en">Learn .Net in 24 hours</title>
Xác minh kết quả
Để xác minh kết quả, hãy thay thế nội dung của books.xqy (được đưa ra trong chương Thiết lập môi trường ) bằng biểu thức XQuery ở trên và thực thi chương trình java XQueryTester.
XQuery cũng có thể dễ dàng được sử dụng để chuyển đổi một tài liệu XML thành một trang HTML. Hãy xem ví dụ sau để hiểu cách XQuery thực hiện.
Thí dụ
Chúng tôi sẽ sử dụng cùng một tệp books.xml. Ví dụ sau sử dụng dữ liệu trích xuất XQuery từ books.xml và tạo một bảng HTML chứa tên sách của tất cả các cuốn sách cùng với giá tương ứng của chúng.
books.xml
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book category="JAVA">
<title lang="en">Learn Java in 24 Hours</title>
<author>Robert</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="DOTNET">
<title lang="en">Learn .Net in 24 hours</title>
<author>Peter</author>
<year>2011</year>
<price>70.50</price>
</book>
<book category="XML">
<title lang="en">Learn XQuery in 24 hours</title>
<author>Robert</author>
<author>Peter</author>
<year>2013</year>
<price>50.00</price>
</book>
<book category="XML">
<title lang="en">Learn XPath in 24 hours</title>
<author>Jay Ban</author>
<year>2010</year>
<price>16.50</price>
</book>
</books>
Dưới đây là biểu thức Xquery sẽ được thực thi trên tài liệu XML ở trên.
books.xqy
let $books := (doc("books.xml")/books/book) return <table><tr><th>Title</th><th>Price</th></tr> { for $x in $books order by $x/price
return <tr><td>{data($x/title)}</td><td>{data($x/price)}</td></tr>
}
</table>
</results>
Kết quả
<table>
<tr>
<th>Title</th>
<th>Price</th>
</tr>
<tr>
<td>Learn XPath in 24 hours</td>
<td>16.50</td>
</tr>
<tr>
<td>Learn Java in 24 Hours</td>
<td>30.00</td>
</tr>
<tr>
<td>Learn XQuery in 24 hours</td>
<td>50.00</td>
</tr>
<tr>
<td>Learn .Net in 24 hours</td>
<td>70.50</td>
</tr>
</table>
Xác minh kết quả
Để xác minh kết quả, hãy thay thế nội dung của books.xqy (được đưa ra trong chương Thiết lập môi trường ) bằng biểu thức XQuery ở trên và thực thi chương trình java XQueryTester.
Biểu thức XQuery
Ở đây chúng tôi đã sử dụng các biểu thức XQuery sau:
data () để đánh giá giá trị của phần tử tiêu đề và
toán tử {} để yêu cầu bộ xử lý XQuery coi data () là một hàm. Nếu toán tử {} không được sử dụng, thì dữ liệu () sẽ được coi là văn bản bình thường.
XQuery tuân thủ XPath. Nó sử dụng các biểu thức XPath để hạn chế kết quả tìm kiếm trên các tập hợp XML. Để biết thêm chi tiết về cách sử dụng XPath, hãy xem Hướng dẫn XPath của chúng tôi .
Nhớ lại biểu thức XPath sau đây mà chúng ta đã sử dụng trước đó để lấy danh sách sách.
doc("books.xml")/books/book
Ví dụ về XPath
Chúng tôi sẽ sử dụng tệp books.xml và áp dụng XQuery cho nó.
books.xml
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book category="JAVA">
<title lang="en">Learn Java in 24 Hours</title>
<author>Robert</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="DOTNET">
<title lang="en">Learn .Net in 24 hours</title>
<author>Peter</author>
<year>2011</year>
<price>40.50</price>
</book>
<book category="XML">
<title lang="en">Learn XQuery in 24 hours</title>
<author>Robert</author>
<author>Peter</author>
<year>2013</year>
<price>50.00</price>
</book>
<book category="XML">
<title lang="en">Learn XPath in 24 hours</title>
<author>Jay Ban</author>
<year>2010</year>
<price>16.50</price>
</book>
</books>
Chúng tôi đã đưa ra ở đây ba phiên bản của câu lệnh XQuery đáp ứng cùng một mục tiêu là hiển thị các tên sách có giá trị lớn hơn 30.
XQuery - Phiên bản 1
(: read the entire xml document :)
let $books := doc("books.xml") for $x in $books/books/book where $x/price > 30
return $x/title
Đầu ra
<title lang="en">Learn .Net in 24 hours</title>
<title lang="en">Learn XQuery in 24 hours</title>
XQuery - Phiên bản 2
(: read all books :)
let $books := doc("books.xml")/books/book
for $x in $books
where $x/price > 30 return $x/title
Đầu ra
<title lang="en">Learn .Net in 24 hours</title>
<title lang="en">Learn XQuery in 24 hours</title>
XQuery - Phiên bản 3
(: read books with price > 30 :)
let $books := doc("books.xml")/books/book[price > 30] for $x in $books return $x/title
Đầu ra
<title lang="en">Learn .Net in 24 hours</title>
<title lang="en">Learn XQuery in 24 hours</title>
Xác minh kết quả
Để xác minh kết quả, hãy thay thế nội dung của books.xqy (được đưa ra trong chương Thiết lập môi trường ) bằng biểu thức XQuery ở trên và thực thi chương trình java XQueryTester.
Chuỗi đại diện cho một tập hợp các mục có thứ tự trong đó các mục có thể giống nhau hoặc khác loại.
Tạo trình tự
Chuỗi được tạo bằng cách sử dụng dấu ngoặc đơn với các chuỗi bên trong dấu ngoặc kép hoặc dấu ngoặc kép và các số như vậy. Các phần tử XML cũng có thể được sử dụng như các mục của một chuỗi.
Biểu thức XQuery
let $items := ('orange', <apple/>, <fruit type="juicy"/>, <vehicle type="car">sentro</vehicle>, 1,2,3,'a','b',"abc") let $count := count($items) return <result> <count>{$count}</count>
<items>
{
for $item in $items
return <item>{$item}</item>
}
</items>
</result>
Đầu ra
<result>
<count>10</count>
<items>
<item>orange</item>
<item>
<apple/>
</item>
<item>
<fruit type="juicy"/>
</item>
<item>
<vehicle type="car">Sentro</vehicle>
</item>
<item>1</item>
<item>2</item>
<item>3</item>
<item>a</item>
<item>b</item>
<item>abc</item>
</items>
</result>
Xem các mục của một chuỗi
Các mục của một chuỗi có thể được lặp lại từng cái một, sử dụng chỉ mục hoặc theo giá trị. Ví dụ trên lần lượt lặp lại các mục của một chuỗi. Hãy xem hai cách khác hoạt động.
Biểu thức XQuery (Chỉ mục)
let $items := (1,2,3,4,5,6)
let $count := count($items)
return
<result>
<count>{$count}</count> <items> { for $item in $items[2] return <item>{$item}</item>
}
</items>
</result>
Đầu ra
<result>
<count>6</count>
<items>
<item>2</item>
</items>
</result>
Biểu thức XQuery (Giá trị)
let $items := (1,2,3,4,5,6) let $count := count($items) return <result> <count>{$count}</count>
<items>
{
for $item in $items[. = (1,2,3)]
return <item>{$item}</item>
}
</items>
</result>
Đầu ra
<result>
<count>6</count>
<items>
<item>1</item>
<item>2</item>
<item>3</item>
</items>
</result>
Bảng sau liệt kê các hàm tuần tự thường được sử dụng do XQuery cung cấp.
Sr.No | Tên & Mô tả |
---|---|
1 | count ($ seq dưới dạng item () *) Đếm các mục trong một chuỗi. |
2 | sum ($ seq dưới dạng item () *) Trả về tổng của các mục trong một chuỗi. |
3 | trung bình ($ seq dưới dạng mục () *) Trả về giá trị trung bình của các mục trong một chuỗi. |
4 | tối thiểu ($ seq dưới dạng item () *) Trả về mục có giá trị nhỏ nhất trong một chuỗi. |
5 | max ($ seq dưới dạng mục () *) Trả về mục có giá trị lớn nhất trong một chuỗi. |
6 | giá trị khác biệt ($ seq dưới dạng mục () *) Trả về các mục đã chọn từ một chuỗi. |
7 | dãy con ($ seq dưới dạng item () *, $startingLoc as xs:double, $chiều dài như xs: gấp đôi) Trả về một tập hợp con của chuỗi đã cho. |
số 8 | insert-before ($seq as item()*, $vị trí là xs: integer, $ insert as item () *) Chèn một mục trong một trình tự. |
9 | remove ($ seq as item () *, $ position as xs: integer) Xóa một mục khỏi một chuỗi. |
10 | đảo ngược ($ seq dưới dạng mục () *) Trả về chuỗi đã đảo ngược. |
11 | Chỉ số($seq as anyAtomicType()*, $target as anyAtomicType ()) Trả về các chỉ mục dưới dạng số nguyên để cho biết tính sẵn có của một mặt hàng trong một chuỗi. |
12 | Cuối cùng() Trả về phần tử cuối cùng của một chuỗi khi được sử dụng trong biểu thức vị từ. |
13 | Chức vụ() Được sử dụng trong biểu thức FLOWR để lấy vị trí của một mục trong một chuỗi. |
Bảng sau liệt kê các hàm thao tác chuỗi thường được sử dụng do XQuery cung cấp.
Sr.No | Tên & Mô tả |
---|---|
1 | string-length ($ string as xs: string) as xs: integer Trả về độ dài của chuỗi. |
2 | concat ($ input as xs: anyAtomicType?) as xs: string Trả về chuỗi được nối dưới dạng đầu ra. |
3 | tham gia chuỗi ($sequence as xs:string*, $dấu phân cách dưới dạng xs: string) dưới dạng xs: string Trả về kết hợp các mục trong một chuỗi được phân tách bằng dấu phân cách. |
Bảng sau liệt kê các hàm ngày thường được sử dụng do XQuery cung cấp.
Sr.No | Tên & Mô tả |
---|---|
1 | ngay hiện tại() Trả về ngày hiện tại. |
2 | thời điểm hiện tại() Trả về thời gian hiện tại. |
3 | current-dateTime () Trả về cả ngày hiện tại và thời gian hiện tại. |
Sau đây là danh sách các hàm biểu thức chính quy thường được sử dụng do XQuery cung cấp
Sr.No | Tên & Mô tả |
---|---|
1 | diêm($input, $regex) Trả về true nếu đầu vào khớp với biểu thức chính quy được cung cấp. |
2 | thay thế($input, $regex, $ string) Thay thế chuỗi đầu vào đã so khớp bằng chuỗi đã cho. |
3 | mã hóa ($ input, $ regex) Trả về một chuỗi các mục khớp với biểu thức chính quy. |
XQuery cung cấp một cấu trúc if-then-else rất hữu ích để kiểm tra tính hợp lệ của các giá trị đầu vào được truyền vào. Dưới đây là cú pháp của cấu trúc if-then-else.
Cú pháp
if (condition) then
...
else
...
Thí dụ
Chúng tôi sẽ sử dụng tệp books.xml sau và áp dụng cho nó biểu thức XQuery chứa cấu trúc if-then-else để truy xuất tên sách của những cuốn sách đó có giá trị lớn hơn 30.
books.xml
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book category="JAVA">
<title lang="en">Learn Java in 24 Hours</title>
<author>Robert</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="DOTNET">
<title lang="en">Learn .Net in 24 hours</title>
<author>Peter</author>
<year>2011</year>
<price>40.50</price>
</book>
<book category="XML">
<title lang="en">Learn XQuery in 24 hours</title>
<author>Robert</author>
<author>Peter</author>
<year>2013</year>
<price>50.00</price>
</book>
<book category="XML">
<title lang="en">Learn XPath in 24 hours</title>
<author>Jay Ban</author>
<year>2010</year>
<price>16.50</price>
</book>
</books>
Biểu thức XQuery sau đây sẽ được áp dụng trên tài liệu XML ở trên.
books.xqy
<result>
{
if(not(doc("books.xml"))) then (
<error>
<message>books.xml does not exist</message>
</error>
)
else (
for $x in doc("books.xml")/books/book
where $x/price>30 return $x/title
)
}
</result>
Đầu ra
<result>
<title lang="en">Learn .Net in 24 hours</title>
<title lang="en">Learn XQuery in 24 hours</title>
</result>
Xác minh kết quả
Để xác minh kết quả, hãy thay thế nội dung của books.xqy (được đưa ra trong chương Thiết lập môi trường ) bằng biểu thức XQuery ở trên và thực thi chương trình java XQueryTester.
XQuery cung cấp khả năng viết các hàm tùy chỉnh. Dưới đây là các nguyên tắc để tạo một hàm tùy chỉnh.
Sử dụng từ khóa declare function để xác định một chức năng.
Sử dụng các kiểu dữ liệu được xác định trong Lược đồ XML hiện tại
Đặt phần thân của hàm bên trong dấu ngoặc nhọn.
Đặt tiền tố cho tên của hàm bằng một không gian tên XML.
Cú pháp sau được sử dụng trong khi tạo một hàm tùy chỉnh.
Cú pháp
declare function prefix:function_name($parameter as datatype?...)
as returnDatatype?
{
function body...
};
Thí dụ
Ví dụ sau đây cho thấy cách tạo một hàm do người dùng xác định trong XQuery.
Biểu thức XQuery
declare function local:discount($price as xs:decimal?,$percentDiscount as xs:decimal?) as xs:decimal? { let $discount := $price - ($price * $percentDiscount div 100) return $discount
};
let $originalPrice := 100 let $discountAvailed := 10
return ( local:discount($originalPrice, $discountAvailed))
Đầu ra
90
Xác minh kết quả
Để xác minh kết quả, hãy thay thế nội dung của books.xqy (được đưa ra trong chương Thiết lập môi trường ) bằng biểu thức XQuery ở trên và thực thi chương trình java XQueryTester.