--- /dev/null
+GRAMMATICA PER QUERY SU DOCUMENTI MATEMATICI
+MATHEMATICAL QUERY LANGUAGE (MathQL)
+
+<query> := <set> (* clausola iniziale *)
+
+<set> := ( <set> ) (* parentesizzazione *)
+ | <rvar> (* var per insieme singoletto
+ di una risorsa *)
+ | <svar> (* var per insieme di risorse
+ (insieme di valori) *)
+ | REF <string-set> (* oggetto/i referenziato/i da
+ URI esplicita/e *)
+ | PATTERN <string-set> (* oggetto/i referenziato/i da
+ URI ottenute da espansione
+ del pattern *)
+ | SELECT <rvar> IN <set> WHERE <bool> (* selezione *)
+ | LET <svar> BE <set> IN <set> (* assegnazione a set-var in
+ contesto *)
+ | LET <vvar> BE <string-set> IN <set> (* assegnamento a value-var
+ in contesto*)
+ | RELATION <refine_op> <quoted-constant-string-path> <set> ATTR <vvar-list>
+ (* unione insieme risorse in
+ relazione specificata con le
+ risorse in set, ognuna con
+ attributi (ATTR) *)
+ | <set> UNION <set> (* unione *)
+ | <set> INTERSECT <set> (* intersezione *)
+ | <set> DIFF <set> (* differenza *)
+
+<refine_op> := "" (* relazione (proprieta') *)
+ | SUB (* proprieta' e
+ sotto-proprieta' *)
+ | SUPER (* proprieta' e
+ super-proprieta' *)
+
+<quoted-constant-string-path> := <quoted-constant-string>
+ (* relazione (proprieta') *)
+ | <quoted-constant-string> "/" <quoted-constant-string-path>
+ (* insieme di stringhe:
+ proprieta' strutturata *)
+
+<vvar-list> := <vvar>
+ | <vvar> , <vvar-list>
+
+
+<bool> := ( <bool> ) (* parentesizzazione *)
+ | TRUE (* vero *)
+ | FALSE (* falso *)
+ | NOT <bool> (* negazione *)
+ | <bool> AND <bool> (* congiunzione *)
+ | <bool> OR <bool> (* disgiunzione *)
+ | <string-set> EQ <string-set> (* uguaglianza tra insiemi
+ stringhe (case sensitive) *)
+ | <string-set> SUB <string-set> (* operazione di sottoinsieme
+ tra insiemi stringhe *)
+ | <string-set> MEET <string-set> (* operazione di meet tra
+ insiemi stringhe *)
+ | EX <bool> (* existential on attributes
+ of references *)
+<string-set> := ( <string-set> ) (* parentesizzazione *)
+ | {} (* insieme vuoto*)
+ | <quoted-constant-string> (* stringa singoletto *)
+ | {<quoted-constant-string-list>}(* insieme stringhe *)
+ | REFOF <set> (* insieme riferimenti *)
+ | <rvar>.<vvar> (* variabile per insieme
+ stringhe, relativa a
+ riferimento *)
+ | <function> <quoted-constant-string> <string-set>
+ (* applicazione di funzione
+ specificata a riferimento
+ o insiemi di rif. o var*)
+ | <vvar> (* vvar introduced by LET *)
+
+<quoted-constant-string-list> := <quoted-constant-string>
+ | <quoted-constant-string> , <quoted-constant-string-list>
+ (* lista di stringhe *)
+
+<function> := FUN (* funzione generale *)
+ | <property>
+
+<property> := ATTRIBUTE <refine-op> (* funzione proprieta': restituisce
+ suoi valori (anche strutturati)
+ (e delle sotto-proprieta' o
+ super-proprieta' *)
+
+
+<rvar> := @ <not-reserved-identifier> (* variabile per riferimento *)
+<vvar> := $ <not-reserved-identifier> (* variabile per insiemi
+ stringhe *)
+<svar> := % <not-reserved-identifier> (* variabile per insiemi
+ riferimenti *)
+
+
+- Idea di base: grammatica del linguaggio semplice e permissiva (duttile)
+- MEET e' definito come "esiste almeno un elemento che appartiene
+ all'interserzione tra due insiemi"
+- 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
+- Precedenza operatori:
+ NOT (+) DIFF
+ AND INTERSECT
+ OR (-) UNION
+- L'ordinamento di default e' quello alfabetico crescente in base al nome
+ delle rvar
+- REF aumenta performance perche' NON accede al data base (costoso).
+- l'argomento di PATTERN ha sintassi di una espressione regolare
+ POSIX 1003.2-1992
+- Possibile FUN (<quoted-constant-string>):
+ NAME (* URIREF -> nome_oggetto *)
+- MEET aumenta performance nel caso si verifichi (a in S) oppure
+ (b in S) = ({a,b} meet S) perche' valuta S una volta sola
+ Il MEET codifica inoltre l'esistenziale su risorse (URI) in un certo
+ insieme che soddisfa certe condizioni
+- record <rvar>.<svar> serve per disambiguare nomi uguali di variabili
+- Operatori (come EQ) hanno nomi abbreviati rispetto ai costrutti del
+ linguaggio
+- EX verfica che la sua condizione sia vera per almeno un insieme di attributi
+ associato all'URI in rvar
+- Possibili RELATION sono:
+ USE con attributo POSITION (riferimenti backward) e valori MAINHYPOTHESIS,
+ HYPOTHESIS, MAINCONCLUSION, CONCLUSION, BODY
+ USEBY con attributo POSITION (riferimenti forward) e valori MAINHYPOTHESIS,
+ HYPOTHESIS, MAINCONCLUSION, CONCLUSION, BODY
+ CONSTRUCTORS
+ INTHEORY con attributo ITEMTYPE (riferimenti oggetti contenuti in teorie)
+ THEORYREFTO con attributo ITEMTYPE (riferimenti teorie referenti a oggetti)
+- <string-set> invece di <set> come argomento di <function> poiche' la REF non
+ e' piu' restrittiva su argomento/i e quindi e' inutile imporne l'uso quando
+ si passano i riferimenti alle funzioni. Con <string-set> l'utente e' libero
+ di passare direttamente le stringhe dei riferimenti.
+- Il costrutto di ordinamento:
+ <set> SORTEDBY <function> <order> (* unione insieme ordinato secondo
+ valore funzione e ordine *)
+ <order>:= DESC (* ordinamento decrescente *)
+ | ASC (* ordinamento crescente *)
+ perde di senso nel caso di metadati, poiche' per definizione le proprieta'
+ in RDF possono essere ripetute quindi restituiscono (come anche le funzioni
+ in generale) valori multipli per ogni riferimento (ambiguita' nell'ordine)
+- Possibili proprieta' (<quoted-constant-string>):
+ le DC: TITLE, CONTRIBUTOR, CREATOR, PUBLISHER, SUBJECT, DESCRIPTION, DATE,
+ TYPE, FORMAT, IDENTIFIER, LANGUAGE, RELATION, SOURCE, COVERAGE, RIGHTS,
+ RIGHTS; and INSTITUTION, CONTACT, FIRSTVERSION, MODIFIED, THEORY
+- Il concetto di Classe, sottoclasse, superclasse, puo' essere visto come una
+ particolare proprieta' (type o tipo) di una risorsa, e quindi codificabile
+ da RELATION
\ No newline at end of file