我尝试使用curl 请求query.wikidata.org。
以下命令行完美运行:
$ curl -G https://query.wikidata.org/bigdata/namespace/wdq/sparql --data-urlencode query='PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
PREFIX wikibase: <http://wikiba.se/ontology#>
PREFIX p: <http://www.wikidata.org/prop/>
PREFIX ps: <http://www.wikidata.org/prop/statement/>
PREFIX pq: <http://www.wikidata.org/prop/qualifier/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?item ?itemLabel
WHERE {
?item wdt:P31 wd:Q146 .
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}' -H 'Accept: text/csv'
由于查询的 SPARQL 部分又长又复杂,我想将其存储在外部文件(例如 cats.sparql)中,并在curl 命令行中调用该文件。
这将是 cats.sparql :
PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
PREFIX wikibase: <http://wikiba.se/ontology#>
PREFIX p: <http://www.wikidata.org/prop/>
PREFIX ps: <http://www.wikidata.org/prop/statement/>
PREFIX pq: <http://www.wikidata.org/prop/qualifier/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?item ?itemLabel
WHERE {
?item wdt:P31 wd:Q146 .
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}
现在,以下命令行返回错误:
$ curl -G https://query.wikidata.org/bigdata/namespace/wdq/sparql --data-urlencode query=cats.sparql -H 'Accept: text/csv'curl -G https://query.wikidata.org/bigdata/namespace/wdq/sparql --data-urlencode query=cats.sparql -H 'Accept: text/csv'
这是错误的开始:
java.util.concurrent.ExecutionException: org.openrdf.query.MalformedQueryException: Lexical error at line 1, column 12. Encountered: <EOF> after : "cats.sparql"
答案1
好的,我终于找到了解决方案问题
$ curl -G https://query.wikidata.org/bigdata/namespace/wdq/sparql --data-urlencode query="$(< cats.sparql)" -H 'Accept: text/csv' > wikidata_cats.csv