wikidata 获取带有标签和项目值的所有属性
wikidata get all properties with labels and values of an item
我的问题是如何从 wikidata 最好通过 SPARQL 提取网页上呈现的所有属性及其各自的标签。
以Google entry on wikidata. For the property P414 (stock exchange) or P159 there are subproperties like P969 (located at street address). They actually show up once you 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.
}
}
但问题是是否有一种方法可以将所有内容组合到一个查询中?
维基数据数据模型上的有用链接:
您的查询应该是这样的:
SELECT ?wdLabel ?ps_Label ?wdpqLabel ?pq_Label {
VALUES (?company) {(wd:Q95)}
?company ?p ?statement .
?statement ?ps ?ps_ .
?wd wikibase:claim ?p.
?wd wikibase:statementProperty ?ps.
OPTIONAL {
?statement ?pq ?pq_ .
?wdpq wikibase:qualifier ?pq .
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
} ORDER BY ?wd ?statement ?ps_
结果中只包含限定符及其值。既不包括出处参考也不包括值注释(例如时间精度)。需要补充的请留言。
我的问题是如何从 wikidata 最好通过 SPARQL 提取网页上呈现的所有属性及其各自的标签。
以Google entry on wikidata. For the property P414 (stock exchange) or P159 there are subproperties like P969 (located at street address). They actually show up once you 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.
}
}
但问题是是否有一种方法可以将所有内容组合到一个查询中?
维基数据数据模型上的有用链接:
您的查询应该是这样的:
SELECT ?wdLabel ?ps_Label ?wdpqLabel ?pq_Label {
VALUES (?company) {(wd:Q95)}
?company ?p ?statement .
?statement ?ps ?ps_ .
?wd wikibase:claim ?p.
?wd wikibase:statementProperty ?ps.
OPTIONAL {
?statement ?pq ?pq_ .
?wdpq wikibase:qualifier ?pq .
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
} ORDER BY ?wd ?statement ?ps_
结果中只包含限定符及其值。既不包括出处参考也不包括值注释(例如时间精度)。需要补充的请留言。