Qexo-XQuery的GNU Kawa实现
Qexo是XML查询语言.由于编译了查询,因此它实现了高性能使用卡瓦框架。Kawa还包括概念验证实现属于XSLT(XSLT).
Qexo邮件列表有地址qexo-general@gnu.org.要订阅、取消订阅或查看存档,请使用信息页面.
Qexo 1.9.1现已推出。这里有获取说明.
好处
- XQuery允许方便地混合输出xml或html片段使用计算,就像JSP和PHP一样。然而,XQuery是一个以表达为导向的语言,所以你不需要乱七八糟您的带有print或echo语句的代码。更重要的是,您可以将文档片段视为函数的输入,然后可以由另一个函数处理,依此类推。
- Kawa-XQuery优化序列和元素构造函数以避免实际创建临时值。在许多情况下输出将直接写为xml/html,没有构造实际的节点或序列对象。
- 其他常见的html和xml-生成框架(如cgi脚本)被解释。Kawa-XQuery是对Java字节码的补充,因此它受益匪浅来自高度调整的JVM。它在编译时进行分析和优化。您还可以选择编译到本机代码使用GCJ公司.
- XQuery是静态类型的(与xslt相反)。这有助于生成更早更好的(编译时)错误消息,它可以帮助编译器生成更高效的代码。
- 使用Kawa-XQuery,您可以选择编译程序提前,或者你可以随时阅读和评估。在后一种情况下,它仍将被编译,但没有必须调用外部编译器的开销。
文档
你可以读一段短文XQuery简介;
一篇关于XQuery数据模型和类型;
还有一篇关于生成XML和HTML使用XQuery。
你可以阅读有关运行Qexo的更多信息,请点击此处.
这里有一篇文章调试和查找错误在Qexo计划中。
如果你有兴趣servlet和web应用程序,你可以阅读一篇文章如何编写和安装一个简单的web应用程序,或一篇文章较旧但有用的信息.
示例
数据转换
以下是转换表格的程序:
let$newline:=“",$result:=(document(“tab.xml”)/result)返回(<表>{对于中的$x($result/row)返回(<tr>{对于($x/fld1)return(<td><b>{children($y)}</b></td>)中的$y,对于$y in($x/fld2)return(<td>{list(100,children($y))}</td>)}</tr>,$newline)}</table>,$newline)
这将转换如下输入表:
<结果><行><fld1>a1</fld1><fld2>12</行><行><fld1>b1</fld1><fld2>22</fld2></行></result>
生成如下输出表:<表格><tr><td><b>a1</b></td><td><list>100 12</list></td></tr><tr><td><b>b1</b></td><td><list>100 22</list></td></tr></表格>
格式化表格生成
以下程序生成10x10乘法表:
<表格>{1到10美元的回报(<tr>{1到10美元的回报设$bg:=(如果($x mod 2+$y mod 2<=0),则为“浅绿色”否则,如果($y mod 2<=0),则为“黄色”否则,如果($x mod 2<=0),则为“浅蓝色”否则为“白色”),$prod:=$x*$yreturn返回{如果($x>1和$y>1),则$prod else</td>}</tr>,"")}</table>,“"
这就是结果:
1 | 2 | 三 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
2 | 4 | 6 | 8 | 10 | 12 | 14 | 16 | 18 | 20 |
三 | 6 | 9 | 12 | 15 | 18 | 21 | 24 | 27 | 30 |
4 | 8 | 12 | 16 | 20 | 24 | 28 | 32 | 36 | 40 |
5 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 | 50 |
6 | 12 | 18 | 24 | 30 | 36 | 42 | 48 | 54 | 60 |
7 | 14 | 21 | 28 | 35 | 42 | 49 | 56 | 63 | 70 |
8 | 16 | 24 | 32 | 40 | 48 | 56 | 64 | 72 | 80 |
9 | 18 | 27 | 36 | 45 | 54 | 63 | 72 | 81 | 90 |
10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 | 100 |
定义函数
下面是定义和使用递归函数的示例:
定义函数descentent-or-self($x){$x,对于children($x)中的$z,返回descender-or-self($z)}后代或自身(<a>text1<b>text2</b></a>)
结果是:<a>text1文本2
相册
我从XML重写到XQuery我的脚本用于组织我的数字照片.新的shell脚本哪一个电话图片.xql更具可读性,大小相似,但提供了更多功能。这里有一个一个输出示例(针对Mozilla进行了优化)。如何获取和安装Qexo
Qexo是卡瓦.尝试Qexo的最简单方法下载可运行罐.或者,您可以获得源代码.两者均可从卡瓦ftp站点获得http://ftp.gnu.org/pub/gnu/kawa/或a镜子.跟随这些从源代码生成的指令.为了跟上最新的变化,您可能会更喜欢从SVN存储库获取Kawa,如前所述在卡瓦手册中.
用法
运行Kawa-XQuery的方式与运行Kawa的方式相同,但需要指定--xquery查询
标志指定语言。(默认情况下,Kawa需要Scheme源代码。)
例如,您可以直接在命令中键入xquery表达式行。如果行的末尾出现在看到的输入是有效的XQuery表达式,则该表达式将被视为完整的表达式。(但是,在分析文件时文件被解析。)
$java-jar kawa-1.9.jar--xquery(3,4,5)中$x的(:1:)返回<a>{$x}</a><a>3</a><a>4</a><a>5</a>(:2:)字符串(<a>3+5是{3+5}</a>)3+5等于8(: 3 :)
您还可以将XQuery程序编译为Java应用程序:
$java-jar kawa-1.9.jar--xquery--main-C prog.xql$java-cp.:kawa-1.9.jar程序
你可以阅读有关运行Qexo的更多信息,请点击此处.
生成和运行Servlet
您可以将XQuery程序编译为Servlet。这里有一个简单的web应用程序示例.这篇文章有其他但较旧的信息.servlet可以在servlet软件web服务器中运行,也可以作为CGI脚本运行。
许可证
Qexo是卡瓦,谁的执照是X11/MIT许可证.
Per Bothner公司