Ged*_*ort 11 rdf full-text-search foaf sparql dbpedia
如此问题中显示的标题类似,我想通过知道其名称的一部分来检索dbpedia资源.我是一个初学者,当谈到SPARQL等,但在关注的例子对我帮助很大,因为笔者搜索了"罗马尼亚",而该人回答他迷上了一个SPARQL要求做的工作.这很好,但这就是事情.
在这个例子中,他们已经"知道"罗马尼亚是一个国家,因此
?c a dbpedia-owl:Country ;
Run Code Online (Sandbox Code Playgroud)
在WHERE子句中.完整的sparql请求正在
SELECT ?c
WHERE {
?c a dbpedia-owl:Country ;
foaf:name "Romania"@en .
FILTER NOT EXISTS {?c dbpedia-owl:dissolutionYear ?y}
}
Run Code Online (Sandbox Code Playgroud)
但是,这个问题并不十分完整地回答我们的需求,因此寻找其名称的任何资源,在"名称"作为一个资源,或它的一部分的实际名称,不管它的(RDF:)类型.目标是搜索"任何东西",只知道名称或其中的一部分.
我一直在做一些研究,问你们这个问题之前,我已经知道这个问题"这个名字的一部分"可以用BIF功能来解决(糟糕的方法,因为它不是SparQL兼容),或CONTAINS子句,但我找不到任何展示如何使用它的例子.
现在让我们假设在dbpedia资源中有一个"单词"来搜索,该单词将是来自某个用户的输入.我们称之为"输入".
我想,这个请求看起来像:
SELECT ?something WHERE
{
?something a (dbpedia Resource).
CONTAINS(?something,"INPUT")
}
Run Code Online (Sandbox Code Playgroud)
我的主要问题是两个主要方面:
那么,有没有人知道这个"主查询"通过提供其名称或其中的一部分来获取资源?(一个例子是提供"奥巴马",并且不仅为巴拉克而且为米歇尔获得结果).
先感谢您.
ip.*_*ip. 15
我假设您在第一个问题中感兴趣的是只关注实例资源.我不知道你是否可以在一般情况下明确询问实例资源,因为在RDF中,一切都是资源.如果您对DBpedia数据集特别需要这个,则可以查询具有dcterms的资源:subject作为属性(在DBPedia中,只有实例资源具有dcterms:subject).所以你可以这样查询:
SELECT DISTINCT ?s ?label WHERE {
?s rdfs:label ?label .
FILTER (lang(?label) = 'en').
?label bif:contains "Obama" .
?s dcterms:subject ?sub
}
Run Code Online (Sandbox Code Playgroud)
类似地,对于您的第二个问题 - 如果您仅使用DBpedia数据集,则可能需要使用"bif:contains",尽管不符合SPARQL.我认为没有其他最佳方法可以做到这一点,正如您所说的那样使用FILTER将是次优的,特别是如果您需要快速执行查询.我认为关键字搜索和索引是由每个三重商店临时处理的,还没有一种标准化的方式来访问全文搜索者.
总而言之,如果您使用dbpedia,只需使用商店的功能和数据集的细节来解决您的问题.