GRAMMATICA PER QUERY SU DOCUMENTI MATEMATICI MATHEMATICAL QUERY LANGUAGE (MathQL) := (* clausola iniziale *) := ( ) (* parentesizzazione *) | (* var per insieme singoletto di una risorsa *) | (* var per insieme di risorse (insieme di valori) *) | REF (* oggetto/i referenziato/i da URI esplicita/e *) | PATTERN (* oggetto/i referenziato/i da URI ottenute da espansione del pattern *) | SELECT IN WHERE (* selezione *) | LET BE IN (* assegnazione a set-var in contesto *) | LET BE IN (* assegnamento a value-var in contesto*) | RELATION ATTR (* unione insieme risorse in relazione specificata con le risorse in set, ognuna con attributi (ATTR) *) | UNION (* unione *) | INTERSECT (* intersezione *) | DIFF (* differenza *) := "" (* relazione (proprieta') *) | SUB (* proprieta' e sotto-proprieta' *) | SUPER (* proprieta' e super-proprieta' *) := (* relazione (proprieta') *) | "/" (* insieme di stringhe: proprieta' strutturata *) := | , := ( ) (* parentesizzazione *) | TRUE (* vero *) | FALSE (* falso *) | NOT (* negazione *) | AND (* congiunzione *) | OR (* disgiunzione *) | EQ (* uguaglianza tra insiemi stringhe (case sensitive) *) | SUB (* operazione di sottoinsieme tra insiemi stringhe *) | MEET (* operazione di meet tra insiemi stringhe *) | EX (* existential on attributes of references *) := {} (* insieme vuoto*) | (* stringa singoletto *) | {}(* insieme stringhe *) | REFOF (* insieme riferimenti *) | . (* variabile per insieme stringhe, relativa a riferimento *) | (* applicazione di funzione specificata a riferimento o insiemi di rif. o var*) | (* vvar introduced by LET *) := | , (* lista di stringhe *) := FUN (* funzione generale *) | := ATTRIBUTE (* funzione proprieta': restituisce suoi valori (anche strutturati) (e delle sotto-proprieta' o super-proprieta' *) := @ (* variabile per riferimento *) := $ (* variabile per insiemi stringhe *) := % (* 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 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 (): 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 . 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) - invece di come argomento di 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 l'utente e' libero di passare direttamente le stringhe dei riferimenti. - Il costrutto di ordinamento: SORTEDBY (* unione insieme ordinato secondo valore funzione e ordine *) := 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' (): 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