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

时间:2017-01-07 13:32:11

标签: sparql semantic-web dbpedia

如何为任何给定的DBpedia类列出属性及其值?我是新手,已经看过其他几个问题,但我还没找到我正在寻找的东西。

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

Type: Smartphone
Operating System: IOS 
Manufacturer: Foxconn

编辑:

使用来自AKSW的查询我可以打印p(属性?)和o(对象?),虽然我仍然没有得到我想要的输出。而不是像以下那样:

weight: 133.0

我得到了

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

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

My Code

2 个答案:

答案 0 :(得分:2)

类不具有值的“属性”。实例(相应的资源或个人)确实通过属性与某个值建立了关系,这些值可以是个体本身或文字(或某个匿名实例,也称为空白节点)。实例属于一个类。例如柏林属于城市

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

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

或者,您可以使用SPARQL DESCRIBE,它以RDF图形的形式返回数据。一组RDF三元组:

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

这也可能会返回传入的信息,因为在W3C建议中并没有真正指定必须返回的信息。

答案 1 :(得分:0)

如AKSW所述,属性通常链接到其他类而不是值。如果您想要所有属性及其值,包括其他类,下面按语言为您提供标签和过滤器(将您需要的语言代码放在放置"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"))
 }

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

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"))
 }

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