2017-07-26 44 views
0

如何构成查询以查询给定实体上属性的英文标签。维基数据查询查询属性标签

该询问提供的P31的ID:

SELECT ?item ?itemLabel ?instance_of WHERE { 
    ?item wdt:P646 "/m/09c7w0". 
    SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } 
    OPTIONAL { 
    ?item wdt:P31 ?instance_of.} 
    } 
} 
LIMIT 1 

我如何得到P31,而不是标签?

此外,有没有一种巧妙的方法来获得P31的“最佳”值,可能是数字ID最低的值?一些详细的实体具有非常嘈杂的值。例如,对于Q30,“美国”,我宁愿将“国家”看作我的instance_of,而不是“联合国成员国”。

+0

你应该明白*标签服务如何*作品...不要复制从其他来源粘贴不知道查询做什么!将'Label'追加到现有的变量是要走的路 - >'?instance_ofLabel'顺便说一下,你知道instance_of关系是什么意思吗?如果是这样,我会使用另一个变量名称,但的确是您的决定。从我的角度来看,这个属性表示一个实体的类型。 – AKSW

+0

定义“最佳方式”。最低的数字ID表示什么?确切地说,没有什么 - 它只是一个ID。实际上,LIMIT 1随机返回一种类型的实体。那么,你如何定义一个实体的“最佳类型”呢?您需要一些正式的标准,因为SPARQL是一种正式的查询语言。 – AKSW

+0

我并不是不同意类型,但''instance''是谓词'P31'的逐字英文标签。不,身份证本身并不代表任何东西,但它在维基数据中很重要。 ID通常按升序创建,而早期创建的实体往往是更一般的概念,而较新的实体通常更隐晦或更深奥。 – bhan

回答

0

谢谢AKSW。标签服务适用于给定的一个变量与匹配的后缀Label属性:

SELECT ?item ?itemLabel ?instance_of ?instance_ofLabel WHERE { 
    ?item wdt:P646 "/m/09c7w0". 
    OPTIONAL { 
    ?item wdt:P31 ?instance_of. 
    } 
    SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } 
} 
LIMIT 1