Skip to content

Instantly share code, notes, and snippets.

@sergius02
Forked from pac19/Alpine Skiing.adoc
Last active August 29, 2015 14:12
Show Gist options
  • Save sergius02/15783a4581bb4b350a4f to your computer and use it in GitHub Desktop.
Save sergius02/15783a4581bb4b350a4f to your computer and use it in GitHub Desktop.

Mundo de DC Comics

Dominio de la aplicación

El dominio de la aplicación será sobre el mundo creado por DC Cómics, representando las diferentes relaciones de sus personajes en un grafo

Nodos
  • Persona: Personas normales, sin ningún tipo de poder. Sus atributos son simplemente su nombre y su procedencia.

  • Superhéroe / Supervillano: Personas con poderes o habilidades especiales. Sus atributos son su nombre real, su alter ego y su procedencia.

  • Equipos: Equipos de superhéroes o supervillanos. Su atributo es su nombre.

Relaciones
  • LUCHO_CONTRA: Representa la relación de los superhéroes con los supervillanos.

  • FORMO_PARTE: Representa la relación entre los superhéroes / supervillanos y los equipos.

  • RELACION_CON: Representa la relación sentimental entre los superhéroes / supervillanos y las personas o con otro superhéroe / supervillano. Tiene un atributo relación la cual indica el tipo de relación sentimental (novios, casados…).

  • FAMILIAR_DE: Representa la relación familiar entre los superhéroes / supervillanos y las personas o con otro superhéroe / supervillano. Tiene un atributo relación la cual indica el tipo de relación familiar (padre, madre…).

mFOlgVLuX2DJHzAHoo1g2 nfyFIndrD1hsrmAv6OI5PxV5i tMQDtALRSTLt6jYOMrsymeh pcE=w1656 h772

El grafo completo

// Crear grafo entrega RI
// Creación de los superhéroes
CREATE (Aquaman:Superheroe {nombre:"Arthur Curry", alterego:"Aquaman", procedencia:"Atlantis"})
CREATE (Batman:Superheroe {nombre:"Bruce Wayne", alterego:"Batman", procedencia:"Gotham city"})
CREATE (CanarioNegro:Superheroe {nombre:"Dinah Laurel Lance", alterego:"Canario negro", procedencia:"Star city"})
CREATE (Catwoman:Superheroe {nombre:"Selina Kyle", alterego:"Catwoman", procedencia:"Gotham city"})
CREATE (Cazadora:Superheroe {nombre:"Helena Wayne", alterego:"Cazadora", procedencia:"Gotham city"})
CREATE (Cyborg:Superheroe {nombre:"Victor Stone", alterego:"Cyborg", procedencia:"Desconocida"})
CREATE (Flash:Superheroe {nombre:"Barry Allen", alterego:"Flash", procedencia:"Central city"})
CREATE (FlechaVerde:Superheroe {nombre:"Oliver Queen", alterego:"Flecha verde", procedencia:"Star city"})
CREATE (LinternaVerde:Superheroe {nombre:"Hal Jordan", alterego:"Linterna verde", procedencia:"Ciudad Costera"})
CREATE (Mera:Superheroe {nombre:"Mera", alterego:"Mera", procedencia:"Atlantis"})
CREATE (Robin:Superheroe {nombre:"Damian Wayne", alterego:"Robin", procedencia:"Gotham city"})
CREATE (Superman:Superheroe {nombre:"Clark Kent", alterego:"Superman", procedencia:"Krypton"})
CREATE (WonderWoman:Superheroe {nombre:"Diana Prince", alterego:"Wonder woman", procedencia:"Temiscira"})

// Creación de las personas
CREATE (IrisWest:Persona {nombre:"Iris West", procedencia:"Central city"})
CREATE (LoisLane:Persona {nombre:"Lois Lane", procedencia:"Metrópolis"})
CREATE (JorEl:Persona {nombre:"Jor-El", procedencia:"Krypton"})

// Creación de los supervillanos
CREATE (Ares:Supervillano {nombre:"Ares", alterego:"Ares", procedencia:"Desconocida"})
CREATE (CaptainBoomerang:Supervillano {nombre:"George Harkness", alterego:"Captain Boomerang", procedencia:"Central city"})
CREATE (Darkseid:Supervillano {nombre:"Darkseid", alterego:"Darkseid", procedencia:"Desconocida"})
CREATE (GorillaGrodd:Supervillano {nombre:"Gorilla Grodd", alterego:"Gorilla Grodd", procedencia:"Central city"})
CREATE (HarleyQuinn:Supervillano {nombre:"Harleen Frances Quinzel", alterego:"Harley Quinn", procedencia:"Gotham city"})
CREATE (Joker:Supervillano {nombre:"Jack Napier", alterego:"Joker", procedencia:"Gotham city"})
CREATE (JuicioFinal:Supervillano {nombre:"Juicio Final", alterego:"Juicio Final", procedencia:"Desconocida"})
CREATE (LexLuthor:Supervillano {nombre:"Lex Luthor", alterego:"Lex Luthor", procedencia:"Metrópolis"})
CREATE (MantaNegra:Supervillano {nombre:"Manta Negra", alterego:"Manta Negra", procedencia:"Desconocida"})
CREATE (Merlyn:Supervillano {nombre:"Malcolm Merlyn", alterego:"Merlyn", procedencia:"Star city"})
CREATE (Parallax:Supervillano {nombre:"Parallax", alterego:"Parallax", procedencia:"Desconocida"})
CREATE (RasalGhul:Supervillano {nombre:"Ra's al Ghul", alterego:"Ra's al Ghul", procedencia:"Desconocida"})
CREATE (ReyTiburon:Supervillano {nombre:"Nanaue", alterego:"Rey tiburón", procedencia:"Hawaii"})
CREATE (Sinestro:Supervillano {nombre:"Sinestro", alterego:"Sinestro", procedencia:"Korugar"})
CREATE (TaliaalGhul:Supervillano {nombre:"Talia al Ghul", alterego:"Talia al Ghul", procedencia:"Desconocida"})
CREATE (ZafiroEstelar:Supervillano {nombre:"Carol Ferris", alterego:"Zafiro Estelar", procedencia:"Ciudad Costera"})

// Creación de los equipos
CREATE (LigaDeLaInjusticia:Equipo {nombre:"Liga de la injusticia"})
CREATE (LigaDeLaJusticia:Equipo {nombre:"Liga de la justicia"})

// Creación de la relación LUCHO_CONTRA
CREATE
(Aquaman)-[:LUCHO_CONTRA]->(MantaNegra),
(Aquaman)-[:LUCHO_CONTRA]->(ReyTiburon),
(Batman)-[:LUCHO_CONTRA]->(Joker),
(Batman)-[:LUCHO_CONTRA]->(HarleyQuinn),
(Batman)-[:LUCHO_CONTRA]->(RasalGhul),
(CanarioNegro)-[:LUCHO_CONTRA]->(Merlyn),
(Flash)-[:LUCHO_CONTRA]->(CaptainBoomerang),
(Flash)-[:LUCHO_CONTRA]->(GorillaGrodd),
(FlechaVerde)-[:LUCHO_CONTRA]->(Merlyn),
(LinternaVerde)-[:LUCHO_CONTRA]->(Sinestro),
(LinternaVerde)-[:LUCHO_CONTRA]->(Parallax),
(LinternaVerde)-[:LUCHO_CONTRA]->(Darkseid),
(Superman)-[:LUCHO_CONTRA]->(JuicioFinal),
(Superman)-[:LUCHO_CONTRA]->(LexLuthor),
(Superman)-[:LUCHO_CONTRA]->(Darkseid),
(WonderWoman)-[:LUCHO_CONTRA]->(Ares),
(WonderWoman)-[:LUCHO_CONTRA]->(Darkseid)

// Creación de la relación RELACION_CON
CREATE
(Aquaman)-[:RELACION_CON {relacion:"casados"}]->(Mera),
(Batman)-[:RELACION_CON {relacion:"novios"}]->(TaliaalGhul),
(Batman)-[:RELACION_CON {relacion:"novios"}]->(Catwoman),
(Flash)-[:RELACION_CON {relacion:"novios"}]->(IrisWest),
(FlechaVerde)-[:RELACION_CON {relacion:"novios"}]->(CanarioNegro),
(Joker)-[:RELACION_CON {relacion:"novios"}]->(HarleyQuinn),
(LinternaVerde)-[:RELACION_CON {relacion:"casados"}]->(ZafiroEstelar),
(Superman)-[:RELACION_CON {relacion:"casados"}]->(LoisLane)

// Creación de la relacion FAMILIAR_DE
CREATE
(Batman)-[:FAMILIAR_DE {relacion:"padre"}]->(Robin),
(Batman)-[:FAMILIAR_DE {relacion:"padre"}]->(Cazadora),
(Catwoman)-[:FAMILIAR_DE {relacion:"madre"}]->(Cazadora),
(RasalGhul)-[:FAMILIAR_DE {relacion:"padre"}]->(TaliaalGhul),
(Superman)-[:FAMILIAR_DE {relacion:"hijo"}]->(JorEl),
(TaliaalGhul)-[:FAMILIAR_DE {relacion:"madre"}]->(Robin)

// Creación de la relacion FORMO_PARTE_DE
CREATE
(Aquaman)-[:FORMO_PARTE_DE]->(LigaDeLaJusticia),
(Batman)-[:FORMO_PARTE_DE]->(LigaDeLaJusticia),
(CanarioNegro)-[:FORMO_PARTE_DE]->(LigaDeLaJusticia),
(Catwoman)-[:FORMO_PARTE_DE]->(LigaDeLaJusticia),
(Cyborg)-[:FORMO_PARTE_DE]->(LigaDeLaJusticia),
(Flash)-[:FORMO_PARTE_DE]->(LigaDeLaJusticia),
(FlechaVerde)-[:FORMO_PARTE_DE]->(LigaDeLaJusticia),
(LinternaVerde)-[:FORMO_PARTE_DE]->(LigaDeLaJusticia),
(Superman)-[:FORMO_PARTE_DE]->(LigaDeLaJusticia),
(WonderWoman)-[:FORMO_PARTE_DE]->(LigaDeLaJusticia)

CREATE
(CaptainBoomerang)-[:FORMO_PARTE_DE]->(LigaDeLaInjusticia),
(GorillaGrodd)-[:FORMO_PARTE_DE]->(LigaDeLaInjusticia),
(Joker)-[:FORMO_PARTE_DE]->(LigaDeLaInjusticia),
(LexLuthor)-[:FORMO_PARTE_DE]->(LigaDeLaInjusticia),
(MantaNegra)-[:FORMO_PARTE_DE]->(LigaDeLaInjusticia),
(RasalGhul)-[:FORMO_PARTE_DE]->(LigaDeLaInjusticia),
(Sinestro)-[:FORMO_PARTE_DE]->(LigaDeLaInjusticia),
(TaliaalGhul)-[:FORMO_PARTE_DE]->(LigaDeLaInjusticia)

Consultas

Básicas

  • Obtener todos los nodos con una procedencia determinada

match (n {procedencia:"Gotham city"}) return n as Nodos
match (n {procedencia:"Krypton"}) return n as Nodos
  • Obtener todos los supervillanos con los que ha luchado un superhéroe

match (s:Superheroe {alterego:"Linterna verde"})-[:LUCHO_CONTRA]->(v:Supervillano) return s.alterego as Superheroe,v.alterego as Supervillano
match (s:Superheroe {alterego:"Batman"})-[:LUCHO_CONTRA]->(v:Supervillano) return s.alterego as Superheroe,v.alterego as Supervillano
  • Obtener los nodos que tengan una relacion con otro

match (n1)-[:RELACION_CON]->(n2) return n1.alterego as Superheroe,n2.nombre as Persona

Intermedias

  • Lista de todos los superhéroes , el número total de sus enemigos ordenados descendentemente y la lista de enemigos

match (n:Superheroe)-[:LUCHO_CONTRA]->(v:Supervillano) return n.alterego as Superheroe, count(v) as Numero_de_enemigos, collect(v.alterego) as Lista_de_enemigos order by count(v) desc
  • Obtener todas las relaciones con el nodo cuyo nombre contiene un texto dado

MATCH (n1)--(n2) where n1.nombre =~ ".*al Ghul" RETURN n1 as Nodo_1,n2 as Nodo_2
  • Obtener todos los superhéroes que han luchado contra un supervillano y que además tienen una relación con una persona

match (s:Superheroe)-[:LUCHO_CONTRA]-(v:Supervillano), (s:Superheroe)-[:RELACION_CON]-(p:Persona) return s.alterego as Superheroe,v.alterego as Supervillano,p.nombre as Persona

Avanzadas

  • Obtener todos los caminos más cortos entre un nodo y otro

MATCH p=allShortestPaths((n1 {alterego:"Merlyn"})--(n2 {alterego:"Talia al Ghul"})) RETURN p as Todos_los_caminos_mas_cortos
MATCH p=allShortestPaths((n1 {nombre:"Lois Lane"})--(n2 {alterego:"Talia al Ghul"})) RETURN p as Todos_los_caminos_mas_cortos
  • Obtener solo un camino mínimo entre un nodo y otro

MATCH p=shortestPath((n1 {nombre:"Lois Lane"})--(n2 {alterego:"Talia al Ghul"})) RETURN p as Un_camino_mas_corto
  • Obtener todos los supervillanos que tienen un camino de tamaño máximo X con un superhéroe que tenga una relación con una persona cuyo nombre contenga un texto

match (v:Supervillano)-[*..2]-(s:Superheroe)-[:RELACION_CON]->(p:Persona) where p.nombre=~".*Lane" return v.alterego as Supervillano,s.alterego as Superheroe,p.nombre as Persona
match (v:Supervillano)-[*..4]-(s:Superheroe)-[r:RELACION_CON]->(p:Persona) where p.nombre=~".*Lane" return v.alterego as Supervillano,s.alterego as Superheroe,p.nombre as Persona
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment