]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/mathql/grammar.txt
mathQL.ml updated
[helm.git] / helm / mathql / grammar.txt
index 03f6a2c66df1553a9abbfabbb41ebfc5d904b08a..4a54af0702c7df4c19f9dd347ab1ea41884030d3 100644 (file)
@@ -1,42 +1,67 @@
-GRAMMATICA PER QUERY SU DOCUMENTI MATEMATICI- VERSIONE 2002-04-19 #1Irene
+GRAMMATICA PER QUERY SU DOCUMENTI MATEMATICI
 MATHEMATICAL QUERY LANGUAGE (MathQL) 
 
 <query> := <list>                              (* clausola iniziale *)
 
-<list> := ( <list> )                           (* parentesizazione *)
-       |  <list> UNION <list>                  (* unione *)
-       |  <list> INTERSECT <list>              (* intersezione *)
-       |  <list> DIFF <list>                   (* differenza *)
-       |  <list> SORTEDBY <order>
-       |  SELECT <pvar> IN <list> WHERE <bool> (* selezione *)
-       |  EXISTS <pvar> IN <list> WHERE <bool> (* esistenziale *)
+<list> := <empty-string>                      (* lista vuota *)
+       |  ( <list> )                           (* parentesizazione *)
+       |  <rvar>                              (* lista singoletto var 
+                                                 (lista valori) *)
+       |  <lvar>                              (* lista singoletto var
+                                                 (lista valori) *)
+       |  REFERENCE <reference>                (* oggetto referenziato da URI
+                                                 esplicita *)
+       |  PATTERN <pattern>                    (* espansione del pattern *)
+       |  SELECT <rvar> IN <list> WHERE <bool> (* selezione *)
+       |  LET <lvar> BE <list> IN <list>       (* assegnazione a var in 
+                                                  contesto *)
        |  USE <list> POSITION <svar>           (* unione lista backward *)
        |  USEDBY <list> POSITION <svar>        (* unione lista forward *)
-       |  CONTRUCTORS <list>
-       |  PATTERN <pattern>                    (* espansione del pattern *)
-       |  INTHEORY <list> ITEMTYPE <svar>      (* unione oggetti lista teorie *)
+       |  CONTRUCTORS <list>                   (* unione costruttori della 
+                                                 lista oggetti*)
+       |  INTHEORY <list> ITEMTYPE <svar>      (* unione oggetti lista 
+                                                 teorie *)
        |  THEORYREFTO <list>                   (* unione teorie che fanno 
                                                  riferimento a lista oggetti *)
+       |  <list> OFTYPE <svar>                (* unione oggetti in base a 
+                                                  classi RDF *)
+       |  <list> OFSUPERTYPE <svar>           (* unione oggetti in base a 
+                                                  classi e loro superclassi *)
+       |  <list> OFSUBTYPE <svar>             (* unione oggetti in base a 
+                                                  classi e loro sottoclassi *)
+       |  <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> )                           (* parentesizazione *)
-       |  <bool> AND <bool>                    (* congiunzione *)
-       |  <bool> OR <bool>                     (* disgiunzione *)
-       |  NOT <bool>                           (* negazione *)
+<bool> := ( <bool> )                           (* parentesizzazione *)
        |  TRUE                                 (* vero *)
        |  FALSE                                (* falso *)
+       |  NOT <bool>                           (* negazione *)
+       |  <bool> AND <bool>                    (* congiunzione *)
+       |  <bool> OR <bool>                     (* disgiunzione *)
        |  <string> IS <string>                 (* case sensitive matching *)
-       
-<pattern> := <quoted-constant-string>          (* pattern costante *)
-          
-<string> := <quoted-constant-string>           (* costante letterale *)
-         |  CONCLUSION | HYPOTHESIS | BODY     (* costanti simboliche *)
-         |  MAINCONCLUSION | MAINHYPOTHESIS
-         |  <pvar>                             (* variabile *)
+       |  <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 *)
+         |  MAINCONCLUSION | CONCLUSION | BODY 
         |  <svar>                             (* variabile *)
-        |  <function> <pvar>                  (* applicazione di funzione *)
+         |  <rvar>                             (* variabile *)
+        |  <function> <rvar>                  (* applicazione di funzione *)
         
-<function> := NAME                            (* pvar -> nome_oggetto *)
-           |  TITLE                           (* URI -> valore_Prop_DC *)
+<function> := NAME                            (* URIREF -> nome_oggetto *)
+          |  <property>                       (* proprieta' RDF *)
+
+<property> := THEORY                           (* URIREF -> valore_proprieta' *)
+           |  TITLE                           (* URIREF -> valore_prop_DC *)
            |  CONTRIBUTOR
            |  CREATOR
            |  PUBLISHER
@@ -55,27 +80,30 @@ MATHEMATICAL QUERY LANGUAGE (MathQL)
           |  CONTACT
           |  FIRSTVERSION
           |  MODIFIED
-           |  <refineop> <function>
+          |  VALUEOF <propname>               (* nome_propr URIREF -> 
+                                                 valore_Proprieta' *)
+           |  <refineprop> <property>
 
-<refineop> := SUB                             (* sub-property of *) 
-           |  SUPER                           (* super-property of *)
+<refineprop> := SUB                           (* proprieta' e sotto-proprieta'
+                                                  di *) 
+             |  SUPER                         (* proprieta' e super-proprieta'
+                                                  di *)
+<propname> := <'-quoted-constant-string>       (* costante letterale *)
 
-<order>    := THEORY                           (* ordinamento alfabetico in 
-                                                  base a teorie e default per
-                                                 gli oggetti *)
-          |  ASC                              (* ordinamento crescente *) 
-          |  DESC                             (* ordinamento decrescente *) 
-          |  KEY                              (* ordinamento in base a parole
-                                                  chiave o soggetto *)
+<pattern> := <"-quoted-constant-string>        (* pattern costante *)
+<reference> := <'-quoted-constant-string>      (* riferimento costante *)
 
-<pvar> := <not-reserved-identifier>            (* variabile per pattern  *)
+<rvar> := <not-reserved-identifier>            (* variabile per riferimenti *)
 <svar> := $ <not-reserved-identifier>          (* variabile per stringhe *)
+<lvar> := % <not-reserved-identifier>          (* variabile per liste *)
 
+- 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 <pvar> si presuppongono essere istanziate come URI complete o
-  URI#xpointer_expression 
-- ogni binding lega una variabile libera (nuova) 
+- 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 (nomi nuovi) 
 - Precedenza operatori:
   NOT (+)  DIFF
   AND      INTERSECT
@@ -89,7 +117,38 @@ MATHEMATICAL QUERY LANGUAGE (MathQL)
   operatori aritmetici e di confronto (< = >). Es. Quante proofs di un certo 
   teorema ci sono? 
 - L'ordinamento di default e' quello alfabetico crescente in base al nome 
-  delle pvar
+  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)
+  L'espressione regolare contiene i seguenti costrutti:
+
+  costrutto        semanticamente fa match con                       
+  ?                un singolo carattere diverso da / # :             
+  *                la piu' lunga sottostringa che non contiene / # : 
+  **               la piu' lunga sottostringa che non contiene # :
+  altro carattere  solo se' stesso
 
+  costrutto        puo' appareire in
+  ?                "body"
+  *                dovunque
+  **               "body" e "fragment"
+  altro carattere  dovunque
 
+  "body"     parte compresa fra le occorrenze di ":/" e "#1" escluse
+  "fragment" parte successiva all'occorrenza "#1"
+- 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).
+- 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