1 GRAMMATICA PER QUERY SU DOCUMENTI MATEMATICI
3 MATHEMATICAL QUERY LANGUAGE (MathQL)
5 <query> := <list> (* clausola iniziale *)
7 <list> := ( <list> ) (* parentesizazione *)
8 | <rvar> (* lista singoletto var
10 | <lvar> (* lista singoletto var
12 | REFERENCE <reference> (* oggetto referenziato da URI
14 | PATTERN <pattern> (* espansione del pattern *)
15 | SELECT <rvar> IN <list> WHERE <bool> (* selezione *)
16 | LET <lvar> BE <list> IN <list> (* assegnazione a var in
18 | USE <list> POSITION <svar> (* unione lista backward *)
19 | USEDBY <list> POSITION <svar> (* unione lista forward *)
20 | <list> UNION <list> (* unione *)
21 | <list> INTERSECT <list> (* intersezione *)
22 | <list> SORTEDBY <function> <order> (* unione lista ordinata secondo
23 valore funzione e ordine *)
24 <order>:= DESC (* ordinamento decrescente *)
25 | ASC (* ordinamento crescente *)
27 <bool> := ( <bool> ) (* parentesizzazione *)
30 | NOT <bool> (* negazione *)
31 | <bool> AND <bool> (* congiunzione *)
32 | <bool> OR <bool> (* disgiunzione *)
33 | <string> IS <string> (* case sensitive matching *)
34 | <list> SETEQUAL <list> (* uguaglianza tra liste *)
35 | <list> SUBSET <list> (* operazione di sottoinsieme *)
37 <string> := <'-quoted-constant-string> (* costante letterale *)
38 | MAINHYPOTHESIS | HYPOTHESIS (* costanti simboliche *)
39 | MAINCONCLUSION | CONCLUSION | BODY
40 | <svar> (* variabile *)
41 | <rvar> (* variabile *)
42 | <function> <rvar> (* applicazione di funzione *)
44 <function> := NAME (* URIREF -> nome_oggetto *)
45 | TITLE (* URIREF -> valore_prop_DC *)
65 <pattern> := <"-quoted-constant-string> (* pattern costante *)
66 <reference> := <'-quoted-constant-string> (* riferimento costante *)
68 <rvar> := <not-reserved-identifier> (* variabile per riferimenti *)
69 <svar> := $ <not-reserved-identifier> (* variabile per stringhe *)
70 <lvar> := % <not-reserved-identifier> (* variabile per liste *)
73 - le stringhe sono "case sensitive"
74 - la funzione non definita sull'argomento restituisce la stringa nulla
75 - le <rvar> si presuppongono essere istanziate come URI references costituite
76 da un URI e da un fragment identifier opzionale complete; i riferimenti
78 - ogni binding lega una variabile libera (nomi nuovi)
79 - Precedenza operatori:
83 - L'ordinamento di default e' quello alfabetico crescente in base al nome
85 - REFERENCE aumenta performance perche' NON accede al data base (costoso).
87 Contiene un'espressione regolare per selezionare delle "reference"
88 (cioe` delle uri eventualmente seguite da un fragment identifier)
89 L'espressione regolare contiene i seguenti costrutti:
91 costrutto semanticamente fa match con
92 ? un singolo carattere diverso da / # :
93 * la piu' lunga sottostringa che non contiene / # :
94 ** la piu' lunga sottostringa che non contiene # :
95 altro carattere solo se' stesso
97 costrutto puo' appareire in
100 ** "body" e "fragment"
101 altro carattere dovunque
103 "body" parte compresa fra le occorrenze di ":/" e "#1" escluse
104 "fragment" parte successiva all'occorrenza "#1"