Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
0b01445
Add core data model
iand May 1, 2026
6bd886e
Implement database methods and migration
iand May 1, 2026
af52e68
Add initial edit views
iand May 1, 2026
9a633e3
Add navigator views for DNATest and DNAMatch
iand May 1, 2026
52aed77
Fix various missed registrations and signals
iand May 2, 2026
cbfa2fc
Refine the attribute lists shown for dna tests and matches
iand May 2, 2026
8b2e2b6
Extend Gramps XML to handle DNA additions
iand May 8, 2026
68d0ecf
Update POTFILES
iand May 8, 2026
7c51116
Remove filter editor menu items until we have filters for DNA objects
iand May 8, 2026
55eb6c1
Move DNATestView and DNAMatchView to a single DNA category
iand May 8, 2026
20053a9
Format modified files with black
iand May 10, 2026
be8cb10
Upgrades should skip tables added in later schemas
iand May 10, 2026
e708721
Move secondary editors to their own files
iand May 11, 2026
5e58bb7
Refactor SelectDNATest to use BaseSelector
iand May 11, 2026
64f749a
Add merge dialogs for DNATest and DNAMatch
iand May 11, 2026
2cc492a
Wire up set active person for DNATestView and DNAMatchView
iand May 11, 2026
20bc848
Add sidebar filters for DNATest and DNAMatch
iand May 12, 2026
d93c57d
Fix mypy errors
iand May 13, 2026
168874e
Handle custom dna attributes in xml import/export
iand May 14, 2026
2df5e92
fix: assign chromosome number change signal before setting active
iand May 20, 2026
d6b56bc
fix: show DNATest name and provider when it appears in a references tab
iand May 20, 2026
1fe0c48
fix: agjust predicted relationship tooltip to be clear about directio…
iand May 20, 2026
bed886b
fix: avoid save prompt when closing unedited DNATest
iand May 20, 2026
8348925
fix: size of edit/add/select buttons in edit DNAMatch
iand May 20, 2026
9f6a532
fix: show either person name or account name in DNATest references
iand May 20, 2026
d404263
fix: enable drag and drop for DNATests
iand May 20, 2026
bfedf8e
fix: enable drag and drop of person onto shared ancestor list
iand May 20, 2026
5aa4157
fix: disable make X active person if no person in DNATestView and DNA…
iand May 20, 2026
dbe4505
Add ibd_state to segments
iand May 22, 2026
49db696
Revert XML schema version to 1.8.0
iand May 23, 2026
dbf30fd
fix: merge segment lists and shared ancestors
iand May 24, 2026
e71e5cd
fix: remove dangling person references in SharedAncestor when person …
iand May 24, 2026
fd1e8a7
fix: date comparison in EditDNATest.data_has_changed
iand May 24, 2026
b7a263c
fix: size of date picker button on EditDNAMatch
iand May 24, 2026
9e1bacf
fix: use accessor functions in xml writer
iand May 24, 2026
0b67c71
fix: use correct icon name in DNATestBackRefList
iand May 24, 2026
cf79a33
Add DNA Test and DNA Match ID prefix configuration
iand May 24, 2026
710ed41
Split haplogroup into Y and mt haplogroup fields
iand May 25, 2026
4ddc26d
fix: remove temporary shim used while testing
iand May 25, 2026
b6fbf01
fix: add missing imports in clipboard edit_obj
iand May 30, 2026
5e4d658
fix: add DNA test and match to GrampsLocale.trans_objclass
iand May 31, 2026
6f545fa
Add citation and note support to DNA test and match attributes
iand Jun 3, 2026
1773d29
fix: prevent add person button stretching in DNA test editor
iand Jun 3, 2026
1d7dfe7
fix: make order of tabs consistent with other forms
iand Jun 4, 2026
4e1c5de
Split DNAMatch sidebar name/account filter into separate per-field rules
iand Jun 16, 2026
0c2a8a1
Implement basic filters for DNATest and DNAMatch
iand May 25, 2026
53b8bc5
Enable UI options for custom filters
iand May 25, 2026
70c6097
Add DNATest filter rules for Y-DNA and mtDNA haplogroups
iand Jun 12, 2026
132f47d
Add DNATest linked-person filter and Person ID selector in filter editor
iand Jun 12, 2026
98e4c2c
Add DNATest filter rule matching linked person against a person filter
iand Jun 12, 2026
5c7ef63
Reorganise DNATest filter categories
iand Jun 12, 2026
711df3e
Add DNAMatch filter rule for chromosome
iand Jun 12, 2026
49d17b5
Add HasMatchPerson and HasSubjectPerson DNA match filter rules
iand Jun 13, 2026
19a1693
Add HasSharedAncestor DNA match filter rule
iand Jun 13, 2026
100e4da
Add HasNoSharedAncestors DNA match filter rule
iand Jun 13, 2026
55040e9
Add HasSegment DNA match filter, replacing HasChromosome
iand Jun 13, 2026
9e92f37
Fold confidence criterion into HasSharedAncestor DNA match filter
iand Jun 13, 2026
00ab1a3
Add MatchesSubjectTestFilter and MatchesMatchTestFilter DNA match fil…
iand Jun 13, 2026
12d3f66
Add SharesSegmentWithMatch DNA match filter and DNAMatch selector
iand Jun 13, 2026
c149543
Add HasSegmentOverlapping DNA match filter
iand Jun 13, 2026
ad022b5
Add HasDNATest person filter with provider and test type criteria
iand Jun 13, 2026
029b08a
Add HasDNATestWithTag person filter
iand Jun 13, 2026
dce48b1
Add HasDNATestWithAttribute person filter and use DNAAttributeType
iand Jun 13, 2026
41b7361
Add person filter rules for Y-DNA and mtDNA haplogroups
iand Jun 13, 2026
6a1b661
Add person filter rule for people with a DNA match
iand Jun 13, 2026
5e8b304
dd person filter rule for shared ancestors in DNA matches
iand Jun 13, 2026
0391bca
Add person filter rule for shared ancestors in a person's DNA matches
iand Jun 13, 2026
1da51a9
Fix mypy error by widening HasAttributeBase.attribute_class to type[G…
iand Jun 13, 2026
c4d567f
Add DNATest filter for shared matches of both kits in a DNA match
iand Jun 13, 2026
100134b
Rebase for filter change in dna-core
iand Jun 16, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
96 changes: 89 additions & 7 deletions data/grampsxml.dtd
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,15 @@
-->

<!--
This is the Document Type Definition file for v1.7.2
This is the Document Type Definition file for v1.8.0
of the GRAMPS XML genealogy data format.
Please use the following formal public identifier to identify it:

"-//GRAMPS//DTD GRAMPS XML V1.7.2//EN"
"-//GRAMPS//DTD GRAMPS XML V1.8.0//EN"

For example:
<!DOCTYPE database PUBLIC "-//GRAMPS//DTD GRAMPS XML V1.7.2//EN"
"http://gramps-project.org/xml/1.7.2/grampsxml.dtd"
<!DOCTYPE database PUBLIC "-//GRAMPS//DTD GRAMPS XML V1.8.0//EN"
"http://gramps-project.org/xml/1.8.0/grampsxml.dtd"
[...]>
-->

Expand Down Expand Up @@ -59,8 +59,8 @@ DATABASE

<!ELEMENT database (header, name-formats?, tags?, events?, people?, families?,
citations?, sources?, places?, objects?, repositories?,
notes?, bookmarks?, namemaps?)>
<!ATTLIST database xmlns CDATA #FIXED "http://gramps-project.org/xml/1.7.2/">
notes?, dnatests?, dnamatches?, bookmarks?, namemaps?)>
<!ATTLIST database xmlns CDATA #FIXED "http://gramps-project.org/xml/1.8.0/">


<!-- ************************************************************
Expand Down Expand Up @@ -389,6 +389,88 @@ CITATIONS
change CDATA #REQUIRED
>

<!-- ************************************************************
DNA TESTS
-->

<!ELEMENT dnatests (dnatest)*>

<!ELEMENT dnatest (person?, account_name?, provider?, kit_id?, test_type?,
genome_build?, (daterange|datespan|dateval|datestr)?,
y_haplogroup?, mt_haplogroup?, attribute*, objref*, noteref*, citationref*,
tagref*)>
<!ATTLIST dnatest
id CDATA #IMPLIED
handle ID #REQUIRED
priv (0|1) #IMPLIED
change CDATA #REQUIRED
>

<!-- ************************************************************
DNA MATCHES
-->

<!ELEMENT dnamatches (dnamatch)*>

<!ELEMENT dnamatch (subject_test?, match_test?, shared_cm?, percent_shared?,
segment_count?, largest_segment_cm?, predicted_relationship?,
predicted_generations?, shared_ancestor*, dna_segment*,
attribute*, objref*, noteref*, citationref*, tagref*)>
<!ATTLIST dnamatch
id CDATA #IMPLIED
handle ID #REQUIRED
priv (0|1) #IMPLIED
change CDATA #REQUIRED
>

<!ELEMENT subject_test EMPTY>
<!ATTLIST subject_test hlink IDREF #REQUIRED>

<!ELEMENT match_test EMPTY>
<!ATTLIST match_test hlink IDREF #REQUIRED>

<!ELEMENT shared_cm EMPTY>
<!ATTLIST shared_cm val CDATA #REQUIRED>

<!ELEMENT percent_shared EMPTY>
<!ATTLIST percent_shared val CDATA #REQUIRED>

<!ELEMENT segment_count EMPTY>
<!ATTLIST segment_count val CDATA #REQUIRED>

<!ELEMENT largest_segment_cm EMPTY>
<!ATTLIST largest_segment_cm val CDATA #REQUIRED>

<!ELEMENT predicted_relationship (#PCDATA)>
<!ELEMENT predicted_generations EMPTY>
<!ATTLIST predicted_generations val CDATA #REQUIRED>

<!ELEMENT shared_ancestor (description?, person?, noteref*, citationref*)>
<!ATTLIST shared_ancestor
confidence CDATA #REQUIRED
>

<!ELEMENT dna_segment EMPTY>
<!ATTLIST dna_segment
chromosome CDATA #REQUIRED
start_bp CDATA #REQUIRED
end_bp CDATA #REQUIRED
shared_cm CDATA #REQUIRED
snp_count CDATA #REQUIRED
phase CDATA #REQUIRED
ibd_state CDATA #IMPLIED
start_rsid CDATA #IMPLIED
end_rsid CDATA #IMPLIED
>

<!ELEMENT account_name (#PCDATA)>
<!ELEMENT provider (#PCDATA)>
<!ELEMENT kit_id (#PCDATA)>
<!ELEMENT test_type (#PCDATA)>
<!ELEMENT genome_build (#PCDATA)>
<!ELEMENT y_haplogroup (#PCDATA)>
<!ELEMENT mt_haplogroup (#PCDATA)>

<!-- ************************************************************
BOOKMARKS
-->
Expand All @@ -397,7 +479,7 @@ BOOKMARKS
<!ELEMENT bookmark EMPTY>
<!ATTLIST bookmark
target (person|family|event|source|citation|place|media|repository|
note) #REQUIRED
note|dnatest|dnamatch) #REQUIRED
hlink IDREF #REQUIRED
>

Expand Down
119 changes: 118 additions & 1 deletion data/grampsxml.rng
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@

<grammar
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
ns="http://gramps-project.org/xml/1.7.2/"
ns="http://gramps-project.org/xml/1.8.0/"
xmlns="http://relaxng.org/ns/structure/1.0">

<start><element name="database">
Expand Down Expand Up @@ -121,6 +121,18 @@
</element></zeroOrMore>
</element></optional>

<optional><element name="dnatests">
<zeroOrMore><element name="dnatest">
<ref name="dnatest-content"/>
</element></zeroOrMore>
</element></optional>

<optional><element name="dnamatches">
<zeroOrMore><element name="dnamatch">
<ref name="dnamatch-content"/>
</element></zeroOrMore>
</element></optional>

<optional><element name="bookmarks">
<zeroOrMore><element name="bookmark">
<ref name="bookmark-content"/>
Expand Down Expand Up @@ -544,6 +556,8 @@
<value>media</value>
<value>repository</value>
<value>note</value>
<value>dnatest</value>
<value>dnamatch</value>
</choice></attribute>
<attribute name="hlink"><data type="IDREF"/></attribute>
</define>
Expand Down Expand Up @@ -770,4 +784,107 @@
<attribute name="priority"><data type="integer"/></attribute>
</define>

<define name="dnatest-content">
<ref name="primary-object"/>
<optional><element name="person">
<attribute name="hlink"><data type="IDREF"/></attribute>
</element></optional>
<optional><element name="account_name"><text/></element></optional>
<optional><element name="provider"><text/></element></optional>
<optional><element name="kit_id"><text/></element></optional>
<optional><element name="test_type"><text/></element></optional>
<optional><element name="genome_build"><text/></element></optional>
<optional><ref name="date-content"/></optional>
<optional><element name="y_haplogroup"><text/></element></optional>
<optional><element name="mt_haplogroup"><text/></element></optional>
<zeroOrMore><element name="attribute">
<ref name="attribute-content"/>
</element></zeroOrMore>
<zeroOrMore><element name="objref">
<ref name="objref-content"/>
</element></zeroOrMore>
<zeroOrMore><element name="noteref">
<ref name="noteref-content"/>
</element></zeroOrMore>
<zeroOrMore><element name="citationref">
<ref name="citationref-content"/>
</element></zeroOrMore>
<zeroOrMore><element name="tagref">
<ref name="tagref-content"/>
</element></zeroOrMore>
</define>

<define name="dnamatch-content">
<ref name="primary-object"/>
<optional><element name="subject_test">
<attribute name="hlink"><data type="IDREF"/></attribute>
</element></optional>
<optional><element name="match_test">
<attribute name="hlink"><data type="IDREF"/></attribute>
</element></optional>
<optional><element name="shared_cm">
<attribute name="val"><text/></attribute>
</element></optional>
<optional><element name="percent_shared">
<attribute name="val"><text/></attribute>
</element></optional>
<optional><element name="segment_count">
<attribute name="val"><text/></attribute>
</element></optional>
<optional><element name="largest_segment_cm">
<attribute name="val"><text/></attribute>
</element></optional>
<optional><element name="predicted_relationship"><text/></element></optional>
<optional><element name="predicted_generations">
<attribute name="val"><text/></attribute>
</element></optional>
<zeroOrMore><element name="shared_ancestor">
<ref name="shared-ancestor-content"/>
</element></zeroOrMore>
<zeroOrMore><element name="dna_segment">
<ref name="dna-segment-content"/>
</element></zeroOrMore>
<zeroOrMore><element name="attribute">
<ref name="attribute-content"/>
</element></zeroOrMore>
<zeroOrMore><element name="objref">
<ref name="objref-content"/>
</element></zeroOrMore>
<zeroOrMore><element name="noteref">
<ref name="noteref-content"/>
</element></zeroOrMore>
<zeroOrMore><element name="citationref">
<ref name="citationref-content"/>
</element></zeroOrMore>
<zeroOrMore><element name="tagref">
<ref name="tagref-content"/>
</element></zeroOrMore>
</define>

<define name="shared-ancestor-content">
<attribute name="confidence"><text/></attribute>
<optional><element name="description"><text/></element></optional>
<optional><element name="person">
<attribute name="hlink"><data type="IDREF"/></attribute>
</element></optional>
<zeroOrMore><element name="noteref">
<ref name="noteref-content"/>
</element></zeroOrMore>
<zeroOrMore><element name="citationref">
<ref name="citationref-content"/>
</element></zeroOrMore>
</define>

<define name="dna-segment-content">
<attribute name="chromosome"><text/></attribute>
<attribute name="start_bp"><text/></attribute>
<attribute name="end_bp"><text/></attribute>
<attribute name="shared_cm"><text/></attribute>
<attribute name="snp_count"><text/></attribute>
<attribute name="phase"><text/></attribute>
<optional><attribute name="ibd_state"><text/></attribute></optional>
<optional><attribute name="start_rsid"><text/></attribute></optional>
<optional><attribute name="end_rsid"><text/></attribute></optional>
</define>

</grammar>
Loading