Difference between revisions of "Customize reports with XML tool"
JohnRSibert (talk | contribs) (Initial commit of How To for managing xml) |
JohnRSibert (talk | contribs) (Move content, reformat code with pre and code tags, add installation) |
||
Line 1: | Line 1: | ||
{{Languages}} | {{Languages}} | ||
{{man warn|1=🚧 Work In Progress|2=This wikipage is an outline from a template being roughed in. Please don't edit '''''just yet'''''. Instead, contribute suggestions on the Discussion page. <br /><br />This page is not planned be linked to a public page until about 2 weeks after 26 March 2021. <br /><br />If this notice remains after that date, please feel welcome to remove this notice and consider the content 'fair game' for unlimited editing.}} | {{man warn|1=🚧 Work In Progress|2=This wikipage is an outline from a template being roughed in. Please don't edit '''''just yet'''''. Instead, contribute suggestions on the Discussion page. <br /><br />This page is not planned be linked to a public page until about 2 weeks after 26 March 2021. <br /><br />If this notice remains after that date, please feel welcome to remove this notice and consider the content 'fair game' for unlimited editing.}} | ||
− | |||
− | |||
− | + | [[User:JohnRSibert|JohnRSibert]] ([[User talk:JohnRSibert|talk]]) 15:52, 26 March 2021 (UTC) | |
− | + | == Family Lines Graph == | |
− | |||
− | |||
− | |||
+ | Families often have complicated structure, especially for Twenty-first century blended families. Creating a [[Gramps_{{man version}}_Wiki_Manual_-_Reports_-_part_5#Family_Lines_Graph|Family Lines Graph]] for such families often involves carefully selecting multiple people to include. | ||
− | {{ | + | Gramps stores these selections in a file named <code>report_options.xml</code> in the <code>~/.gramps</code> [[Gramps_{{man version}}_Wiki_Manual_-_User_Directory|User directory]]. The report options are '''overwritten''' every time a graphical report is created. |
− | |||
− | |||
− | |||
− | + | It is possible to edit this file manually with a text editor, but that is a tedious and error-prone procedure. The following [https://wikipedia.org/wiki/Bash_(Unix_shell) bash] script will take care of the process for you backing up the current file and saving the list of person IDs in a file that can be reused. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | - | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<pre> | <pre> | ||
− | + | <code> | |
− | + | #!/bin/bash | |
− | < | + | if [ $# -lt 1 ];then |
− | + | echo "Utility to replace list of People of Ineterst in Gramps Family Lines Graph." | |
− | + | echo "The file 'report_options.xml' is overwritten after making a backup." | |
− | + | echo "The current list of People of Ineterst is saved for possible reuse" | |
− | + | echo "Usage: "$0" current_pid [new_pid]" | |
− | + | echo " current_pid is the file name in which to save current pid list" | |
− | + | echo " Optional. If present, new_pid is the name of the file containing" | |
− | + | echo " the new pid list" | |
− | + | echo " eg " $0" bigfamily.pid three_gen.pid" | |
− | + | exit 1 | |
− | + | fi | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | gramps_home=~/.gramps/ | |
− | + | #echo "gramps_home = "$gramps_home | |
+ | opts=$gramps_home"report_options.xml" | ||
+ | #echo "opts = "$opts | ||
+ | bak=$opts".bak" | ||
+ | #echo "bak = "$bak | ||
− | + | echo "Backing up "$opts " to " $bak | |
− | + | cp -irp $opts $bak | |
− | |||
− | |||
− | + | echo "Saving current pid list to "$gramps_home$1 | |
− | + | lxprintf -e 'module[@name="familylines_graph"]/option[@name="gidlist"]'\ | |
− | + | "%s\n" @value $opts > $gramps_home$1 | |
− | |||
− | |||
− | |||
− | |||
+ | echo "Replacing pids in "$opts | ||
+ | echo " with the contents of "$gramps_home$2 | ||
− | + | # replacing the xml in situ does not seem to work correctly | |
− | + | # instead send it to a temporary file and copy | |
− | + | lxreplace -q \ | |
− | + | 'module[@name="familylines_graph"]/option[@name="gidlist"]' \ | |
− | + | -@ '"value"' "'`cat $gramps_home$2`'" \ | |
− | + | ~/.gramps/report_options.xml > /tmp/temp.xml | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | Copy the this code into a file, or get the most | + | cp -fv /tmp/temp.xml $opts 2>>/dev/null |
− | [https://github.com/johnrsibert/Grampsish/blob/main/fix_fl_people.sh github], and save it to a directory on your [http://www.linfo.org/path_env_var.html PATH]. | + | echo "Updated "$opts |
+ | <code/> | ||
+ | <pre/> | ||
+ | Copy the this code into a file, or get the most [https://github.com/johnrsibert/Grampsish/blob/main/fix_fl_people.sh recent version] of the script from [https://github.com/ github], and save it to a directory on your [http://www.linfo.org/path_env_var.html PATH]. You will also need the [https://www.ltg.ed.ac.uk/software/ltxml2/ LTXML2 Toolkit] from the Language Technology Group at Edinburgh University. |
Revision as of 17:43, 26 March 2021
Languages: |
[[::Customize reports with XML tool|English]] |
JohnRSibert (talk) 15:52, 26 March 2021 (UTC)
Family Lines Graph
Families often have complicated structure, especially for Twenty-first century blended families. Creating a Family Lines Graph for such families often involves carefully selecting multiple people to include.
Gramps stores these selections in a file named report_options.xml
in the ~/.gramps
User directory. The report options are overwritten every time a graphical report is created.
It is possible to edit this file manually with a text editor, but that is a tedious and error-prone procedure. The following bash script will take care of the process for you backing up the current file and saving the list of person IDs in a file that can be reused.
#!/bin/bash
if [ $# -lt 1 ];then
echo "Utility to replace list of People of Ineterst in Gramps Family Lines Graph."
echo "The file 'report_options.xml' is overwritten after making a backup."
echo "The current list of People of Ineterst is saved for possible reuse"
echo "Usage: "$0" current_pid [new_pid]"
echo " current_pid is the file name in which to save current pid list"
echo " Optional. If present, new_pid is the name of the file containing"
echo " the new pid list"
echo " eg " $0" bigfamily.pid three_gen.pid"
exit 1
fi
gramps_home=~/.gramps/
#echo "gramps_home = "$gramps_home
opts=$gramps_home"report_options.xml"
#echo "opts = "$opts
bak=$opts".bak"
#echo "bak = "$bak
echo "Backing up "$opts " to " $bak
cp -irp $opts $bak
echo "Saving current pid list to "$gramps_home$1
lxprintf -e 'module[@name="familylines_graph"]/option[@name="gidlist"]'\
"%s\n" @value $opts > $gramps_home$1
echo "Replacing pids in "$opts
echo " with the contents of "$gramps_home$2
# replacing the xml in situ does not seem to work correctly
# instead send it to a temporary file and copy
lxreplace -q \
'module[@name="familylines_graph"]/option[@name="gidlist"]' \
-@ '"value"' "'`cat $gramps_home$2`'" \
~/.gramps/report_options.xml > /tmp/temp.xml
cp -fv /tmp/temp.xml $opts 2>>/dev/null
echo "Updated "$opts
Copy the this code into a file, or get the most recent version of the script from github, and save it to a directory on your PATH. You will also need the LTXML2 Toolkit from the Language Technology Group at Edinburgh University.