Filter mit der Gramps Abfragesprache¶
Die Objektlistenansichten (Personen, Familien, Ereignisse, ...) haben einen optionalen erweiterten Filtermodus, der auf der Gramps Abfragesprache (GQL) basiert.
Um ihn zu verwenden, geben Sie eine Abfrage in GQL-Syntax ein und drücken Sie die Eingabetaste (oder klicken Sie auf die Schaltfläche "Anwenden"). Die Ansicht wird durch die Abfrage gefiltert. Wenn die Abfrage ungültig ist, wird der Rahmen des Eingabefelds rot.
Die GQL-Syntax wird im Folgenden beschrieben, kopiert aus der GQL-Dokumentation.
Syntax¶
Eine GQL-Abfrage ist eine Zeichenkette, die aus Aussagen der Form property operator value besteht, die optional mit den Schlüsselwörtern and und or sowie Klammern kombiniert werden kann.
Eigenschaften¶
class¶
Filtert nach der Gramps-Objektklasse und kann eine der folgenden sein: person, family, event, place, citation, source, repository, media oder note.
Objekt-Eigenschaften¶
GQL unterstützt das Abfragen von verschachtelten Eigenschaften von Gramps-Objekten, z.B. primary_name.date.calendar. Siehe unten für eine vollständige Liste der Eigenschaften – siehe auch Gramps-Datenmodell.
Listenelemente nach Index¶
Einzelne Elemente in listenähnlichen Eigenschaften können durch den Positionsindex in eckigen Klammern zugegriffen werden. Dies kann mit verschachtelten Eigenschaften kombiniert werden, z.B. primary_name.surname_list[0].surname.
length¶
Dies ist eine spezielle Eigenschaft, die die Länge einer array-ähnlichen Gramps-Eigenschaft zurückgibt, z.B. media_list.length > 0, um Objekte mit Medienreferenzen zu erhalten.
all, any¶
Zwei weitere spezielle Eigenschaften für array-ähnliche Gramps-Eigenschaften. all erfordert, dass eine Bedingung für alle Elemente der Liste gilt, any erfordert, dass sie für mindestens ein Element gilt. Beide Eigenschaften können mit anderen Eigenschaften davor und danach kombiniert werden. Beispiele: media_list.any.citation_list.length > 0, um Objekte mit Medienreferenzen zurückzugeben, die Zitationen haben; media_list.all.citation_list.length = 0, um Objekte zurückzugeben, bei denen alle Medienobjekte keine Zitationen haben.
Array-Index¶
Ein numerischer Array-Index kann verwendet werden, um auf spezifische Elemente einer Liste zuzugreifen, z.B. child_ref_list[0] für das erste Kind.
get_person, usw.¶
Während sich alle vorhergehenden Eigenschaften auf ein einzelnes Gramps-Objekt beziehen, ist es auch möglich, nach verschiedenen Objekten zu filtern, die vom ursprünglichen Objekt referenziert werden. Zum Beispiel hat ein Ereignis einen Platz-Handle in seiner place-Eigenschaft. Mit der Pseudo-Eigenschaft get_place wechselt GQL zu den Eigenschaften dieses Objekts. Zum Beispiel ist es möglich, nach class = event and place.get_place.name.value ~ York zu suchen. Dies kann auch mit any oder all kombiniert werden, z.B. class = person and event_ref_list.any.ref.get_event.description ~ farmer.
Operatoren¶
=, !=¶
Gleichheit oder Ungleichheit. Beispiele: class = person, class != family
>, >=, <, <=¶
Vergleich. Funktioniert sowohl für Strings als auch für Zahlen. Beispiele: confidence <= 1, change > 1712477760, gramps_id > "I2015"
~, !~¶
Enthält oder enthält nicht. Funktioniert für Listen sowie Strings. Beispiele: gramps_id !~ F00, author ~ David, family_list ~ "3a16680f7d226e3ac3eefc8b57a"
Kein Operator/Wert¶
Wenn kein Operator und kein Wert angegeben ist, wird der Wert als boolesch (true oder false) interpretiert. Dies funktioniert für alle Arten von Eigenschaften, und die Python-Regeln für das Casting zu true/false werden angewendet. Zum Beispiel gibt die Abfrage private private Objekte zurück; confidence gibt Objekte zurück, bei denen die Zuversicht größer als 0 ist; media_list gibt Objekte mit mindestens einer Medienreferenz zurück.
Werte¶
Werte können Zahlen oder Strings sein. Wenn Zahlen als Strings interpretiert werden sollen oder spezielle Zeichen wie = beteiligt sind, schließen Sie den Wert in Anführungszeichen ein. Beispiele: gramps_id = F0001, aber gramps_id = "0001".
Kommentierte Beispiele¶
class = note and private and text.string ~ David
Alle privaten Notizen, die den String "David" in ihrem Text enthalten
media_list.length >= 10
Alle Objekte (beliebiger Klasse) mit 10 oder mehr Medienreferenzen
class != person and media_list.any.rect
Alle Objekte, die keine Person sind, aber eine Medienreferenz haben, die Teil eines Bildes ist. Hier bedeutet media_list.any.rect, dass für jedes der Elemente in der Medienliste überprüft wird, ob die rect (Rechteck)-Eigenschaft einen wahrheitswertigen Wert hat, was bedeutet, dass es sich um eine nicht leere Liste handelt. (media_list.any.rect.length > 0 hätte den gleichen Effekt.)
class = family and child_ref_list.length > 10
Familien mit mehr als 10 Kindern.
class = event and date.modifier = 0 and date.dateval[2] > 2020
Ereignisse, bei denen das Datum ein normales Datum ist (nicht ein Bereich usw.) und das Jahr nach 2020 liegt.
note_list.any.get_note.text.string ~ "David"
Alle Objekte mit mindestens einer Notiz, die den String "David" in ihrem Text enthalten.
class = family and child_ref_list.all.ref.get_person.gender = 0 and child_ref_list.length = 3
Alle Familien mit drei Töchtern.
Vollständige Liste der Gramps-Eigenschaften¶
Für eine vollständige Liste der Gramps-Eigenschaften siehe die GQL-Dokumentation.