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 punto donde lo apliqué, con un ejemplo real. El TFM es RDF-céntrico por diseño: resuelvo el razonamiento con owlrl, la validación con SHACL (pyshacl) y las consultas con SPARQL sobre rdflib, y dejo GraphDB cargable con su script REST. El flujo completo se reproduce con el cuaderno EKG-Python-proyecto-completo.ipynb y cubre 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..10 + 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 reproducible con cargar_graphdb.pyparcial
Protégé / Owlready2—razonamiento hecho con owlrl; sin flujo Protégé/Owlready2parcial
ShEx—la validación de formas se hizo con SHACLhueco
Neo4j / Cypher (property graphs)—fuera del foco RDF del TFM; el grafo se re-expresa en Cypher (ver "Property graph")parcial
Jupyternotebook/EKG-Python-proyecto-completo.ipynbcuaderno reproducible (RDFLib + owlrl + consultas SPARQL + 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. Para las de interfaz gráfica (Protégé, GraphDB Workbench, RDFShape, Arrows) documento en el anexo de reproducibilidad los pasos y las capturas que ilustran su uso.

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 EKG-Python-proyecto-completo.ipynb (ejecutado en Colab).

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) usado

Carga reproducible con ruleset OWL2-RL (scripts/cargar_graphdb.py, README-GraphDB.md); sobre el grafo canónico, el Workbench de GraphDB muestra los 157 conceptos y los 4786 triples inferidos, según el anexo de reproducibilidad.

Property graph (Neo4j / Cypher / Arrows) usado

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 por diseño.

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 usado

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. El árbol de clases puede abrirse en Protégé siguiendo el anexo de reproducibilidad.

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 EKG-Python-proyecto-completo.ipynb (RDFLib + owlrl + consultas SPARQL + SHACL), ejecutado en Google 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
# 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").

3·cCapturas de las herramientas en uso

Estas capturas documentan el uso real de las herramientas de la asignatura sobre los artefactos del proyecto: el modelado y el razonamiento en Protégé, la validación de integridad con SHACL, la consulta y el cierre OWL 2 RL en GraphDB, y la re-expresión del grafo como grafo de propiedades en Neo4j.

Protégé mostrando la jerarquía de clases del EKG
El editor de ontologías Protégé, con la jerarquía de clases del EKG (clases bajo owl:Thing y skos:Concept).
Protégé con el razonador activo mostrando relaciones inferidas
El editor Protégé, con el razonador OWL 2 RL activo; las relaciones «es prerrequisito de» inferidas por transitividad aparecen en amarillo.
SHACL Playground: grafo canónico conforme
Validación SHACL en el SHACL Playground: el grafo canónico es conforme (0 violaciones).
SHACL Playground: ejemplo inválido no conforme
Validación SHACL del ejemplo inválido (control negativo): la validación detecta los defectos deliberados.
GraphDB: consulta SPARQL con 157 conceptos
GraphDB con razonador OWL 2 RL: la consulta SPARQL devuelve los 157 conceptos del EKG.
GraphDB: grafo visual del concepto Bucle for
Grafo visual en GraphDB: el concepto «Bucle for» con sus prerrequisitos y contrastes.
Neo4j: el EKG como grafo de propiedades
El EKG re-expresado como grafo de propiedades en Neo4j (157 nodos :Concepto, 188 aristas :REQUIERE/:CONTRASTA).
Cómo citar

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

Bueno Junquero, A. (2026). Integración de grafos de conocimiento educativos con modelos de lenguaje masivos mediante arquitecturas RAG para evaluación personalizada en la enseñanza de programación. Trabajo Fin de Máster, Máster Universitario en Investigación en Inteligencia Artificial, UNED. Director, José Luis Fernández Vindel.