From 80569b93b7cc484b40d7cba33f3d8255db66fe65 Mon Sep 17 00:00:00 2001 From: Irene Schena Date: Fri, 14 Jun 2002 14:48:32 +0000 Subject: [PATCH] Modified Files: 1) grammar.txt xmathql.dtd: modified EXISTS, added SORTEDBY and MINIMIZE Added Files: 1) core_grammar.txt: implemented grammar --- helm/mathql/core_grammar.txt | 104 +++++++++++++++++++++++++++++++++++ helm/mathql/grammar.txt | 41 +++++++------- helm/mathql/xmathql.dtd | 22 ++++++-- 3 files changed, 143 insertions(+), 24 deletions(-) create mode 100644 helm/mathql/core_grammar.txt diff --git a/helm/mathql/core_grammar.txt b/helm/mathql/core_grammar.txt new file mode 100644 index 000000000..65c6cbe8d --- /dev/null +++ b/helm/mathql/core_grammar.txt @@ -0,0 +1,104 @@ +GRAMMATICA PER QUERY SU DOCUMENTI MATEMATICI + VERSIONE IMPLEMENTATA +MATHEMATICAL QUERY LANGUAGE (MathQL) + + := (* clausola iniziale *) + + := ( ) (* parentesizazione *) + | (* lista singoletto var + (lista valori) *) + | (* lista singoletto var + (lista valori) *) + | REFERENCE (* oggetto referenziato da URI + esplicita *) + | PATTERN (* espansione del pattern *) + | SELECT IN WHERE (* selezione *) + | LET BE IN (* assegnazione a var in + contesto *) + | USE POSITION (* unione lista backward *) + | USEDBY POSITION (* unione lista forward *) + | UNION (* unione *) + | INTERSECT (* intersezione *) + | SORTEDBY (* unione lista ordinata secondo + valore funzione e ordine *) +:= DESC (* ordinamento decrescente *) + | ASC (* ordinamento crescente *) + + := ( ) (* parentesizzazione *) + | TRUE (* vero *) + | FALSE (* falso *) + | NOT (* negazione *) + | AND (* congiunzione *) + | OR (* disgiunzione *) + | IS (* case sensitive matching *) + | SETEQUAL (* uguaglianza tra liste *) + | SUBSET (* operazione di sottoinsieme *) + + := <'-quoted-constant-string> (* costante letterale *) + | MAINHYPOTHESIS | HYPOTHESIS (* costanti simboliche *) + | MAINCONCLUSION | CONCLUSION | BODY + | (* variabile *) + | (* variabile *) + | (* applicazione di funzione *) + + := 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 + + := <"-quoted-constant-string> (* pattern costante *) + := <'-quoted-constant-string> (* riferimento costante *) + + := (* variabile per riferimenti *) + := $ (* variabile per stringhe *) + := % (* variabile per liste *) + + +- le stringhe sono "case sensitive" +- la funzione non definita sull'argomento restituisce la stringa nulla +- le 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 + 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 diff --git a/helm/mathql/grammar.txt b/helm/mathql/grammar.txt index 699a6f20a..4a54af070 100644 --- a/helm/mathql/grammar.txt +++ b/helm/mathql/grammar.txt @@ -3,16 +3,16 @@ MATHEMATICAL QUERY LANGUAGE (MathQL) := (* clausola iniziale *) - := ( ) (* parentesizazione *) + := (* lista vuota *) + | ( ) (* parentesizazione *) | (* lista singoletto var (lista valori) *) | (* lista singoletto var (lista valori) *) - | REFERENCE (* oggetto referenziato da - pattern costante *) + | REFERENCE (* oggetto referenziato da URI + esplicita *) | PATTERN (* espansione del pattern *) | SELECT IN WHERE (* selezione *) - | EXISTS IN WHERE (* esistenziale *) | LET BE IN (* assegnazione a var in contesto *) | USE POSITION (* unione lista backward *) @@ -32,6 +32,12 @@ MATHEMATICAL QUERY LANGUAGE (MathQL) | UNION (* unione *) | INTERSECT (* intersezione *) | DIFF (* differenza *) + | MINIMIZE (* minimizzazione del numero + elementi della lista *) + | SORTEDBY (* unione lista ordinata secondo + valore funzione e ordine *) +:= DESC (* ordinamento decrescente *) + | ASC (* ordinamento crescente *) := ( ) (* parentesizzazione *) | TRUE (* vero *) @@ -42,6 +48,7 @@ MATHEMATICAL QUERY LANGUAGE (MathQL) | IS (* case sensitive matching *) | SETEQUAL (* uguaglianza tra liste *) | SUBSET (* operazione di sottoinsieme *) + | EXISTS IN (* esistenziale *) := <'-quoted-constant-string> (* costante letterale *) | MAINHYPOTHESIS | HYPOTHESIS (* costanti simboliche *) @@ -90,13 +97,13 @@ MATHEMATICAL QUERY LANGUAGE (MathQL) := $ (* variabile per stringhe *) := % (* variabile per liste *) -- () = lista vuota (?) +- 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 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 (nuova) +- ogni binding lega una variabile libera (nomi nuovi) - Precedenza operatori: NOT (+) DIFF AND INTERSECT @@ -111,6 +118,7 @@ MATHEMATICAL QUERY LANGUAGE (MathQL) teorema ci sono? - 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 Contiene un'espressione regolare per selezionare delle "reference" (cioe` delle uri eventualmente seguite da un fragment identifier) @@ -130,22 +138,17 @@ MATHEMATICAL QUERY LANGUAGE (MathQL) "body" parte compresa fra le occorrenze di ":/" e "#1" escluse "fragment" parte successiva all'occorrenza "#1" -- FUTURO: operatore di ordinamento sul risultato finale della query. - SORTEDBY (* unione lista ordinata secondo - ordine e valore funzione *) - := DESC (* ordinamento decrescente *) - | ASC (* ordinamento crescente *) - DTD: - - - - - +- Condizioni associate alla var dell'esisteziale possono essere espresse + nella clausola WHERE di un SELECT nell'argomento 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). \ No newline at end of file + 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 diff --git a/helm/mathql/xmathql.dtd b/helm/mathql/xmathql.dtd index 88462d5d2..69b0cab9e 100644 --- a/helm/mathql/xmathql.dtd +++ b/helm/mathql/xmathql.dtd @@ -40,6 +40,7 @@ + @@ -50,6 +51,8 @@ + + @@ -59,13 +62,14 @@ - + TypeOf|SuperTypeOf|SubTypeOf|Union|Intersect|Diff| + Minimize)'> - + @@ -93,8 +97,6 @@ - - @@ -125,6 +127,10 @@ + + + + @@ -178,6 +184,10 @@ + + + @@ -196,6 +206,8 @@ + + -- 2.39.2