Bases de Données / Databases

Site Web de l'équipe BD du LIP6 / LIP6 DB Web Site

Outils pour utilisateurs

Outils du site


site:enseignement:master:bdle:tmes:graphes-neo4j

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
site:enseignement:master:bdle:tmes:graphes-neo4j [25/01/2018 12:22]
camelia
site:enseignement:master:bdle:tmes:graphes-neo4j [24/01/2020 12:12] (Version actuelle)
camelia
Ligne 3: Ligne 3:
   * Télécharger Neo4J à cette adresse [[https://​neo4j.com/​download/​|]]   * Télécharger Neo4J à cette adresse [[https://​neo4j.com/​download/​|]]
   * Installer ​ et lancer Neo4J: [[https://​neo4j.com/​docs/​operations-manual/​current/​installation/​linux/​tarball/​|instructions (Unix console application)]]   * Installer ​ et lancer Neo4J: [[https://​neo4j.com/​docs/​operations-manual/​current/​installation/​linux/​tarball/​|instructions (Unix console application)]]
-  * Ouvrir le navigateur Web et aller à cette adresse: ​ http://​localhost:​7474 ​+  * Créer une base de données graphe ("New Graph" puis "​Create a local graph" ensuite "​Start"​) 
 +  * Une fois la BD lancée cliquer sur "​Manage"​ ensuite "Open Browser"​
   * Voir la description de l'​interface Neo4J à cette [[https://​neo4j.com/​developer/​guide-neo4j-browser/​|adresse]] ​   * Voir la description de l'​interface Neo4J à cette [[https://​neo4j.com/​developer/​guide-neo4j-browser/​|adresse]] ​
   * Voir la [[http://​neo4j.com/​docs/​developer-manual/​current/​cypher/​|documentation]] sur le langage Cypher ​   * Voir la [[http://​neo4j.com/​docs/​developer-manual/​current/​cypher/​|documentation]] sur le langage Cypher ​
 +  * Voir [[site:​enseignement:​master:​bdle:​tmes:​graphes-neo4j-exemple-cours|l'​exemple du cours]]
  
-Le graphe qui sera utilisé pendant le TME représente des personnages de la bande dessinée "​Asterix"​ avec les albums dans lesquels ils apparaissent. Les commandes de création de ce graphe se trouvent dans ce {{ :​site:​enseignement:​master:​bdle:​tmes:​graphe_asterix.tgz |fichier}} à télécharger,​[[https://​neo4j.com/​graphgist/​asterix-les-personnages|source]]+Le graphe qui sera utilisé pendant le TME représente des personnages de la bande dessinée "​Asterix"​ avec les albums dans lesquels ils apparaissent. Les commandes de création de ce graphe se trouvent dans ce {{ :​site:​enseignement:​master:​bdle:​tmes:​graphe_asterix.tgz |fichier}} à télécharger. ​
  
  
 == Création du graphe == == Création du graphe ==
-Créer et visualiser le graphe en copiant dans la ligne de commande les instructions présentes dans le fichier ​+Créer et visualiser le graphe en copiant dans la ligne de commande les instructions présentes dans le fichier.
  
-== Interrogation == +Après l'​exécution de cette commande l'​interface affichera le message suivant: 
-Écrire les requêtes suivantes:+  
 +<fc #​c0c0c0>''​Created 42 nodes, set 128 properties, created 67 relationships''</​fc>​
  
-q1) Visualiser ​le graphe (afficher tous les noeuds et tous les arcs)Quelles sont les propriétés et les étiquettes des noeuds et des arcs? +Remarque: pour passer à la ligne suivante dans la ligne de commande du browser Neo4J dans le cas d'une requête sur plusieurs lignes utiliser **Shift+Enter**. Pour exécuter une commande sur plusieurs lignes utiliser **Ctrl+Enter**.
  
-<showif isloggedin> +Exemple de données (voir également la [[https://​neo4j.com/​graphgist/​asterix-les-personnages|source]] de ce graphe): 
-**Réponse**+  * noeuds ​<fc #008080>personnages</​fc>​ avec des propriétés,​ par exemple:
 <​code>​ <​code>​
-match (n)-[r]->​(m) +"​personnageid":​ 56, 
-return nrm+  "​nationalite":​ "​Egyptienne"​, 
 +  "​name":​ "​Cleopatre"​, 
 +  "​personnagetype":​ "Les autres"​
 </​code>​ </​code>​
-</showif> +  * noeuds <fc #​008080>​album</fc>, sans étiquette, ont des propriétés,​ par exemple:
- +
-q2)  Ajouter une étiquette :PERSONNAGE aux noeuds qui ont une propriété "​personnageid"​ +
-<showif isloggedin>​ +
-**Réponse**+
 <​code>​ <​code>​
 +   "​name":​ "​Asterix le Gaulois",​
 +  "​albumid":​ 1,
 +  "​premiereedition":​ "​1961",​
 </​code>​ </​code>​
-</showif> +  * noeuds ​<fc #008080>type de personnage</fc>, par exemple:
- +
- +
-q3) Compter le nombre ​de noeuds +
-<showif isloggedin> +
-**Réponse**+
 <​code>​ <​code>​
-Match (n) + "​name":​ "Les Romains",​ 
-return count(n)+  "​personnagetypeid":​ 2
 </​code>​ </​code>​
-</showif> +  * noeuds de type<fc #008080nationalité</fc>, par exemple:
- +
-q)  Compter le nombre d'​arcs +
-<showif isloggedin> +
-**Réponse**+
 <​code>​ <​code>​
-match (n)-[r]->​() +  "​name":​ "​Egyptien",​ 
-return count(r) +  "​nationaliteid"​9
-Résultat67+
 </​code>​ </​code>​
-</showif>+  * arcs dirigés avec une étiquette <fc #​6495ed>​COMPAGNON_AVENTURE</​fc>​ sans propriétés qui relient des noeuds personnages  
 +  * arcs dirigés avec une étiquette <fc #​6495ed>​APPARAIT_DANS</​fc>​ sans propriétés qui relient des noeuds personnages et albums 
 +  *  arcs dirigés avec une étiquette <fc #​6495ed>​PERSONNAGE_TYPE</​fc>​ sans propriétés qui relient des noeuds personnages et des noeuds type de personnage 
 +  * arcs dirigés avec une étiquette <fc #​6495ed>​NATIONALITE</fcsans propriétés qui relient des noeuds personnages et des noeuds nationalité
  
-q) Trouver l'​étiquette do noeud dont le nom est 'Jules Cesar'+== Interrogation == 
 +Écrire les requêtes suivantes:
  
-<showif isloggedin>​ +Q1) Visualiser le graphe ​(afficher tous les noeuds et tous les arcs). Quelles sont les propriétés et les étiquettes des noeuds et des arcs? 
-**Réponse** +
-<​code>​ +
-match (n) +
-where n.name = 'Jules Cesar'​ +
-return labels(n) +
-Résultat: ["​PERSONNAGE"​]│ +
-</​code>​ +
-</​showif>​+
  
-q)  Trouver l'​étiquette des arcs vers le noeud dont le nom est 'Le Domaine des dieux' 
  
-<showif isloggedin>​ +Q2)  Ajouter une étiquette ​:PERSONNAGE aux noeuds qui ont une propriété "​personnageid" ​(utiliser set et exists).
-**Réponse** +
-<​code>​ +
-match (n {name'Le Domaine des dieux'​})<​-[r]-() +
-return distinct type(r) +
-Réponse: APPARAIT_DANS +
-!! Attention à la casse pour name +
-</​code>​ +
-</​showif>​+
  
-q) Afficher toutes les propriétés des trois noeuds parmi les noeuds de type PERSONNAGE:+''​RéponseAdded 11 labels''​
  
-<showif isloggedin>​ +Q3Compter le nombre de noeuds.
-**Réponse** +
-<​code>​ +
-match (n:​PERSONNAGE) +
-return * limit 3+
  
-{"​nationalite"​:"​Egyptienne","​personnageid":​56,"​personnagetype":"​Les au│ +''​Réponse42''​
-│tres","​name":"​Cleopatre"​} ​                                            │ +
-├──────────────────────────────────────────────────────────────────────┤ +
-│{"​personnageid":​44,"​nationalite":"​Romain/​Egyptien","​personnagetype":"​L│ +
-│es autres","​name":"​Cesarion (Ptolemee XVI)"​} ​                         │ +
-├──────────────────────────────────────────────────────────────────────┤ +
-│{"​nationalite":"​Romain","​personnageid":​91,"​personnagetype":"​Les Romain│ +
-│s","​name":"​Jules Cesar"​} ​  +
-</​code>​ +
-</​showif>​+
  
-q)  ​Afficher les noms des personnages qui n'ont pas d'arc sortant de type COMPAGNON_AVENTURE:​+Q4)  ​Compter le nombre ​d'arcs.
  
-<showif isloggedin>​ 
-**Réponse** 
-<​code>​ 
-match (n:​PERSONNAGE)-[r:​COMPAGNON_AVENTURE]->​(p) 
-where NOT (p)-[:​COMPAGNON_AVENTURE]->​() 
-return distinct p.name 
  
-!!NOT (p)-[r:COMPAGNON_AVENTURE]->​() ne marche pas +''​Réponse67''​
-—————————— +
-ou:  +
-match (p:​PERSONNAGE) +
-where NOT (p)-[:​COMPAGNON_AVENTURE]->​() +
-return distinct p.name+
  
 +Q5) Trouver l'​étiquette du noeud dont le nom est 'Jules Cesar'​.
  
-Résultat: "Cesarion (Ptolemee XVI)+''​Réponse["PERSONNAGE"] 
-"​Numerobis"​ +''​
-"​Brutus"​ +
-"​Lupus"​ +
-"​Epidemais"​ +
-"​Assurancetourix"​ +
-"​Briseradius"​ +
-</​code>​ +
-</​showif>​+
  
 +Q6)  Trouver l'​étiquette des arcs vers le noeud dont le nom est 'Le Domaine des dieux'​.
  
-q)Afficher deux triangles (on considère le graphe comme étant non-dirigé) +''​Réponse: "​APPARAIT_DANS"''​
-<showif isloggedin>​ +
-**Réponse** +
-<​code>​ +
-Match (a)--(b)--(c)--(a) +
-return distinct a, b, c +
-limit 2 +
-</​code>​ +
-</​showif>​+
  
-q Afficher les noms des trois couples ​de personnages qui apparaissent dans le même album, ainsi que l'id de album commun+Q7) Afficher ​toutes ​les propriétés ​de n'importe quels trois noeuds parmi les noeuds ​de type PERSONNAGE.
  
- +Réponse:
-<showif isloggedin>​ +
-**Réponse**+
 <​code>​ <​code>​
-match (p1)-[:APPARAIT_DANS]->​(m)(p2)-[:APPARAIT_DANS]->​(m) +
-where p1 <> p2  +  "​personnageid"​56, 
-return distinct p1.name, p2.name,  ​m.albumid limit 3 +  "​nationalite"​"​Egyptienne",​ 
- +  "​name": "​Cleopatre"​, 
-Résultat:  +  "​personnagetype":​ "Les autres"​ 
-"Cleopatre""Numerobis"  ​│6          │ +} 
-├───────────┼─────────────┼───────────┤ +
-"Cleopatre""Jules Cesar"│6          │ +  "​personnageid"​44, 
-├───────────┼─────────────┼───────────┤ +  "nationalite""Romain/​Egyptien"
-"Cleopatre""Numerobis" ​ ​│34 ​   +  "​personnagetype":​ "Les autres",​ 
 +  "​name":​ "​Cesarion (Ptolemee XVI)" 
 +
 +
 +  ​"personnageid": 91, 
 +  "​nationalite":​ "​Romain",​ 
 +  "​name": ​"Jules Cesar", 
 +  "personnagetype""Les Romains
 +}
 </​code>​ </​code>​
-</​showif>​ 
  
-q) Afficher ​pour chaque couple de personnages reliés par un arc (non-dirigé) de type COMPAGNON_AVENTURE  +Q8 Afficher les noms des personnages ​qui n'ont pas d'arc sortant dont le type est COMPAGNON_AVENTURE.
-le nombre d'​albums qu'ils ont en commun (afficher le triplet contenant ​les noms des personnages ​et le nombre d'albums en commun).  +
-Chaque couple de personnages doit apparaître une seule fois. Trier par nombre total d'albums décroissant.+
  
-<showif isloggedin>​ +Réponse:
-**Réponse**+
 <​code>​ <​code>​
-match (n)-[r:​APPARAIT_DANS]->​(a)<​-[:​APPARAIT_DANS]-(m),​ +"​Cesarion ​(Ptolemee XVI)" 
-(n)-[t:​COMPAGNON_AVENTURE]-(m) +"​Numerobis"​ 
-where n.name < m.name +"Brutus" 
-return distinct n.name, m.name, ​ count(distinct r) as total +"Assurancetourix
-order by total desc +"Briseradius" 
- +"Epidemais
-Résultat:  +"Lupus"
-"​Cleopatre"​ "​Jules Cesar" 3 +
-"​Cleopatre"​ "​Numerobis"​ 2 +
-"Caius Obtus"​ "​Jules Cesar" 1 +
-"Caligula Alavacomgetepus"​ "​Jules Cesar" 1 +
-"Cesarion (Ptolemee XVI)"​ "​Cleopatre" 1+
 </​code>​ </​code>​
-</​showif> ​+Q9) Calculer les triangles du graphe et afficher seulement deux parmi ces triangles (pour chacun de ces deux triangles afficher les noms des noeuds correspondants). On considère le graphe comme étant non-dirigé.
  
-q) Modifier la requête précédente afin d'​ajouter à l'arc de type COMPAGNON_AVENTURE qui relie les personnages une propriété '​albums'​  +Réponse:
-dont la valeur est le nombre total d'​albums en commun. +
- +
-<showif isloggedin>​ +
-**Réponse**+
 <​code>​ <​code>​
-match (n)-[r:​APPARAIT_DANS]->​(a)<​-[:​APPARAIT_DANS]-(m),​ +"Les Romains"​ "​Caius Obtus"​ "​Jules Cesar" 
-(n)-[t:​COMPAGNON_AVENTURE]-(m) +"Caius Obtus"​ "​Jules Cesar"​ "​Les Romains"​
-where n.name < m.name +
-with n, m, t, count(distinct r) as total +
-set t.albums = total +
-return distinct n.name, m.name, t.albums+
 </​code>​ </​code>​
-</​showif>​ 
  
-q) Afficher pour chaque noeud son nom et son le degré. Ordonner par ordre croissant des degrés. Considérer uniquement les arcs de type  
-NATIONALITE et PERSONNAGE_TYPE. 
-  ​ 
-<showif isloggedin>​ 
-**Réponse** 
-<​code>​ 
-match (n)-[r:​NATIONALITE|:​PERSONNAGE_TYPE]-() 
-return n.name, count(distinct r) as degree 
-order by degree 
-</​code>​ 
-</​showif>​ 
  
-qDegré total des noeuds+Q10 ​Afficher les noms des trois couples de personnages qui apparaissent dans le même album, pour chaque couple de personnages affichez l'id de album commun.
  
-  - Afficher pour chaque valeur de degré le nombre de noeuds avec ce degré. Considérer tous les arcs, ordonner par degré.  +Réponse:
-  - Pour chaque noeud enregistrer son degré somme nouvelle propriété.  +
- +
-<showif isloggedin>​ +
-**Réponse**+
 <​code>​ <​code>​
-match (n)-[r]-() +"Jules Cesar"​ "​Caius Obtus"​ 4 
-with n as nodes, count(distinct r) as degree +"​Cleopatre"​ "​Numerobis"​ 34 
-return degree, count(nodes) order by degree asc+"Jules Cesar"​ "​Cleopatre"​ 6 
 +</​code>​
  
-match (n)-[r]-() +Q11Afficher le sous-graphe des personnages reliés par des arcs de type COMPAGNON_AVENTURE qui ne contient pas '​Cleopatre'​.
-with n, count(distinct r) as degree +
-set n.deg = degree +
-return n.name, n.deg+
  
-</​code>​ +Réponse:
-</​showif>​ +
- +
-q) Afficher pour chaque noeud son nom et son degré sortant. Pour les noeuds sans liens sortants afficher 0. Ordonner par ordre décroissant des degrés. Considérer uniquement les arcs de type  +
-NATIONALITE et PERSONNAGE_TYPE. +
-   +
-<showif isloggedin>​ +
-**Réponse**+
 <​code>​ <​code>​
-match (n)-[r:​NATIONALITE|:​PERSONNAGE_TYPE]->​() +afficher les propriétés de 9 noeuds et 11 arcs de type  ​COMPAGNON_AVENTURE.
-return distinct n.name as Node, count(r) as Outdegree +
-order by Outdegree +
- +
-union +
- +
-match (a)-[r:​NATIONALITE|:​PERSONNAGE_TYPE]->​(b) +
-where not((b)-[:COMPAGNON_AVENTURE]->()) +
-return distinct b.name as Node, 0 as Outdegree+
 </​code>​ </​code>​
-</​showif>​ 
  
- +Q12) Afficher le sous-graphe contenant comme noeuds source '​Cleopatre',​ 'Jules Cesar' ou 'Caius Obtus' et 
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
-q) Afficher le sous-graphe contenant comme noeuds source '​Cleopatre',​ 'Jules Cesar' ou 'Caius Obtus' et +
 comme noeuds destination '​Cesarion (Ptolemee XVI)' ou '​Caligula Alavacomgetepus'​. Les noeuds sont reliés par des arcs  comme noeuds destination '​Cesarion (Ptolemee XVI)' ou '​Caligula Alavacomgetepus'​. Les noeuds sont reliés par des arcs 
 de type COMPAGNON_AVENTURE. de type COMPAGNON_AVENTURE.
  
-<showif isloggedin>​ +Réponse: 
-**Réponse** +<​code> ​
-<​code>​ +
-match (n)-[:​COMPAGNON_AVENTURE]-(m) +
-where n.name in ['​Cleopatre',​ 'Jules Cesar',​ 'Caius Obtus'​] and m.name in [ '​Cesarion (Ptolemee XVI)', '​Caligula Alavacomgetepus'​] +
-return distinct n.personnageid,​ m.personnageid +
- +
-Résultat:​ +
-════════════════╪════════════════╡+
 │56              │44              │ │56              │44              │
 ├────────────────┼────────────────┤ ├────────────────┼────────────────┤
Ligne 274: Ligne 152:
 └────────────────┴────────────────┘ └────────────────┴────────────────┘
 </​code>​ </​code>​
-</​showif>​ 
  
-q) Afficher le sous-graphe ​des personnages reliés par des arcs de type COMPAGNON_AVENTURE qui ne contient pas '​Cleopatre':​+Q13 Afficher le sous-graphe ​contenant les noeuds qui se trouvent à une distance 3 de '​Cleopatre'​ ainsi que les arcs de type COMPAGNON_AVENTURE 
 +qui les relient. On considère uniquement les arcs dirigés de type COMPAGNON_AVENTURE.
  
-<showif isloggedin>​ +Réponse:
-**Réponse**+
 <​code>​ <​code>​
-match (n)-[r:COMPAGNON_AVENTURE]->(m) +10 noeuds de type PERSONNAGE et 14 arcs de type COMPAGNON_AVENTURE
-where n.name <> '​Cleopatre'​ and m.name <> '​Cleopatre'​ +
-return n, m+
 </​code>​ </​code>​
-</​showif>​ 
  
  
 +Q14) Afficher le plus court chemin et sa longueur entre Jules Cesar et Epidemais.
  
 +Réponse:
 +<​code>​
 +3 noeuds PERSONNAGE, 3 arcs de type COMPAGNON_AVENTURE,​ longueur de chemin : 2
 +</​code>​
  
 +Q15) Afficher le plus long chemin de type COMPAGNON_AVENTURE et sa longueur entre Jules Cesar et Brutus (graphe non-dirigé).
  
-q)  Afficher le sous-graphe contenant les noeuds qui se trouvent à une distance 3 de '​Cleopatre'​ ainsi que les arcs de type COMPAGNON_AVENTURE +Réponse:
-qui les relient. On considère uniquement les arcs dirigés de type COMPAGNON_AVENTURE. +
- +
-<showif isloggedin>​ +
-**Réponse**+
 <​code>​ <​code>​
-match p=(a)-[:COMPAGNON_AVENTURE*3..3]->​(b) +5 noeuds PERSONNAGE, 7 arcs de type COMPAGNON_AVENTURE, longueur de chemin : 7
-where a.name='​Cleopatre'​ +
-return p+
 </​code>​ </​code>​
-</​showif>​ 
  
  
-q) Afficher le plus court chemin ​et sa longueur entre Jules Cesar et Epidemais.+Q16) Afficher ​les 3 noeuds qui ont le degré ​le plus élevé. Affichez pour chacun de ces noeuds son nom et son degré. Pour calculer le degré considérer uniquement les arcs de type NATIONALITE ou PERSONNAGE_TYPE.
  
-<showif isloggedin>​ +Réponse:
-**Réponse**+
 <​code>​ <​code>​
-match p=shortestPath((a)-[:​COMPAGNON_AVENTURE*1..10]->​(c)) +"Les Romains"​ 6 
-where  a.name='​Jules Cesar' and c.name='​Epidemais'​ +"​Romain"​ 6 
-return p, length(p) ​ +"Les autres"​ 4 
-</code+</​code> ​
-</showif>+
  
  
-q) Afficher ​le plus long chemin ​de type COMPAGNON_AVENTURE et sa longueur entre Jules Cesar et Brutus ​(graphe ​non-dirigé). +Q17) Afficher ​pour chaque couple ​de personnages reliés par un arc (non-dirigé) ​de type COMPAGNON_AVENTURE ​ 
- +le nombre d'​albums qu'ils ont en commun (afficher le triplet contenant les noms des personnages et le nombre d'​albums en commun). Chaque couple de personnages doit apparaître une seule fois. Trier par nombre total d'​albums décroissant. 
-<showif isloggedin>​ +Réponse:
-**Réponse**+
 <​code>​ <​code>​
-match p=(a)-[:​COMPAGNON_AVENTURE*]->​(c+"​Cleopatre"​ "​Jules Cesar"​ 3 
-where a.name='​Jules Cesar' and c.name='​Brutus'​ +"​Cleopatre"​ "​Numerobis"​ 2 
-return p, length(p)  +"​Cesarion ​(Ptolemee XVI)"​ "​Cleopatre"​ 1 
-order by length(p) desc Limit 1+"Caius Obtus"​ "​Jules Cesar" 1 
 +"​Caligula Alavacomgetepus"​ "​Jules Cesar"​ 1
 </​code>​ </​code>​
-</​showif>​ 
  
  
-qAfficher les noms des personnages sur le plus court chemin ​de type COMPAGNON_AVENTURE ​entre Numerobis et Assurancetourix ​ +Q18Modifier la requête précédente afin d'​ajouter à l'​arc ​de type COMPAGNON_AVENTURE ​qui relie les personnages retournés une propriété '​albums' ​ 
-(utiliser ​la fonction EXTRACT) ​(graphe non-dirigé). +dont la valeur est le nombre total d'​albums en commun. Retourner les noms des personnages ainsi que la propriété ajoutée ​(utiliser WITH pour enchaîner les opérations).
  
-<showif isloggedin>​ +Réponse:
-**Réponse**+
 <​code>​ <​code>​
-match p=shortestPath((a)-[:​COMPAGNON_AVENTURE*1..10]-(c)) +"​Cesarion ​(Ptolemee XVI)"​ "​Cleopatre"​
-where  a.name='​Numerobis'​ and c.name='​Assurancetourix'​ +"​Caligula Alavacomgetepus"​ "​Jules Cesar"​ 1 
-RETURN EXTRACT(n IN NODES(p)| n.name) AS Paths +"Caius Obtus" "Jules Cesar"​ 1 
- +"​Cleopatre"​ "​Jules Cesar"​
-Résultat:  +"Cleopatre"​ "​Numerobis" 2
-["Numerobis""​Cleopatre"​"Jules Cesar""Caligula Alavacomgetepus""Assurancetourix"]+
 </​code>​ </​code>​
-</​showif>​ 
  
  
-q ​Afficher le diamètre du graphe en considérant uniquement les noeuds ​de type PERSONNAGE et les arcs de type COMPAGNON_AVENTURE ​+Q19Degré total des noeuds
  
-<showif isloggedin>​ +  - Afficher pour chaque valeur de degré le nombre de noeuds avec ce degré. Considérer tous les arcs, ordonner par degré.  
-**Réponse**+  - Pour chaque noeud enregistrer son degré comme nouvelle propriété. Affichez les 3 premières noeuds avec le degré le plus élevé. 
 +  
 +Chacune de ces questions impliquent un enchaînement de deux opérations (utiliser WITH). 
 + 
 +Réponse:
 <​code>​ <​code>​
-match (n:​PERSONNAGE),​ (m:​PERSONNAGE) +1 23 
-where n <> ​m +2 2 
-with n, m +3 7 
-match p=shortestPath((n)-[:​COMPAGNON_AVENTURE*]->(m)) +4 2 
-return n.name, m.name, length(p) +5 2 
-order by length(p) desc limit 1+6 3 
 +9 1 
 +10 1 
 +31 1 
 +</code
 +et 
 +<code
 +"Jules Cesar"​ 31 
 +"​Cleopatre"​ 10 
 +"Caius Obtus"​ 9
 </​code>​ </​code>​
-</​showif>​ 
  
-q) Afficher les noms des noeuds sur tous les plus courts chemins entre Numerobis et Assurancetourix. Afficher uniquement les plus courts 
-chemins contenant plus de 4 noeuds (utiliser la fonction EXTRACT)(graphe non-dirigé). ​ 
  
-<showif isloggedin>​ 
-**Réponse** 
-<​code>​ 
-MATCH p = allShortestPaths((Source)-[:​COMPAGNON_AVENTURE*]-(destination)) 
-WHERE source.name='​Numerobis'​ AND destination.name = '​Assurancetourix'​ AND LENGTH(NODES(p)) > 4 
-RETURN distinct EXTRACT(n IN NODES(p)| n.name) AS Paths,​length(p) 
  
-Réponse: ​+Q20) Afficher pour chaque noeud son nom et son degré sortant. Pour les noeuds sans liens sortants afficher 0. Ordonner par ordre décroissant des degrés. Considérer uniquement les arcs de type  
 +NATIONALITE et PERSONNAGE_TYPE.
  
-["​Numerobis",​ "​Cleopatre",​ "Jules Cesar",​ "​Caligula Alavacomgetepus",​ "​Assurancetourix"​] 4 
-["​Numerobis",​ "​Cleopatre",​ "Jules Cesar",​ "Caius Obtus",​ "​Assurancetourix"​] 4 
-</​code>​ 
-</​showif>​ 
  
-q)  
  
 +Q21) Afficher les noms des personnages sur le plus court chemin de type COMPAGNON_AVENTURE entre Numerobis et Assurancetourix ​
 +(utiliser la fonction EXTRACT) (graphe non-dirigé). ​
  
 +Q22)  Afficher le diamètre du graphe en considérant uniquement les noeuds de type PERSONNAGE et les arcs de type COMPAGNON_AVENTURE ​
  
-q) Effacer tous les noeuds et leur arcs 
-<showif isloggedin>​ 
-**Réponse** 
-<​code>​ 
-Match(n)-[r]-() ​ 
-delete n, r 
-</​code>​ 
-</​showif>​ 
  
-qEffacer ​tous les nodes qui n'ont pas d'arcs+Q23Afficher les noms des noeuds sur tous les plus courts chemins entre Numerobis et Assurancetourix. Afficher uniquement les plus courts 
 +chemins contenant plus de 4 noeuds (utiliser la fonction EXTRACT)(graphe non-dirigé). ​
  
-<showif isloggedin>​ + 
-**Réponse** +Q24) On considère la propriété '​albums'​ des arcs de type COMPAGNON_AVENTURE comme poids des arcs. Afficher le chemin avec la distance la plus courte entre   ​Numerobis et Assurancetourix 
-<​code>​ +qui considère ces poids (même résultat que celui obtenu avec l'​algorithme de Dijkstra). Considérer uniquement les arcs de type COMPAGNON_AVENTURE 
-match (ndelete n +et leur poids (aide (utiliser shortestPath... WITH REDUCE): WITH REDUCE(dist = 0, rel in rels(path) | dist+rel.albums)). ​   
-</​code>​ + 
-</​showif>​+ 
 +Q25) Effacer tous les noeuds et leur arcs 
 + 
 + 
 +Q26) Effacer tous les nodes qui n'ont pas d'arcs
  
  
  
  
site/enseignement/master/bdle/tmes/graphes-neo4j.1516879359.txt.gz · Dernière modification: 25/01/2018 12:22 par camelia