SPARQL基本模式查询

上一篇就是简单的介绍了下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。




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值