Фільтрація за допомогою Мови Запитів Об'єктів Gramps¶
Перегляди списків об'єктів (люди, родини, події тощо) та список завдань мають поле фільтрації для виразів у Мові Запитів Об'єктів Gramps (GOQL).
Щоб його використовувати, відкрийте панель фільтрації, введіть вираз у полі GOQL та натисніть Enter (або натисніть Застосувати). Список фільтрується за виразом, поверх будь-яких інших активних фільтрів. Якщо вираз є недійсним, поле позначається як помилка.
Вираз завжди застосовується до об'єктів списку, в якому ви знаходитесь: у списку людей surname == 'Smith' знаходить людей з прізвищем Сміт.
Note
Поле GOQL потребує Gramps Web API 3.24 або новішої версії.
Синтаксис¶
Вираз GOQL виглядає як умова в мові програмування Python. Вам не потрібно знати Python, щоб його використовувати – приклади нижче покривають більшість потреб.
Порівняння¶
Порівняння має форму поле оператор значення, наприклад surname == 'Smith'.
| Оператор | Значення |
|---|---|
== |
дорівнює |
!= |
не дорівнює |
<, <= |
менше ніж, менше або дорівнює (раніше, менше) |
>, >= |
більше ніж, більше або дорівнює (пізніше, більше) |
in [ ... ] |
є одним з перерахованих значень, наприклад surname in ['Meyer', 'Maier'] |
not in [ ... ] |
не є жодним з перерахованих значень |
'text' in поле |
поле містить текст, наприклад 'mill' in surname |
is None |
поле порожнє або не існує, наприклад death.date.sortval is None |
Текст поміщається в одинарні або подвійні лапки ('Smith'), числа – без лапок (1850). Порівняння можуть бути з'єднані, наприклад Date('1850') <= birth.date.sortval < Date('1900').
Об'єднання умов¶
Умови можуть бути об'єднані за допомогою and та or, і інвертовані за допомогою not. and має пріоритет над or; використовуйте дужки для групування умов:
(gender == Person.MALE and surname == 'Smith') or given_name == 'Mary'
Шаблони тексту¶
like(field, 'pattern')відповідає шаблону, в якому%означає будь-який текст, а_– один символ, наприкладlike(given_name, 'J%')для всіх імен, що починаються на "J".regex(field, 'pattern')відповідає регулярному виразу, наприкладregex(surname, '^M[ae][iy]er$').
like та 'text' in поле ігнорують регістр (в SQLite це стосується лише літер A–Z без акцентів). regex чутливий до регістру.
Поля¶
Поле – це назва властивості об'єкта, такої як gender або gramps_id, або шлях до вкладеної властивості, такої як primary_name.first_name або primary_name.surname_list[0].surname. Квадратні дужки вибирають елемент списку за його позицією, починаючи з 0. Доступні властивості – це властивості моделі даних Gramps. Якщо поле не існує, повідомлення про помилку перераховує поля, які існують.
Декілька скорочень доступні:
- У людей є
given_nameтаsurname, ім'я та прізвище основного імені. - У людей є
birthтаdeath, їхні події народження та смерті, наприкладbirth.date.sortvalабоdeath.place.name.value. - У родин є
fatherтаmother, наприкладfather.surname == 'Smith'. - У подій є
place, у цитат єsource, а у місць єenclosed_by, місце, яке оточує.
Ці поля можуть бути з'єднані, наприклад father.birth.place.name.value у списку родин. Два поля також можуть бути порівняні між собою, наприклад father.surname == mother.surname.
Списки пов'язаних об'єктів¶
any(collection, condition) відповідає, якщо принаймні один елемент колекції відповідає умові, а len(collection) підраховує елементи. Без умови any(collection) відповідає, якщо колекція не порожня. Колекції:
- майже на кожному об'єкті:
notes,citations,mediaтаtags - у людей:
events,families(як партнер),parent_families(як дитина) таassociations - у родин:
children - у всіх об'єктах:
backlinks, об'єкти, які на них посилаються, які можна перевірити за їх типом за допомогою_class, наприкладany(backlinks, _class == 'Person')
any та len також працюють для списків, збережених в самому об'єкті, таких як alternate_names або primary_name.surname_list.
Константи та типи¶
Фіксовані значення Gramps доступні як константи, такі як Person.MALE, Person.FEMALE, Person.UNKNOWN, або рівні впевненості Citation.CONF_VERY_LOW до Citation.CONF_VERY_HIGH. Типи порівнюються за їх value з константами, такими як EventType.BIRTH, FamilyRelType.MARRIED, NameType.BIRTH, PlaceType.VILLAGE або RepositoryType.ARCHIVE:
type.value == EventType.BAPTISM
Користувацькі типи, які ви ввели самостійно, не мають власної константи.
Дати¶
Date('...') перетворює дату, написану як текст, на значення, яке можна порівнювати з sortval дати, наприклад birth.date.sortval < Date('1800').
sortval – це єдина точка в часі і ігнорує тип і якість дати: "до 1800", "близько 1800" та "1800" всі мають однаковий sortval, а для діапазону або проміжку це початок. Щоб врахувати це, порівняйте modifier або quality дати з константами, такими як Date.MOD_ABOUT, Date.MOD_BEFORE, Date.MOD_AFTER, Date.MOD_RANGE, Date.MOD_SPAN або Date.QUAL_ESTIMATED:
date.modifier == Date.MOD_ABOUT
Приклади з коментарями¶
Список людей:
gender == Person.FEMALE and like(given_name, 'Mar%')
Жінки, чиє ім'я починається на "Mar".
Date('1850') <= birth.date.sortval < Date('1900')
Люди, народжені з 1850 по 1899 рік.
birth.place.name.value == death.place.name.value
Люди, які народилися і померли в місці з однаковою назвою.
not any(notes)
Люди без нотаток.
any(events, type.value == EventType.BURIAL)
Люди з подією поховання.
any(alternate_names, surname_list[0].surname == 'Meyer')
Люди з альтернативним ім'ям з прізвищем Мейер.
Список родин:
len(children) > 10
Родини з більше ніж 10 дітьми.
len(children, gender == Person.FEMALE) == 3
Родини з трьома доньками.
mother.death.date.sortval < father.death.date.sortval
Родини, в яких мати померла раніше батька.
Список подій:
type.value == EventType.BAPTISM and place.name.value == 'Berlin'
Хрещення в місці з назвою Берлін.
Список цитат:
confidence >= Citation.CONF_HIGH
Цитати з високим або дуже високим рівнем впевненості.
Список нотаток:
'David' in text.string and private == True
Приватні нотатки, які містять "David".
not any(backlinks)
Нотатки, які не прикріплені до жодного об'єкта.
Повна довідка¶
Для повної довідки по мові дивіться документацію GOQL.