我有简单的RDF数据集,其中包含以下值:user,url,time和ip。我可以使用以下方式列出所有数据:
SELECT DISTINCT * WHERE { ?s ?p ?o }
但现在我需要列出特定用户的所有数据。如果查询中的数据与上述查询中的数据格式相同,我将非常感激,但这不是必需的。
我试过这个并对此进行了一些修改,但似乎没有任何修改:
SELECT DISTINCT * WHERE { ?s ?p ?o. ?u foaf:user username. }
我刚刚开始使用Jena和SPARQL,我们非常感谢任何帮助。提前致谢。
编辑:@AKSW foaf:user
有效,因为foaf
是我自己定义的前缀。我努力让查询工作,并且不知道我在做什么。这是我还没有收拾的东西
我最后使用了你建议的查询SELECT DISTINCT * WHERE {?u foaf:name USER_NAME_LITERAL . ?u ?p ?o . }
,谢谢。如果您将其作为答案发布,我会将其标记为已接受。
答案 0 :(得分: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:
,因为这可能导致其他人认为它是已经存在的朋友的一部分"朋友的朋友"词汇。在这种情况下,WHERE关键字总是可以省略,并且DISTINCT关键字不是必需的,除非在多个图表中包含相同的三元组等异常情况。