Ricerca in Ghini¶
Ricerca permette di visualizzare, esplorare e creare rapporti dai dati. È possibile eseguire ricerche inserendo le query nella voce di ricerca principale o utilizzando il generatore di Query per creare le query per voi. I risultati delle ricerche di Ghini sono elencati nella finestra principale.
Strategie di ricerca¶
Ghini offre quattro strategie di ricerca distinte:
- per valore — in tutti i domini;
- per espressione — in alcuni campi impliciti in un dominio esplicito;
- per query — in un dominio;
- di nome binomiale — cerca solo nel dominio di
Species
.
Tutte le strategie di ricerca —ad eccezione di ‘ricerca nome binomiale’— non fanno distinzione tra maiuscole e minuscole.
Ricerca per valore¶
Ricerca per valore è il modo più semplice per la ricerca. Immettere una o più stringhe e vedere che cosa corrisponde. Il risultato include oggetti di qualsiasi tipo (dominio), dove uno o più dei relativi campi contengono uno o più delle stringhe di ricerca.
Non si specifica il dominio di ricerca, tutti sono inclusi, né è necessario indicare quali campi si desidera far corrispondere, questo è implicito nel dominio di ricerca.
Nella tabella seguente consente di comprendere i risultati e vi guida nel formulare le ricerche.
Panoramica sui domini di ricerca | ||
---|---|---|
nome ed abbreviazioni | campo | tipo di risultato |
family, fam | epithet (family) | Family |
genus, gen | epithet (genus) | Genus |
species, sp | epithet (sp) × | Species |
vernacular, common, vern | name | Species |
geography, geo | name | Geography |
accession, acc | code | Accession |
planting, plant | code × | Plant |
location, loc | code, name | Location |
contact, person, org, source | name | Contact |
collection, col, coll | locale | Collection |
tag, tags | name | Tag |
Esempi di ricerca per valore sarebbe: Maxillaria, Acanth, 2008.1234, 2003.2.1, indica.
A meno di non includere fra virgolette, gli spazi separano le stringhe di ricerca. Per esempio se si cerca Block 10
, Ghini cerca le due stringhe blocco
e 10
e restituisce tutti i risultati che corrispondono a una di queste due voci. Se si desidera cercare Block 10 come una stringa intera basterà usare le virgolette, così: "Block 10"
.
× Chiavi primarie composte
Un epiteto di specie significa poco senza il genere corrispondente, allo stesso modo un codice di planting è univoco solo nell’ambito dell’accessione a cui appartiene. Nella terminologia della teoria dei database, epiteto e codice non sono sufficienti per formare un chiave primaria per rispettivamente specie e le planting. Questi domini necessitano di una chiave primaria composta.
Ricerca per valore consente di cercare planting dal loro codice planting completo, che include il codice di accessione. Presi insieme, il codice di accessione e la piantatura del codice forniscono uns chiave primaria composito per gli planting. Per specie, abbiamo introdotto la ricerca binomiale, descritta di seguito.
Ricerca per espressione¶
Ricerca per espressione vi dà un po” più controllo su ciò che stai cercando. Permette di restringere la ricerca ad un dominio specifico, il software definisce i campi per la ricerca all’interno del dominio indicato.
Un’espressione è costruita come <domain> <operator> <value>
. Ad esempio la ricerca: gen = Maxillaria
restituisce tutti i generi che corrispondono al nome Maxillaria. In questo caso il dominio è gen
, l’operatore è =
e il valore è Maxillaria
.
La tabella Panoramica sui domini di ricerca poco sopra ti indica i nomi dei domini di ricerca, e, per ogni dominio di ricerca, quali campi vengono inclusi implicitamente nelle ricerche.
La stringa di ricerca loc like blocco%
restituisce tutte le collocazioni il cui nome o codice inizia con «blocco». In questo caso il dominio è loc
(un’abbreviazione per location
), l’operatore è like
(questo viene dall’SQL ed aggiunge un fattore di approssimazione nella ricerca), il valore è blocco%
, i campi di ricerca sono implicitamente nome
e codice
. Il segno di percentuale viene utilizzato come jolly, pertanto se si cerca max%
ricercherà tutti i valori che iniziano con «max». Se si cerca %10
ricerca per tutti i valori che terminano in 10
. La stringa %ck%10
indica la ricerca di tutto ciò che contenga ck
e termini in 10
.
Quando una query richiede molto tempo per completare
Si dà una query, ci vuole davvero tempo per calcolare il risultato e questo contiene una quantità irragionevolmente di voci. Questo accade quando si intende utilizzare una strategia, ma le stringhe inserite non formano un’espressione valida. In questo caso Ghini ricorre al caso ricerca per valore. Ad esempio, la stringa di ricerca gen lik maxillaria
cercherà le stringhe gen
, lik
e maxillaria
, restituendo tutto ciò che soddisfi almeno uno dei tre criteri.
Ricerca binomiale¶
È inoltre possibile eseguire una ricerca nel database, se si conosce la specie, semplicemente inserendo alcune lettere iniziali di epiteti di genere e la specie nel motore di ricerca, in maiuscolo correttamente, vale a dire: genere epiteto con una lettere maiuscole iniziali, specie epiteto tutte le lettere minuscole.
In questo modo è possibile eseguire la ricerca So ha
.
Queste sarebbero le iniziali per il Solanum hayesii, o Solanum havanense.
Ricerca nome binomiale viene a compensare la limitata utilità della succitata ricerca per espressione quando si tenta di cercare una specie.
È la lettera maiuscola corretta Xxxx xxxx che informa il software della vostra intenzione di eseguire una ricerca binomiale. Seconda ipotesi del software sarà una ricerca per valore, che possibilmente si tradurrà in molti più risultati del previsto.
La richiesta affatto simile so ha
restituisce, in una nuova installazione, oltre 3000 oggetti, a partire da famiglia «Acalyp(ha)ceae», per finire con la geografia «Western (So)uth America».
Ricerca per Query¶
Le query consentono il massimo controllo su ricerca. Con le query è possibile cercare attraverso relazioni, colonne specifiche, combinare i criteri di ricerca utilizzando gli operatori booleani come and
, or
, not
(e loro rispettiva abbreviazioni &&
, ||
, !
).
Se volete maggiori informazioni, o volontariare per documentare questo più a fondo, si prega di contattare gli autori. Nel frattempo si può iniziare a familiarizzare con la struttura di base del database di Ghini.
Alcuni esempi:
piante della famiglia delle Fabaceae in posizione Blocco 10:
plant WHERE accession.species.genus.family.epithet=Fabaceae AND location.description="Block 10"
posizioni che non contengono piante:
location WHERE plants = Empty
accessioni associate ad una specie dal nome binomiale noto (es.: Mangifera indica):
accession WHERE species.genus.epithet=Mangifera AND species.epithet=indica
accessioni propagate nell’anno 2016:
accession WHERE plants.propagations._created BETWEEN |datetime|2016,1,1| AND |datetime|2017,1,1|
accessioni modificate negli ultimi tre giorni:
accession WHERE _last_updated>|datetime|-3|
Ricerca per query richiede qualche conoscenza della sintassi ed un’idea della estesa struttura del database Ghini. Entrambe si acquisiscono con la pratica e magari con l’aiuto del Generatore di Query.
Generatore di Query¶
Ghini offre un generatore di Query, una interfaccia grafica che aiuta a costruire query di ricerca anche complesse. Per aprire il Generatore di Query fare clic sull’icona a sinistra della voce di ricerca o selezionare dal menu.
Una finestra apparirà, che vi guiderà attraverso tutti i passaggi necessari per creare una query corretta che sarà compresa dalla strategia di Ricerca per Query di Ghini.
Prima di tutto si indica il dominio di ricerca, questo vi permetterà il generatore di Query completa la sua interfaccia grafica, quindi si aggiunge il numero di clausole logico necessario, collegandoli con operatore binario and
o or
.
Ogni clausola è formata da tre parti: una proprietà che può essere raggiunto dal dominio di ricerca iniziale, un operatore di confronto che si seleziona dall’elenco a discesa, un valore che è possibile digitare o selezionare dall’elenco di valori validi per il campo.
Aggiungere altrettante proprietà di ricerca quante necessarie, facendo clic sul segno più. Selezionare and
/ or
al lato dal nome della proprietà, per scegliere come combinare le clausole nella query.
Quando si è finito di costruire la query fare clic su OK per eseguire la ricerca.
A questo punto il generatore di Query scrive la query nella voce Cerca e lo esegue. Adesso si può editare la stringa come fosse stata inserita manualmente. Si noti come i valori alla sinistra vengono interpretati dal generatore di query e racchiusi tra virgolette singole se riconosciuto come stringhe, o lasciati senza virgolette se sono numeri o i due riservati parole None
e Empty
. Si può modificare la query e inserire virgolette se necessario, ad esempio se avete bisogno di cercare letteralmente la stringa Empty
.
None
è il valore di un campo vuoto. Non è la stessa che la stringa di lunghezza zero ''
né il numero 0
né il booleano False
né l’insieme Empty
: None
indica che al campo non è associato alcun valore.
Empty
is the empty set. Being it a set, it can be matched against sets
(eg: plants of an accession, or accessions of a species), not against
elements (eg: quantity of a plant or description of a location). However,
the Query Builder does not let you choose a left hand side value stopping at
a set, it expects you to select a field. Choose just any field: at the
moment of producing the query, when the Query Builder meets a clause with
right hand side value the literal string Empty
, it will drop the field
name and let you compare the set on the left with Empty
on the right.
We have no literals False
and True
. These are typed values, and the
Query Builder does not know how to produce them. Instead of False
type
0
, and instead of True
type 1
.
Grammatica delle Query¶
Per coloro che non temono un po” di precisione formale, il codice BNF seguente vi dà un’idea piuttosto precisa della grammatica implementata dalla strategia di Ricerca per Query. Alcune categorie grammaticali sono informalmente definite; alcune mancano e sono lasciate alla vostra fertile immaginazione; i valori letterali sono inclusi tra virgolette singole; la grammatica non fa differenza tra maiuscole e minuscole, se non diversamente indicato:
query ::= domain 'WHERE' expression
domain ::= #( one of our search domains )
expression ::= signed_clause
| signed_clause 'AND' expression
| signed_clause 'OR' expression
;
signed_clause ::= clause
| 'NOT' clause #( not available in Query Builder)
;
clause ::= field_name binop value #( available in Query Builder)
| field_name set_binop value_list
| aggregated binop value
| field_name 'BETWEEN' value 'AND' value
| '(' expression ')'
;
field_name ::= #( path to reach a database field or connected table )
aggregated ::= aggregating_func '(' field_name ')'
aggregating_func ::= 'SUM'
| 'MIN'
| 'MAX'
| 'COUNT'
;
value ::= typed_value
| numeric_value
| none_token
| empty_token
| string_value
;
typed_value ::= '|' type_name '|' value_list '|'
numeric_value ::== #( just a number )
none_token ::= 'None' #( case sensitive )
empty_token ::= 'Empty' #( case sensitive )
string_value = quoted_string | unquoted_string
type_name ::= 'datetime' | 'bool' ; #( only ones for the time being )
quoted_string ::= '"' unquoted_string '"'
unquoted_string ::= #( alphanumeric and more )
value_list ::= value ',' value_list
| value
;
binop ::= '='
| '=='
| '!='
| '<>'
| '<'
| '<='
| '>'
| '>='
| 'LIKE'
| 'CONTAINS'
;
set_binop ::= 'IN'
Si prega di essere consapevoli del fatto che il linguaggio di Query di Ghini è più complesso di quello descritto dal Generatore di Query: le query costruibili con il Generatore di Query costituiscono un sottoinsieme proprio delle query riconosciute dal software:
query ::= domain 'WHERE' expression
domain ::= #( one of our search domains )
expression ::= clause
| clause 'AND' expression
| clause 'OR' expression
;
clause ::= field_name binop value
;
field_name ::= #( path to reach a database field or connected table )
value ::= numeric_value
| string_value
;
numeric_value ::== #( just a number )
string_value = quoted_string | unquoted_string ;
quoted_string ::= '"' unquoted_string '"'
unquoted_string ::= #( alphanumeric and more )
binop ::= '='
| '=='
| '!='
| '<>'
| '<'
| '<='
| '>'
| '>='
| 'LIKE'
| 'CONTAINS'
;