コンテンツにスキップ

Grampsオブジェクトクエリ言語を使用したフィルタリング

オブジェクトリストビュー(人物、家族、イベントなど)およびタスクリストには、Grampsオブジェクトクエリ言語(GOQL)の式用のフィルターフィールドがあります。

使用するには、フィルターパネルを開き、GOQLフィールドに式を入力してEnterを押すか(または適用をクリックします)。リストは、他のアクティブなフィルターの上に式によってフィルタリングされます。式が無効な場合、フィールドはエラーとしてマークされます。

式は常に、現在いるリストのオブジェクトに適用されます:人物リストでは、surname == 'Smith'は姓がSmithの人物を見つけます。

Note

GOQLフィールドにはGramps Web API 3.24以降が必要です。

構文

GOQL式は、Pythonプログラミング言語の条件のように見えます。使用するためにPythonを知っている必要はありません – 以下の例はほとんどのニーズをカバーしています。

比較

比較はfield operator valueの形式を持ちます。例えば、surname == 'Smith'です。

Operator 意味
== 等しい
!= 等しくない
<, <= より小さい、以下(早い、小さい)
>, >= より大きい、以上(遅い、大きい)
in [ ... ] リストされた値の1つである、例えば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のようにします。また、2つのフィールドを互いに比較することもできます。例えば、father.surname == mother.surnameです。

関連オブジェクトのリスト

any(collection, condition)は、コレクションの少なくとも1つのアイテムが条件を満たす場合に一致し、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までです。型は、EventType.BIRTH、FamilyRelType.MARRIED、NameType.BIRTH、PlaceType.VILLAGE、またはRepositoryType.ARCHIVEのような定数とそのvalueで比較されます:

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')

姓がMeyerの別名を持つ人物。

家族リスト:

len(children) > 10

10人以上の子供を持つ家族。

len(children, gender == Person.FEMALE) == 3

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ドキュメントを参照してください。