SquishQL: 最简单的RDF查询语言

开发者在线 Builder.com.cn 更新时间:2006-08-25作者:Builder 来源:

下面是来自查询示例的结果集,以表格的形式显示(results1.txt):

Results 1
itemjoborghomesalary currency
--------- ---------------- ----------------------- ------ --------
job1.html job 1 title here http://www.ukoln.ac.uk/ 100000 USD
job2.html job 2 title here http://ilrt.org//150000 EUR

它如何工作

SquishQL中存在两类约束:范式和筛选表达式。范式是生成的,例如:他们创建绑定;筛选是限制性的,例如:它们移除可能性。SquishQL语言将它们分割在WHERE(生成的)子句和AND(限制性)子句中。有些查询系统遵循谓词在前的传统。SquishQL取代了这种模仿的N-Triples语法,而以主语-谓词-宾语三段式语法形式出现。

SQL中的数据库是个封装的世界;FROM子句识别数据库中的表,并且WHERE子句识别限制性条件,而且它可以由AND扩展。依此类推,Semantic Web是数据库,FROM子句识别RDF模型。变量由“?”符号导入,并且URIs由“<>”符号引用,也能使用没有引用的URIs,此时没有不明确的意思。

下面是查询的主要元素:

  • SELECT子句:识别程序返回的变量。如果程序不需要所有的变量,则指定所需要的结果,从而减少内存开销,同时为查询优化提供信息。
  • FROM子句: FROM子句由URI指定模型
  • WHERE子句:指定图的样式,连接三段式列表。
  • AND子句:在URIs和字面上,指定布尔表达式,包括算术比较和布尔表达式,也包括分离和否定表达式。
  • USING子句:缩短URIs长度的一种方法。SquishQL 是人性化的语言,有助于人们理解其语法。这不是一个命名空间的机制;相反,它是通过定义字符前缀缩短URIA长度的一种简单机制。

RDF说明书详细说明了容器的形式以及RDF具体化的形式。而在SquishQL语言中没有这样的直接语法。如示例所示,这对于从容器获得数据没有影响,但是,查询则显得麻烦。相似的,对于RDF具体化,缺少语法支持则使得查询表达有些笨拙。

这个例子显示了如何从RDF中提取内容(example3.txt):

Example 3
SELECT ?y
WHERE (<http://somewhere.com/aBag>, ?x, ?y)
AND ! ( ?x eq <rsyn:type> && ?y eq <rsyn:Bag>)
USING
rsyn FOR http://www.w3.org/1999/02/22-rdf-syntax-ns# 

它如何与Inkling作用

Inkling是SquishQL的Java实现,它被创建成API,并且在相当小的项目中测试SquishQL的性能时,它不依赖数据库。其主要目标是:用Java写RDF数据库实现时,可以使用查询引擎,而且它可以用于测试SquishQL查询语言。

为了实现Inkling与RDF数据库和服务之间进行对话,服务必须执行包含专门方法的基本接口程序。此方法是三段搜索方法:

queryDatabase(subject, predicate, object)

这里的任何自变量都是零,这是由其他不同API支持方法的最小公共特征。

Inkling也使用JDBC接口执行SquishQL查询。这使得执行不依赖数据库,并且也意味着Java程序员熟悉访问查询的方法。

SquishQL的第二个执行是RDQL,它是jena RDF工具箱的一部分。RDQL将查询和RDF图操作结合在一起。现在RDQL已相当陈旧而被SPARQL所取代。SquishQL的第三个执行是RDFStore,它直接从Perl语言执行SquishQL查询RDF知识库。

启动器打包

很明显,SquishQL不能成为工业上的主流RDF查询语言,但是由于它非常简单,适合于RDF初学者进行学习。

责任编辑:张琎

查看本文的国际来源

用户评论

  • 用户名
  • 评论内容