SPARQL中没有前缀的查询

时间:2013-12-12 11:41:06

标签: r sparql

我有一个入门级问题,我的书无法帮助,我也困惑了一位同事。我可以在不指定前缀的情况下使用RDF吗?如何在SPARQL查询中指定谓词?

我在R的RRDF包中这样做但是如果我将商店设置为

A=new.rdf(ontology=F)
add.triple(A,"Ian","sonOf","Daddy")
add.triple(A,"Ian","sonOf","Mummy")
add.triple(A,"Ian","likes","Chocolate")

我收到以下消息

## Error: com.hp.hpl.jena.query.QueryParseException: Lexical error
at line 1, column 40. Encountered: " " (32), after : "sonOf"

查询

sparql.rdf(A, "select ?son ?parent where {?son sonOf ?parent}")

我可以这样使用sonOf吗?我是否必须先建立自己的架构?我做了一些根本错误的事吗?如果我的所有数据都驻留在同一数据源上,是否必须使用前缀?

3 个答案:

答案 0 :(得分:4)

RDF谓词总是一个URI(从技术上讲,实际上是一个IRI,但让我们把它放在一边)。

可以指定为带前缀的名称:

  namespace:sonOf

或IRIRef,例如:

  <http://my.namespace.com#sonOf>

但我不认为它可以像你正在尝试的那样给出一个简单的标签。

如果使用带前缀的名称样式,则必须定义前缀并将其绑定到名称空间,以便可以根据输入构造有效的URI。

(正式语法在SPARQL Specification中给出。)

答案 1 :(得分:1)

rrdf R包中,以下语法似乎有效:

library(rrdf)
D = new.rdf(ontology = F)
add.triple(D, "ian", "w:likes", "food")
add.triple(D, "ian", "w:hates", "homework")
sparql.rdf(D, "select ?child ?object where {?child <w:likes> ?object.}")
sparql.rdf(D, "select ?child ?object where {?child <w:hates> ?object.}")

因此,您需要在SPARQL调用中使用<>,而不是调用add.triple()。这看起来很明显,但当时我们中的一些人感到困惑。

答案 2 :(得分:0)

我认为你问的是“空白”前缀......如果是这样的话:

当您定义前缀时,您可以这样说:

PREFIX : <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

然后将被用作:

?sub :sonOf ?obj