Фільтрація за допомогою Мови Запитів Gramps¶
Перегляди списків об'єктів (люди, сім'ї, події тощо) мають необов'язковий розширений режим фільтрації на основі Мови Запитів Gramps (GQL).
Щоб його використовувати, введіть запит у синтаксисі GQL і натисніть Enter (або натисніть кнопку "застосувати"). Перегляд буде відфільтровано за запитом. Якщо запит недійсний, рамка поля введення стає червоною.
Синтаксис GQL описано нижче, скопійовано з документації GQL.
Синтаксис¶
Запит GQL — це рядок, що складається з виразів у формі властивість оператор значення, які можуть бути об'єднані з ключовими словами and і or, а також дужками.
Властивості¶
class¶
Фільтрує за класом об'єкта Gramps і може бути одним з person, family, event, place, citation, source, repository, media або note.
Властивості об'єкта¶
GQL підтримує запити до вкладених властивостей об'єктів Gramps, наприклад, primary_name.date.calendar. Дивіться нижче повний список властивостей – також дивіться Модель Даних Gramps.
Елементи списку за індексом¶
Окремі елементи в спископодібних властивостях можуть бути доступні за позиційним індексом у квадратних дужках. Це можна поєднувати з вкладеними властивостями, наприклад, primary_name.surname_list[0].surname.
length¶
Це спеціальна властивість, яка повертає довжину масивоподібної властивості Gramps, наприклад, media_list.length > 0, щоб отримати об'єкти з медіа посиланнями.
all, any¶
Ще дві спеціальні властивості для масивоподібних властивостей Gramps. all вимагає, щоб умова застосовувалася до всіх елементів списку, any вимагає, щоб вона застосовувалася принаймні до одного елемента. Приклади: media_list.any.citation_list.length > 0, щоб повернути об'єкти з медіа посиланнями, які мають цитати; media_list.all.citation_list.length = 0, щоб повернути об'єкти, де всі медіа об'єкти не мають цитат.
Індекс масиву¶
Числовий індекс масиву можна використовувати для доступу до конкретних елементів списку, наприклад, child_ref_list[0] для першої дитини.
get_person тощо¶
Хоча всі попередні властивості стосуються одного об'єкта Gramps, також можливо фільтрувати за різними об'єктами, на які посилається початковий об'єкт. Наприклад, подія має посилання на місце у своїй властивості place. Використовуючи псевдовластивість get_place, GQL переходить до властивостей цього об'єкта. Наприклад, можливо шукати class = event and place.get_place.name.value ~ York. Це також можна поєднувати з any або all, наприклад, class = person and event_ref_list.any.ref.get_event.description ~ farmer.
Оператори¶
=, !=¶
Рівність або нерівність. Приклади: class = person, class != family
>, >=, <, <=¶
Порівняння. Працює як для рядків, так і для чисел. Приклади: confidence <= 1, change > 1712477760, gramps_id > "I2015"
~, !~¶
Містить або не містить. Працює як для списків, так і для рядків. Приклади: gramps_id !~ F00, author ~ David, family_list ~ "3a16680f7d226e3ac3eefc8b57a"
Без оператора/значення¶
Якщо оператор і значення не вказані, значення інтерпретується як логічне (true або false). Це працює для всіх типів властивостей, і правила Python для перетворення в true/false застосовуються. Наприклад, запит private повертає приватні об'єкти; confidence повертає об'єкти, де впевненість більша за 0; media_list повертає об'єкти з принаймні одним медіа посиланням.
Значення¶
Значення можуть бути числами або рядками. Якщо числа повинні інтерпретуватися як рядки або залучені спеціальні символи, такі як =, обгорніть значення в лапки. Приклади: gramps_id = F0001, але gramps_id = "0001".
Приклади з коментарями¶
class = note and private and text.string ~ David
Всі приватні нотатки, які містять рядок "David" у своєму тексті
media_list.length >= 10
Всі об'єкти (будь-якого класу) з 10 або більше медіа посиланнями
class != person and media_list.any.rect
Всі об'єкти, які не є особою, але мають медіа посилання, яке є частиною зображення. Тут media_list.any.rect означає, що для кожного з елементів у списку медіа перевіряється, чи має властивість rect (прямокутник) істинне значення, що означає, що це непорожній список. (media_list.any.rect.length > 0 матиме той же ефект.)
class = family and child_ref_list.length > 10
Сім'ї з більше ніж 10 дітьми.
class = event and date.modifier = 0 and date.dateval[2] > 2020
Події, де дата є нормальною датою (не діапазон тощо) і рік після 2020.
note_list.any.get_note.text.string ~ "David"
Всі об'єкти з принаймні однією нотаткою, яка містить рядок "David" у своєму тексті.
class = family and child_ref_list.all.ref.get_person.gender = 0 and child_ref_list.length = 3
Всі сім'ї з трьома доньками.
Повний список властивостей Gramps¶
Для повного списку властивостей Gramps дивіться документацію GQL.