如何使用 SPARQL 检索按用途排序的维基数据的所有属性
How to retrieve all properties of Wikidata ordered by their usage using SPARQL
我找到了一个检索维基数据所有属性以及 属性 id、标签、描述和别名的查询
PREFIX bd: <http://www.bigdata.com/rdf#>
PREFIX schema: <http://schema.org/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX wikibase: <http://wikiba.se/ontology#>
SELECT ?p ?pt ?pLabel ?d ?aliases WHERE {
{
SELECT ?p ?pt ?d
(GROUP_CONCAT(DISTINCT ?alias; separator="|") as ?aliases)
WHERE {
?p wikibase:propertyType ?pt .
OPTIONAL {?p skos:altLabel ?alias FILTER (LANG (?alias) = "en")}
OPTIONAL {?p schema:description ?d FILTER (LANG (?d) = "en") .}
} GROUP BY ?p ?pt ?d
}
SERVICE wikibase:label {
bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en".
}
}
以及通过语句
指向 Q46 的项目所使用的查询计数属性
SELECT ?property ?count
WHERE {
SELECT ?property (COUNT(?item) AS ?count)
WHERE {
?item ?statement wd:Q46 . # items pointing to Q46 through a statement
?property wikibase:statementProperty ?statement . # property used for that statement
} GROUP BY ?property # count usage for each property pointing to that entity
} ORDER BY DESC(?count) # show in descending order of uses
我会在不依赖 Q46 的情况下将它们组合起来,但我不知道具体如何。
这样的SPARQL查询会花费太多时间导致执行超时。备选方案是:
- 开发和使用
- 从维基数据的 bzip2 存档中解压缩约 900 KiB 的块 JSON 转储
(https://dumps.wikimedia.org/wikidatawiki/entities/latest-all.json.bz2)
- 将解压缩的数据从块传递到 JSON 解析器(它可以是事件驱动的 JSON 解析器)
- 解析 JSON 提取有价值的数据
- 开发和使用
- 按照第 1 点所述读取 bzip2 转储存档
- 将解析的 JSON 数据导入 SQL 数据库
- 在您自己的数据库上执行 SQL 查询以提取有价值的数据
- 另一种减少开发工作的方法是:
- 提取维基数据 JSON 转储存档 (~65 GiB) 产生~1.4 TB json 文件
- 开发一个小型应用程序,使用事件驱动的解析器
解析该类型的 json 文件
- 解析 JSON 提取有价值的数据
我找到了一个检索维基数据所有属性以及 属性 id、标签、描述和别名的查询
PREFIX bd: <http://www.bigdata.com/rdf#>
PREFIX schema: <http://schema.org/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX wikibase: <http://wikiba.se/ontology#>
SELECT ?p ?pt ?pLabel ?d ?aliases WHERE {
{
SELECT ?p ?pt ?d
(GROUP_CONCAT(DISTINCT ?alias; separator="|") as ?aliases)
WHERE {
?p wikibase:propertyType ?pt .
OPTIONAL {?p skos:altLabel ?alias FILTER (LANG (?alias) = "en")}
OPTIONAL {?p schema:description ?d FILTER (LANG (?d) = "en") .}
} GROUP BY ?p ?pt ?d
}
SERVICE wikibase:label {
bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en".
}
}
以及通过语句
指向 Q46 的项目所使用的查询计数属性SELECT ?property ?count
WHERE {
SELECT ?property (COUNT(?item) AS ?count)
WHERE {
?item ?statement wd:Q46 . # items pointing to Q46 through a statement
?property wikibase:statementProperty ?statement . # property used for that statement
} GROUP BY ?property # count usage for each property pointing to that entity
} ORDER BY DESC(?count) # show in descending order of uses
我会在不依赖 Q46 的情况下将它们组合起来,但我不知道具体如何。
这样的SPARQL查询会花费太多时间导致执行超时。备选方案是:
- 开发和使用
- 从维基数据的 bzip2 存档中解压缩约 900 KiB 的块 JSON 转储 (https://dumps.wikimedia.org/wikidatawiki/entities/latest-all.json.bz2)
- 将解压缩的数据从块传递到 JSON 解析器(它可以是事件驱动的 JSON 解析器)
- 解析 JSON 提取有价值的数据
- 开发和使用
- 按照第 1 点所述读取 bzip2 转储存档
- 将解析的 JSON 数据导入 SQL 数据库
- 在您自己的数据库上执行 SQL 查询以提取有价值的数据
- 另一种减少开发工作的方法是:
- 提取维基数据 JSON 转储存档 (~65 GiB) 产生~1.4 TB json 文件
- 开发一个小型应用程序,使用事件驱动的解析器 解析该类型的 json 文件
- 解析 JSON 提取有价值的数据