]> matita.cs.unibo.it Git - helm.git/blob - helm/mathql/grammar.txt
Modified Files:
[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> := {}                                 (* insieme vuoto*)
61              |  <quoted-constant-string>       (* stringa singoletto *)
62              |  {<quoted-constant-string-list>}(* insieme stringhe *)
63              |  REFOF <set>                    (* insieme riferimenti *)
64              |  <rvar>.<vvar>                  (* variabile per insieme
65                                                   stringhe, relativa a 
66                                                   riferimento *)
67              |  <function> <quoted-constant-string> <string-set> 
68                                                (* applicazione di funzione
69                                                   specificata a riferimento
70                                                   o insiemi di rif. o var*)
71              |  <vvar>                         (* vvar introduced by LET *)
72
73 <quoted-constant-string-list> := <quoted-constant-string>
74                               |  <quoted-constant-string> , <quoted-constant-string-list>                                                 
75                                                    (* lista di stringhe *)
76
77 <function> := FUN                          (* funzione generale *)
78            |  <property>        
79
80 <property> := ATTRIBUTE <refine-op>        (* funzione proprieta': restituisce
81                                               suoi valori (anche strutturati)
82                                               (e delle sotto-proprieta' o 
83                                               super-proprieta' *)
84
85
86 <rvar> := @ <not-reserved-identifier>          (* variabile per riferimento *)
87 <vvar> := $ <not-reserved-identifier>          (* variabile per insiemi 
88                                                   stringhe *)
89 <svar> := % <not-reserved-identifier>          (* variabile per insiemi 
90                                                   riferimenti *)
91
92
93 - Idea di base: grammatica del linguaggio semplice e permissiva (duttile)
94 - MEET e' definito come "esiste almeno un elemento che appartiene 
95   all'interserzione tra due insiemi"
96 - le stringhe sono "case sensitive" 
97 - la funzione non definita sull'argomento restituisce la stringa nulla
98 - le <rvar> si presuppongono essere istanziate come URI references costituite
99   da un URI e da un fragment identifier opzionale complete; i riferimenti 
100   identificano risorse 
101 - Precedenza operatori:
102   NOT (+)  DIFF
103   AND      INTERSECT
104   OR  (-)  UNION
105 - L'ordinamento di default e' quello alfabetico crescente in base al nome 
106   delle rvar
107 - REF aumenta performance perche' NON accede al data base (costoso).
108 - l'argomento di PATTERN ha sintassi di una espressione regolare 
109   POSIX 1003.2-1992
110 - Possibile FUN (<quoted-constant-string>):
111   NAME (* URIREF -> nome_oggetto *)
112 - MEET aumenta performance nel caso si verifichi (a in S) oppure 
113   (b in S) = ({a,b} meet S) perche' valuta S una volta sola
114   Il MEET codifica inoltre l'esistenziale su risorse (URI) in un certo
115   insieme che soddisfa certe condizioni
116 - record <rvar>.<svar> serve per disambiguare nomi uguali di variabili
117 - Operatori (come EQ) hanno nomi abbreviati rispetto ai costrutti del 
118   linguaggio
119 - EX verfica che la sua condizione sia vera per almeno un insieme di attributi
120   associato all'URI in rvar 
121 - Possibili RELATION sono:
122   USE con attributo POSITION (riferimenti backward) e valori MAINHYPOTHESIS, 
123                     HYPOTHESIS, MAINCONCLUSION, CONCLUSION, BODY
124   USEBY con attributo POSITION (riferimenti forward) e valori MAINHYPOTHESIS, 
125                     HYPOTHESIS, MAINCONCLUSION, CONCLUSION, BODY
126   CONSTRUCTORS
127   INTHEORY con attributo ITEMTYPE (riferimenti oggetti contenuti in teorie)
128   THEORYREFTO con attributo ITEMTYPE (riferimenti teorie referenti a oggetti)
129 - <string-set> invece di <set> come argomento di <function> poiche' la REF non
130   e' piu' restrittiva su argomento/i e quindi e' inutile imporne l'uso quando
131   si passano i riferimenti alle funzioni. Con <string-set> l'utente e' libero
132   di passare direttamente le stringhe dei riferimenti.
133 - Il costrutto di ordinamento:
134   <set> SORTEDBY <function> <order>   (* unione insieme ordinato secondo
135                                          valore funzione e ordine *)
136   <order>:= DESC                      (* ordinamento decrescente *)
137          |  ASC                       (* ordinamento crescente *) 
138   perde di senso nel caso di metadati, poiche' per definizione le proprieta' 
139   in RDF possono essere ripetute quindi restituiscono (come anche le funzioni 
140   in generale) valori multipli per ogni riferimento (ambiguita' nell'ordine)
141 - Possibili proprieta' (<quoted-constant-string>):
142   le DC: TITLE, CONTRIBUTOR, CREATOR, PUBLISHER, SUBJECT, DESCRIPTION, DATE,
143   TYPE, FORMAT, IDENTIFIER, LANGUAGE, RELATION, SOURCE, COVERAGE, RIGHTS, 
144   RIGHTS; and INSTITUTION, CONTACT, FIRSTVERSION, MODIFIED, THEORY
145 - Il concetto di Classe, sottoclasse, superclasse, puo' essere visto come una
146   particolare proprieta' (type o tipo) di una risorsa, e quindi codificabile
147   da RELATION