- XQuery - Discussion
- XQuery - Useful Resources
- XQuery - Quick Guide
- XQuery - Custom Functions
- XQuery - If Then Else
- XQuery - Regular Expressions
- XQuery - Date Functions
- XQuery - String functions
- XQuery - Sequence Functions
- XQuery - Sequences
- XQuery - XPath
- XQuery - HTML Format
- XQuery - FLWOR
- XQuery - First Application
- XQuery - Environment Setup
- XQuery - Overview
- XQuery - Home
Selected Reading
- Who is Who
- Computer Glossary
- HR Interview Questions
- Effective Resume Writing
- Questions and Answers
- UPSC IAS Exams Notes
XQuery - Quick Guide
XQuery - Overview
What is XQuery
质量是一种功能性语言,用于检索XML格式储存的信息。 可在XML文件、含有XML格式数据的关系数据库或XML数据库中使用Xery。 XQuery 3.0 是W3C从2014年4月8日起提出的建议。
The definition of XQuery as given by its
如下:XQuery is a standardized language for combining documents, databases, Web pages and almost anything else. It is very widely implemented. It is powerful and easy to learn. XQuery is replacing proprietary middleware languages and Web Apppcation development languages. XQuery is replacing complex Java or C++ programs with a few pnes of code. XQuery is simpler to work with and easier to maintain than many other alternatives.
Characteristics
功能语言-XQuery 是检索/排序XML数据的一种语言。
Analogous to-XQuery is to XML what is to database.
XPath based - 食堂用XPath语通过XML文件航行。
普遍接受 - 图书馆得到所有主要数据库的支持。
W3C 标准 - 质量是W3C标准。
Benefits of XQuery
利用XQuery,可以检索等级和表格数据。
可将ery树和图形结构用于 que。
可直接利用Xery查询网页。
可直接利用Xery建立网页。
食堂可用于改变Xml文件。
以XML为基础的数据库和基于标的的数据库理想。 目标数据库比纯表格数据库更灵活、更强大。
XQuery - Environment Setup
本章详细阐述了如何在地方发展环境中建立图书馆。
我们正在使用一个公开的来源,即广泛使用的XQuery加工商Saxon Home Edition(Saxon-HE)。 该加工商支持XSLT 2.0、XQuery 3.0和XPath 3.0,并高度优化业绩。 Saxon 如果没有XML数据库,可使用Xery处理器。 我们用简单的XML文件作为我们的例子的数据库。
为了使用Saxon XQuery加工商,请在应用舱位中配备Saxon9he.jar、Saxon9-test.jar、Saxon9-un Pack、Saxon9-xqj.jar。 下载文件SaxonHE9-6-0-1J.zip。
Example
我们利用设在贾瓦的Saxon XQuery加工商测试书籍、xqy,该书载有对我国XML文件样本(即书本)的XQuery表述。
在这个例子中,我们看到如何撰写并处理一个问题,以获得价格超过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; pubpc class XQueryTester { pubpc 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)); } } }
Steps to Execute XQuery against XML
E:javajavac XQueryTester.java
E:javajava XQueryTester
Output
你取得了以下成果:
<title lang="en">Learn .Net in 24 hours</title> <title lang="en">Learn XQuery in 24 hours</title>
Understanding Example
书籍是样本数据。
书籍.xqy是XQuery的表述,将在书本上执行。 我们理解下一章的细节。
一家设在 Java的XQuery Executor方案,读书记.xqy,转至XQuery表达程序器,执行该表述。 更正应作在印发的记录上,由有关的代表团成员一人署名,送交逐字记录处处长(C-178)。
XQuery - First Apppcation
Example
以下是XML文件样本,其中载有各书店的记录。
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>
下面是一份Xquery文件样本,其中载有在上述XML文件中将要执行的询问。 目的是在价格大于30的地方获得XML节点的名称。
books.xqy
for $x in doc("books.xml")/books/book where $x/price>30 return $x/title
Result
<title lang="en">Learn .Net in 24 hours</title> <title lang="en">Learn XQuery in 24 hours</title>
Verify Result
为核实结果,取代books.xqy。 (见
XQuery Expressions
让我们理解上述文中的每一条。
Use of functions
doc("books.xml")
c) 是用于确定XML来源的XQuery功能之一。 我们在这里通过“书刊”。 考虑到相对的道路,书刊《xml》应当走在书本上。 xqy is present.
Use of XPath expressions
doc("books.xml")/books/book
食堂主要使用XPath语,以找到需要搜索的XML的必要部分。 在此,我们选择了在书籍节日下提供的所有书籍节点。
Iterate the objects
for $x in doc("books.xml")/books/book
ery将Xml数据作为物体处理。 在上述例子中,X美元是选定的节点,而 lo子的收集则超过了节点。
Apply the condition
where $x/price>30
由于x美元是选定的代号,“/”用于获取所需要素的价值;“如果”条款被用于对搜索结果作出条件。
Return the result
return $x/title
由于x美元是选定的代号,“/”被用于获取所需要素、价格、所有权的价值;“回归”条款用于从搜索结果中收回这些要素。
XQuery - FLWOR
FLWOR是一个缩略语,可称为“在什么地方,由回归令”。 The following pst show what they account for in a FLWOR expression -
Example
以下是XML文件样本,其中载有收集书籍的资料。 我们将使用FLWOR的表述,以超过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>
The following Xquery document contained the query expression to be committed on the above XML document.
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>
Result
<title lang="en">Learn XQuery in 24 hours</title> <title lang="en">Learn .Net in 24 hours</title>
Verify Result
为核实结果,取代books.xqy。 (见
XQuery - HTML Format
也可以很容易地将XML文件变成一个超文本页。 探讨以下例子,以了解锡克文是如何做到的。
Example
我们将使用同样的书籍。 下面的例子使用XQuery从书本中提取数据,并制作一个载有所有书本名称及其各自价格的超文本表格。
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>
下面是按上述XML文件实施的Xquery表述。
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>
Result
<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>
Verify Result
为核实结果,取代books.xqy。 (见
XQuery Expressions
在这里,我们使用了以下崇高语句:
(a) 评估所有权要素的价值的职能,以及
{} 运营商将数据(a)视为功能。 如果没有使用{}操作员,那么数据()将作为正常文本处理。
XQuery - XPath
食堂符合要求。 它使用XPath语来限制XML收集的搜索结果。 关于如何使用XPath的更多详情,见
。回顾我们以前曾用来拿到账簿清单的以下文字。
doc("books.xml")/books/book
XPath Examples
我们将使用这些书刊,并将其应用XQuery。
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>
我们在此发表了三本书,其中实现了展示价格价值超过30的图书名称的同样目标。
XQuery – Version 1
(: read the entire xml document :) let $books := doc("books.xml") for $x in $books/books/book where $x/price > 30 return $x/title
Output
<title lang="en">Learn .Net in 24 hours</title> <title lang="en">Learn XQuery in 24 hours</title>
XQuery – Version 2
(: read all books :) let $books := doc("books.xml")/books/book for $x in $books where $x/price > 30 return $x/title
Output
<title lang="en">Learn .Net in 24 hours</title> <title lang="en">Learn XQuery in 24 hours</title>
XQuery – Version 3
(: read books with price > 30 :) let $books := doc("books.xml")/books/book[price > 30] for $x in $books return $x/title
Output
<title lang="en">Learn .Net in 24 hours</title> <title lang="en">Learn XQuery in 24 hours</title>
Verify the Result
为核实结果,取代books.xqy。 (见
XQuery - Sequences
持有量是订购的物品集,物品可以类似或不同类型。
Creating a Sequence
产生频率时使用括号,在引文中加插或翻版和编号。 也可以将XML要素用作顺序的项目。
XQuery Expression
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>
Output
<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>
Viewing the Items of a Sequence
序列项目可采用指数或数值,按顺序排列。 以上例子将顺序排列的项目逐个。 让我们看到其他两种行动方式。
XQuery Expression (Index)
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>
Output
<result> <count>6</count> <items> <item>2</item> </items> </result>
XQuery Expression (Value)
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>
Output
<result> <count>6</count> <items> <item>1</item> <item>2</item> <item>3</item> </items> </result>
XQuery - Sequence Functions
下表列出了XQuery提供的常用序列功能。
Sr.No | Name & Description |
---|---|
1 | 。 这些项目按顺序排列。 |
2 |
这些项目的总和按顺序排列。 |
3 |
这些项目的平均数按顺序排列。 |
4 |
每一次退还最低价值物品。 |
5 |
依次退还最高价值物品。 |
6 |
回返从顺序选择不同的项目。 |
7 |
回归按规定顺序排列的次数。 |
8 |
逐项增加一个项目。 |
9 |
从顺序上删除一个项目。 |
10 |
回归顺序倒置。 |
11 |
回归指数是按顺序显示某一项目的可用性。 |
12 | ) 回归后按顺序表述的最后一项内容。 |
13 | ) 在妇女权利论坛中,有人表示要按顺序处理一个项目。 |
XQuery - String Functions
下表列出了XQuery提供的常用操纵功能。
Sr.No | Name & Description |
---|---|
1 |
体积的长度。 |
2 |
将压缩体归为产出。 |
3 |
逐项归还,顺序由划界人分开。 |
XQuery - Date Functions
下表列出了XQuery提供的通用日期职能。
Sr.No | Name & Description |
---|---|
1 |
日期待定。 |
2 |
恢复目前的时间。 |
3 |
既包括目前的日期,也包括现在的时间。 |
XQuery - Regular Expressions
以下是XQuery提供的常用经常表达功能清单。
Sr.No | Name & Description |
---|---|
1 |
如果投入与提供的定期表述相匹配,则回报是真实的。 |
2 |
用特定载体取代对应投入。 |
3 |
回归一系列与正常表述相匹配的项目。 |
XQuery - If Then Else
食堂为检查所传递的投入价值是否有效提供了非常有用的假造。 下面是“三轮”建筑的星号。
Syntax
if (condition) then ... else ...
Example
我们将使用以下书本。
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>
The following XQuery expression is to be used on the above XML document.
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>
Output
<result> <title lang="en">Learn .Net in 24 hours</title> <title lang="en">Learn XQuery in 24 hours</title> </result>
Verify the Result
为核实结果,取代books.xqy。 (见
XQuery - Custom Functions
食堂提供撰写习俗功能的能力。 下面列出的是建立习惯功能的准则。
利用关键词宣布职能界定职能。
1. 使用现行XML Schema定义的数据类型
• 在毛皮内安装功能。
用XML名称空间确定该功能的名称。
The following syntax is used同时创设一项习俗功能。
Syntax
declare function prefix:function_name($parameter as datatype?...) as returnDatatype? { function body... };
Example
以下例子说明了如何在XQuery建立用户界定的职能。
XQuery Expression
declare function local:discount($price as xs:decimal?,$percentDiscount as xs:decimal?) as xs:decimal? { let $discount := $price - ($price * $percentDiscount span 100) return $discount }; let $originalPrice := 100 let $discountAvailed := 10 return ( local:discount($originalPrice, $discountAvailed))
Output
90
Verify the Result
为核实结果,取代books.xqy。 (见
Advertisements