En la terminal de Linux, quiero ejecutar una consulta SPARQL y obtener como salida el resultado como CSV:
$ query --service https://query.wikidata.org/sparql?query=SPARQL --sparql "SELECT ?i ?c WHERE { ?i wdt:P31 wd:Q3917681. ?i wdt:P137 ?c.}"
wd:Q4374016,wd:Q819
wd:Q4374028,wd:Q711
wd:Q4374063,wd:Q874
wd:Q4374039,wd:Q159
... o algo similar.
Requisitos:
Para la mayoría de las aplicaciones, el enfoque básico de línea de comandos es suficiente. Dada la consulta en un archivo query.sparql
, obtenga CSV con curl:
curl -X POST https://query.wikidata.org/sparql -H "Accept: text/csv" --data-urlencode query@query.sparql
Aquí hay otro script bash que también admite la salida JSON, por ejemplo, para procesar con jq
:
#!/bin/bash
#
# Run a Wikidata query from command line
#
# Usage examples:
#
# wdquery "DESCRIBE wd:Q42"
# wdquery - xml < query.sparql
# wdquery query.sparql json
#
QUERY=${1--} # SPARQL query or file
FORMAT=${2-json} # output format
ENDPOINT=https://query.wikidata.org/sparql
# make sure query is written to a file
if ! [ -f "$QUERY" ]
then
TMPFILE="$(mktemp)"
if [ "$QUERY" == "-" ]
then
# read query from STDIN
cat > "$TMPFILE"
else
# write query to file
echo "$QUERY" > "$TMPFILE"
fi
QUERY="$TMPFILE"
fi
curl -s -X GET -F "query=@$QUERY" "$ENDPOINT?format=$FORMAT"
[ -z "$TMPFILE" ] || rm "$TMPFILE"
Escribí este script bash para permitir consultas fáciles de Wikidata desde la línea de comandos.
Uso:
./query-wikidata.sh "SELECT DISTINCT ?item WHERE {?item wdt:P31 wd:Q3917681. ?item wdt:P137 wd:Q16. ?item wdt:P131*/wdt:P17 wd:Q142.}"
O esta sintaxis más legible:
echo "
SELECT DISTINCT
?item
WHERE {
?item wdt:P31 wd:Q3917681.
?item wdt:P137 wd:Q16.
?item wdt:P131*/wdt:P17 wd:Q142.
}
" |./query-wikidata.sh
Producción:
<?xml version='1.0' encoding='UTF-8'?>
<sparql xmlns='http://www.w3.org/2005/sparql-results#'>
<head>
<variable name='item'/>
</head>
<results>
<result>
<binding name='item'>
<uri>http://www.wikidata.org/entity/Q137798</uri>
</binding>
</result>
</results>
</sparql>
Además de alguna información de red sobre la salida de errores.
Conoce los prefijos estándar de Wikidata.
Licencia: GNU-GPLv3
No reconoce los prefijos de Wikidata de forma predeterminada y no puede generar CSV en este momento, pero la consola RDF4J es una aplicación de línea de comandos genérica útil, no solo para hablar con Wikidata, sino con cualquier punto final público de SPARQL, su propio servidor RDF4J, o incluso un triplestore incrustado simple propio.
Para instalar, necesita un entorno de ejecución Java (8). Luego, simplemente descargue el SDK de RDF4J . El console.sh
script se puede encontrar en el bin/
directorio.
Para consultar Wikidata, inicie la consola y agregue una nueva definición de punto final SPARQL:
./console.sh
Connected to default data directory
RDF4J Console 2.0.1
Type 'help' for help.
> create sparql
Please specify values for the following variables:
SPARQL query endpoint: https://query.wikidata.org/sparql
SPARQL update endpoint:
Local repository ID [endpoint@localhost]: wikidata
Repository title [SPARQL endpoint repository @localhost]: wikidata sparql endpoint
Repository created
Una vez que esté configurado, puede abrir el repositorio creado (que es solo un proxy para el punto final público de SPARQL):
> open wikidata
Opened repository 'wikidata'
Luego solo consulta (teniendo cuidado de no sobrecargar el punto final; usa limit
cláusulas si estás experimentando):
wikidata> select * where {?x rdf:type ?o } limit 10
Evaluating SPARQL query...
+-------------------------------------+-------------------------------------+
| x | o |
+-------------------------------------+-------------------------------------+
| <http://wikiba.se/ontology#Dump> | <http://schema.org/Dataset> |
| <http://www.wikidata.org/value/8000b1b66dfb1c74420cf59f0388d425>| <http://wikiba.se/ontology#GeoAutoPrecision>|
| <http://www.wikidata.org/value/8000d3ac475ff41c5e2e38ffda574d1c>| <http://wikiba.se/ontology#GeoAutoPrecision>|
| <http://www.wikidata.org/value/8000f71177f50273969eca2096803e29>| <http://wikiba.se/ontology#GeoAutoPrecision>|
| <http://www.wikidata.org/value/80018edb4bf3ecf344a2d4343d76235c>| <http://wikiba.se/ontology#GeoAutoPrecision>|
| <http://www.wikidata.org/value/800269618da5a8571140652500ade834>| <http://wikiba.se/ontology#GeoAutoPrecision>|
| <http://www.wikidata.org/value/8003743c7dbef48511f9df4e629fd462>| <http://wikiba.se/ontology#GeoAutoPrecision>|
| <http://www.wikidata.org/value/8003a8ceaf4f75884d2b9ff99e3c959c>| <http://wikiba.se/ontology#GeoAutoPrecision>|
| <http://www.wikidata.org/value/80062f03a3a91733e0eb81f50ca56208>| <http://wikiba.se/ontology#GeoAutoPrecision>|
| <http://www.wikidata.org/value/800682cb1e9157517ed01b1a4b1760bc>| <http://wikiba.se/ontology#GeoAutoPrecision>|
+-------------------------------------+-------------------------------------+
10 result(s) (1231 ms)
Todo lo anterior se hace de forma interactiva, pero, por supuesto, puede escribir estos comandos y luego introducirlos en el console.sh
shellscript.
FWIW, la especificación del formato de salida está en la lista de tareas pendientes , al igual que la definición personalizada de espacios de nombres .
En cuanto a sus requisitos, punto por punto:
Hay una herramienta de línea de comandos basada en Perl wdq
desde 2016, en Github y en CPAN .
con una consulta
wdq -tplanet '?planet wdt:P31 wd:Q44559; wdt:P397 ?sun' > stars-and-exoplanets.json
obtendrá un conjunto de resultados JSON.
No tendrá que especificar prefijos de espacio de nombres y wdq
también inyecta el servicio de etiqueta en la consulta SPARQL. Lea la publicación en OpenData.SE del usuario Jakob .
Puede transformar JSON a CSV con jq
.
< stars-and-exoplanets.json jq -r \
'. | map({"p":.planet, "pl":.planetLabel, "pd":.planetDescription, "sun":.sun})' \
| jq -r '(map(keys) | add | unique) as $cols | map(. as $row | $cols | map($row[.])) as $rows | $cols, $rows[] | @csv' \
> stars-and-exoplanets.csv
JSON:
# < stars-and-exoplanets.json jq '.[0]'
# first record of ~3000
{
"planet": "http://www.wikidata.org/entity/Q1198042",
"planetDescription": "extrasolar planet",
"planetLabel": "HD 37124 d",
"sun": "http://www.wikidata.org/entity/Q139390"
}
CSV (primeras 2 líneas):
# < sun-and-stars-and-exoplanets.csv head -2
"p","pd","pl","sun"
"http://www.wikidata.org/entity/Q1198042","extrasolar planet","HD 37124 d","http://www.wikidata.org/entity/Q139390"
Wolfgang Fahl
Nicolás Raúl