基于SPARQL理解Wikidata三元组中的实体角色与允许值
关于Wikidata三元组实体角色与属性值的问题解答
1. 实体能否同时作为主语和宾语?如何判断?
- 像Q241665(Rachel Stevens)这类实体完全可以同时作为三元组的主语和宾语。举两个例子:
- 作为主语:
wd:Q241665 wdt:P31 wd:Q5(Rachel Stevens是人类) - 作为宾语:
wd:Q15978637 wdt:P106 wd:Q241665(S Club 7的成员包含Rachel Stevens)
- 作为主语:
- 判断实体的角色适配性:
- 几乎所有Wikidata的Q类实体都能充当主语;只要有属性指向该实体,它就能作为宾语,没有全局层面的严格限制。
- 可以用SPARQL快速验证:
- 查询该实体作为主语的三元组:
SELECT ?p ?o WHERE { wd:Q241665 ?p ?o } LIMIT 10 - 查询该实体作为宾语的三元组:
SELECT ?s ?p WHERE { ?s ?p wd:Q241665 } LIMIT 10
- 查询该实体作为主语的三元组:
- 注意:属性自身的约束会限制实体能否作为该属性的主语/宾语,但实体本身没有“不能当主语/宾语”的固定限制。
2. 属性的允许主语/宾语值如何确定?
- 以P569(出生日期)为例:
- 允许的主语:看属性的定义域(对应属性P2300),P569的定义域是“有生命周期的实体”(Q838948),所有属于这个类的实体都能作为P569的主语。
- 允许的宾语:看属性的值域(对应属性P2301),P569的值域是“时间点”(Q18616576),所以宾语必须是符合该类型的时间数值或时间实体。
- 用SPARQL查询属性的定义域和值域:
SELECT ?domainLabel ?rangeLabel WHERE { wd:P569 wdt:P2300 ?domain; wdt:P2301 ?range. SERVICE wikibase:label { bd:serviceParam wikibase:language "zh". } } - 部分属性还有更细致的约束(比如属性P2302定义的约束类型),可以通过查询属性的约束相关属性,获取更精准的规则。
官方文档指引
- Wikidata官方的「属性约束」章节,详细说明了属性的定义域、值域及其他约束规则,明确了实体在三元组中的角色限制。
- Wikidata数据模型文档,解释了Q项(实体)、P项(属性)的基本角色:Q项既可以作为主语也可以作为宾语,属性固定作为三元组的谓词。
内容的提问来源于stack exchange,提问作者jacopodabramo
相关产品推荐
相关产品推荐

