4dim / Notas
Wikidata como fuente: el día que Gödel se llamaba Osiris
La etiqueta en español de Kurt Gödel estaba vandalizada y un importador que prefiera el español la habría copiado. Cómo votan los idiomas, los cinco QIDs de memoria que resultaron ser Jane Austen, un faraón y un pueblo alemán, y cómo se trata a un servicio gratuito.
El día que Gödel se llamaba Osiris
Si vas a construir algo con datos abiertos, esta nota cuenta qué le pasa a quien los copia sin comprobarlos. Empieza con un día concreto y termina con las reglas que sacamos de él.
Wikidata es la base de datos abierta que hay detrás de Wikipedia. Cada concepto tiene un identificador estable, llamado QID, y etiquetas en cientos de idiomas. Es la fuente natural para levantar el esqueleto de un grafo de conocimiento, o sea una red de conceptos unidos por relaciones, y la usamos para eso.
El 11 de agosto de 2026, al importar el concepto Q41390, el lógico Kurt Gödel, la etiqueta en español decía «Osiris Adán Gonzalez Rodriguez». En inglés, alemán y francés decía «Kurt Gödel».
Era vandalismo, del que Wikidata corrige en horas o días. Pero un importador que prefiera el español por defecto lo habría copiado tal cual. El grafo habría tenido durante meses un nodo llamado Osiris con los teoremas de incompletitud colgando de él.
La votación entre idiomas, y su límite
La solución no fue desconfiar del español. Fue dejar que los idiomas voten. Un nombre propio se parece en todas las lenguas: «Kurt Gödel» en inglés comparte palabras con «Kurt Gödel» en alemán y en francés. El intruso no comparte nada con nadie.
Así que la etiqueta principal es la que comparte alguna palabra con más idiomas, y el vandalizado se queda solo y pierde. Cuando ninguna comparte nada con ninguna, que es lo normal en conceptos que sí se traducen («lógica proposicional», «propositional logic»), gana el orden de preferencia: español, inglés, alemán, francés.
El límite está escrito en el código. Esto no detecta un concepto vandalizado en un idioma cuando los demás tampoco concuerdan entre sí. Contra eso no hay truco que valga; hay cita. Cada afirmación del grafo cuelga de una fuente que se puede volver a mirar, y Wikidata se registra como lo que es: una fuente terciaria.
Jane Austen, un faraón y un pueblo alemán
El segundo aviso vino de nosotros mismos. Al cargar una semilla de obras históricas, los primeros cinco QIDs se escribieron de memoria. Al comprobarlos contra Wikidata, resultaron ser Jane Austen, un faraón y un pueblo alemán. Ninguno era la obra que se creía.
De ahí salió una opción del cargador, --verificar. Contrasta cada fecha marcada como verificable con la propiedad P577 de Wikidata, que es la fecha de publicación, y aborta la carga entera si alguna no concuerda. No la fila: la carga.
Una fecha inventada desplaza toda una reconstrucción histórica. Es mejor no cargar nada que cargar algo con un error dentro.
Un identificador escrito de memoria no es un dato. Es una suposición con aspecto de dato, y hay que tratarla como tal hasta que la fuente la confirme.
Terciaria, y con un sesgo que se declara
Wikidata sirve de esqueleto por dos cosas que ninguna otra fuente da: un identificador estable y alias en cientos de idiomas. Sin eso, el mismo concepto citado en alemán, inglés y español sería tres nodos sueltos durante meses.
Pero es una fuente terciaria, y así se registra en cada cita que genera. Además, su cobertura del norte global es bastante mejor que la del resto, y ese sesgo se hereda entero. El código lo declara en su primera línea de comentario, en vez de disimularlo.
Buen vecino de un servicio gratuito
El endpoint SPARQL de Wikidata, que es la dirección por la que se le hacen preguntas, es gratis y compartido. Un importador desconsiderado lo castiga y recibe un 429, el código con el que un servidor avisa de que le están pidiendo demasiado rápido.
El nuestro consulta en lotes de 50 identificadores y deja entre 900 y 1.200 milisegundos entre lote y lote. Ante un 429 o un 503 reintenta hasta tres veces, con una espera de 4 segundos por intento. Y pone un plazo de 70 segundos por consulta.
Además se identifica con un User-Agent, la etiqueta con la que un programa dice quién es, que lleva el dominio y un correo de contacto. Es lo que piden los operadores de servicios públicos. Es lo mínimo decente, y además evita el 429.
La expansión del grafo se detiene en el borde: una relación jerárquica solo se añade si el destino ya está dentro. Si no, cada «subclase de» arrastra media Wikidata, que tiene del orden de cien millones de entidades, y el dominio de partida deja de estar acotado. Ese dominio, por cierto, resultó tener unos 685 nodos frente a los 2.000 que estimaba el plan sin medir.
Qué hacer entonces
- No elegir la etiqueta por idioma preferido. Dejar que los idiomas voten y usar la preferencia solo para deshacer el empate.
- Verificar cada identificador contra la fuente antes de cargar, y abortar la carga entera si uno falla.
- Registrar Wikidata como fuente terciaria y declarar su sesgo.
- Consultar en lotes, con pausas, con reintentos que esperan, y con un
User-Agentque lleve un contacto. - Acotar la expansión: solo relaciones cuyo destino ya está dentro del grafo.
Esta nota sale de nuestro trabajo en Software a medida.