]> matita.cs.unibo.it Git - helm.git/blob - helm/mathql/core_grammar.txt
65c6cbe8d4cd4dcf60be61438a01f9f8d15dd16b
[helm.git] / helm / mathql / core_grammar.txt
1 GRAMMATICA PER QUERY SU DOCUMENTI MATEMATICI
2         VERSIONE IMPLEMENTATA
3 MATHEMATICAL QUERY LANGUAGE (MathQL) 
4
5 <query> := <list>                              (* clausola iniziale *)
6
7 <list> := ( <list> )                           (* parentesizazione *)
8        |  <rvar>                               (* lista singoletto var 
9                                                   (lista valori) *)
10        |  <lvar>                               (* lista singoletto var
11                                                   (lista valori) *)
12        |  REFERENCE <reference>                (* oggetto referenziato da URI
13                                                   esplicita *)
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 
17                                                   contesto *)
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 *) 
26
27 <bool> := ( <bool> )                           (* parentesizzazione *)
28        |  TRUE                                 (* vero *)
29        |  FALSE                                (* falso *)
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 *)
36
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 *)
43          
44 <function> := NAME                             (* URIREF -> nome_oggetto *)
45            |  TITLE                            (* URIREF -> valore_prop_DC *)
46            |  CONTRIBUTOR
47            |  CREATOR
48            |  PUBLISHER
49            |  SUBJECT
50            |  DESCRIPTION
51            |  DATE
52            |  TYPE
53            |  FORMAT
54            |  IDENTIFIER
55            |  LANGUAGE
56            |  RELATION
57            |  SOURCE
58            |  COVERAGE
59            |  RIGHTS
60            |  INSTITUTION
61            |  CONTACT
62            |  FIRSTVERSION
63            |  MODIFIED
64
65 <pattern> := <"-quoted-constant-string>        (* pattern costante *)
66 <reference> := <'-quoted-constant-string>      (* riferimento costante *)
67
68 <rvar> := <not-reserved-identifier>            (* variabile per riferimenti *)
69 <svar> := $ <not-reserved-identifier>          (* variabile per stringhe *)
70 <lvar> := % <not-reserved-identifier>          (* variabile per liste *)
71
72
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 
77   identificano risorse 
78 - ogni binding lega una variabile libera (nomi nuovi) 
79 - Precedenza operatori:
80   NOT (+)  DIFF
81   AND      INTERSECT
82   OR  (-)  UNION
83 - L'ordinamento di default e' quello alfabetico crescente in base al nome 
84   delle rvar
85 - REFERENCE aumenta performance perche' NON accede al data base (costoso).
86 - Note su <pattern>
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:
90
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
96
97   costrutto        puo' appareire in
98   ?                "body"
99   *                dovunque
100   **               "body" e "fragment"
101   altro carattere  dovunque
102
103   "body"     parte compresa fra le occorrenze di ":/" e "#1" escluse
104   "fragment" parte successiva all'occorrenza "#1"