2011-03-21 46 views
1

我的應用程序需要匹配正確的單詞,即說C或C++與SPARQL。我有以下SPARQL查詢如何通過SPARQL匹配一個確切的單詞

String prolog = "PREFIX kb: <" + VBOOK.getURI() + ">"; 

String queryString = prolog 

+ "\n" 

+ "SELECT * " 

+ "WHERE {?x kb:Price ?price. ?x kb:Currency ?currency. ?x kb:Title ?title. ?x kb:Count ?count. " 

+ "OPTIONAL {?x kb:Description ?description}." 

+ "FILTER regex(?title, \"" +title + "\")}"; 

這符合我所有的書甚至是C++,C#和書籍就像在嵌入式系統-Real概念(因爲這個詞「概念」有「C」的)。

,如果我最後一行改爲

+ "FILTER regex(?title, \"" +"^"+title + "\")}"; 

,如果標題是例如「C」,那麼我的查詢只有那些書的題目開始字母「C'.So書如」在ANSI編程匹配C'未被選擇。

我也試圖在最後一行

+ "FILTER regex(str(?title), \"" +title + "\")}"; 

即使這並沒有幫助我很多下面的變化。

即使書名不以C開頭,我該如何修改以獲取與「C」有關的圖書?

Regards, Archana。

+0

重複的在http://www.semanticoverflow.com/questions/3750/how-to-match-an-exact-word-through-sparql – RobV 2011-03-22 09:42:01

回答

2

這個問題歸結爲您的查詢引擎支持哪些正則表達式功能。如果它支持\b字邊界匹配,你可以通過改變最後一行

+ "FILTER regex(?title, \"\\b" + title + "\\b\")}"; 
+0

不,當我輸入'C'時它不會給我任何結果。 – Archana 2011-03-21 08:31:57

+0

@Archana:那麼,你在用什麼查詢引擎? – laalto 2011-03-21 08:35:54

+0

ARQ-2.8.5和Jena-2.6.3.I使用的是tomcat服務器,即java服務器。 – Archana 2011-03-21 09:03:22

1

你需要的正則表達式在所有解決問題了嗎?

而不是使標題的變量,只需修復它如此 -

X KB:標題 「稱號」。

即在您的代碼中

String title =「C++」;

「WHERE {X KB:???價格價格×KB:??貨幣匯率X KB:標題\」 「+標題+」 \ 「X KB:??數數」

+0

我需要試試這個。但現在我的輸入,如果C++鍵入該程序需要C,所以我需要這個。我只是認爲這是爲什麼C++沒有被搜索的原因。一旦我的輸入正確進行,將返回到此解決方案。 – Archana 2011-03-30 07:52:38