【问题标题】:how to get all attributes of a person in dpbedia, not just specific attributes queried如何在dpbedia中获取一个人的所有属性,而不仅仅是查询的特定属性
【发布时间】:2014-01-21 16:49:31
【问题描述】:

我知道你可以通过简单的查询获得所有属性的列表和所有人的列表:

select distinct ?property where {
         ?instance a <http://dbpedia.org/ontology/Person> . 
         ?instance ?property ?obj . }

但是我如何在不输入每个数量的情况下获取可用人员的所有信息? Select * 不会像在 SQL 中那样提取所有变量。

SELECT * WHERE
{ ?p a <http://dbpedia.org/ontology/Person> .
?p <http://dbpedia.org/ontology/knownFor> ?knownFor . }
LIMIT 10

这只会给我 person 和 knownfor 属性。我认为 select * 给出了所有数量?在任何情况下,我想要的不仅仅是这个人或他们的 knownfor 属性,而是每个人可能的所有值。

【问题讨论】:

  • 你想获取特定人的所有属性和值吗?
  • 是的,没错。虽然我只希望每列的值都是一个属性。
  • 我认为不可能将属性作为列,因为 sparql 查询的响应是一个映射,其中变量作为列,变量的不同可能值作为行
  • @conca 不仅如此,而且由于 RDF 不是数据库,因此没有固定的属性集,因此对其中的“列”数量没有真正的限制结果。
  • 顺便说一句:SELECT * 确实返回所有变量。但是“所有变量”是指“查询中声明的所有变量”,而不是“数据中所有可能的属性/值”。

标签: sparql wikipedia dbpedia


【解决方案1】:

您无法将属性作为列获取,但仍然可以将所有属性/值作为行获取。

此查询获取 Person 类型的所有资源的所有属性:

SELECT ?person ?prop ?value WHERE 
{
    ?person a <http://dbpedia.org/ontology/Person> .
    ?person ?prop ?value .
    FILTER ( langMatches(lang(?value), "en") )   
}
LIMIT 100

希望对你有帮助!

【讨论】:

  • 对不起,我没有结果。我认为这是错误的语言过滤器部分。
  • 确实应该是lang(?value)。或者甚至更好,使用langMatches(str(?value), "en")。如果您真的想要关于某人的所有数据,或者完全忽略过滤器...
  • 我将langMatches(str(?value), "en") 更改为langMatches(lang(?value), "en")。现在查询正在运行。
【解决方案2】:

@conca 已经为您提供了一个简单的 SELECT 查询,它可以返回您想要的数据。

作为替代方案,您可以查看一个 CONSTRUCT 或 DESCRIBE 查询,其结果将不是一个类似表的结构,而是一个实际的 RDF 图。对于广泛的“告诉我您对特定主题的了解”类型的查询,这些查询通常更容易使用:

CONSTRUCT 
WHERE { ?person a <http://dbpedia.org/ontology/Person> ; 
                ?prop ?value . 
} 
LIMIT 100

DESCRIBE 
WHERE { ?person a <http://dbpedia.org/ontology/Person> } 
LIMIT 100 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-24
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    相关资源
    最近更新 更多