GRAMMATICA PER QUERY SU DOCUMENTI MATEMATICI MATHEMATICAL QUERY LANGUAGE (MathQL) := (* clausola iniziale *) := ( ) (* parentesizazione *) | (* lista singoletto var (lista valori) *) | (* lista singoletto var (lista valori) *) | REFERENCE (* oggetto referenziato da pattern costante *) | 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 *) | USEDBY POSITION (* unione lista forward *) | CONTRUCTORS (* unione costruttori della lista oggetti*) | INTHEORY ITEMTYPE (* unione oggetti lista teorie *) | THEORYREFTO (* unione teorie che fanno riferimento a lista oggetti *) | OFTYPE (* unione oggetti in base a classi RDF *) | OFSUPERTYPE (* unione oggetti in base a classi e loro superclassi *) | OFSUBTYPE (* unione oggetti in base a classi e loro sottoclassi *) | UNION (* unione *) | INTERSECT (* intersezione *) | DIFF (* differenza *) := ( ) (* 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 *) | (* proprieta' RDF *) := THEORY (* URIREF -> valore_proprieta' *) | TITLE (* URIREF -> valore_prop_DC *) | CONTRIBUTOR | CREATOR | PUBLISHER | SUBJECT | DESCRIPTION | DATE | TYPE | FORMAT | IDENTIFIER | LANGUAGE | RELATION | SOURCE | COVERAGE | RIGHTS | INSTITUTION | CONTACT | FIRSTVERSION | MODIFIED | VALUEOF (* nome_propr URIREF -> valore_Proprieta' *) | := SUB (* proprieta' e sotto-proprieta' di *) | SUPER (* proprieta' e super-proprieta' di *) := <'-quoted-constant-string> (* costante letterale *) := <"-quoted-constant-string> (* pattern costante *) := <'-quoted-constant-string> (* riferimento costante *) := (* variabile per riferimenti *) := $ (* variabile per stringhe *) := % (* variabile per liste *) - () = lista vuota (?) - 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) - Precedenza operatori: NOT (+) DIFF AND INTERSECT OR (-) UNION - Possibili tipi di RELATION e DEPENDENCE sono rappresentati dalle loro subproperties - FUTURO: thesauri di parole e sinonimi per ricerche testuali, ordinamenti sui risultati, caratteri jolly. Una volta reperito l'oggetto si possono visualizzare le info associate. - FUTURO: in output numeri ad esempio a fini statistici, aggiungendo anche 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 rvar - 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" - 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: - 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).