EKG + RAG/LLM para retroalimentación de códigoTrabajo de Fin de Máster · UNED
Enlazado a Wikidata

Enlazado a Wikidata

Conecté el grafo del proyecto con la red de datos abiertos enlazando treinta de sus conceptos con sus entidades equivalentes en Wikidata. Aquí cuento cómo lo hice, qué consulta federada llegué a ejecutar y por qué este puente con datos abiertos aporta interoperabilidad real, no un adorno.

1Treinta enlaces a Wikidata

Para cada concepto del grafo que tiene una contraparte clara en la web de datos, declaré un enlace skos:exactMatch hacia su entidad en Wikidata. En total verifiqué treinta de estos enlaces sobre el grafo canónico ekg-python-150.ttl, por encima del mínimo de quince que me había fijado en el anteproyecto.

30
enlaces skos:exactMatch verificados
≥15
objetivo del anteproyecto
157
conceptos del grafo
0
violaciones SHACL

Elegí skos:exactMatch y no owl:sameAs de forma deliberada. La diferencia parece menor, pero es semántica y tiene consecuencias en la inferencia.

Decisión semántica: skos:exactMatch, no owl:sameAs

Con owl:sameAs el razonador OWL 2 RL fusionaría mi concepto con la entidad de Wikidata y le heredaría todas sus afirmaciones. Con skos:exactMatch declaro una correspondencia conceptual fuerte sin esa fusión. Por eso la consulta ?x a pyedu:Concepto con inferencia devuelve 157, solo mis conceptos propios, y las treinta entidades de Wikidata no se infieren como concepto del grafo.

Cómo enlaza un concepto del grafo con Wikidata El concepto propio "Recursión" (pyr:recursion) declara skos:exactMatch hacia la entidad wd:Q264164 de Wikidata; desde esa entidad se reutilizan identificadores externos y la descripción en español servida por el endpoint público de Wikidata. skos:exactMatch Recursión pyr:recursion Wikidata wd:Q264164 IDs externos descripción es
Cada uno de los treinta conceptos enlazados apunta con skos:exactMatch a su entidad de Wikidata; desde esa entidad se alcanzan sus identificadores externos y su descripción en español (representación esquemática con la paleta del proyecto).

2La consulta federada que ejecuté

El enlace no es decorativo. Lo puse a trabajar con una consulta federada SPARQL real. La consulta 08_federada_wikidata.rq recorre cada concepto enlazado, salta en vivo al endpoint público de Wikidata mediante SERVICE y trae de vuelta la descripción en español de la entidad equivalente. Ejecutada contra el endpoint, devolvió veinte filas reales.

PREFIX pyedu: <https://w3id.org/ekg-python/schema#>
PREFIX skos:  <http://www.w3.org/2004/02/skos/core#>
SELECT ?concepto ?etiqueta ?descripcionWikidata WHERE {
  ?concepto skos:exactMatch ?wd ; rdfs:label ?etiqueta .
  FILTER(LANG(?etiqueta) = "es")
  SERVICE <https://query.wikidata.org/sparql> {
    ?wd schema:description ?descripcionWikidata .
    FILTER(LANG(?descripcionWikidata) = "es")
  }
}
# → 20 filas. Ej.: python → "lenguaje de programación de alto nivel"
Algunas filas reales devueltas por la consulta federada (descripción en español servida por Wikidata).
Concepto del grafoEntidad WikidataDescripción en español (Wikidata)
Pythonwd:Q28865lenguaje de programación de alto nivel
Búsqueda binariawd:Q243754algoritmo de búsqueda
Recursiónwd:Q264164método en ciencias de computación
Diccionariowd:Q1379956estructura de datos que asocia claves con valores
Herenciawd:Q272071concepto en informática

Las etiquetas de entidad (wd:Q…) corresponden a las entidades enlazadas en el grafo; las descripciones son las que el endpoint de Wikidata devolvió en español. La consulta trae veinte descripciones porque no toda entidad enlazada publica una descripción en español.

Lo que demuestra la consulta

Con una sola consulta combino datos de mi grafo local (qué conceptos enlazo y con qué etiqueta) con datos que viven en Wikidata (la descripción), sin copiar Wikidata a mi disco. Eso es justo lo que prometen los datos enlazados: cruzar fuentes distintas en tiempo de consulta gracias a un identificador compartido.

3Reutilizar identificadores externos

La pieza que hace posible todo lo anterior es el identificador externo. En lugar de inventar un nombre propio y aislado para "Recursión", reutilizo el identificador que Wikidata ya mantiene para ese mismo concepto, wd:Q264164. Reutilizar identificadores estables y públicos en vez de acuñar los míos es lo que evita las islas de datos y permite que terceros reconozcan de qué hablo.

Apoyado en esa reutilización, el grafo no se queda solo en su esquema propio. También reutiliza vocabularios estándar y publica su enlace con Wikidata como un linkset declarado en su descripción void.ttl (Vocabulary of Interlinked Datasets), para que el puente sea descubrible y no quede implícito.

El enlazado declarado como datos FAIR en void.ttl (metadatos del conjunto).
Linkset a Wikidata (void:linkPredicate skos:exactMatch)30 enlaces
Entidades del conjunto (void:entities)157
Triples afirmados (void:triples)1772
Vocabularios reutilizadosRDFS, OWL, SKOS, Dublin Core, FOAF, schema.org
LicenciaCC BY 4.0

Reutilizar identificadores y vocabularios ajenos no es pereza, es interoperabilidad. Cada identificador compartido es un punto de anclaje por el que mi grafo se enlaza con el resto de la web de datos.

4Por qué esto aporta interoperabilidad

Enlazar a datos abiertos cambia lo que mi grafo puede hacer. Sin enlace, "Recursión" es solo una cadena de texto dentro de mi esquema, que nadie de fuera sabe interpretar. Con el enlace skos:exactMatch a wd:Q264164, ese mismo concepto pasa a estar identificado de forma que cualquier sistema que conozca Wikidata lo reconoce sin que tengamos que ponernos de acuerdo de antemano.

De esa interoperabilidad salen ventajas concretas. Puedo enriquecer mis conceptos con descripciones, etiquetas en otros idiomas o relaciones que vivan en Wikidata, en tiempo de consulta y sin duplicar esos datos. Otra persona puede combinar mi grafo con el suyo apoyándose en los identificadores comunes. Y la procedencia queda clara, porque cada enlace dice con qué entidad pública se corresponde cada concepto. El uso deliberado de skos:exactMatch mantiene esa apertura sin contaminar mi modelo con inferencias que no quiero, que era justo el equilibrio que buscaba.

En una frase

Treinta enlaces skos:exactMatch, una consulta federada que los pone a trabajar y la reutilización de identificadores externos convierten un grafo cerrado en un nodo de la web de datos abiertos, interoperable y enriquecible sin copiar nada.

5Ver también

El grafo de conocimiento

La Grafoteca interactiva, el Turtle del EKG, la consulta federada en su contexto y la descripción FAIR void.ttl con el linkset a Wikidata.

Sistema RAG y fine-tuning

Cómo el grafo enlazado se convierte en contexto del sistema RAG que genera la retroalimentación de código.

Recursos y herramientas

El mapa de cada recurso de grafos a su uso concreto, con los huecos declarados.

Cómo citar

Si este trabajo te resulta útil y quieres referenciarlo, esta es la cita recomendada.

Bueno Junquero, A. (2026). Integración de un grafo de conocimiento educativo con un LLM mediante RAG. Trabajo Fin de Máster, Máster Universitario en Investigación en Inteligencia Artificial, UNED. Director, José Luis Fernández Vindel.