我是 SPARQL 和 Jena 的新手。我在这里使用 Jena 2.13 版。我想从具有 REGEX 边界 (\b)
的 Java Web 应用程序执行 SPARQL 查询。我正在使用 REGEX 边界来匹配和查找确切的单词。
我也在 protege 上运行相同的 SPARQL 查询。
这是我在 java 中的 SPARQL 查询:
"PREFIX foaf: <http://xmlns.com/foaf/0.1/> "
+ "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> "
+ "PREFIX owl: <http://www.w3.org/2002/07/owl#> "
+ "PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> "
+ "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> "
+ "PREFIX : <" + CROSS_NS + "> "
+ "SELECT ((?FoodAndBeveragesRecipes) AS ?Resep)((?FoodAndBeverages) AS ?a) "
+ "WHERE{ ?FoodAndBeveragesRecipes :IngR ?_IngR."
+ " ?_IngR :HasIngredients ?FoodAndBeverages;"
+ ":UnitValue ?Value;"
+ " :MeasurementUnit ?Measurements;"
+ " :Ing_Type ?IngType."
+ "FILTER regex(str(?FoodAndBeverages), \"\\b" + recipe + "\\b\")}"
+ " ORDER BY ?FoodAndBeveragesRecipes";
recipe
是存储用户输入的字符串变量,它作为参数接收。
当我执行查询时,Jena 返回一个空集(甚至没有空指针异常),而 Protégé 返回/找到正确的结果。 我不知道问题是出在 REGEX 代码上还是什么。
我想知道为什么我的 REGEX 不能正常工作?谁能帮帮我?
谢谢。
最佳答案
您需要 \\\\W
- 是的,4 。一级用于 Java 将 \\W
放入 SPARQL,下一级是 SPARQL 字符串完全保留 \W
。
关于java - java中的SPARQL查询REGEX边界返回空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38601796/