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.
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
)
Ejemplo sencillo:
- Clases:
Persona
,Lugar
- Relación:
nacioEn
- Atributos:
nombre
,fechaNacimiento
CREATE (:Clase {nombre: "Persona"})
CREATE (:Clase {nombre: "Lugar"})
CREATE (a:Persona {nombre: "Ada Lovelace", fechaNacimiento: "1815-12-10"})
CREATE (l:Lugar {nombre: "Londres"})
MATCH (a:Persona {nombre: "Ada Lovelace"}), (l:Lugar {nombre: "Londres"})
CREATE (a)-[:NACIO_EN]->(l)
MATCH (a:Persona)-[r:NACIO_EN]->(l:Lugar)
SET r.ano := 1815
MATCH (p:Persona)-[:NACIO_EN]->(l:Lugar)
RETURN p.nombre, l.nombre
- 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)
Neo4j tiene un plugin llamado n10s
que permite:
- Importar/exportar datos RDF/OWL
- Realizar consultas SPARQL-like
- Manejar vocabularios externos (ej. FOAF, DBpedia)