开源家谱软件评测
自己瞎捣鼓了半天,现在把前人的工作大体看看。
基本上,自从上个世纪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写的单机版家谱软件,有很多很成熟的特性。
其他具体的请参考它的手册。
Webtrees
Webtrees是一个使用PHP写的网络版家谱软件,也已经比较成熟。
Geneotree
Geneotree也是一个PHP写的网络版家谱软件,还在演化中。
其他更多开源或者收费家谱软件,请看这里
GEDDOM 软件列表
github上面的开源列表在这里Gedcom
Gedcom
https://github.com/FamilySearch/Gedcom
gedcom4j
https://github.com/frizbog/gedcom4j
一点想法
- 遵循GEDCOM,很重要的一点就是要把女的也要放上去。毕竟从科学的观点来看,父系传承的是Y染色体,而母系传承的是线粒体,都是有继承根据的。从遗传学上来说,儿子的智商被母亲影响得更大呢。初步系想法是,妻子加入进来,但是只有一层。女儿也加入进来,但是只有配偶信息。毕竟如果男方家谱也遵循同样规则,不会造成大量信息重复。
-
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
Comments