2014-04-02 94 views
4

我想實現一個SPARQL查詢,它從我的RDF數據中的一個對象獲取子字符串。無法獲得結果

通過以下查詢,我在?Substring列中得到一個空結果。我在?subject?predicate?object列中獲得有效輸出,但?Substring列不生成輸出。

SELECT * WHERE 
{ 
    ?S ?P ?O . 
    BIND(SUBSTR(?O, 2, 3) AS ?Substring) 
} 

回答

3

?O中的值實際上是字符串文字嗎?如果不是,那麼SUBSTR()將不會執行任何操作,因爲只有defined才能處理文字。如果這些值是URI /空白節點,那麼您總是會得到一個空列,並且您的查詢按原樣寫入。

可以使用STR()功能轉換到這可能會導致你開始得到非空的結果像這樣的字符串:

SELECT * WHERE 
{ 
    ?S ?P ?O . 
    BIND(SUBSTR(STR(?O), 2, 3) AS ?Substring) 
} 

一般在SPARQL如果從表達式求值創建了一列是空的給定的行意味着表達式評估爲該行的錯誤。如果你仍然得到空的結果,那麼你需要更仔細地看看你的表情,找出錯誤。

您的情況的另一種可能性是指定的字符範圍無效,請注意,SPARQL SUBSTR()函數採用開始索引和長度,因此您在此詢問從索引2開始的3個字符。如果您來自像Java語言,其中最後一個參數是年底指數和你想獲得索引2和3之間的字符串,那麼你實際上需要的是以下幾點:

BIND(SUBSTR(STR(?O), 2, 1) 

即1個字符開始於索引2