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

时间:2011-12-26 13:53:38

标签: full-text-search rdf sparql dbpedia foaf

this question所示,它具有相似的标题,我想通过知道其名称的一部分来检索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资源中搜索“单词”,该单词将是来自某个用户的输入。我们称之为“输入”。

我想,这个请求看起来像是:

   SELECT ?something WHERE
   {
    ?something a (dbpedia Resource).
    CONTAINS(?something,"INPUT")
   }

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

  1. 有没有描述Dbpedia资源类型的内容?我认为这不是本体论或其他任何东西。通过knwoing我想在所有资源中搜索找到一个匹配...
  2. 我要提供的特定名称,或某些字符串。我考虑了FILTER选项,但这意味着获取所有资源,然后在它们被检索后按名称过滤它们,我猜,这不是那么优化。
  3. 那么,是否有人知道这个“主查询”通过提供其名称或其中的一部分来获取资源? (一个例子是提供“奥巴马”,并且不仅为巴拉克而且为米歇尔获得结果)。

    提前谢谢。

1 个答案:

答案 0 :(得分: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 
}

类似于你的第二个问题 - 如果你只使用DBpedia数据集,你可能想要使用" bif:contains"虽然不符合SPARQL。我不认为还有另一种最佳方法可以做到这一点,正如您所说的那样使用FILTER将是次优的,特别是如果您需要快速执行查询。我认为关键字搜索和索引是由每个三重商店临时处理的,还没有一种标准化的方式来访问全文搜索者。

总而言之,如果您使用dbpedia,只需使用商店的功能和数据集的细节来解决您的问题。