2016-09-27 132 views
1

我有简单的RDF数据集,具有以下值:用户,网址,时间和IP。我可以列出所有的数据使用:获取具有特定属性的所有数据SPARQL

SELECT DISTINCT * WHERE { ?s ?p ?o } 

但现在我需要列出所有的数据与特定的用户。如果来自查询的数据与来自上面的查询的数据格式相同但我们不需要,我将非常感激。
我想这和一些修改,这一点,但它没有一个似乎工作:

SELECT DISTINCT * WHERE { ?s ?p ?o. ?u foaf:user username. } 

我刚开始与耶拿和SPARQL和任何帮助的工作将非常感激。提前致谢。

编辑:@AKSW foaf:user工作,因为foaf是我自己的前缀我定义。我努力使查询工作,并不知道我在做什么。这是我还没有清理的东西。
我最终使用查询SELECT DISTINCT * WHERE {?u foaf:name USER_NAME_LITERAL . ?u ?p ?o . }这是你建议的,所以谢谢。如果您将其作为回答发布,我会将其标记为已接受。

+1

RDF中的资源由URI标识,因此您的用户也是。 'SELECT DISTINCT * WHERE {?p?o}'。 – AKSW

+1

SPARQL查询重新使用变量名称,以便它们连接三重模式,并且一般会构建一个图形。您的第二个查询由两个未连接的三元模式组成。 – AKSW

+1

不知道'foaf:user'应该是什么,但是在FOAF中没有这样的属性。 'foaf:name'是一个常见的属性:http://xmlns.com/foaf/spec/ – AKSW

回答

1

假设你的数据集包括:Record类的记录与领域:user:url:time:ip

SELECT * { ?r ?p  ?o; 
       a  :Record; 
       :user ?u. 
      ?u :name "your user name". 
      } 

或者,假设你知道用户的URI是:user123:

SELECT * { ?r ?p  ?o; 
       a  :Record; 
       :user :user123. 
      } 

注:这是对AKSW评论的总结。我使用默认前缀:而不是foaf:,因为这可能会导致其他人认为它是已存在的foaf“朋友的朋友”词汇的一部分。在这种情况下,WHERE关键字总是可以省略,并且DISTINCT关键字不应该是必需的,除非出现异常情况,例如多个图中包含相同的三元组。

+0

谢谢你的回答,这非常有帮助,因为它为我提供了更多的见解。在我的例子中,整个'foaf'只是我开始学习SPARQL时所做的一切。在目前的版本中,它已被修复。当我使用AKSW解决方案时,如果他决定发表评论作为答案,我会等待,但如果他不这样做,我会接受你的答案,因为它也有帮助,即使我遇到的问题已经解决了。比你再次。 – lsrom

相关问题