+GRAMMATICA PER QUERY SU DOCUMENTI MATEMATICI
+ VERSIONE IMPLEMENTATA
+MATHEMATICAL QUERY LANGUAGE (MathQL)
+
+<query> := <list> (* clausola iniziale *)
+
+<list> := ( <list> ) (* parentesizazione *)
+ | <rvar> (* lista singoletto var
+ (lista valori) *)
+ | <lvar> (* lista singoletto var
+ (lista valori) *)
+ | REFERENCE <reference> (* oggetto referenziato da URI
+ esplicita *)
+ | PATTERN <pattern> (* espansione del pattern *)
+ | SELECT <rvar> IN <list> WHERE <bool> (* selezione *)
+ | LET <lvar> BE <list> IN <list> (* assegnazione a var in
+ contesto *)
+ | USE <list> POSITION <svar> (* unione lista backward *)
+ | USEDBY <list> POSITION <svar> (* unione lista forward *)
+ | <list> UNION <list> (* unione *)
+ | <list> INTERSECT <list> (* intersezione *)
+ | <list> SORTEDBY <function> <order> (* unione lista ordinata secondo
+ valore funzione e ordine *)
+<order>:= DESC (* ordinamento decrescente *)
+ | ASC (* ordinamento crescente *)
+
+<bool> := ( <bool> ) (* parentesizzazione *)
+ | TRUE (* vero *)
+ | FALSE (* falso *)
+ | NOT <bool> (* negazione *)
+ | <bool> AND <bool> (* congiunzione *)
+ | <bool> OR <bool> (* disgiunzione *)
+ | <string> IS <string> (* case sensitive matching *)
+ | <list> SETEQUAL <list> (* uguaglianza tra liste *)
+ | <list> SUBSET <list> (* operazione di sottoinsieme *)
+
+<string> := <'-quoted-constant-string> (* costante letterale *)
+ | MAINHYPOTHESIS | HYPOTHESIS (* costanti simboliche *)
+ | MAINCONCLUSION | CONCLUSION | BODY
+ | <svar> (* variabile *)
+ | <rvar> (* variabile *)
+ | <function> <rvar> (* applicazione di funzione *)
+
+<function> := NAME (* URIREF -> nome_oggetto *)
+ | TITLE (* URIREF -> valore_prop_DC *)
+ | CONTRIBUTOR
+ | CREATOR
+ | PUBLISHER
+ | SUBJECT
+ | DESCRIPTION
+ | DATE
+ | TYPE
+ | FORMAT
+ | IDENTIFIER
+ | LANGUAGE
+ | RELATION
+ | SOURCE
+ | COVERAGE
+ | RIGHTS
+ | INSTITUTION
+ | CONTACT
+ | FIRSTVERSION
+ | MODIFIED
+
+<pattern> := <"-quoted-constant-string> (* pattern costante *)
+<reference> := <'-quoted-constant-string> (* riferimento costante *)
+
+<rvar> := <not-reserved-identifier> (* variabile per riferimenti *)
+<svar> := $ <not-reserved-identifier> (* variabile per stringhe *)
+<lvar> := % <not-reserved-identifier> (* variabile per liste *)
+
+
+- le stringhe sono "case sensitive"
+- la funzione non definita sull'argomento restituisce la stringa nulla
+- le <rvar> si presuppongono essere istanziate come URI references costituite
+ da un URI e da un fragment identifier opzionale complete; i riferimenti
+ identificano risorse
+- ogni binding lega una variabile libera (nomi nuovi)
+- Precedenza operatori:
+ NOT (+) DIFF
+ AND INTERSECT
+ OR (-) UNION
+- L'ordinamento di default e' quello alfabetico crescente in base al nome
+ delle rvar
+- REFERENCE aumenta performance perche' NON accede al data base (costoso).
+- Note su <pattern>
+ Contiene un'espressione regolare per selezionare delle "reference"
+ (cioe` delle uri eventualmente seguite da un fragment identifier)
+ L'espressione regolare contiene i seguenti costrutti:
+
+ costrutto semanticamente fa match con
+ ? un singolo carattere diverso da / # :
+ * la piu' lunga sottostringa che non contiene / # :
+ ** la piu' lunga sottostringa che non contiene # :
+ altro carattere solo se' stesso
+
+ costrutto puo' appareire in
+ ? "body"
+ * dovunque
+ ** "body" e "fragment"
+ altro carattere dovunque
+
+ "body" parte compresa fra le occorrenze di ":/" e "#1" escluse
+ "fragment" parte successiva all'occorrenza "#1"
\ No newline at end of file