近似匹配
字符串匹配
约书亚·泰勒 https://stackoverflow.com/users/1281433/joshua-taylor的评论指出了一个出色而优雅的解决方案,可以完全满足您的要求:
filter contains( lcase(?label), "word").
您还可以通过以下方式使用正则表达式REGEX过滤功能 http://www.w3.org/TR/sparql11-query/#func-regex。您只需向查询添加一个额外的过滤器,例如:
FILTER regex(?label, "*word*", "i") .
这将允许您检索包含以下内容的所有标签word
(不区分大小写)。
耶拿文本
语法text:query (rdfs:label 'word' 10)
你提到的是的一部分jena-text
项目。请注意,您必须配置 jena 文本 http://jena.apache.org/documentation/query/text-query.html#configuration让它发挥作用。您想要使用的第一次是如果您想要执行近似文本匹配,即:如果可以接受搜索word
并取回类似的东西words
or wordpress
etc.
精确匹配
另一种选择是精确匹配。您可以通过指定初始绑定或直接修改查询来完成此操作。
查询修改
修改您的查询将产生多种变体之一。并非所有这些变体都被视为相同(普通文字/语言文字/类型化文字),因此在搜索时需要小心以确保数据匹配。
?object rdfs:label "word" .
?object rdfs:label '''word''' .
?object rdfs:label "word"@en .
?object rdfs:label "word"^^xsd:string .
装订规格
构造初始绑定通常看起来像这样(伪代码):
final QuerySolutionMap initialBinding = new QuerySolutionMap(){{
this.add("?label", model.createTypedLiteral(someString));
}};
final QueryExecution e =
QueryExecutionFactory.create(query,model,initialBinding);
请注意,第二个参数add
与查询修改具有相同的选择。您可以创建语言文字或普通文字而不是类型文字。同样,它需要与您的基础数据相匹配。