在 Dbpedia 上列出个人的属性和值

Listing Properties and Values of an Individual on Dbpedia

如何列出任何给定 DBpedia class 的属性及其值?我是新手,已经查看了其他几个关于此的问题,但我还没有找到我正在寻找的东西。

我想做的是为我从文本挖掘中获得的对话主题提供一些相关的附加信息。 例如,某个社区的话题是 iPhone。我想用这个词在 DBpedia 页面上查询这个词 IPhone,得到如下输出:

Type: Smartphone
Operating System: IOS 
Manufacturer: Foxconn

编辑:

使用来自 AKSW 的查询,我可以打印 p (属性?) 和 o(对象?),尽管我仍然没有得到我想要的输出。而不是得到类似的东西:

weight: 133.0

我明白了

http://dbpedia.org/property/weight:133.0

有没有办法只获取 属性 的名称而不是 DBpedia link 的名称?

My Code

类 不 "have" 具有值的属性。实例(resp. 资源或个体)确实通过 属性 与某个值有关系,该值可以是个体本身或文字(或某个匿名实例又名空白节点)。并且实例属于 class。例如柏林属于class城市

您想要的是获取 DBpedia 中给定资源的所有传出值:

SELECT * WHERE { <http://dbpedia.org/resource/IPhone> ?p ?o }

或者,您可以使用 SPARQL DESCRIBE,其中 return 数据以 RDF 图的形式呈现。一组 RDF 三元组:

DESCRIBE <http://dbpedia.org/resource/IPhone>

这也可能 return 传入信息,因为 W3C 推荐中并未真正指定必须 return 编辑什么。

如 AKSW 所述,属性通常 link 到其他 类 而不是值。如果您想要所有属性及其值,包括其他 类,下面会按语言为您提供标签和过滤器(将您需要的语言代码放在 "en" 的位置)。

SELECT DISTINCT ?label ?o
WHERE {
 <http://dbpedia.org/resource/IPhone> ?p ?o.
 ?p <http://www.w3.org/2000/01/rdf-schema#label> ?label .
FILTER(LANG(?label) = "" || LANGMATCHES(LANG(?label), "en"))
 }

如果您不想要 link 到其他 类 的任何属性,那么您只需要数据类型属性,因此此代码可以提供帮助:

SELECT DISTINCT ?label ?o
WHERE {
 <http://dbpedia.org/resource/IPhone> ?p ?o.
 ?p <http://www.w3.org/2000/01/rdf-schema#label> ?label .
 ?p a owl:DatatypeProperty .
FILTER(LANG(?label) = "" || LANGMATCHES(LANG(?label), "en"))
 }

显然,这为您提供的信息和功能要少得多,但这可能正是您所追求的?

编辑:在回复您的评论时,也可以使用相同的技术获取值的标签:

SELECT DISTINCT ?label ?oLabel
WHERE {
 <http://dbpedia.org/resource/IPhone> ?p ?o.
 ?p <http://www.w3.org/2000/01/rdf-schema#label> ?label .
 ?o <http://www.w3.org/2000/01/rdf-schema#label> ?oLabel
FILTER(LANG(?label) = "" || LANGMATCHES(LANG(?label), "en"))
 }

请注意,http://www.w3.org/2000/01/rdf-schema#label 通常通过定义 prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>

缩短为 rdfs:label

所以你也可以这样做:

prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> 

SELECT DISTINCT ?label ?oLabel
WHERE {
 <http://dbpedia.org/resource/IPhone> ?p ?o.
 ?p rdfs:label ?label .
 ?o rdfs:label ?oLabel
FILTER(LANG(?label) = "" || LANGMATCHES(LANG(?label), "en"))
 }

并得到完全相同的结果,但可能更容易阅读。