2016-04-28 16 views
1

我試圖使用sparql將URL作爲參數發送到芝麻工作臺。我怎樣才能做到這一點?sparql查詢:URL作爲參數,與Python和Sesame-Workbench一起使用

更具體地說,我的代碼中的工作示例是;

p="OSPF" 
queryString = (""" 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX FOAF: <http://www.w3.org/2000/01/rdf-schema#> 
PREFIX : <http://something.com> 

INSERT DATA { 
: rdf:type FOAF:productdetails ; 
FOAF:price :%s . 
}""")% p 

在輸出謂詞'價格'對象是'http://something.com/OSPF'。我想要www.myurl.com作爲對象。

+0

另一方面:您不應該以編程方式向芝麻_Workbench_發送查詢。 Workbench只是一個客戶端UI。將您的查詢發送到實際的Sesame服務器。 –

+0

@JeenBroekstra我該怎麼做?那麼結局會是什麼? – Aravind

+0

通常類似於'http:// /openrdf-sesame/repositories/' –

回答

0

我不是Python程序員,但它看起來像使用字符串格式(使用%運算符)將值插入到SPARQL查詢中。在這種情況下,將p(「OSPF」)的值插入到您的字符串中,替換%s。所以這個結果是:

FOAF:price :OSPF . 

OSPF前面的:意味着你在這裏使用前綴名稱,默認前綴。默認前綴是在您的命名空間聲明定義爲:

PREFIX : <http://something.com> 

這導致插在你的SPARQL查詢中最後的URI:

FOAF:price <http://something.comOSPF> . 

如果你想要一個不同的網址,你必須改變這種方式被替代。一種解決方案是將完整的URI作爲值p。然後,您需要從%s刪除前導冒號,而是用尖括號括起來(以表明它是一個完整的URI):

p = "http://www.myurl.com/OSPF" 
    queryString = (""" 
    PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
    PREFIX FOAF: <http://www.w3.org/2000/01/rdf-schema#> 
    PREFIX : <http://something.com> 

    INSERT DATA { 
    : rdf:type FOAF:productdetails ; 
     FOAF:price <%s> . 
    }""")% p 

另一種選擇是引入在你的SPARQL查詢另一個命名空間聲明,和使用,在前面的%s。例如:

p = "OSPF" 
    queryString = (""" 
    PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
    PREFIX FOAF: <http://www.w3.org/2000/01/rdf-schema#> 
    PREFIX my: <http://www.myurl.com/> 
    PREFIX : <http://something.com> 

    INSERT DATA { 
    : rdf:type FOAF:productdetails ; 
     FOAF:price my:%s . 
    }""")% p 
+0

我不知道你的意思與你的第一次澄清。如果您的問題缺少某些內容,您是否可以編輯它以包含必要的信息? –

+0

編輯:兩個澄清; 1。如果我在查詢中使用了<%s>,則三重輸出的對象部分(在查看'SELECT * where {?a?b?c}'的輸出時,帶有芝麻工作臺的直接查詢工具)也包含角度方括號如。我怎樣才能擺脫它?如果我想傳遞一個包含一些特殊字符(特別是空格)的變量,該怎麼做?提前致謝。 – Aravind

+0

這聽起來更像是一個不同的問題。如果你有一個新的問題發佈*作爲一個單獨的新問題*。如果有助於提供上下文,則可以提供回到此問題的鏈接。 –