]> 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> := <list>                              (* clausola iniziale *)
5
6 <list> := ( <list> )                           (* parentesizazione *)
7        |  <rvar>                               (* lista singoletto var 
8                                                   (lista valori) *)
9        |  <lvar>                               (* lista singoletto var
10                                                   (lista valori) *)
11        |  REFERENCE <reference>                (* oggetto referenziato da
12                                                   pattern costante *)
13        |  PATTERN <pattern>                    (* espansione del pattern *)
14        |  SELECT <rvar> IN <list> WHERE <bool> (* selezione *)
15        |  EXISTS <rvar> IN <list> WHERE <bool> (* esistenziale *)
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        |  CONTRUCTORS <list>                   (* unione costruttori della 
21                                                   lista oggetti*)
22        |  INTHEORY <list> ITEMTYPE <svar>      (* unione oggetti lista 
23                                                   teorie *)
24        |  THEORYREFTO <list>                   (* unione teorie che fanno 
25                                                  riferimento a lista oggetti *)
26        |  <list> OFTYPE <svar>                 (* unione oggetti in base a 
27                                                   classi RDF *)
28        |  <list> OFSUPERTYPE <svar>            (* unione oggetti in base a 
29                                                   classi e loro superclassi *)
30        |  <list> OFSUBTYPE <svar>              (* unione oggetti in base a 
31                                                   classi e loro sottoclassi *)
32        |  <list> UNION <list>                  (* unione *)
33        |  <list> INTERSECT <list>              (* intersezione *)
34        |  <list> DIFF <list>                   (* differenza *)
35
36 <bool> := ( <bool> )                           (* parentesizzazione *)
37        |  TRUE                                 (* vero *)
38        |  FALSE                                (* falso *)
39        |  NOT <bool>                           (* negazione *)
40        |  <bool> AND <bool>                    (* congiunzione *)
41        |  <bool> OR <bool>                     (* disgiunzione *)
42        |  <string> IS <string>                 (* case sensitive matching *)
43        |  <list> SETEQUAL <list>               (* uguaglianza tra liste *)
44        |  <list> SUBSET <list>                 (* operazione di sottoinsieme *)
45
46 <string> := <'-quoted-constant-string>         (* costante letterale *)
47          |  MAINHYPOTHESIS | HYPOTHESIS        (* costanti simboliche *)
48          |  MAINCONCLUSION | CONCLUSION | BODY 
49          |  <svar>                             (* variabile *)
50          |  <rvar>                             (* variabile *)
51          |  <function> <rvar>                  (* applicazione di funzione *)
52          
53 <function> := NAME                             (* URIREF -> nome_oggetto *)
54            |  <property>                       (* proprieta' RDF *)
55
56 <property> := THEORY                           (* URIREF -> valore_proprieta' *)
57            |  TITLE                            (* URIREF -> valore_prop_DC *)
58            |  CONTRIBUTOR
59            |  CREATOR
60            |  PUBLISHER
61            |  SUBJECT
62            |  DESCRIPTION
63            |  DATE
64            |  TYPE
65            |  FORMAT
66            |  IDENTIFIER
67            |  LANGUAGE
68            |  RELATION
69            |  SOURCE
70            |  COVERAGE
71            |  RIGHTS
72            |  INSTITUTION
73            |  CONTACT
74            |  FIRSTVERSION
75            |  MODIFIED
76            |  VALUEOF <propname>               (* nome_propr URIREF -> 
77                                                   valore_Proprieta' *)
78            |  <refineprop> <property>
79
80 <refineprop> := SUB                            (* proprieta' e sotto-proprieta'
81                                                   di *) 
82              |  SUPER                          (* proprieta' e super-proprieta'
83                                                   di *)
84 <propname> := <'-quoted-constant-string>       (* costante letterale *)
85
86 <pattern> := <"-quoted-constant-string>        (* pattern costante *)
87 <reference> := <'-quoted-constant-string>      (* riferimento costante *)
88
89 <rvar> := <not-reserved-identifier>            (* variabile per riferimenti *)
90 <svar> := $ <not-reserved-identifier>          (* variabile per stringhe *)
91 <lvar> := % <not-reserved-identifier>          (* variabile per liste *)
92
93 - () = lista vuota (?)
94 - le stringhe sono "case sensitive" 
95 - la funzione non definita sull'argomento restituisce la stringa nulla
96 - le <rvar> si presuppongono essere istanziate come URI references costituite
97   da un URI e da un fragment identifier opzionale complete; i riferimenti 
98   identificano risorse 
99 - ogni binding lega una variabile libera (nuova) 
100 - Precedenza operatori:
101   NOT (+)  DIFF
102   AND      INTERSECT
103   OR  (-)  UNION
104 - Possibili tipi di RELATION e DEPENDENCE sono rappresentati dalle loro
105   subproperties
106 - FUTURO: thesauri di parole e sinonimi per ricerche testuali, ordinamenti sui 
107   risultati, caratteri jolly. Una volta reperito l'oggetto si possono 
108   visualizzare le info associate. 
109 - FUTURO: in output numeri ad esempio a fini statistici, aggiungendo anche 
110   operatori aritmetici e di confronto (< = >). Es. Quante proofs di un certo 
111   teorema ci sono? 
112 - L'ordinamento di default e' quello alfabetico crescente in base al nome 
113   delle rvar
114 - Note su <pattern>
115   Contiene un'espressione regolare per selezionare delle "reference" 
116   (cioe` delle uri eventualmente seguite da un fragment identifier)
117   L'espressione regolare contiene i seguenti costrutti:
118
119   costrutto        semanticamente fa match con                       
120   ?                un singolo carattere diverso da / # :             
121   *                la piu' lunga sottostringa che non contiene / # : 
122   **               la piu' lunga sottostringa che non contiene # :
123   altro carattere  solo se' stesso
124
125   costrutto        puo' appareire in
126   ?                "body"
127   *                dovunque
128   **               "body" e "fragment"
129   altro carattere  dovunque
130
131   "body"     parte compresa fra le occorrenze di ":/" e "#1" escluse
132   "fragment" parte successiva all'occorrenza "#1"
133 - FUTURO: operatore di ordinamento sul risultato finale della query.
134   <query> SORTEDBY <order> <function>   (* unione lista ordinata secondo
135                                            ordine e valore funzione *)
136   <order>    := DESC                           (* ordinamento decrescente *)
137              |  ASC                            (* ordinamento crescente *)     
138   DTD:
139   <!ENTITY % order '(ascendant|descendant)'>
140   <!ELEMENT Query %queryexpr;>
141   <!ELEMENT SortBy (Query, SortField)>
142   <!ELEMENT SortField %functexpr;>
143   <!ATTLIST SortField 
144             order %order; #IMPLIED>
145 - RILASSAMENTO degli operatori UNION e INTERSECT. Operatori fuzzy con 
146   introduzione di pesi associati ai risultati.
147 - VALUEOF restituisce il valore o, ricorsivamente sulla struttura, i valori 
148   (delle proprieta' delle classi di valori) della proprieta' passatagli. 
149   Problema: e' necessario gestire sia i nomi delle classi (costrutti TYPEOF) 
150   sia i nomi delle proprieta' (menu a tendina di suggerimenti all'utente in 
151   base agli Schemi RDF relativi ai dati).