Фильтрация с использованием языка запросов объектов Gramps¶
Представления списков объектов (люди, семьи, события и т. д.) и список задач имеют поле фильтра для выражений на языке запросов объектов Gramps (GOQL).
Чтобы использовать его, откройте панель фильтра, введите выражение в поле GOQL и нажмите Enter (или нажмите Применить). Список фильтруется по выражению, поверх любых других активных фильтров. Если выражение недействительно, поле помечается как ошибка.
Выражение всегда применяется к объектам списка, в котором вы находитесь: в списке людей surname == 'Smith' находит людей с фамилией Смит.
Примечание
Поле GOQL требует Gramps Web API 3.24 или новее.
Синтаксис¶
Выражение GOQL выглядит как условие в языке программирования Python. Вам не нужно знать Python, чтобы использовать его – примеры ниже охватывают большинство потребностей.
Сравнения¶
Сравнение имеет форму field operator value, например surname == 'Smith'.
| Оператор | Значение |
|---|---|
== |
равно |
!= |
не равно |
<, <= |
меньше, меньше или равно (раньше, меньше) |
>, >= |
больше, больше или равно (позже, больше) |
in [ ... ] |
является одним из перечисленных значений, например surname in ['Meyer', 'Maier'] |
not in [ ... ] |
не является ни одним из перечисленных значений |
'text' in field |
поле содержит текст, например '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 field игнорируют регистр (в 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.