跳转至

使用 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 以获取具有媒体引用的对象。

allany

两个用于类数组的 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"

无操作符/值

如果未给出操作符和值,则该值被解释为布尔值(true 或 false)。这适用于所有类型的属性,并应用 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 文档