GRAMMATICA PER QUERY SU DOCUMENTI MATEMATICI MATHEMATICAL QUERY LANGUAGE (MathQL) := (* clausola iniziale *) := (* lista vuota *) | ( ) (* 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 *) | 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 *) | 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 *) | FALSE (* falso *) | NOT (* negazione *) | AND (* congiunzione *) | OR (* disgiunzione *) | IS (* case sensitive matching *) | SETEQUAL (* uguaglianza tra liste *) | SUBSET (* operazione di sottoinsieme *) | EXISTS IN (* esistenziale *) := <'-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 *) - 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 (nomi nuovi) - 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 - 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" - 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). - 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.