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

当您有多字和scaping字符时,在sparql中进行自由文本搜索,sparql,contain,Sparql,Contain,我想知道,当我有一个类似以下的词时,如何在sparql查询中使用: 罗伯特·J·奥尼尔 我正在寻找在Label属性中具有配额或unicode字符的多字单元的资源 SELECT DISTINCT ?resource ?abstract WHERE {?resource rdfs:label ?s. ?s <bif:contains> "'Robert J. O'Neill'"

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

                 SELECT DISTINCT ?resource ?abstract 
                 WHERE {?resource rdfs:label ?s.
                 ?s <bif:contains> "'Robert J. O'Neill'"
                 ?resource dbo:abstract ?abstract
                 }
                 '''
选择不同的?资源?摘要
其中{?资源rdfs:label?s。
“罗伯特·J·奥尼尔”
?资源dbo:摘要?摘要
}
'''

这是一个查询,它将返回所有以“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"' ) ) }

到目前为止你试过什么?您面临的确切问题是什么?提供一个代码示例或甚至尝试都是相关的。是否可以使用Beax执行此操作,因为regex很慢?谢谢,是否有任何端点支持字符串中带有空格的查询?我还没有测试此特定语句的其他端点。事实上,这是提供答案的一个可能变体。