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