Перейти к содержанию

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