diff --git a/doc/canonisation.txt b/doc/canonisation.txt index 1db3a36561cfb050df246511e972ea406ac3cc30_ZG9jL2Nhbm9uaXNhdGlvbi50eHQ=..8c2d1e885e6b95e9f27a69411f7e2dc50d01c074_ZG9jL2Nhbm9uaXNhdGlvbi50eHQ= 100644 --- a/doc/canonisation.txt +++ b/doc/canonisation.txt @@ -1,3 +1,6 @@ +Idées sur la canonisation +========================= + from ginco.rql.node_lib import Variable def sort(canon_dict): @@ -5,7 +8,9 @@ for l in canon_dict['restriction'].values(): l.sort() -------------------------------------------------------------------------------- -Any N, N2 where N is Note, N2 is Note, N ecrit_par P1, P1 nom 'jphc', N2 ecrit_par P2, P2 nom 'ocy' ; -Any Y, X where X is Note, Y is Note, X ecrit_par P1, P1 nom 'ocy', Y ecrit_par P2, P2 nom 'jphc' ; +Exemple 1 +--------- + +Formules équivalentes +````````````````````` @@ -11,4 +16,9 @@ + Any N, N2 where N is Note, N2 is Note, N ecrit_par P1, P1 nom 'jphc', N2 ecrit_par P2, P2 nom 'ocy' ; + Any Y, X where X is Note, Y is Note, X ecrit_par P1, P1 nom 'ocy', Y ecrit_par P2, P2 nom 'jphc' ; + +Forme canonique +``````````````` N = Variable('N') N2 = Variable('N2') @@ -53,4 +63,6 @@ canon2 == canon1 +Exemple 2 +--------- @@ -56,2 +68,4 @@ +Formules équivalentes +````````````````````` @@ -57,7 +71,9 @@ -------------------------------------------------------------------------------- -Note N WHERE N ecrit_le D, N ecrit_par P, P nom 'jphc', D day > (today-10); -Note K WHERE K ecrit_le D, K ecrit_par Y, D day > (today-10), Y nom 'jphc'; + Note N WHERE N ecrit_le D, N ecrit_par P, P nom 'jphc', D day > (today-10); + Note K WHERE K ecrit_le D, K ecrit_par Y, D day > (today-10), Y nom 'jphc'; + +Forme canonique +``````````````` N = Variable('N') D = Variable('D') @@ -99,4 +115,6 @@ canon1 == canon2 +Exemple 3 +--------- @@ -102,5 +120,4 @@ -------------------------------------------------------------------------------- -Note N WHERE N ecrit_le D, D day > (today -10), N ecrit_par P, P nom 'jphc' or P nom 'ludal'; -Note K WHERE K ecrit_le D, K ecrit_par Y, D day > (today -10), Y nom in ('jphc', 'ludal'); +Formules équivalentes +````````````````````` @@ -106,4 +123,9 @@ + Note N WHERE N ecrit_le D, D day > (today -10), N ecrit_par P, P nom 'jphc' or P nom 'ludal'; + Note K WHERE K ecrit_le D, K ecrit_par Y, D day > (today -10), Y nom in ('jphc', 'ludal'); + +Forme canonique +``````````````` N = Variable('N') D = Variable('D') @@ -146,7 +168,6 @@ - -******************************************************************************* -NE MARCHE PAS: +Problèmes +--------- @@ -152,3 +173,5 @@ -* les expressions RQL +.1 Les paires de formules suivantes sont considérées comme identiques par + l'algorithme ci-dessus alors qu'elles ne le sont pas: + Note N WHERE N ecrit_le D, D day > (today -10), N ecrit_par P, P nom 'jphc' or P nom 'ludal'; @@ -154,4 +177,3 @@ Note N WHERE N ecrit_le D, D day > (today -10), N ecrit_par P, P nom 'jphc' or P nom 'ludal'; -et Note N WHERE N ecrit_le D, D day > (today -10), N ecrit_par P, P nom 'jphc', P nom 'ludal'; @@ -156,4 +178,3 @@ Note N WHERE N ecrit_le D, D day > (today -10), N ecrit_par P, P nom 'jphc', P nom 'ludal'; - Note N WHERE N ecrit_le D, D day > (today -10), N ecrit_par P, P nom 'jphc' or P prenom 'ludal'; @@ -159,4 +180,3 @@ Note N WHERE N ecrit_le D, D day > (today -10), N ecrit_par P, P nom 'jphc' or P prenom 'ludal'; -et Note N WHERE N ecrit_le D, D day > (today -10), N ecrit_par P, P nom 'jphc', P prenom 'ludal'; @@ -161,4 +181,4 @@ Note N WHERE N ecrit_le D, D day > (today -10), N ecrit_par P, P nom 'jphc', P prenom 'ludal'; -seront considérées comme identiques avec ce modèle. +donne comme restriction: @@ -164,7 +184,5 @@ - ---> 'restriction' : {'is' : [(K, 'Note')], 'day': [(D, '> (today-10)')], 'ecrit_le' : [(K, D)], 'ecrit_par' : [(K, Y)], @@ -167,7 +185,7 @@ 'restriction' : {'is' : [(K, 'Note')], 'day': [(D, '> (today-10)')], 'ecrit_le' : [(K, D)], 'ecrit_par' : [(K, Y)], - 'nom_nom' : [(Y, 'jphc', Y, 'ludal')] + 'nom_nom' : [(Y, 'jphc', Y, 'ludal')] } @@ -172,4 +190,3 @@ } -* risque de collision dans les noms de variables non sélectionnées (un - exemple ?). \ No newline at end of file +.2 risque de collision dans les noms de variables non sélectionnées (un exemple ?). \ No newline at end of file diff --git a/doc/specifications_fr.txt b/doc/specifications_fr.txt index 1db3a36561cfb050df246511e972ea406ac3cc30_ZG9jL3NwZWNpZmljYXRpb25zX2ZyLnR4dA==..8c2d1e885e6b95e9f27a69411f7e2dc50d01c074_ZG9jL3NwZWNpZmljYXRpb25zX2ZyLnR4dA== 100644 --- a/doc/specifications_fr.txt +++ b/doc/specifications_fr.txt @@ -1,1 +1,3 @@ +.. -*- coding: utf-8 -*- + ================================================= @@ -1,4 +3,4 @@ ================================================= -Spécification "Relation Query Language" (Hercule) +Spécification "Relation Query Language" (Hercule) ================================================= @@ -3,6 +5,6 @@ ================================================= -:Author: Sylvain Thénault +:Author: Sylvain Thénault :Organization: Logilab :Version: $Revision: 1.10 $ :Date: $Date: 2004-05-18 15:04:13 $ @@ -18,9 +20,9 @@ ---------------- L'objectif est d'avoir un langage mettant l'accent sur le parcours de -relations. A ce titre les attributs seront donc considérés comme des cas -particuliers de relations (au niveau de l'implémentation, l'utilisateur du -langage ne devant quasiment pas voir de différence entre un attribut et une +relations. A ce titre les attributs seront donc considérés comme des cas +particuliers de relations (au niveau de l'implémentation, l'utilisateur du +langage ne devant quasiment pas voir de différence entre un attribut et une relation). @@ -29,6 +31,6 @@ SQL ``` -RQL s'inspire des fonctionnalités de SQL mais se veut à un plus haut niveau -(l'implémentation actuelle de RQL génère du SQL). Pour cela il se limite au +RQL s'inspire des fonctionnalités de SQL mais se veut à un plus haut niveau +(l'implémentation actuelle de RQL génère du SQL). Pour cela il se limite au parcours de relations et introduit des variables. L'utilisateur n'a pas besoin @@ -34,6 +36,6 @@ parcours de relations et introduit des variables. L'utilisateur n'a pas besoin -de connaitre le modèle SQL sous-jacent, mais uniquement le schéma Erudi -définissant l'application. +de connaitre le modèle SQL sous-jacent, mais uniquement le schéma Erudi +définissant l'application. Versa ````` @@ -37,7 +39,7 @@ Versa ````` -Faudrait que je regarde plus en détail, mais voilà déja quelques idées pour -l'instant... Versa_ est le langage ressemblant le plus à ce que nous voulions -faire, mais le modèle de donnée sous-jacent étant du RDF, il y a un certain +Faudrait que je regarde plus en détail, mais voilâ déja quelques idées pour +l'instant... Versa_ est le langage ressemblant le plus à ce que nous voulions +faire, mais le modèle de donnée sous-jacent étant du RDF, il y a un certain nombre de choses tels que les namespaces ou la manipulation des types RDF qui @@ -43,11 +45,11 @@ nombre de choses tels que les namespaces ou la manipulation des types RDF qui -ne nous intéressent pas. Niveau fonctionnalité, Versa_ est très complet -notamment grâce à de nombreuses fonctions de conversion et de manipulations -des types de base, dont il faudra peut-être s'inspirer à un moment ou à -l'autre. Enfin, La syntaxe est un peu ésotérique. +ne nous intéressent pas. Niveau fonctionnalité, Versa_ est très complet +notamment grâce à de nombreuses fonctions de conversion et de manipulations +des types de base, dont il faudra peut-être s'inspirer à un moment ou à +l'autre. Enfin, La syntaxe est un peu ésotérique. Voir aussi `````````` RDFQL_ @@ -48,10 +50,10 @@ Voir aussi `````````` RDFQL_ -Les différents types de requêtes +Les différents types de requêtes -------------------------------- Recherche @@ -55,5 +57,5 @@ -------------------------------- Recherche - Ce type de requête permet d'extraire des entités ou des attributs d'entités. + Ce type de requête permet d'extraire des entités ou des attributs d'entités. @@ -59,6 +61,6 @@ -Insertion d'entités - Ce type de requête permet d'insérer de nouvelles entités dans la base. On - permettra également la création directe de relations sur les entités - nouvellement créées. +Insertion d'entités + Ce type de requête permet d'insérer de nouvelles entités dans la base. On + permettra également la création directe de relations sur les entités + nouvellement créées. @@ -64,5 +66,5 @@ -Mise à jour d'entités, création de relations - Ce type de requête permet de mettre à jours des entités existantes dans la base, - ou de créer des relations entres des entités existantes. +Mise à jour d'entités, création de relations + Ce type de requête permet de mettre à jours des entités existantes dans la base, + ou de créer des relations entres des entités existantes. @@ -68,6 +70,6 @@ -Suppression d'entités ou de relation - Ce type de requête permet de supprimer des entités et relations existantes dans +Suppression d'entités ou de relation + Ce type de requête permet de supprimer des entités et relations existantes dans la base. @@ -86,7 +88,7 @@ Any X WHERE X eid 53 -- *recherche des documents de type bande dessinée, appartenant à syt et disponible* +- *recherche des documents de type bande dessinée, appartenant à syt et disponible* :: Document X WHERE @@ -90,7 +92,7 @@ :: Document X WHERE - X occurence_of F, F class C, C name 'Bande dessinée', + X occurence_of F, F class C, C name 'Bande dessinée', X owned_by U, U login 'syt', X available true @@ -94,10 +96,10 @@ X owned_by U, U login 'syt', X available true -- *recherche des personnes travaillant pour eurocopter intêressé par la formation* +- *recherche des personnes travaillant pour eurocopter intéressé par la formation* :: Personne P WHERE P travaille_pour S, S nom 'Eurocopter', P interesse_par T, T nom 'formation' @@ -98,13 +100,13 @@ :: Personne P WHERE P travaille_pour S, S nom 'Eurocopter', P interesse_par T, T nom 'formation' -- *recherche des notes de moins de 10 jours écrite par jphc ou ocy* +- *recherche des notes de moins de 10 jours écrites par jphc ou ocy* :: Note N WHERE N ecrit_le D, D day > (today -10), N ecrit_par P, P nom 'jphc' or P nom 'ocy' @@ -105,13 +107,13 @@ :: Note N WHERE N ecrit_le D, D day > (today -10), N ecrit_par P, P nom 'jphc' or P nom 'ocy' -- *recherche des personnes interessées par la formation ou habitant à Paris* +- *recherche des personnes intéressées par la formation ou habitant à Paris* :: Personne P WHERE (P interesse_par T, T nom 'formation') or (P ville 'Paris') @@ -112,12 +114,12 @@ :: Personne P WHERE (P interesse_par T, T nom 'formation') or (P ville 'Paris') -- *Le nom et le prénom de toutes les personnes, triés* +- *Le nom et le prénom de toutes les personnes* :: Any N, P WHERE X is Personne, X nom N, X prenom P @@ -119,14 +121,14 @@ :: Any N, P WHERE X is Personne, X nom N, X prenom P - On remarquera que la selection de plusieurs entités force généralement - l'utilisation de "Any", car la spécification de type s'applique sinon - à toutes les variables séléctionnées. On aurait pu écrire ici + On remarquera que la selection de plusieurs entités force généralement + l'utilisation de "Any", car la spécification de type s'applique sinon + à toutes les variables séléctionnées. On aurait pu écrire ici :: String N, P WHERE X is Personne, X nom N, X prenom P @@ -127,9 +129,9 @@ :: String N, P WHERE X is Personne, X nom N, X prenom P -Insertion d'entités +Insertion d'entités ------------------- @@ -134,7 +136,7 @@ ------------------- -- *insertion d'une nouvelle personne nommée 'bidule'* +- *insertion d'une nouvelle personne nommée 'bidule'* :: INSERT Personne X: X nom 'bidule' @@ -137,9 +139,9 @@ :: INSERT Personne X: X nom 'bidule' -- *insertion d'une nouvelle personne nommée 'bidule', d'une autre nommée 'chouette' et d'une relation 'ami' entre eux* +- *insertion d'une nouvelle personne nommée 'bidule', d'une autre nommée 'chouette' et d'une relation 'ami' entre eux* :: INSERT Personne X, Personne Y: X nom 'bidule', Y nom 'chouette', X ami Y @@ -142,10 +144,10 @@ :: INSERT Personne X, Personne Y: X nom 'bidule', Y nom 'chouette', X ami Y -- *insertion d'une nouvelle personne nommée 'bidule' et d'une relation 'ami' avec une personne existante nommée 'chouette'* +- *insertion d'une nouvelle personne nommée 'bidule' et d'une relation 'ami' avec une personne existante nommée 'chouette'* :: INSERT Personne X: X nom 'bidule', X ami Y WHERE Y nom 'chouette' @@ -147,8 +149,8 @@ :: INSERT Personne X: X nom 'bidule', X ami Y WHERE Y nom 'chouette' -Mise à jour d'entités, création de relations +Mise à jour d'entités, création de relations -------------------------------------------- @@ -153,7 +155,7 @@ -------------------------------------------- -- *renommage de la personne nommée 'bidule' en 'toto', avec modification du prénom* +- *renommage de la personne nommée 'bidule' en 'toto', avec modification du prénom* :: SET X nom 'toto', X prenom 'original' WHERE X is Person, X nom 'bidule' @@ -156,10 +158,10 @@ :: SET X nom 'toto', X prenom 'original' WHERE X is Person, X nom 'bidule' -- *insertion d'une relation de type 'connait' entre les objets reliés par la relation de type 'ami'* +- *insertion d'une relation de type 'connait' entre les objets reliés par la relation de type 'ami'* :: SET X know Y WHERE X ami Y @@ -161,8 +163,8 @@ :: SET X know Y WHERE X ami Y -Suppression d'entités ou de relations +Suppression d'entités ou de relations ------------------------------------- @@ -167,7 +169,7 @@ ------------------------------------- -- *supression de la personne nommé 'toto'* +- *supression de la personne nommé 'toto'* :: DELETE Person X WHERE X nom 'toto' @@ -170,11 +172,11 @@ :: DELETE Person X WHERE X nom 'toto' -- *suppression de toutes les relations de type 'ami' partant de la personne nommée 'toto'* +- *suppression de toutes les relations de type 'ami' partant de la personne nommée 'toto'* :: DELETE X ami Y WHERE X is Person, X nom 'toto' @@ -175,9 +177,9 @@ :: DELETE X ami Y WHERE X is Person, X nom 'toto' -Définition du langage +Définition du langage ===================== @@ -182,4 +184,4 @@ ===================== -Mots clés réservés +Mots clés réservés ------------------ @@ -185,5 +187,5 @@ ------------------ -Les mots clés ne sont pas sensibles à la casse. +Les mots clés ne sont pas sensibles à la casse. :: @@ -197,7 +199,7 @@ Typage ------ -Au niveau de RQL, on ne fait pas de distinction entre entités et attributs. La -valeur d'un attribut est considérée comme une entité d'un type particulier (voir -ci-dessous), lié à une (vrai) entité par une relation du nom de l'attribut. +Au niveau de RQL, on ne fait pas de distinction entre entités et attributs. La +valeur d'un attribut est considérée comme une entité d'un type particulier (voir +ci-dessous), lié à une (vraie) entité par une relation du nom de l'attribut. @@ -203,3 +205,3 @@ -Il existe un type spécial **Any**, revenant à ne pas spécifier de type. +Il existe un type spécial **Any**, revenant à ne pas spécifier de type. @@ -205,4 +207,4 @@ -On peut contraindre les types possibles pour une variable à l'aide de la -relation spéciale **is**. +On peut contraindre les types possibles pour une variable à l'aide de la +relation spéciale **is**. @@ -208,8 +210,8 @@ -Le(s) type(s) possible(s) pour chaque variable est déduit du schema en -fonction des contraintes exprimées ci-dessus et à l'aide des relations entre +Le(s) type(s) possible(s) pour chaque variable est déduit du schema en +fonction des contraintes exprimées ci-dessus et à l'aide des relations entre chaque variable. Types de bases `````````````` @@ -211,11 +213,11 @@ chaque variable. Types de bases `````````````` -Les types de bases supportés sont les chaines (entre doubles ou simples quotes), -les nombres entiers ou flottant (le séparateur étant le '.'), les dates et les -booléens. On s'attend donc à recevoir un schéma dans lequel les types String, -Int, Float, Date et Boolean sont définis. +Les types de bases supportés sont les chaines (entre doubles ou simples quotes), +les nombres entiers ou flottant (le séparateur étant le '.'), les dates et les +booléens. On s'attend donc à recevoir un schéma dans lequel les types String, +Int, Float, Date et Boolean sont définis. @@ -220,5 +222,5 @@ -Opérateurs +Opérateurs ---------- @@ -223,8 +225,8 @@ ---------- -Opérateurs logiques +Opérateurs logiques ``````````````````` :: AND, OR, ',' @@ -226,8 +228,8 @@ ``````````````````` :: AND, OR, ',' -"," est équivalent à "AND" mais avec la plus petite priorité parmi les -opérateurs logiques (voir `Priorité des opérateurs`_). +"," est équivalent à "AND" mais avec la plus petite priorité parmi les +opérateurs logiques (voir `Priorité des opérateurs`_). @@ -233,7 +235,7 @@ -Opérateurs mathématiques +Opérateurs mathématiques ```````````````````````` :: +, -, *, / @@ -235,11 +237,11 @@ ```````````````````````` :: +, -, *, / -Opérateurs de comparaison +Opérateurs de comparaison ````````````````````````` :: <, <=, >=, >, ~=, IN, LIKE @@ -241,7 +243,7 @@ ````````````````````````` :: <, <=, >=, >, ~=, IN, LIKE -"LIKE" est équivalent à "~=" +"LIKE" est équivalent à "~=" @@ -247,5 +249,8 @@ -Priorité des opérateurs +XXX nico: A truc <> 'titi' ne serait-il pas plus pratique que NOT A +truc 'titi' ? + +Priorité des opérateurs ``````````````````````` 1. '*', '/' @@ -262,7 +267,7 @@ Fonctions --------- -Fonctions d'aggrégat +Fonctions d'aggrégat ```````````````````` :: @@ -277,9 +282,9 @@ Grammaire BNF ------------- -Les éléments terminaux sont en majuscules, les non-terminaux en minuscule. La -valeur des éléments terminaux (entre quotes) correspond à une expression -régulière Python. +Les éléments terminaux sont en majuscules, les non-terminaux en minuscule. La +valeur des éléments terminaux (entre quotes) correspond à une expression +régulière Python. :: statement ::= (select | delete | insert | update) ';' @@ -358,12 +363,9 @@ Tri et groupes `````````````` -- pour les requêtes groupées (i.e. avec une clause GROUPBY), toutes les - variables sélectionnée doivent être groupées - -- pour les requête ordonnées (i.e. avec une clause ORDERBY), toutes les - variables ordonnéees doivent être sélectionnées XXX plus vrai, non ? +- pour les requêtes groupées (i.e. avec une clause GROUPBY), toutes les + variables sélectionnées doivent être groupées - pour grouper ou/et trier sur les attributs on peut faire : "X,L user U, U login L GROUPBY L,X ORDERBY L" @@ -366,7 +368,7 @@ - pour grouper ou/et trier sur les attributs on peut faire : "X,L user U, U login L GROUPBY L,X ORDERBY L" -- si la méthode de tri (SORT_METHOD) n'est pas précisé, alors le tri est +- si la méthode de tri (SORT_METHOD) n'est pas précisée, alors le tri est ascendant. @@ -371,5 +373,5 @@ ascendant. -Négation +Négation ```````` @@ -374,8 +376,8 @@ ```````` -une requête du type "Document X where not X owned_by U" revient à dire "les -documents n'ayant pas de relation 'owned_by'". La variable U ne doit être -utilisée à aucun autre endroit. +Une requête du type "Document X where not X owned_by U" revient à dire "les +documents n'ayant pas de relation 'owned_by'". La variable U ne doit être +utilisée à aucun autre endroit. @@ -379,6 +381,6 @@ -Implémentation +Implémentation ============== @@ -383,5 +385,5 @@ ============== -Représentation interne (arbre syntaxique) +Représentation interne (arbre syntaxique) ----------------------------------------- @@ -386,5 +388,5 @@ ----------------------------------------- -L'arbre de recherche ne contient pas les variables sélectionnées (i.e. on n'y +L'arbre de recherche ne contient pas les variables sélectionnées (i.e. on n'y trouve que ce qui suit le "WHERE"). @@ -389,6 +391,6 @@ trouve que ce qui suit le "WHERE"). -L'arbre d'insertion ne contient pas les variables insérée ni les relations -définies sur ces variables (i.e. on n'y trouve que ce qui suit le +L'arbre d'insertion ne contient pas les variables insérées ni les relations +définies sur ces variables (i.e. on n'y trouve que ce qui suit le "WHERE"). @@ -393,5 +395,5 @@ "WHERE"). -L'arbre de suppression ne contient pas les variables ou relations supprimées +L'arbre de suppression ne contient pas les variables ou relations supprimées (i.e. on n'y trouve que ce qui suit le "WHERE"). @@ -396,6 +398,6 @@ (i.e. on n'y trouve que ce qui suit le "WHERE"). -L'arbre de màj ne contient pas les variables ou relations mises à jour +L'arbre de mise à jour ne contient pas les variables ou relations mises à jour (i.e. on n'y trouve que ce qui suit le "WHERE"). :: @@ -428,7 +430,7 @@ Remarques --------- -- l'implémentation actuelle ne supporte pas de lier deux relations ayant comme - type de relation 'is' avec un OR. Je ne pense pas que la négation ne - soit supportée non plus sur ce type de relation (à confirmer). +- l'implémentation actuelle ne supporte pas de lier deux relations ayant comme + type de relation 'is' avec un OR. Je ne pense pas que la négation ne + soit supportée non plus sur ce type de relation (à confirmer). @@ -434,5 +436,5 @@ -- les relations définissant les variables doivent être à gauche de celles les +- les relations définissant les variables doivent être à gauche de celles les utilisant. Par exemple :: Point P where P abs X, P ord Y, P value X+Y @@ -459,9 +461,9 @@ et certainement d'autres choses... -Un inconvénient est que pour utiliser ce langage il faut bien connaitre le -schéma utilisé (avec les vrais noms de relations et d'entités, pas ceux affichés -dans l'interface utilisateur). D'un autre coté, on peut pas vraiment contourner +Un inconvénient est que pour utiliser ce langage il faut bien connaitre le +schéma utilisé (avec les vrais noms de relations et d'entités, pas ceux affichés +dans l'interface utilisateur). D'un autre coté, on peut pas vraiment contourner cela, et c'est le boulot d'une interface utilisateur de cacher le RQL. @@ -465,6 +467,6 @@ cela, et c'est le boulot d'une interface utilisateur de cacher le RQL. -A réfléchir ------------ +Sujets de réflexion +------------------- @@ -470,6 +472,6 @@ -Il serait pratique de pouvoir exprimer dans le schéma des correspondances de -relations:: +Il serait pratique de pouvoir exprimer dans le schema des correspondances de +relations (règles non récursives):: Document class Type <-> Document occurence_of Fiche class Type Fiche class Type <-> Fiche collection Collection class Type @@ -477,7 +479,7 @@ Ainsi 1. devient:: Document X where - X class C, C name 'Bande dessinée', + X class C, C name 'Bande dessinée', X owned_by U, U login 'syt', X available true @@ -481,5 +483,5 @@ X owned_by U, U login 'syt', X available true -Je ne suis cependant pas sûr qu'il faille gérer ça au niveau de RQL... +Je ne suis cependant pas sûr qu'il faille gérer ça au niveau de RQL... @@ -485,5 +487,5 @@ -Il faudrait aussi une relation spéciale 'anonyme'. +Il faudrait aussi une relation spéciale 'anonyme'. diff --git a/doc/tutoriel_fr.txt b/doc/tutoriel_fr.txt index 1db3a36561cfb050df246511e972ea406ac3cc30_ZG9jL3R1dG9yaWVsX2ZyLnR4dA==..8c2d1e885e6b95e9f27a69411f7e2dc50d01c074_ZG9jL3R1dG9yaWVsX2ZyLnR4dA== 100644 --- a/doc/tutoriel_fr.txt +++ b/doc/tutoriel_fr.txt @@ -1,3 +1,5 @@ +.. -*- coding: utf-8 -*- + ============================================ Tutoriel "Relation Query Language" (Hercule) ============================================ @@ -9,8 +11,8 @@ Schema ------ -Nous supposerons dans la suite de ce document que le schéma de -l'application Erudi est le suivant. Les différentes entités +Nous supposerons dans la suite de ce document que le schéma de +l'application est le suivant. Les différentes entités disponibles sont : :Personne: @@ -69,6 +71,6 @@ Societe concerne_par Affaire -Toutes les entités ont un attribut supplémentaire 'eid', permettant -d'identifier chaque instance de manière unique. +Toutes les entités ont un attribut supplémentaire 'eid', permettant +d'identifier chaque instance de manière unique. @@ -74,5 +76,5 @@ -De plus si les métadonnées sont utilisées, vous disposez pour chaque -type d'entité des relations "creation_date", "modification_date" dont -l'objet est une entité de type Dates (il y a un "s" pour ne pas avoir +De plus si les métadonnées sont utilisées, vous disposez pour chaque +type d'entité des relations "creation_date", "modification_date" dont +l'objet est une entité de type Dates (il y a un "s" pour ne pas avoir de conflit avec le type de base "date"), ainsi que de la relation @@ -78,6 +80,6 @@ de conflit avec le type de base "date"), ainsi que de la relation -"owned_by" dont l'objet est une entité de type Euser. Les schemas -standards de ces types d'entités sont les suivants : +"owned_by" dont l'objet est une entité de type Euser. Les schemas +standards de ces types d'entités sont les suivants : :Dates: @@ -99,7 +101,7 @@ web varchar(128) birthday date -Enfin, il existe la relation spéciale "is" permettant de spécifier le +Enfin, il existe la relation spéciale "is" permettant de spécifier le type d'une variable. @@ -114,10 +116,10 @@ Any X WHERE X is Personne ; -.1 *La societé nommé Logilab* +.1 *La societé nommé Logilab* :: Societe S WHERE S nom 'Logilab' ; @@ -118,10 +120,10 @@ :: Societe S WHERE S nom 'Logilab' ; -.2 *Tous les objets ayant un attribut nom commençant par 'Log'* +.2 *Tous les objets ayant un attribut nom commençant par 'Log'* :: @@ -129,7 +131,7 @@ ou Any S WHERE S nom ~= 'Log%' ; -Cette requête peut renvoyer des objets de type personne et de type -société. +Cette requête peut renvoyer des objets de type personne et de type +société. @@ -134,6 +136,6 @@ -.3 *Toutes les personnes travaillant pour la société nommé Logilab* +.3 *Toutes les personnes travaillant pour la société nommé Logilab* :: Personne P WHERE P travaille_pour S, S nom "Logilab" ; @@ -142,7 +144,7 @@ ou Personne P WHERE P travaille_pour "Logilab" ; -La dernière forme fonctionne car "nom" est le premier attribut des -entités de type "Société" +La dernière forme fonctionne car "nom" est le premier attribut des +entités de type "Société" XXX nico: toujours vrai ? @@ -147,6 +149,6 @@ -.4 *Les societés nommées Caesium ou Logilab* +.4 *Les societés nommées Caesium ou Logilab* :: @@ -155,7 +157,7 @@ Societe S WHERE S nom 'Logilab' OR S nom 'Caesium' ; -.5 *Toutes les societés sauf celles nommées Caesium ou Logilab* +.5 *Toutes les societés sauf celles nommées Caesium ou Logilab* :: @@ -164,10 +166,10 @@ Societe S WHERE NOT S nom 'Logilab' AND NOT S nom 'Caesium' ; -.6 *Les objets évalués par la note d'identifiant 43* +.6 *Les objets évalués par la note d'identifiant 43* :: Any X WHERE X evaluee_par N, N eid 43 ; @@ -168,13 +170,13 @@ :: Any X WHERE X evaluee_par N, N eid 43 ; -.7 *Toutes les personnes triés par date de naissance dans l'ordre antechronologique* +.7 *Toutes les personnes triés par date de naissance dans l'ordre antechronologique* :: Any X WHERE X is Personne, X datenaiss D ORDERBY D DESC ; @@ -175,12 +177,12 @@ :: Any X WHERE X is Personne, X datenaiss D ORDERBY D DESC ; -.8 *Toutes les personnes groupées par leur société* +.8 *Toutes les personnes groupées par leur société* :: Personne X WHERE X travaille_pour S GROUPBY S,X ; @@ -182,10 +184,9 @@ :: Personne X WHERE X travaille_pour S GROUPBY S,X ; -On note qu'il faut définir une variable pour s'en servir pour le -groupage. De plus les variables séléctionnée doivent être groupée -(mais les variables groupées ne doivent pas forcément être sélectionnées). - +On note qu'il faut définir une variable pour s'en servir pour le +groupage. De plus les variables séléctionnées doivent être groupées +(mais les variables groupées ne doivent pas forcément être sélectionnées). @@ -191,2 +192,3 @@ +XXX nico: c'est peu utile comme requête @@ -192,3 +194,3 @@ -Exemples avancés +Exemples avancés ---------------- @@ -194,8 +196,8 @@ ---------------- -.0 *Toutes les personnes dont le champ nom n'est pas spécifié (i.e NULL)* +.0 *Toutes les personnes dont le champ nom n'est pas spécifié (i.e NULL)* :: Personne P WHERE P nom NULL ; @@ -196,13 +198,13 @@ :: Personne P WHERE P nom NULL ; -.1 *Toutes les personnes ne travaillant pour aucune société* +.1 *Toutes les personnes qui ne travaillent pour aucune société* :: Personne P WHERE NOT p travaille_pour S ; @@ -203,10 +205,10 @@ :: Personne P WHERE NOT p travaille_pour S ; -.2 *Toutes les sociétés où la personne nommée toto ne travaille pas* +.2 *Toutes les sociétés où la personne nommée toto ne travaille pas* :: @@ -215,10 +217,10 @@ Societe S WHERE NOT 'toto' travaille_pour S ; -.3 *Toutes les entités ayant été modifiées entre aujourd'hui et hier* +.3 *Toutes les entités ayant été modifiées entre aujourd'hui et hier* :: Any X WHERE X modification_date <= today, X modification_date >= today - 1 @@ -219,10 +221,10 @@ :: Any X WHERE X modification_date <= today, X modification_date >= today - 1 -.4 *Toutes les notes n'ayant pas de type et à effectuer dans les 7 jours, triées par date* +.4 *Toutes les notes n'ayant pas de type et à effectuer dans les 7 jours, triées par date* ::