分享
 
 
 

eXist Xquery Examples

王朝other·作者佚名  2006-01-31
窄屏简体版  字體: |||超大  

eXist Xquery Examples

Copyright@ ♂猜猜♂. 2005. All rights reserved

以下ex:>代表输入表达式 re:>表示输出结果

--插入[使用exist的xquery数据库检索工具]说明--

[基础操作]

1 条件表达式

ex:>if

(3 < 4) then "yes!" else "no!"

re:>yes!

ex:>

for

$x in (-1.5, 0.4, 1.7)

return

<amount>

{

if

($x < 0)

then

concat("(", -$x, ")")

else

$x

}

</amount>

re:>

<amount>(1.5)</amount>

<amount>0.4</amount>

<amount>1.7</amount>

说明:注意第一行的输出和其它两行有所不同

-$x对$x取反

2 定义本地变量

ex:>let

$x := 5 let $y := 6 return 10*$x+$y

re:>56

3 使用",",其功能相当于数组

ex:>3,4,5

re:>3

4

5

扩展加入其它语句

ex:>3,4,5,let

$t:=56 return $t

re:>3

4

5

56

4 在return中使用{} {expression} 执行出来表达式的结果

ex:>

let

$i := 2 return

let

$r := <em>Value </em>

return

<p>{$r} of 10*{$i} is

{10*$i}.</p>

re:>

<p><em>Value </em> of 10*2

is 20.</p>

5 简单循环语句

ex:>for

$x in (1 to 3) return ($x,10+$x)

re:>1

11

2

12

3

13

ex:>for

$speech in document("/db/tonybooks/Catalog.xml")//categoryName

return

<br/>{$speech}

re:>略

ex:>

<html>{

let

$book := document("mybook.xml")/book

for

$ch in $book/chapter

return <h2>{$ch/title)</h2>

}</html>

re:>略

6 使用text(),返回内容

ex:>let

$book:=document("examples.xml")/example-queries/query

return

$book/code/text()

ex:>let

$doc := document("examples.xml")//query/code/text()

return

$doc

[函数的定义与调用]

ex:>

declare

namespace jnb = "http://ociweb.com/jnb";

declare

variable $jnb:pi as xs:decimal { 3.1416 };

declare

function jnb:fib($i as xs:integer) as xs:integer {

if ($i = 0 or $i = 1)

then

1

else jnb:fib($i - 1) + jnb:fib($i - 2)

};

jnb:fib(3),

jnb:fib(4), jnb:fib(5), $jnb:pi

re:>

3

5

8

3.1416

[节点和节点类型 ]

一下两个作用相同

ex:><greeting

from="weiqi">Hello, World!</greeting>

re:><greeting

from="weiqi">Hello, World!</greeting>

ex:>

document {

element { "greeting" } {

attribute { "from " } {

"weiqi" },

"Hello, World!"

}

}

re:><greeting

from ="weiqi">Hello, World!</greeting>

[flwor表达式/数据库检索命令]

标准类型for, let,

where, order by, return

1

for语句

ex:>

for

$x in (1, 2, 3)

return

<number>{ $x }</number>

re:>

<number>1</number>

<number>2</number>

<number>3</number>

2

let语句

ex:>

let

$a := (1, 2, 3)

return

<numbers>{ $a }</numbers>

re:><numbers>1

2 3</numbers>

3

where语句

ex:>

for

$x in (1, 2, 3)

where

$x >= 2

return <number>{ $x

}</number>

re:>

<number>2</number>

<number>3</number>

4

order by 语句

ex:>

for

$x in (<greeting/>, <greeting from="weiqi"/>,

<greeting from="brian"/>)

order

by $x/@from ascending empty least

return

$x

re:>

<greeting/>

<greeting

from="brian"/>

<greeting

from="weiqi"/>

说明order by 有以下几个属性:

descending,ascending,empty greatest,empty least

分别测试一下

[数量操作]该操作非常有用该操作非常有用

1

some 和 every 例子

ex:>some

$x in (1, 2, 3) satisfies $x >= 2

re:>true

ex:>every

$x in (1, 2, 3) satisfies $x >= 2

re:>false

ex:>some

$x in (1, 2, 3), $y in (3, 4, 5) satisfies $x = $y

re:>true

ex:>every

$x in (1, 2, 3), $y in (3, 4, 5) satisfies $x = $y

re:>false

2

count($a)

ex:>let

$a:=collection("tonybooks")//category

return

count($a)

re:>返回40个1

ex:>for

$a in collection("tonybooks")//category

return

count($a)

re:>返回40

区别以上例子

3 多重循环语句

ex:>

for

$c in customers

for

$o in orders

where

$c.cust_id=$o.cust_id and $o.part_id="xx"

return

$c.name

以上语句等价于sql语句

select

customers.name from customers, orders

where

customers.cust_id=orders.cust_id and

orders.part_id="xx"

ex:>

for

$book in bib.xml//book

let

$title := $book/title

where

$book/publisher = 'Addison-Wesley'

return

<bookInfo>{

$title }</bookInfo>

[xpath例子]

greetings.xml:

<?xml

version="1.0" encoding="UTF-8"?>

<greetings>

<greeting

from="weiqi">Nihao!</greeting>

<greeting

from="brian">Hi!</greeting>

<greeting

from="luc">Bonjour!</greeting>

</greetings>

ex:>doc("greetings.xml")/greetings

re:><greetings>

<greeting

from="weiqi">Nihao!</greeting>

<greeting

from="brian">Hi!</greeting>

<greeting

from="luc">Bonjour!</greeting>

</greetings>

ex:>doc("greetings.xml")//greeting

re:><greeting

from="weiqi">Nihao!</greeting>

<greeting from="brian">Hi!</greeting>

<greeting

from="luc">Bonjour!</greeting>

说明:注意以上两个例子的区别/greetings和//greetings,

前者表示从根节点开始逐级遍历,后者表示任何级的节点都遍历

ex:>doc("greetings.xml")//greeting[@from="weiqi"]

re:><greeting

from="weiqi">Nihao!</greeting>

说明:@from 用来引用节点中的属性名称

引用节点名直接输入例如:greeting 或者 greetings就可以

ex:>doc("greetings.xml")//greeting/@from

re:>from="weiqi"

from="brian" from="luc"

ex:>doc("greetings.xml")//greeting[1]

re:><greeting

from="weiqi>Nihao!</greeting>

说明:使用"节点名"[n]表示输出第几个节点内容

待查:

let

$a := 3,4 --错误

let

$b := ($a, $a)

let

$c := 99

let

$d := ()

return

(count($a), count($b), count($c), count($d))

evaluates

to (2, 4, 1, 0) because $b is the same as (3,4,3,4).

待查:

children(<p>This

is <em>very</em> cool.</p>)

returns

this sequence of 3 values:

"This

is ", <em>very</em>, " cool."

================以下为未整理部分=============

[Modules]

You can put functions and variables

declarations into library modules. A library module is a file that starts with

a module namespace declaration and contains declarations of functions,

variables, etc., but does not contain an expression at the end. A main module

contains an expression at the end. Both library modules and main modules can

import other library modules to access variables and functions declared in the

imported module.

(: libfib.xq :)

module namespace jnb =

"http://ociweb.com/jnb";

declare function jnb:fib($i as xs:integer)

as xs:integer {

if

($i <= 1)

then 1

else jnb:fib($i - 1) + jnb:fib($i - 2)

};

(: mainfib.xq: )

import module namespace jnb =

"http://ociweb.com/jnb" at "libfib.xq";

jnb:fib(6)

[weiqi@gao] $ xquery mainfib.xq # Saxon

13

Qexo supports compiled modules. A library

module is compiled to a Java class whose name is derived from the module

namespace URI. A main module is compiled to a Java class whose name is derived

from the module file name.

[weiqi@gao] $ qexo -C libfib.xq # Compile to Java class

com.ociweb.jnb

(compiling libfib.xq)

[weiqi@gao] $ qexo --main -C

mainfib.xq # Compile to Java class

mainfib

(compiling mainfib.xq)

[weiqi@gao] $ java mainfib

13

-------------------------------------------------------------------------

Type Specification

XQuery is a strongly typed programming

language. Like Java and C#, for example, it's a mix of static typing (type

consistency checked at compile-time) and dynamic typing (run-time type tests).

However, the types in XQuery are different from the classes familiar from

object-oriented programming. Instead, it has types to match XQuery's data

model, and it allows you to import types form XML Schema.

if ($child instance of element section)

then process-section($child)

else ( ) {--nothing--}

This invokes the process-section function

if the value of $child is an element whose tag name is section. XQuery has a

convenient typeswitch shorthand for matching a value against a number of types.

The following converts a set of tag names to a different set.

define function convert($x) {

typeswitch ($x)

case element para return <p>{process-children($x)}</p>

case element emph return

<em>{process-children($x)}</em>

default return process-children($x)

}

define function process-children($x) {

for

$ch in children($x)

return convert($ch)

}

Hello,

I am a beginner in Xquery.

In my schema I have element which has IDREF

attribute.I want to extract id value to which points and check whether that

value is equivalent to some value.

eg:

<AUTHOR EMAILID

="psmith@sfsu.edu">

<FNAME>smith</FNAME>

<MI>j</MI>

<LNAME>jen</LNAME>

</AUTHOR>

<PAPER PAPERID = 10 EMAILID =

"sai@yahoo.com">

<MAINATHR>SHARMA</MAINATHR>

<TITLE>ABC</TITLE>

</PAPER>

<PAPER PAPERID = 10 EMAILID =

"sha@yahoo.com">

<MAINATHR>SHARMA</MAINATHR>

<TITLE>ABC</TITLE>

</PAPER>

let $id := "sai@yahoo.com",

for $paper in $doc/PAPER[@EMAILID = $id],

for $author in $doc/AUTHOR[@EMAILID = $id]

return

<result

PAPERID="{$paper/@PAPERID}">

{$author/FNAME}

<result>

for $paper in $doc/PAPER,

for $author in $doc/AUTHOR

where $paper/@EMAILID = $auther/$EMAILID

return

<result PAPERID="{$paper/@PAPERID}">

{$author/FNAME}

<result>

如上例程序,在xquery中引用节点和节点属性名称的时候稍有不同。

节点 paper 属性 @paper

I am completely new to XQuery..

I have the following which I would like to

run on an .xml file...

for $book in bib.xml//book

let $title := $book/title

where $book/publisher = 'Addison-Wesley'

return

<bookInfo>

{ $title }

</bookInfo>

and the bib.xml file

<bib>

<book year="1994">

<title>TCP/IP

Illustrated</title>

<author><last>Stevens</last><first>W.</first></author>

<publisher>Addison-Wesley</publisher>

<price> 65.95</price>

</book>

<book year="1992">

<title>Advanced Programming in the

Unix environment</title>

<author><last>Stevens</last><first>W.</first></author>

<publisher>Addison-Wesley</publisher>

<price>65.95</price>

</book>

<book year="2000">

<title>Data on the Web</title>

<author><last>Abiteboul</last><first>Serge</first></author>

<author><last>Buneman</last><first>Peter</first></author>

<author><last>Suciu</last><first>Dan</first></author>

<publisher>Morgan Kaufmann

Publishers</publisher>

<price>39.95</price>

</book>

<book year="1999">

<title>The Economics of Technology

and Content for Digital TV</title>

<editor>

<last>Gerbarg</last><first>Darcy</first>

<affiliation>CITI</affiliation>

</editor>

<publisher>Kluwer Academic

Publishers</publisher>

<price>129.95</price>

</book>

</bib>

-----------------------------------------------

最后附上一个好的教材:

http://monetdb.cwi.nl/XQuery/Demo/index.html

http://www.xml.com/pub/a/2005/03/02/xquery.html

http://www.xml.com/pub/a/2005/03/23/xquery-2.html

http://www.w3schools.com/xquery/default.asp

Copyright@ ♂猜猜♂. 2005. All rights reserved

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有