跳转至

使用 Gramps 查询语言进行过滤

对象列表视图(人员、家庭、事件等)具有基于 Gramps 查询语言 (GQL) 的可选高级过滤模式。

要使用它,请输入 GQL 语法的查询并按回车键(或点击“应用”按钮)。视图将根据查询进行过滤。如果查询无效,输入框的边框将变为红色。

GQL 语法如下所述,复制自 GQL 文档。

语法

GQL 查询是由 property operator value 形式的语句组成的字符串,可以选择性地与关键字 andor 以及括号结合使用。

属性

class

过滤 Gramps 对象类,可以是 personfamilyeventplacecitationsourcerepositorymedianote 之一。

对象属性

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。这也可以与 anyall 结合使用,例如 class = person and event_ref_list.any.ref.get_event.description ~ farmer

运算符

=, !=

相等或不相等。示例:class = personclass != family

>, >=, <, <=

比较。适用于字符串和数字。示例:confidence <= 1change > 1712477760gramps_id > "I2015"

~, !~

包含或不包含。适用于列表和字符串。示例:gramps_id !~ F00author ~ Davidfamily_list ~ "3a16680f7d226e3ac3eefc8b57a"

无运算符/值

如果未给出运算符和值,则该值被解释为布尔值(真或假)。这适用于所有类型的属性,并应用 Python 的真/假转换规则。例如,查询 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 文档