Фильтрация с использованием языка запросов 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.