当您有多个单词和转义字符时,在 sparql 中进行自由文本搜索

Free text search in sparql when you have multiword and scaping character

我想知道如何在 sparql 查询中使用以下单词: 罗伯特·J·奥尼尔 我正在寻找在标签 属性.

中具有带配额或 unicode 字符的多词单元的资源
                 SELECT DISTINCT ?resource ?abstract 
                 WHERE {?resource rdfs:label ?s.
                 ?s <bif:contains> "'Robert J. O'Neill'"
                 ?resource dbo:abstract ?abstract
                 }
                 '''

这里是将 return 所有标签为 "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"))
}

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

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