1

私のアプリケーションは、正しい単語、つまり C または C++ と 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#、組み込みシステムのリアル コンセプトなどのすべての本と一致します (「コンセプト」という単語には「C」が含まれるため)。

最後の行を

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

タイトルがたとえば 'C' の場合、クエリは、タイトルが文字 'C' で始まる本のみに一致します。そのため、'Programming in ANSI C' のような本は選択されません。

最後の行で次の変更も試しました

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

これでもあまり役に立ちませんでした。

書籍のタイトルが C で始まらない場合でも、「C」に関連する書籍を取得するにはどうすれば変更できますか?

よろしく、アルカナ。

4

2 に答える 2

3

この質問は、クエリ エンジンがサポートする正規表現機能に要約されます。単語境界マッチングをサポートしている場合\b、最後の行を次のように変更することで問題を解決できます。

 + "FILTER regex(?title, \"\\b" + title + "\\b\")}";
于 2011-03-21T08:24:02.303 に答える
1

正規表現はまったく必要ですか?

タイトルを変数にする代わりに、単純に修正してください -

?x kb:タイトル「タイトル」 .

つまり、あなたのコードで

文字列タイトル = "C++";

"WHERE {?x kb:価格?価格.?x kb:通貨?通貨.?x kb:タイトル\""+タイトル+"\".?x kb:カウント?カウント."

于 2011-03-29T17:14:30.607 に答える