2013-12-12 83 views
3

我有一個入門級的問題,我的書無法提供幫助,我也困惑了一位同事。我可以在不指定前綴的情況下使用RDF,以及如何在SPARQL查詢中指定謂詞?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嗎?我是否必須先設置我自己的Schema?我在做一些根本性錯誤?如果我的所有數據都駐留在同一個數據源上,我必須使用前綴嗎?

回答

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()。這現在看起來很明顯,但當時我們中有一些人感到困惑。

4

RDF謂詞總是一個URI(從技術上講,實際上是一個IRI,但是讓我們把它放在一邊)。

它可以被指定爲前綴的名字:

namespace:sonOf 

或IRIRef,如:

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

,但我不認爲它可以作爲一個簡單的標籤,像你嘗試。

如果使用前綴名稱樣式,則必須定義前綴並將其綁定到名稱空間,以便可以從輸入中構建有效的URI。

(正式語法在SPARQL Specification給出。)

+0

這真的很有用。如果我嘗試這樣做,它仍然不起作用。我是否必須在我指定的URI處定義任何內容?即在你的例子中,是my.namespace.com實際使用? – drw

+1

那麼這個URI必須實際存在於你的數據中,我不熟悉你使用的軟件包,所以我不知道它是如何創建URIs,如你的問題所示。它可能會保持相對URI,在這種情況下,您應該能夠直接使用'',如果這樣做不起作用,請嘗試將數據轉儲到NTriples,因爲這需要它將URI全寫出 – RobV

+0

是否存在一種告訴倉庫中所有'名稱空間'可用的方法?或者有沒有辦法告訴一個三元組與哪個命名空間相關聯?請參閱[我最近的問題](http://stackoverflow.com/questions/40854135/how-to-list-all-all-namespaces-in-virtuoso) – amphibient

0

我想你問的「空白」的前綴......如果是這樣:

當你定義你的前綴,你可以說是這樣的:

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

其將被使用,如:

?sub :sonOf ?obj