2015-09-16 73 views
1

我有炫技以下SPARQL查詢:如何使用BIF做SPARQL查詢:REGEXP_MATCH在耶拿

PREFIX wd: <http://www.wikidata.org/entity/> 
SELECT DISTINCT ?p, ?title WHERE { 
    ?p a ?c. 
    ?c rdfs:subClassOf* wd:Q2431196. 
    ?p rdfs:label ?title . 
    FILTER (bif:regexp_match("^Vamp([(].*[)])?$", ?title)) 
} 

this SPARQL endpoint,它工作正常。它按預期返回電視節目Vamp和Vamp(telenovela)。

現在我正在嘗試使用Jena API在Java上執行相同的操作,但它失敗,如下所示。

線程 「main」 com.hp.hpl.jena.query.QueryParseException異常:10號線,列204:未解決的前綴名稱:BIF:REGEXP_MATCH

我找到了一個解決方案,擺脫Jena例外情況,建議爲bif:contains。然後查詢如下:

PREFIX wd: <http://www.wikidata.org/entity/> 
SELECT DISTINCT ?p, ?title WHERE { 
    ?p a ?c. 
    ?c rdfs:subClassOf* wd:Q2431196. 
    ?p rdfs:label ?title . 
    ?title <bif:regexp_match> "^Vamp([(].*[)])?$" 
} 

但是,該查詢沒有返回任何元素,如前面的查詢一樣。它不會返回SPARQL端點Web界面上的任何元素(如前面的查詢所做的那樣)

我做錯了什麼?我怎樣才能正確地對它進行正則表達呢?

2015年9月16日下午3點16分32秒org.apache.jena.riot:

PS:關於Java /耶拿在使用上的Web SPARQL端點FILTER REGEX(?title, "^Vamp([(].*[)])?$")作品,但引發以下錯誤。 system.ErrorHandlerFactory $ ErrorLogger LOGERROR 嚴重:無效字節3字節的2 UTF-8 sequence.`

認爲這個錯誤已與()人物做..

+1

無論是在你的構建還是在Virtuoso的解釋中,它看起來都是正則表達式的問題。我無法提供即時解決方案,但我可以並且確實建議您將問題提交給更專注的受衆 - [Virtuoso用戶郵件列表(http://sourceforge.net/p/virtuoso/mailman/virtuoso-users/) 。 – TallTed

回答

1

對於你的正則表達式模式,只需稍加編輯就可以了。

爲了在java中工作,只需在$之前放置左括號(在^之後並放置右括號)即可。

你的正則表達式應該是這樣的:

「^(?妖女([(] * [)]))$」;

希望這有助於

+0

感謝您的輸入,但它也不起作用。 我認爲,virtuoso不適用於

+0

我編輯了問題以添加詳細信息。 方法不會在Web界面的查詢中返回任何內容。 –

+0

Web界面上 FILTER正則表達式(?標題, 「^(妖女)(([(] * [)])?)$」) 回報我所期望的,但 ?標題「^(Vamp)(([(]。* [)])?)$」 什麼也沒有返回 –

0

耶拿將無法解析你的SPARQL,因爲它是無效的。 主要問題是,bif:是Virtuoso中的內置前綴。 爲了讓耶拿分析它,你需要

PREFIX bif:<> 

添加到您的查詢。

+0

這是行不通的。不在耶拿或在網絡界面。它會拋出以下異常: 線程「main」中的異常HttpException:400錯誤請求 Virtuoso 37000錯誤SP030:SPARQL編譯器,第11行:前綴'sql:'和'bif:'保留給SQL名稱(.. 。) –

0

由於AndyS在here回答的問題是,bif是特定演奏家特徵,所以,你應該用QueryEngineHTTP而不是QueryExecutionFactory.sparqlService。這將直接提交您的查詢到端點,並且不會通過耶拿解析器傳遞它。

QueryEngineHTTP query_engine = new QueryEngineHTTP(endpoint, query); 
+0

請注意,這也包含在[Virtuoso Jena Provider文檔](http://virtuoso.openlinksw.com/dataspace/doc/dav/wiki/Main/VirtJenaProvider#Bypass%20Jena/ARQ%20parser)中。 。 – TallTed

2

使用本PREFIX bif:<bif:>
,而不是在耶拿PREFIX bif:<>

+1

用反引號(')圍繞你的代碼,或者在它前面添加4個空格(單獨行)以將其顯示爲代碼。請參閱http://stackoverflow.com/editing-help#code – Ivar