Wikisource discusión:Lista de autores
Añadir temaObtención de la lista de autores
[editar]Se ejecutó la siguiente query en Wikidata:SPARQL query service (https://query.wikidata.org):
SELECT ?autor ?autorLabel ?fecnacLabel ?fecdefLabel ?nacionalidadLabel ?page WHERE { ?autor wdt:P31 wd:Q5 . ?autor wdt:P569 ?fecnac . ?autor wdt:P570 ?fecdef . ?autor wdt:P27 ?nacionalidad . ?page schema:about ?autor . ?page schema:isPartOf <https://es.wikisource.org/> . SERVICE wikibase:label { bd:serviceParam wikibase:language "es". } } LIMIT 3000
El resultado, con más de 2.000 elementos, se descargó en local como archivo ".tsv detallado". Los registros tienen el siguiente aspecto:
<http://www.wikidata.org/entity/Q538091> "Lysander Spooner"@es "1808-01-19T00:00:00Z" "1887-05-14T00:00:00Z" "Estados Unidos"@es <https://es.wikisource.org/wiki/Autor:Lysander_Spooner> <http://www.wikidata.org/entity/Q545430> "Antonio José de Cavanilles"@es "1745-01-16T00:00:00Z" "1804-05-05T00:00:00Z" "España"@es <https://es.wikisource.org/wiki/Autor:Antonio_Jos%C3%A9_de_Cavanilles> <http://www.wikidata.org/entity/Q559964> "Estanislao del Campo"@es "1834-02-07T00:00:00Z" "1880-11-06T00:00:00Z" "Argentina"@es <https://es.wikisource.org/wiki/Autor:Estanislao_del_Campo>
Contiene duplicados, ya que un mismo autor puede tener más de una nacionalidad, o incluso más de una fecha (de nacimiento o de defunción). Cuando se desconoce el día o el mes, parece ser que se informa "1" por defecto.
Seguidamente se procesó en local el contenido del .tsv a un formato adaptado a una wikitabla con columnas ordenables, mediante el siguiente regexp (sí, es un poco chapucero):
nr = new RegExp("\"@es \"", "g"); //tras nombre //añadimos un espacio y punto final para que luego pueda truncar incluso en Autores sin apellidos document.form1.S1.value = document.form1.S1.value.replace(nr, " .\"| |\n\{\{!}}|número\=1}}\n|"); //fechas inexistentes nr = new RegExp("t[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]", "g"); document.form1.S1.value = document.form1.S1.value.replace(nr, "0000-00-00"); nr = new RegExp("t[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]", "g"); document.form1.S1.value = document.form1.S1.value.replace(nr, "0000-00-00"); //hay autores que no tienen @es y son IDs de Wikidata (p.ej. "Q16034232"): nr = new RegExp("([0-9])\" \"([0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9])", "g"); //antes de la fec_nac document.form1.S1.value = document.form1.S1.value.replace(nr, "$1 .\| \|\n\{\{!}}\|número\=1}}\" \"$2"); nr = new RegExp("@es <https", "g"); //tras nacionalidad document.form1.S1.value = document.form1.S1.value.replace(nr, " <https"); nr = new RegExp("<http:\/\/www.wikidata.org\/entity\/", "g"); document.form1.S1.value = document.form1.S1.value.replace(nr, "\|\-\n|[[:d:"); nr = new RegExp("T00:00:00Z\"", "g"); document.form1.S1.value = document.form1.S1.value.replace(nr, "\""); nr = new RegExp("> \"", "g"); //fin wikidata (pero no de es.wikisource) document.form1.S1.value = document.form1.S1.value.replace(nr, "]]\n|\{\{subst:reemplazar|"); nr = new RegExp("<", "g"); //inicio es.wikisource document.form1.S1.value = document.form1.S1.value.replace(nr, "\n|\["); nr = new RegExp(">", "g"); document.form1.S1.value = document.form1.S1.value.replace(nr, " Wikisource]"); //fechas nr = new RegExp("-00-", "g"); document.form1.S1.value = document.form1.S1.value.replace(nr, "\n|00\n|"); nr = new RegExp("-01-", "g"); document.form1.S1.value = document.form1.S1.value.replace(nr, "\n|01\n|"); //etc... document.form1.S1.value = document.form1.S1.value.replace(nr, "\n|11\n|"); nr = new RegExp("-12-", "g"); document.form1.S1.value = document.form1.S1.value.replace(nr, "\n|12\n|"); nr = new RegExp("-([0-9])", "g"); //antes de Cristo document.form1.S1.value = document.form1.S1.value.replace(nr, "-$1"); nr = new RegExp("\" \"", "g"); document.form1.S1.value = document.form1.S1.value.replace(nr, "\n|"); nr = new RegExp("\" ", "g"); //tras nacionalidad document.form1.S1.value = document.form1.S1.value.replace(nr, " "); nr = new RegExp("( .)\"", "g"); //fin de nombre document.form1.S1.value = document.form1.S1.value.replace(nr, "$1");
Seguramente hay otras formas más eficientes de obtener la lista. Por ejemplo, se puede obtener la lista de elementos de Wikidata con la siguiente query:
SELECT ?author ?authorLabel WHERE { ?article schema:about ?author ; schema:isPartOf <https://es.wikisource.org/> . ?author wdt:P31 wd:Q5. SERVICE wikibase:label { bd:serviceParam wikibase:language "es" } } GROUP BY ?author ?authorLabel
, y después utilizar la plantilla {{Propiedad}} para extraer datos como fechas, nacionalidad, etc. -Aleator 15:04 14 ago 2017 (UTC)