上一篇就是简单的介绍了下SparQL,这篇文章了介绍下SPARQL的基本模式查询
仍然使用上一篇文章的例子:
<rdf:RDF
xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'
xmlns:vCard='http://www.w3.org/2001/vcard-rdf/3.0#'
>
<rdf:Description rdf:about="http://somewhere/JohnSmith/">
<vCard:FN>John Smith</vCard:FN>
<vCard:N rdf:parseType="Resource">
<vCard:Family>Smith</vCard:Family>
<vCard:Given>John</vCard:Given>
</vCard:N>
</rdf:Description>
<rdf:Description rdf:about="http://somewhere/RebeccaSmith/">
<vCard:FN>Becky Smith</vCard:FN>
<vCard:N rdf:parseType="Resource">
<vCard:Family>Smith</vCard:Family>
<vCard:Given>Rebecca</vCard:Given>
</vCard:N>
</rdf:Description>
<rdf:Description rdf:about="http://somewhere/SarahJones/">
<vCard:FN>Sarah Jones</vCard:FN>
<vCard:N rdf:parseType="Resource">
<vCard:Family>Jones</vCard:Family>
<vCard:Given>Sarah</vCard:Given>
</vCard:N>
</rdf:Description>
<rdf:Description rdf:about="http://somewhere/MattJones/">
<vCard:FN>Matt Jones</vCard:FN>
<vCard:N
vCard:Family="Jones"
vCard:Given="Matthew"/>
</rdf:Description>
</rdf:RDF>
图片表示为:
已经知道RDF就是一些三元组,对于上一个例子,如果想要查找所有的FullName(predicate)的主语(Subject)和宾语(Object)
使用如下语句进行查找:
SELECT ?x ?name
WHERE {?x <http://www.w3.org/2001/vcard-rdf/3.0#FN> ?name}
由前一篇文章知道了Select就是用来查找所需要的内容,Where语句就是查找的条件,和Sql语句很像。
WHERE {?x <http://www.w3.org/2001/vcard-rdf/3.0#FN> ?name}这条语句其中“x”就是需要查找的Subject, “name”就是需要查找的Object,<http://www.w3.org/2001/vcard-rdf/3.0#FN>就是所需要的条件。
得到的结果为:
----------------------------------------------------
| x | name |
====================================================
| <http://somewhere/RebeccaSmith/> | "Becky Smith" |
| <http://somewhere/SarahJones/> | "Sarah Jones" |
| <http://somewhere/JohnSmith/> | "John Smith" |
| <http://somewhere/MattJones/> | "Matt Jones" |
----------------------------------------------------
是不是到现在都很简单啊。来,继续向下看。。。
如果我们想进行两步查询,怎么办?假如想知道FamilyName是Smith的,GivenName都有谁?答案有Rebecca和John
查询语句如下:
SELECT ?givenName
WHERE
{ ?y <http://www.w3.org/2001/vcard-rdf/3.0#Family> "Smith" .
?y <http://www.w3.org/2001/vcard-rdf/3.0#Given> ?givenName .
}
得到结果:
-------------
| givenName |
=============
| "John" |
| "Rebecca" |
-------------
我们也可以进行查找空白结点:例如查找FamilyName是Smith的空白节点:
查询代码:
SELECT ?y ?givenName
WHERE
{ ?y vcard:Family "Smith" .
?y vcard:Given ?givenName .
}
得到结果:
--------------------
| y | givenName |
====================
| _:b0 | "John" |
| _:b1 | "Rebecca" |
--------------------
对了,忘了一点,使用SparQL用的是Jena包,下载地址:http://jena.apache.org/download/index.cgi。