开源家谱软件评测

自己瞎捣鼓了半天,现在把前人的工作大体看看。

基本上,自从上个世纪8,90年代开始就有人开始开发家谱软件,只不过当时都是单机版,到网络时代兴起,2000年以后开始有网络版的,大部分都是PHP和MYSQL。自从2010年后,随着新的前端技术发展,现在更多趋势是用js框架把上个世纪单机版的富客户端搬到网络上。

格式

有很多格式,这篇文章做了最好的概述。但是我们这里只强调GEDCOM。

“GEDCOM is not perfect, and not perfectly supported either, but it is the only widely supported standard.”

主流的家谱软件都是支持统一的数据格式GEDCOM,虽然它诞生于1984年,但是它已经是家谱软件的事实标准,最新版是发布于1996年的5.5版(已经20多年没有更新了),大部分现在的家谱软件都是支持发布于1999年的5.5.1草案。这个草案直到现在(2018年)都是事实上的标准。 规范全文在这里。因为草案里引入对Unicode的支持,也就是多语言的支持。这篇文章对其做了非常好的介绍

这个数据格式是同时支持父系和母系的,女儿和儿子一样也是都列入家谱的。下面例子中可以看出这一点。这个家谱数据是按照西方的家庭观点来看待的。

0 HEAD
1 SOUR Gramps
2 VERS GrampsAIO64-5.0.0-beta1-3
2 NAME Gramps
1 DATE 30 MAR 2018
2 TIME 12:48:03
1 SUBM @SUBM@
1 FILE D:\Doc\familiyTree_Gramps\firstDirect.ged
1 COPR Copyright (c) 2018 .
1 GEDC
2 VERS 5.5.1
2 FORM LINEAGE-LINKED
1 CHAR UTF-8
1 LANG English
0 @SUBM@ SUBM
1 NAME
1 ADDR
0 @I0000@ INDI
1 NAME 清 /袁/
2 GIVN 清
2 SURN 袁
2 NPFX 始迁祖
2 NICK 仲七
1 SEX M
1 BIRT
2 DATE 1360
2 PLAC 海州陇西都新二里_连云港
3 MAP
4 LATI N34.596698
4 LONG E119.222953
1 DEAT
2 DATE 1410
2 PLAC 山东省临沂市临沭县朱仓乡

稍微看了下最近的GEDCOM X,感觉还行,只是开发太慢了。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<gedcomx xmlns="http://gedcomx.org/v1/" xmlns:ns2="http://familysearch.org/v1/" xml:lang="en">
    <person id="I0000">
        <gender type="http://gedcomx.org/Male"/>
        <name>
            <preferred>true</preferred>
            <nameForm>
                <fullText>清 袁</fullText>
                <part type="http://gedcomx.org/Prefix" value="始迁祖"/>
                <part type="http://gedcomx.org/Given" value="清"/>
                <part type="http://gedcomx.org/Surname" value="袁"/>
            </nameForm>
        </name>
        <name type="http://gedcomx.org/Nickname">
            <nameForm>
                <fullText>仲七</fullText>
            </nameForm>
        </name>
        <fact type="http://gedcomx.org/Birth">
            <date>
                <original>1360</original>
            </date>
            <place>
                <original>海州陇西都新二里_连云港</original>
            </place>
        </fact>
        <fact type="http://gedcomx.org/Death">
            <date>
                <original>1410</original>
            </date>
            <place>
                <original>山东省临沂市临沭县朱仓乡</original>
            </place>
        </fact>
    </person>

几个开源家谱软件

Gramps

Gramps是一个用Python写的单机版家谱软件,有很多很成熟的特性

gramp_chart.png

其他具体的请参考它的手册

Webtrees

Webtrees是一个使用PHP写的网络版家谱软件,也已经比较成熟。

webtrees.png

Geneotree

Geneotree也是一个PHP写的网络版家谱软件,还在演化中。

geneoTree.png


其他更多开源或者收费家谱软件,请看这里

GEDDOM 软件列表

github上面的开源列表在这里Gedcom

Gedcom

https://github.com/FamilySearch/Gedcom

gedcom4j

https://github.com/frizbog/gedcom4j

一点想法

  • 遵循GEDCOM,很重要的一点就是要把女的也要放上去。毕竟从科学的观点来看,父系传承的是Y染色体,而母系传承的是线粒体,都是有继承根据的。从遗传学上来说,儿子的智商被母亲影响得更大呢。初步系想法是,妻子加入进来,但是只有一层。女儿也加入进来,但是只有配偶信息。毕竟如果男方家谱也遵循同样规则,不会造成大量信息重复。

ideaTree.jpg

  • Gramps是个已经很成熟的平台,只是它现在是个单机版。但是它所依赖的Graphviz技术已经被js化了,这为把它搬上网络打下了基础。已经有两个d3项目是基于它,一个是graph-viz-d3-js,另一个是d3-graphviz. 以后打算尝试使用DOT语言来画svg图。DOT语言的好处就是可以用程序的方式把树形结构完全用DOT语言自动生成,这样就可以达到和d3-herarchy的stratify同样的效果了。

  • 初步实验表明d3-graphviz仍然是模仿Graphviz的两层结构,结果在React编程时,viz作为web worker不能导入,暂时不能用React统一编程模型。但是可以作为普通js编程使用。 【20180331更新】已经证明可以,根据stackflow别人的帖子,其实是可以的。https://github.com/yuanqingfei/familyTree/blob/master/src/components/dot/dotTree.js

  • dagre配合dagre-d3也可以作为一个尝试,它也是纯client的layout框架,也支持DOT语言。

Comments