-GRAMMATICA PER QUERY SU DOCUMENTI MATEMATICI- VERSIONE 2002-04-19 #1Irene
+GRAMMATICA PER QUERY SU DOCUMENTI MATEMATICI
MATHEMATICAL QUERY LANGUAGE (MathQL)
<query> := <list> (* clausola iniziale *)
-<list> := ( <list> ) (* parentesizazione *)
- | <list> UNION <list> (* unione *)
- | <list> INTERSECT <list> (* intersezione *)
- | <list> DIFF <list> (* differenza *)
- | <list> SORTEDBY <order>
- | SELECT <pvar> IN <list> WHERE <bool> (* selezione *)
- | EXISTS <pvar> IN <list> WHERE <bool> (* esistenziale *)
+<list> := <empty-string> (* lista vuota *)
+ | ( <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 *)
- | CONTRUCTORS <list>
- | PATTERN <pattern> (* espansione del pattern *)
- | INTHEORY <list> ITEMTYPE <svar> (* unione oggetti lista teorie *)
+ | CONTRUCTORS <list> (* unione costruttori della
+ lista oggetti*)
+ | INTHEORY <list> ITEMTYPE <svar> (* unione oggetti lista
+ teorie *)
| THEORYREFTO <list> (* unione teorie che fanno
riferimento a lista oggetti *)
+ | <list> OFTYPE <svar> (* unione oggetti in base a
+ classi RDF *)
+ | <list> OFSUPERTYPE <svar> (* unione oggetti in base a
+ classi e loro superclassi *)
+ | <list> OFSUBTYPE <svar> (* unione oggetti in base a
+ classi e loro sottoclassi *)
+ | <list> UNION <list> (* unione *)
+ | <list> INTERSECT <list> (* intersezione *)
+ | <list> DIFF <list> (* differenza *)
+ | MINIMIZE <list> (* minimizzazione del numero
+ elementi della lista *)
+ | <list> SORTEDBY <function> <order> (* unione lista ordinata secondo
+ valore funzione e ordine *)
+<order>:= DESC (* ordinamento decrescente *)
+ | ASC (* ordinamento crescente *)
-<bool> := ( <bool> ) (* parentesizazione *)
- | <bool> AND <bool> (* congiunzione *)
- | <bool> OR <bool> (* disgiunzione *)
- | NOT <bool> (* negazione *)
+<bool> := ( <bool> ) (* parentesizzazione *)
| TRUE (* vero *)
| FALSE (* falso *)
+ | NOT <bool> (* negazione *)
+ | <bool> AND <bool> (* congiunzione *)
+ | <bool> OR <bool> (* disgiunzione *)
| <string> IS <string> (* case sensitive matching *)
-
-<pattern> := <quoted-constant-string> (* pattern costante *)
-
-<string> := <quoted-constant-string> (* costante letterale *)
- | CONCLUSION | HYPOTHESIS | BODY (* costanti simboliche *)
- | MAINCONCLUSION | MAINHYPOTHESIS
- | <pvar> (* variabile *)
+ | <list> SETEQUAL <list> (* uguaglianza tra liste *)
+ | <list> SUBSET <list> (* operazione di sottoinsieme *)
+ | EXISTS <rvar> IN <list> (* esistenziale *)
+
+<string> := <'-quoted-constant-string> (* costante letterale *)
+ | MAINHYPOTHESIS | HYPOTHESIS (* costanti simboliche *)
+ | MAINCONCLUSION | CONCLUSION | BODY
| <svar> (* variabile *)
- | <function> <pvar> (* applicazione di funzione *)
+ | <rvar> (* variabile *)
+ | <function> <rvar> (* applicazione di funzione *)
-<function> := NAME (* pvar -> nome_oggetto *)
- | TITLE (* URI -> valore_Prop_DC *)
+<function> := NAME (* URIREF -> nome_oggetto *)
+ | <property> (* proprieta' RDF *)
+
+<property> := THEORY (* URIREF -> valore_proprieta' *)
+ | TITLE (* URIREF -> valore_prop_DC *)
| CONTRIBUTOR
| CREATOR
| PUBLISHER
| CONTACT
| FIRSTVERSION
| MODIFIED
- | <refineop> <function>
+ | VALUEOF <propname> (* nome_propr URIREF ->
+ valore_Proprieta' *)
+ | <refineprop> <property>
-<refineop> := SUB (* sub-property of *)
- | SUPER (* super-property of *)
+<refineprop> := SUB (* proprieta' e sotto-proprieta'
+ di *)
+ | SUPER (* proprieta' e super-proprieta'
+ di *)
+<propname> := <'-quoted-constant-string> (* costante letterale *)
-<order> := THEORY (* ordinamento alfabetico in
- base a teorie e default per
- gli oggetti *)
- | ASC (* ordinamento crescente *)
- | DESC (* ordinamento decrescente *)
- | KEY (* ordinamento in base a parole
- chiave o soggetto *)
+<pattern> := <"-quoted-constant-string> (* pattern costante *)
+<reference> := <'-quoted-constant-string> (* riferimento costante *)
-<pvar> := <not-reserved-identifier> (* variabile per pattern *)
+<rvar> := <not-reserved-identifier> (* variabile per riferimenti *)
<svar> := $ <not-reserved-identifier> (* variabile per stringhe *)
+<lvar> := % <not-reserved-identifier> (* variabile per liste *)
+- query vuota e' caso patologico: non si puo' verificare
- le stringhe sono "case sensitive"
- la funzione non definita sull'argomento restituisce la stringa nulla
-- le <pvar> si presuppongono essere istanziate come URI complete o
- URI#xpointer_expression
-- ogni binding lega una variabile libera (nuova)
+- 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
operatori aritmetici e di confronto (< = >). Es. Quante proofs di un certo
teorema ci sono?
- L'ordinamento di default e' quello alfabetico crescente in base al nome
- delle pvar
-
+ 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"
+- Condizioni associate alla var dell'esisteziale possono essere espresse
+ nella clausola WHERE di un SELECT nell'argomento <list> dell'EXISTS.
+- RILASSAMENTO degli operatori UNION e INTERSECT. Operatori fuzzy con
+ introduzione di pesi associati ai risultati.
+- VALUEOF restituisce il valore o, ricorsivamente sulla struttura, i valori
+ (delle proprieta' delle classi di valori) della proprieta' passatagli.
+ Problema: e' necessario gestire sia i nomi delle classi (costrutti TYPEOF)
+ sia i nomi delle proprieta' (menu a tendina di suggerimenti all'utente in
+ base agli Schemi RDF relativi ai dati).
+- L'algoritmo che implementa MINIMIZE puo' ad esempio eliminare le entrate
+ URI+insieme_di_attributi duplicate oppure le entrate con URI ripetute
+ accorpando i diversi insieme_di_attributi per l'URI in un unica entrata
+ della lista.
+
\ No newline at end of file