如 这个问题 所示,我想通过知道其部分名称来检索一个dbpedia资源。当涉及到SPARQL这样的东西时,我是个初学者,但该问题中的示例帮了我很多,因为作者搜索了“罗马尼亚”,而回答者提供了一个Sparql请求来完成任务。 这很好,但事实是:
在示例中,他们已经“知道”罗马尼亚是一个国家,因此
?c a dbpedia-owl:Country ;
在WHERE子句中。完整的SPARQL请求如下:
SELECT ?c
WHERE {
?c a dbpedia-owl:Country ;
foaf:name "Romania"@en .
FILTER NOT EXISTS {?c dbpedia-owl:dissolutionYear ?y}
}
然而,这个问题并没有完全回答我们的需求,因此我们需要搜索任何资源的名称,"名称"是实际资源的名称或其中一部分,而不考虑其(rdf:)类型。目标是搜索"任何东西",只知道名称或其中一部分。
在向你们提问之前,我已经做过一些研究,我已经知道"名称的一部分"问题可以通过bif函数解决(这是不符合Sparql标准的不良方法),或者使用CONTAINS子句,但我找不到任何示例说明如何使用它。
现在假设有一个要在dbpedia资源中搜索的"单词",该单词将是某个用户输入的。让我们称之为"INPUT"。
我想象中的请求应该是:
SELECT ?something WHERE
{
?something a (dbpedia Resource).
CONTAINS(?something,"INPUT")
}
我的主要问题涉及两个方面:
- 是否有任何描述Dbpedia资源类型的东西?我认为这不在本体论或其他任何地方。通过了解这一点,我想在所有资源中搜索一个匹配项...
- 我会提供一个特定名称或某个字符串。我考虑了“FILTER”选项,但那意味着获取所有资源,然后在检索到它们之后按名称过滤它们,这可能不是最优的。
因此,是否有人知道通过提供其名称或其中一部分来获取资源的“主查询”?(例如提供“Obama”,并获得不仅针对巴拉克,还包括米歇尔的结果)。
提前感谢你。
?label bif:contains "barak%20obama" .
没有用。也许两个单独的语句来捕获组成部分?不行。:(Virtuoso 37000错误SP031:SPARQL编译器:在单个组中为“$label”变量有多个bif:contains()或类似谓词
有什么想法吗? - sands