使用SPARQL通过其字符串名称检索DBpedia资源,但不知道其类型

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)

我的主要问题是两个主要方面:

  1. 有没有描述Dbpedia资源类型的东西?我认为这不是本体论或其他任何东西.通过knwoing我想搜索所有资源,找到一个匹配...
  2. 我将提供的特定名称,或一些字符串.我认为过滤器选项,但是这将意味着让所有的资源,然后通过自己的名字筛选他们,他们已经retreived后,这将是,我想,没有这么完美.

那么,有没有人知道这个"主查询"通过提供其名称或其中的一部分来获取资源?(一个例子是提供"奥巴马",并且不仅为巴拉克而且为米歇尔获得结果).

先感谢您.

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,只需使用商店的功能和数据集的细节来解决您的问题.

  • @sands你可以吗?标签bif:包含'"barak obama"'(注意额外的引号) (3认同)