Redacting a Tree for sample data

I just needed to export sample data for a DNA related issue. Since DNA data tends to involve living persons, it made sense to export a limited skeleton of my tree with mostly redacted data.

Sufficiently redacting the skeletal tree was a very involved process.

Steps

Create the skeleton tree

Export the Home Person (myself), the cousins with the DNA matches in question, a ‘control’ cousin without a match, and the pedigrees linking the cousins through common ancestors to the Home Person.

This was accomplished by using a Custom Filter with the Relationship path between <person> and people matching <filter> rule.

My choice for “matching <filter>” was a based on Tagged persons. I created a Tag and then (laboriously) found each cousin and added Tags. (No drag’n’drop for a tag. And extended selection for the cousins wasn’t viable.)

I later realized it would’ve been easier to use the Clipboard. Copy the cousins and use its context menu to “Create Filter from the person(s) selected…”.

The (colored) Tags still proved a good way to unambiguously flag the Home Person and the target cousins in the People category views. But it would’ve been easier to use the Add/Remove Tag addon tool with the Clipboard-generated Custom Filter. Or to use Filter Gramplet to show the that Custom Filter in the flat list People view, do a select-all and then Edit → Tag → Add tag ‘DNA matches’

A basic skeleton was exported using the “Relationship path” filtered data to a “Gramps XML (family tree)” (not a “Gramps XML Package (family tree and media)” with the Reference Filters “Do not include records not linked to a selected person

Creating a new, blank Family Tree and importing the exported skeleton didn’t give me what was expected. Instead of exactly matching the Gramps IDs in the 2 trees, the “I%04d” ID Formats Preferences for the Person overrode the “I%08d” leading zeros. (Which is one of the differences between an import-based backup recovery and a true “Restore from backup” recovery.) My system had difference ID Formats preferences than those of my pen-pal. So suddenly, we were not using the same references.

That leading-zero difference complicated eMail discussions using reference Gramps IDs. Worse, it changed tool and rule parameters between us.

Winnowing the skeleton tree data

Next, the distractions and excessive Privacy exposures needed to be cleaned out.

Started with the easy items:

  • in Events view, delete all records with event types not related to the issue. Birth & Death give context to the relationships. I have DNA Testing recorded as Medical Information. So deleted everything but Birth, Death and Medical Information Events.
  • in Source view, delete all Source not related to the issue.
  • Another export cycle removed all the unconnected data

Too much detail in the Events is also an exposure. So used the MultiMerge addon gramplet to collapse the Place hierarchy to State administrative level.

That left the things that had to be done manually.

Interesting was that all common ancestors were not included, so it uncovered an error in the DNA Segment Map gramplet. Specifically, grandparent and sibling were included but great grandparent was not. So calculating relationship (2nd cousin) succeeded but calculating common ancestor failed.

1 Like

That was interesting. Just like Deep Connection gramplet, the common ancestor was not included in the path between people. There doesn’t seem to be a way to get them included.

There isn’t a Family equivalent rule to Relationship path between <person> and people matching <filter>

There is a way, but it’s complicated:

To get the paths between the home person (I0000) and people in myfilter including the most recent common ancestors:

%/filter>
%filter name=“Full path home & myfilter” function=“or”>
%rule class=“MatchesFilter” use_regex=“False” use_case=“False”>
%arg value=“zMost recent common ancestor home & myfilter”/>
%/rule>
%rule class=“MatchesFilter” use_regex=“False” use_case=“False”>
%arg value=“zShort path home & myfilter”/>
%/rule>
%/filter>

%/filter>
%filter name=“zMost recent common ancestor home & myfilter” function=“and”>
%rule class=“MatchesFilter” use_regex=“False” use_case=“False”>
%arg value=“zShort path home & myfilter & parents”/>
%/rule>
%rule class=“MatchesFilter” use_regex=“False” use_case=“False”>
%arg value=“zCommon ancestors home & myfilter”/>
%/rule>
%/filter>

%/filter>
%filter name=“zShort path home & myfilter” function=“and”>
%rule class=“DeepRelationshipPathBetween” use_regex=“False” use_case=“False”>
%arg value=“I00000”/>
%arg value=“myfilter”/>
%/rule>
%/filter>

%/filter>
%filter name=“zCommon ancestors home & myfilter” function=“and”>
%rule class=“IsAncestorOf” use_regex=“False” use_case=“False”>
%arg value=“I00000”/>
%arg value=“1”/>
%/rule>
%rule class=“IsAncestorOfFilterMatch” use_regex=“False” use_case=“False”>
%arg value=“myfilter”/>
%/rule>
%/filter>

Thank you but that posting seems have been mangled.

Could you try to Edit it?

Start (and end) a XML section with multiple lines of code with a line containing just 3 backticks ( ` ). The starting line can have a suffix specifying the type of encoding. (Like XML or python ) if you want Discousre to try color-coding keywords.

Discourse sees bookmatched “less than” (<) and “greater than” (>) symbols as HTML markdown. So they are hidden.

There is a way, but it’s complicated:

To get the paths between the home person (I0000) and people in myfilter including the most recent common ancestors:

Thank you @emyoulation I have tried to edit it as you suggest.

Where is this editing documented, please?

  </filter>
<filter name="Full path home & myfilter" function="or">
<rule class="MatchesFilter" use_regex="False" use_case="False">
<arg value="zMost recent common ancestor home & myfilter"/>
</rule>
<rule class="MatchesFilter" use_regex="False" use_case="False">
<arg value="zShort path home & myfilter"/>
</rule>
</filter>

</filter>
<filter name="zMost recent common ancestor home & myfilter" function="and">
<rule class="MatchesFilter" use_regex="False" use_case="False">
<arg value="zShort path home & myfilter & parents"/>
</rule>
<rule class="MatchesFilter" use_regex="False" use_case="False">
<arg value="zCommon ancestors home & myfilter"/>
</rule>
</filter>

</filter>
<filter name="zShort path home & myfilter" function="and">
<rule class="DeepRelationshipPathBetween" use_regex="False" use_case="False">
<arg value="I00000"/>
<arg value="myfilter"/>
</rule>
</filter>

</filter>
<filter name="zCommon ancestors home & myfilter" function="and">
<rule class="IsAncestorOf" use_regex="False" use_case="False">
<arg value="I00000"/>
<arg value="1"/>
</rule>
<rule class="IsAncestorOfFilterMatch" use_regex="False" use_case="False">
<arg value="myfilter"/>
</rule>
</filter>
1 Like

There is a Discourse New User Guide topic in the User Manuals subsection of the Help category.

Sorry, one filter was missing:

</filter>
<filter name="zShort path home & myfilter & parents" function="or">
<rule class="MatchesFilter" use_regex="False" use_case="False">
<arg value="zShort path home & myfilter"/>
</rule>
<rule class="IsParentOfFilterMatch" use_regex="False" use_case="False">
<arg value="zShort path home & myfilter"/>
</rule>
</filter>
1 Like