Skip to content

Instantly share code, notes, and snippets.

@gusdelact
Created April 12, 2025 07:59
Show Gist options
  • Save gusdelact/dafcce08f25d19496659fc49ec18ee91 to your computer and use it in GitHub Desktop.
Save gusdelact/dafcce08f25d19496659fc49ec18ee91 to your computer and use it in GitHub Desktop.

Implementar una ontología en Neo4j consiste en modelar los conceptos (clases), relaciones, instancias y propiedades de tu dominio en forma de grafo, aprovechando el lenguaje Cypher para construir y consultar ese conocimiento.


🧠 ¿Qué es una ontología en este contexto?

Es una forma de representar conocimiento semántico en forma de grafo, donde:

  • Clases → son nodos tipo :Clase (ej. :Persona, :Ciudad)
  • Instancias → son nodos que representan ejemplos concretos (ej. (:Persona {nombre: "Ada"}))
  • Relaciones → son aristas entre nodos ([:nacioEn], [:esAmigoDe])
  • Propiedades → son atributos de nodos o relaciones (edad, nombre, fecha)

🔧 Paso a paso para implementarlo en Neo4j

1. Diseña tu modelo ontológico

Ejemplo sencillo:

  • Clases: Persona, Lugar
  • Relación: nacioEn
  • Atributos: nombre, fechaNacimiento

2. Crea nodos de clases (opcional si haces inferencia estructural)

CREATE (:Clase {nombre: "Persona"})
CREATE (:Clase {nombre: "Lugar"})

3. Agrega instancias como nodos

CREATE (a:Persona {nombre: "Ada Lovelace", fechaNacimiento: "1815-12-10"})
CREATE (l:Lugar {nombre: "Londres"})

4. Agrega relaciones semánticas

MATCH (a:Persona {nombre: "Ada Lovelace"}), (l:Lugar {nombre: "Londres"})
CREATE (a)-[:NACIO_EN]->(l)

5. Agrega propiedades a relaciones (si aplica)

MATCH (a:Persona)-[r:NACIO_EN]->(l:Lugar)
SET r.ano := 1815

6. Consulta con semántica

MATCH (p:Persona)-[:NACIO_EN]->(l:Lugar)
RETURN p.nombre, l.nombre

💡 Bonus: puedes enriquecer con

  • Jerarquías de clases (subclases con [:SUBCLASE_DE])
  • Ontologías externas (ej. importar OWL y mapear con Neosemantics)
  • Razón semántica (enriquecimiento basado en relaciones)

🧰 Herramienta útil: Neosemantics (n10s)

Neo4j tiene un plugin llamado n10s que permite:

  • Importar/exportar datos RDF/OWL
  • Realizar consultas SPARQL-like
  • Manejar vocabularios externos (ej. FOAF, DBpedia)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment