Filtrare utilizzando il Gramps Object Query Language¶
Le visualizzazioni dell'elenco degli oggetti (persone, famiglie, eventi, ...) e l'elenco delle attività hanno un campo di filtro per espressioni nel Gramps Object Query Language (GOQL).
Per utilizzarlo, apri il pannello di filtro, digita un'espressione nel campo GOQL e premi Invio (o fai clic su Applica). L'elenco è filtrato dall'espressione, oltre a qualsiasi altro filtro attivo. Se l'espressione è non valida, il campo è contrassegnato come errore.
L'espressione si applica sempre agli oggetti dell'elenco in cui ti trovi: nell'elenco Persone, cognome == 'Smith' trova le persone con il cognome Smith.
Nota
Il campo GOQL richiede Gramps Web API 3.24 o versioni successive.
Sintassi¶
Un'espressione GOQL assomiglia a una condizione nel linguaggio di programmazione Python. Non è necessario conoscere Python per utilizzarlo: gli esempi qui sotto coprono la maggior parte delle esigenze.
Confronti¶
Un confronto ha la forma campo operatore valore, ad esempio cognome == 'Smith'.
| Operatore | Significato |
|---|---|
== |
è uguale a |
!= |
non è uguale a |
<, <= |
è minore di, minore o uguale a (precedente, più piccolo) |
>, >= |
è maggiore di, maggiore o uguale a (successivo, più grande) |
in [ ... ] |
è uno dei valori elencati, ad es. cognome in ['Meyer', 'Maier'] |
not in [ ... ] |
non è nessuno dei valori elencati |
'testo' in campo |
il campo contiene il testo, ad es. 'mill' in cognome |
is None |
il campo è vuoto o non esiste, ad es. death.date.sortval is None |
Il testo va tra virgolette singole o doppie ('Smith'), i numeri no (1850). I confronti possono essere concatenati, ad es. Date('1850') <= birth.date.sortval < Date('1900').
Combinare condizioni¶
Le condizioni possono essere combinate con and e or, e invertite con not. and ha la precedenza su or; usa le parentesi per raggruppare le condizioni:
(gender == Person.MALE and cognome == 'Smith') or nome == 'Mary'
Modelli di testo¶
like(campo, 'modello')corrisponde a un modello in cui%sta per qualsiasi testo e_per un singolo carattere, ad es.like(nome, 'J%')per tutti i nomi che iniziano con "J".regex(campo, 'modello')corrisponde a una espressione regolare, ad es.regex(cognome, '^M[ae][iy]er$').
like e 'testo' in campo ignorano maiuscole e minuscole (su SQLite, questo si applica solo alle lettere A–Z senza accenti). regex è sensibile alle maiuscole.
Campi¶
Un campo è il nome di una proprietà dell'oggetto, come gender o gramps_id, o un percorso a una proprietà annidata, come primary_name.first_name o primary_name.surname_list[0].surname. Le parentesi quadre selezionano un elemento di un elenco in base alla sua posizione, a partire da 0. Le proprietà disponibili sono quelle del modello di dati di Gramps. Se un campo non esiste, il messaggio di errore elenca i campi che esistono.
Sono disponibili alcuni scorciatoie:
- Le persone hanno
given_nameesurname, il nome e il cognome del nome principale. - Le persone hanno
birthedeath, i loro eventi di nascita e morte, ad es.birth.date.sortvalodeath.place.name.value. - Le famiglie hanno
fatheremother, ad es.father.surname == 'Smith'. - Gli eventi hanno
place, le citazioni hannosource, e i luoghi hannoenclosed_by, il luogo circostante.
Questi possono essere concatenati, ad es. father.birth.place.name.value nell'elenco delle Famiglie. Due campi possono anche essere confrontati tra loro, ad es. father.surname == mother.surname.
Elenchi di oggetti correlati¶
any(collezione, condizione) corrisponde se almeno un elemento di una collezione soddisfa la condizione, e len(collezione) conta gli elementi. Senza una condizione, any(collezione) corrisponde se la collezione non è vuota. Le collezioni sono:
- su quasi ogni oggetto:
notes,citations,media, etags - sulle persone:
events,families(come partner),parent_families(come bambino), eassociations - sulle famiglie:
children - su tutti gli oggetti:
backlinks, gli oggetti che si riferiscono ad esso, che possono essere testati per il loro tipo con_class, ad es.any(backlinks, _class == 'Person')
any e len funzionano anche per elenchi memorizzati nell'oggetto stesso, come alternate_names o primary_name.surname_list.
Costanti e tipi¶
I valori fissi di Gramps sono disponibili come costanti, come Person.MALE, Person.FEMALE, Person.UNKNOWN, o i livelli di fiducia Citation.CONF_VERY_LOW a Citation.CONF_VERY_HIGH. I tipi sono confrontati dal loro value con costanti come EventType.BIRTH, FamilyRelType.MARRIED, NameType.BIRTH, PlaceType.VILLAGE, o RepositoryType.ARCHIVE:
type.value == EventType.BAPTISM
I tipi personalizzati che hai inserito tu stesso non hanno una costante propria.
Date¶
Date('...') trasforma una data scritta come testo in un valore che può essere confrontato con il sortval di una data, ad es. birth.date.sortval < Date('1800').
Il sortval è un singolo punto nel tempo e ignora il tipo e la qualità di una data: "prima del 1800", "circa 1800" e "1800" hanno tutti lo stesso sortval, e per un intervallo o un periodo è l'inizio. Per tenerne conto, confronta il modifier o la quality della data con costanti come Date.MOD_ABOUT, Date.MOD_BEFORE, Date.MOD_AFTER, Date.MOD_RANGE, Date.MOD_SPAN, o Date.QUAL_ESTIMATED:
date.modifier == Date.MOD_ABOUT
Esempi commentati¶
Elenco delle persone:
gender == Person.FEMALE and like(given_name, 'Mar%')
Donne il cui nome inizia con "Mar".
Date('1850') <= birth.date.sortval < Date('1900')
Persone nate dal 1850 al 1899.
birth.place.name.value == death.place.name.value
Persone nate e morte in un luogo con lo stesso nome.
not any(notes)
Persone senza note.
any(events, type.value == EventType.BURIAL)
Persone con un evento di sepoltura.
any(alternate_names, surname_list[0].surname == 'Meyer')
Persone con un nome alternativo con il cognome Meyer.
Elenco delle famiglie:
len(children) > 10
Famiglie con più di 10 figli.
len(children, gender == Person.FEMALE) == 3
Famiglie con tre figlie.
mother.death.date.sortval < father.death.date.sortval
Famiglie in cui la madre è morta prima del padre.
Elenco degli eventi:
type.value == EventType.BAPTISM and place.name.value == 'Berlin'
Battesimi in un luogo chiamato Berlino.
Elenco delle citazioni:
confidence >= Citation.CONF_HIGH
Citazioni con alta o altissima fiducia.
Elenco delle note:
'David' in text.string and private == True
Note private che contengono "David".
not any(backlinks)
Note che non sono collegate a nessun oggetto.
Riferimento completo¶
Per il riferimento completo del linguaggio, vedere la documentazione GOQL.