]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/mathql/grammar.txt
Modified Files:
[helm.git] / helm / mathql / grammar.txt
index 699a6f20a3489b51d596c041c07865cf133b51c1..4a54af0702c7df4c19f9dd347ab1ea41884030d3 100644 (file)
@@ -3,16 +3,16 @@ MATHEMATICAL QUERY LANGUAGE (MathQL)
 
 <query> := <list>                              (* clausola iniziale *)
 
-<list> := ( <list> )                           (* parentesizazione *)
+<list> := <empty-string>                      (* lista vuota *)
+       |  ( <list> )                           (* parentesizazione *)
        |  <rvar>                              (* lista singoletto var 
                                                  (lista valori) *)
        |  <lvar>                              (* lista singoletto var
                                                  (lista valori) *)
-       |  REFERENCE <reference>                (* oggetto referenziato da
-                                                 pattern costante *)
+       |  REFERENCE <reference>                (* oggetto referenziato da URI
+                                                 esplicita *)
        |  PATTERN <pattern>                    (* espansione del pattern *)
        |  SELECT <rvar> IN <list> WHERE <bool> (* selezione *)
-       |  EXISTS <rvar> IN <list> WHERE <bool> (* esistenziale *)
        |  LET <lvar> BE <list> IN <list>       (* assegnazione a var in 
                                                   contesto *)
        |  USE <list> POSITION <svar>           (* unione lista backward *)
@@ -32,6 +32,12 @@ MATHEMATICAL QUERY LANGUAGE (MathQL)
        |  <list> UNION <list>                  (* unione *)
        |  <list> INTERSECT <list>              (* intersezione *)
        |  <list> DIFF <list>                   (* differenza *)
+       |  MINIMIZE <list>                     (* minimizzazione del numero
+                                                 elementi della lista *)
+       |  <list> SORTEDBY <function> <order>   (* unione lista ordinata secondo
+                                                  valore funzione e ordine *)
+<order>:= DESC                                 (* ordinamento decrescente *)
+       |  ASC                                 (* ordinamento crescente *) 
 
 <bool> := ( <bool> )                           (* parentesizzazione *)
        |  TRUE                                 (* vero *)
@@ -42,6 +48,7 @@ MATHEMATICAL QUERY LANGUAGE (MathQL)
        |  <string> IS <string>                 (* case sensitive matching *)
        |  <list> SETEQUAL <list>               (* uguaglianza tra liste *)
        |  <list> SUBSET <list>                (* operazione di sottoinsieme *)
+       |  EXISTS <rvar> IN <list>             (* esistenziale *)
 
 <string> := <'-quoted-constant-string>         (* costante letterale *)
          |  MAINHYPOTHESIS | HYPOTHESIS        (* costanti simboliche *)
@@ -90,13 +97,13 @@ MATHEMATICAL QUERY LANGUAGE (MathQL)
 <svar> := $ <not-reserved-identifier>          (* variabile per stringhe *)
 <lvar> := % <not-reserved-identifier>          (* variabile per liste *)
 
-- () = lista vuota (?)
+- query vuota e' caso patologico: non si puo' verificare
 - le stringhe sono "case sensitive" 
 - la funzione non definita sull'argomento restituisce la stringa nulla
 - le <rvar> si presuppongono essere istanziate come URI references costituite
   da un URI e da un fragment identifier opzionale complete; i riferimenti 
   identificano risorse 
-- ogni binding lega una variabile libera (nuova
+- ogni binding lega una variabile libera (nomi nuovi
 - Precedenza operatori:
   NOT (+)  DIFF
   AND      INTERSECT
@@ -111,6 +118,7 @@ MATHEMATICAL QUERY LANGUAGE (MathQL)
   teorema ci sono? 
 - L'ordinamento di default e' quello alfabetico crescente in base al nome 
   delle rvar
+- REFERENCE aumenta performance perche' NON accede al data base (costoso).
 - Note su <pattern>
   Contiene un'espressione regolare per selezionare delle "reference" 
   (cioe` delle uri eventualmente seguite da un fragment identifier)
@@ -130,22 +138,17 @@ MATHEMATICAL QUERY LANGUAGE (MathQL)
 
   "body"     parte compresa fra le occorrenze di ":/" e "#1" escluse
   "fragment" parte successiva all'occorrenza "#1"
-- FUTURO: operatore di ordinamento sul risultato finale della query.
-  <query> SORTEDBY <order> <function>   (* unione lista ordinata secondo
-                                           ordine e valore funzione *)
-  <order>    := DESC                           (* ordinamento decrescente *)
-            |  ASC                            (* ordinamento crescente *)     
-  DTD:
-  <!ENTITY % order '(ascendant|descendant)'>
-  <!ELEMENT Query %queryexpr;>
-  <!ELEMENT SortBy (Query, SortField)>
-  <!ELEMENT SortField %functexpr;>
-  <!ATTLIST SortField 
-            order %order; #IMPLIED>
+- Condizioni associate alla var dell'esisteziale possono essere espresse
+  nella clausola WHERE di un SELECT nell'argomento <list> dell'EXISTS.
 - RILASSAMENTO degli operatori UNION e INTERSECT. Operatori fuzzy con 
   introduzione di pesi associati ai risultati.
 - VALUEOF restituisce il valore o, ricorsivamente sulla struttura, i valori 
   (delle proprieta' delle classi di valori) della proprieta' passatagli. 
   Problema: e' necessario gestire sia i nomi delle classi (costrutti TYPEOF) 
   sia i nomi delle proprieta' (menu a tendina di suggerimenti all'utente in 
-  base agli Schemi RDF relativi ai dati).
\ No newline at end of file
+  base agli Schemi RDF relativi ai dati).
+- L'algoritmo che implementa MINIMIZE puo' ad esempio eliminare le entrate
+  URI+insieme_di_attributi duplicate oppure le entrate con URI ripetute 
+  accorpando i diversi insieme_di_attributi per l'URI in un unica entrata 
+  della lista.
\ No newline at end of file