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