]> matita.cs.unibo.it Git - helm.git/blob - helm/mathql/grammar.txt
ocaml 3.09 transition
[helm.git] / helm / mathql / grammar.txt
1 GRAMMATICA PER QUERY SU DOCUMENTI MATEMATICI
2 MATHEMATICAL QUERY LANGUAGE (MathQL) 
3
4 <query> := <set>                               (* clausola iniziale *)
5
6 <set> :=  ( <set> )                            (* parentesizzazione *)
7        |  <rvar>                               (* var per insieme singoletto 
8                                                   di una risorsa *)
9        |  <svar>                               (* var per insieme di risorse
10                                                   (insieme di valori) *)
11        |  REF <string-set>                     (* oggetto/i referenziato/i da 
12                                                   URI esplicita/e *)
13        |  PATTERN <string-set>                 (* oggetto/i referenziato/i da 
14                                                   URI ottenute da espansione 
15                                                   del pattern *)
16        |  SELECT <rvar> IN <set> WHERE <bool>  (* selezione *)
17        |  LET <svar> BE <set> IN <set>         (* assegnazione a set-var in 
18                                                   contesto *)
19        |  LET <vvar> BE <string-set> IN <set>  (* assegnamento a value-var
20                                                   in contesto*)
21        |  RELATION <refine_op> <quoted-constant-string-path> <set> ATTR <vvar-list>
22                                                (* unione insieme risorse in
23                                                   relazione specificata con le
24                                                   risorse in set, ognuna con 
25                                                   attributi (ATTR) *)
26        |  <set> UNION <set>                    (* unione *)
27        |  <set> INTERSECT <set>                (* intersezione *)
28        |  <set> DIFF <set>                     (* differenza *)
29
30 <refine_op> := ""                              (* relazione (proprieta') *)
31             |  SUB                             (* proprieta' e 
32                                                   sotto-proprieta' *)
33             |  SUPER                           (* proprieta' e 
34                                                   super-proprieta' *)
35
36 <quoted-constant-string-path> := <quoted-constant-string> 
37                                                (* relazione (proprieta') *)
38                               |  <quoted-constant-string> "/" <quoted-constant-string-path>
39                                                (* insieme di stringhe:
40                                                   proprieta' strutturata *)
41
42 <vvar-list> := <vvar>
43             |  <vvar> , <vvar-list>
44
45
46 <bool> := ( <bool> )                           (* parentesizzazione *)
47        |  TRUE                                 (* vero *)
48        |  FALSE                                (* falso *)
49        |  NOT <bool>                           (* negazione *)
50        |  <bool> AND <bool>                    (* congiunzione *)
51        |  <bool> OR <bool>                     (* disgiunzione *)
52        |  <string-set> EQ <string-set>         (* uguaglianza tra insiemi 
53                                                   stringhe (case sensitive) *)
54        |  <string-set> SUB <string-set>        (* operazione di sottoinsieme 
55                                                   tra insiemi stringhe *)
56        |  <string-set> MEET <string-set>       (* operazione di meet tra 
57                                                   insiemi stringhe *)
58        |  EX <bool>                            (* existential on attributes
59                                                   of references *)
60 <string-set> := ( <string-set> )               (* parentesizzazione *)
61              |  {}                             (* insieme vuoto*)
62              |  <quoted-constant-string>       (* stringa singoletto *)
63              |  {<quoted-constant-string-list>}(* insieme stringhe *)
64              |  REFOF <set>                    (* insieme riferimenti *)
65              |  <rvar>.<vvar>                  (* variabile per insieme
66                                                   stringhe, relativa a 
67                                                   riferimento *)
68              |  <function> <quoted-constant-string> <string-set> 
69                                                (* applicazione di funzione
70                                                   specificata a riferimento
71                                                   o insiemi di rif. o var*)
72              |  <vvar>                         (* vvar introduced by LET *)
73
74 <quoted-constant-string-list> := <quoted-constant-string>
75                               |  <quoted-constant-string> , <quoted-constant-string-list>                                                 
76                                                    (* lista di stringhe *)
77
78 <function> := FUN                          (* funzione generale *)
79            |  <property>        
80
81 <property> := ATTRIBUTE <refine-op>        (* funzione proprieta': restituisce
82                                               suoi valori (anche strutturati)
83                                               (e delle sotto-proprieta' o 
84                                               super-proprieta' *)
85
86
87 <rvar> := @ <not-reserved-identifier>          (* variabile per riferimento *)
88 <vvar> := $ <not-reserved-identifier>          (* variabile per insiemi 
89                                                   stringhe *)
90 <svar> := % <not-reserved-identifier>          (* variabile per insiemi 
91                                                   riferimenti *)
92
93
94 - Idea di base: grammatica del linguaggio semplice e permissiva (duttile)
95 - MEET e' definito come "esiste almeno un elemento che appartiene 
96   all'interserzione tra due insiemi"
97 - le stringhe sono "case sensitive" 
98 - la funzione non definita sull'argomento restituisce la stringa nulla
99 - le <rvar> si presuppongono essere istanziate come URI references costituite
100   da un URI e da un fragment identifier opzionale complete; i riferimenti 
101   identificano risorse 
102 - Precedenza operatori:
103   NOT (+)  DIFF
104   AND      INTERSECT
105   OR  (-)  UNION
106 - L'ordinamento di default e' quello alfabetico crescente in base al nome 
107   delle rvar
108 - REF aumenta performance perche' NON accede al data base (costoso).
109 - l'argomento di PATTERN ha sintassi di una espressione regolare 
110   POSIX 1003.2-1992
111 - Possibile FUN (<quoted-constant-string>):
112   NAME (* URIREF -> nome_oggetto *)
113 - MEET aumenta performance nel caso si verifichi (a in S) oppure 
114   (b in S) = ({a,b} meet S) perche' valuta S una volta sola
115   Il MEET codifica inoltre l'esistenziale su risorse (URI) in un certo
116   insieme che soddisfa certe condizioni
117 - record <rvar>.<svar> serve per disambiguare nomi uguali di variabili
118 - Operatori (come EQ) hanno nomi abbreviati rispetto ai costrutti del 
119   linguaggio
120 - EX verfica che la sua condizione sia vera per almeno un insieme di attributi
121   associato all'URI in rvar 
122 - Possibili RELATION sono:
123   USE con attributo POSITION (riferimenti backward) e valori MAINHYPOTHESIS, 
124                     HYPOTHESIS, MAINCONCLUSION, CONCLUSION, BODY
125   USEBY con attributo POSITION (riferimenti forward) e valori MAINHYPOTHESIS, 
126                     HYPOTHESIS, MAINCONCLUSION, CONCLUSION, BODY
127   CONSTRUCTORS
128   INTHEORY con attributo ITEMTYPE (riferimenti oggetti contenuti in teorie)
129   THEORYREFTO con attributo ITEMTYPE (riferimenti teorie referenti a oggetti)
130 - <string-set> invece di <set> come argomento di <function> poiche' la REF non
131   e' piu' restrittiva su argomento/i e quindi e' inutile imporne l'uso quando
132   si passano i riferimenti alle funzioni. Con <string-set> l'utente e' libero
133   di passare direttamente le stringhe dei riferimenti.
134 - Il costrutto di ordinamento:
135   <set> SORTEDBY <function> <order>   (* unione insieme ordinato secondo
136                                          valore funzione e ordine *)
137   <order>:= DESC                      (* ordinamento decrescente *)
138          |  ASC                       (* ordinamento crescente *) 
139   perde di senso nel caso di metadati, poiche' per definizione le proprieta' 
140   in RDF possono essere ripetute quindi restituiscono (come anche le funzioni 
141   in generale) valori multipli per ogni riferimento (ambiguita' nell'ordine)
142 - Possibili proprieta' (<quoted-constant-string>):
143   le DC: TITLE, CONTRIBUTOR, CREATOR, PUBLISHER, SUBJECT, DESCRIPTION, DATE,
144   TYPE, FORMAT, IDENTIFIER, LANGUAGE, RELATION, SOURCE, COVERAGE, RIGHTS, 
145   RIGHTS; and INSTITUTION, CONTACT, FIRSTVERSION, MODIFIED, THEORY
146 - Il concetto di Classe, sottoclasse, superclasse, puo' essere visto come una
147   particolare proprieta' (type o tipo) di una risorsa, e quindi codificabile
148   da RELATION