我的问题是如何从Wikidata上通过SPARQL提取所有属性及其对应的标签,这些标签也在网页上呈现。
以Wikidata上的Google条目为例。对于属性P414(证券交易所)或P159,有子属性如P969(位于街道地址)。当您使用query
以Wikidata上的Google条目为例。对于属性P414(证券交易所)或P159,有子属性如P969(位于街道地址)。当您使用query
wbgetentities
作为限定符时,它们实际上会出现。 wbgetentities
的问题是标签缺失。我可以通过以下SPARQL查询获得所需输出(例如wdt:P17 => country => United States of America
):SELECT ?prop_id ?prop_label ?prop_val_label WHERE {
VALUES (?company) {
(wd:Q95)
}
?company ?prop_id ?company_item.
?wd wikibase:directClaim ?prop_id.
?wd rdfs:label ?prop_label.
OPTIONAL {
?company_item rdfs:label ?prop_val.
FILTER((LANG(?prop_val)) = "en")
}
BIND(COALESCE(?prop_val, ?companyItem) AS ?prop_val_label)
FILTER((LANG(?prop_label)) = "en")
}
但是这些“子属性”丢失了,因为它们不在直接声明之下。要提取单个语句的限定符,我可以执行以下操作:
SELECT ?company ?hq ?country WHERE {
wd:Q95 p:P159 ?company.
OPTIONAL {
?company ps:P159 ?hq.
?company pq:P17 ?country.
}
}
但问题是是否有一种方法将所有内容合并为一个查询?