当你有多字和scaping字符时,在sparql中进行自由文本搜索

时间:2018-06-11 15:48:52

标签: sparql contain

我想知道如果我有一个单词,我可以在sparql查询中使用: 罗伯特·奥尼尔 我正在寻找在Label属性中具有配额或unicode字符的多字符单元的资源。

                 SELECT DISTINCT ?resource ?abstract 
                 WHERE {?resource rdfs:label ?s.
                 ?s <bif:contains> "'Robert J. O'Neill'"
                 ?resource dbo:abstract ?abstract
                 }
                 '''

2 个答案:

答案 0 :(得分:0)

这是一个查询,它将返回所有以“Robert J. O'Neill”为标签的元素。

SELECT DISTINCT ?s WHERE 
{
    ?s rdfs:label ?label .
    FILTER(regex(?label, "Robert J. O'Neill", "i"))
}

如果您确定需要特定的字符串匹配。这更快:

SELECT DISTINCT ?s WHERE 
{
    ?s rdfs:label ?label .
    ?label bif:contains "Robert J. O'Neill"
}

但请注意,例如,由于字符串中的空格,Virtuoso不支持此类查询。所以另一种方法是避免它:

SELECT DISTINCT * WHERE 
{
    ?s rdfs:label ?label .
    ?label bif:contains "Robert" .
    FILTER (CONTAINS(?label, " J. O'Neill"))
}

答案 1 :(得分:0)

我发现以下代码比正则表达式更快:

SELECT ?s  WHERE { ?s  rdfs:label ?o FILTER ( bif:contains ( ?o, '"Robert" AND "J." AND "Neill"' ) ) }