我想通过像下面的查询一样传播节点来传播查询。
SELECT ?item ?itemLabel ?prop ?object ?objectLabel ?prop2 ?object2
WHERE
{
VALUES (?item) { (wd:Q12418)}
?item ?prop ?object.
?object ?prop2 ?object2
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". } # Helps get the label in your language, if not, then en language
}
这里我从wd:Q12418(蒙娜丽莎)开始,我检索它的所有属性-然后对于每个对象,我也要检索它的所有属性。
问题是?item ?prop ?object
行返回对象的语句而不是对象本身。所以它指向蒙娜丽莎的陈述如下:https://www.wikidata.org/wiki/Q12418#Q12418$9c08a93a-4591-561d-36a9-78083ae0a3fa
在本例中,第二部分(?object ?prop2 ?object2
)处理该语句,因此只有该语句具有子属性时才返回某些内容。我想要得到的是对象(例如:)而不是语句,这样我就可以遍历对象的属性。
我怎么才能做到呢?
您希望?prop
以wdt:
前缀开头,那么您可以添加以下过滤功能:
filter(strstarts(str(?prop), str(wdt:)))
,如果需要,也可以为?prop2
设置一个类似的参数。