下面是来自查询示例的结果集,以表格的形式显示(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,此时没有不明确的意思。
下面是查询的主要元素:
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初学者进行学习。
责任编辑:张琎
用户评论