EKG + RAG/LLM para retroalimentación de códigoTrabajo de Fin de Máster · UNED
Recursos y herramientas

Recursos y herramientas

3Recursos de grafos → uso concreto

Mapa de cada recurso de grafos al lugar donde se usó, con un ejemplo real. Se declaran los huecos sin inflar, a saber, Neo4j/Cypher no se abordó (TFM RDF-céntrico), Protégé/Owlready2 quedó sustituido por owlrl, ShEx por SHACL y GraphDB está listo pero no desplegado en vivo. El flujo además se incluye como cuaderno Jupyter reproducible (notebook/ekg.ipynb). La fuerza está en lo que sí se hizo: RDF/RDFS/Turtle/SPARQL/OWL-RL/SHACL/SKOS/Wikidata/VoID.

Recurso → fichero → ejemplo concreto → estado.
RecursoDóndeEjemploEstado
RDF 1.1 (triples, IRIs)ekg-python-150.ttl1772 triples sujeto-predicado-objeto con URIs pyedu:/pyr:usado
RDF Schema 1.1 (clases, dominio/rango)TBox + consulta 02rdfs:domain/range; inferencia por rdfs:subClassOfusado
Turtleekg-python-150.ttlserialización canónica legible (1772 triples)usado
SPARQL 1.1 (SELECT, paths, CONSTRUCT)consultas/01..08 + rag_ekg.pyrequierePrerrequisito+ (03), CONSTRUCT (06), federada (08)usado
OWL 2 RL (inferencia)scripts/inferir.py (owlrl)contraste 0→157 y 1772→4786usado
SHACLvalidar.py + shapes-ekg.ttl10 NodeShapes; conforme (0) vs 6 violacionesusado
JSON-LD 1.1exportar.py → ekg-python.jsonldround-trip del canónicousado
Wikidata Query Service (federada + enlace)consulta 08 + resolver_wikidata*.py30 skos:exactMatch (no owl:sameAs)usado
RDFLibtodos los scripts del grafoGraph().parse/serializeusado
MyST Markdownmemorias/*/myst.ymlmemorias → web/PDF/DOCXusado
GraphDBcargar_graphdb.py + README-GraphDBcliente REST, ruleset owl2-rl; carga lista, no desplegado en vivoparcial
Protégé / Owlready2razonamiento hecho con owlrl; sin flujo Protégé/Owlready2parcial
ShExla validación de formas se hizo con SHACLhueco
Neo4j / Cypher (property graphs)no abordado: el TFM es RDF-céntrico (declarado)hueco
Jupyternotebook/ekg.ipynbcuaderno reproducible (RDFLib + owlrl + 8 consultas + SHACL); el flujo también corre por scripts .pyusado

usado · parcial · hueco declarado

3·bHerramientas de grafos del proyecto

Cada herramienta del temario, con su papel real en el proyecto y los huecos (lo que se exploró como alternativa pero no se desplegó). Las capturas de las herramientas con interfaz gráfica (Protégé, GraphDB Workbench, RDFShape, Arrows) las inserta el autor siguiendo los snippets y las instrucciones del anexo de reproducibilidad.

RDFLib + owlrl + pyshacl usado

Núcleo del entregable: parseo, inferencia OWL-RL (1772→4786) y validación SHACL (0/6). Reproducible con scripts/*.py y el cuaderno notebook/ekg.ipynb.

Wikidata Query Service usado

Consulta federada SERVICE a Wikidata; 30 skos:exactMatch verificados, 20 con descripción en español (ver grafo "Federado").

GraphDB (Ontotext) parcial

Carga reproducible con ruleset OWL2-RL (scripts/cargar_graphdb.py, README-GraphDB.md); el grafo canónico da 157 conceptos y 4786 inferidos. Despliegue en vivo no incluido — captura del Workbench pendiente del autor.

Property graph (Neo4j / Cypher / Arrows) parcial

El EKG se re-expresa como grafo de propiedades (ver grafo "Property graph"). El Cypher equivalente se genera en salidas/grafos/ekg_lpg.cypher; el TFM es RDF-céntrico (decisión declarada).

MATCH (c:Concepto)-[:REQUIERE]->(p:Concepto) RETURN c,p

ShEx + RDFShape parcial

Esquema ShEx equivalente a dos NodeShapes en ontologia/ekg-shapes.shex, validable en RDFShape; la validación efectiva del entregable usa SHACL (pyshacl).

Protégé + OWLViz / owlready2 hueco declarado

Editor y razonador de ontologías. El razonamiento se realizó con owlrl (perfil OWL 2 RL); la edición de la TBox se hizo en Turtle. Captura del árbol de clases en Protégé pendiente del autor (hueco declarado).

RDF Playground parcial

Editor en línea para ilustrar inferencia OWL/RDFS; el contraste 0→157 se reproduce también en su pestaña OWL.

Jupyter / Colab usado

Cuaderno reproducible notebook/ekg.ipynb (RDFLib + owlrl + 8 consultas + SHACL) con badge Colab.

Nobel Prize / SPARQLWrapper hueco declarado

Endpoint público para practicar SPARQL federado. La federación del entregable apunta a Wikidata; la consulta a Nobel con SPARQLWrapper queda como ejemplo (requiere red).

from SPARQLWrapper import SPARQLWrapper, JSON\n# endpoint = 'https://data.nobelprize.org/sparql'

Nube LOD / LOV parcial

El grafo se sitúa en la Web de Datos, donde reutiliza 6 vocabularios (RDFS, OWL, SKOS, DC, FOAF, schema.org) y enlaza a Wikidata (ver grafo "Vocabularios / LOD").

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.