2016-12-26 56 views
0

我需要獲取與Virtuoso圖中的雙引號相匹配的SPARQL查詢。我用這樣的查詢:在Virtuoso的SP​​ARQL查詢中匹配雙引號

SELECT distinct ?o 
FROM <http://graph> 
WHERE 
{ 
    ?s ?p ?o. 
} 

它返回我這樣值的列:

http://some.prefix/Symbol 
"abcd" 

我只需匹配第二個值("abcd")。我想這樣的過濾器添加到WHERE條款:

FILTER regex(str(?o), "\"") 

但它不返回任何結果。我也嘗試'"'作爲正則表達式的第二個參數,以及其他一些東西。它有可能嗎?

回答

2

"abcd"是文字的四個大字。它不包括"";這些是字符串分隔符,不構成字符串的一部分。

FILTER isLiteral(?o) 

應該工作。

+0

謝謝,這正是我需要的! – Kviat

0

由於您的過濾器不起作用,因此"abcd"中沒有雙引號。它是一個字符串文字。不知道它是什麼類型;所以你可以使用 -

select ?type where { "abcd" a ?type } 

- 得到它的類型。然後,您可以使用該類型的過濾器在您的查詢爲:

SELECT distinct ?o 
FROM <http://graph> 
WHERE 
{ 
    ?s ?p ?o . 
    ?o a <whatever type you received in the previous query> . 
} 
+0

當使用'rdf:type'(或關鍵字'a')記錄的rdfs:Class和一個文字的數據類型有區別。 「?o a ...」不返回數據類型。嘗試DATATYPE(?o),但這不是必要的,因爲'isLiteral'測試任何數據類型的文字。 – AndyS

+0

同意。 isLiteral()是執行此操作的更好方法。 –