问题标签 [genealogy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
358 浏览

sql - 在没有 WITH 或 WHILE 的 SQL 中选择父亲的所有家谱

是否可以选择没有递归系统的父母的所有孩子作为 WITH 或 WHILE?

结构是:

我想要2的“孩子”(所有家谱,孩子的孩子等),所以我想要:

4、6、7

0 投票
3 回答
407 浏览

php - 如何创建基于 Drupal 的家谱应用程序?

我想使用 Drupal 来构建一个家谱应用程序。我看到,困难在于允许用户上传 gedcom 文件并对其进行解析,然后从该数据中创建各种 Drupal 节点。Drupal 中的节点是内容项。因此,我将个人和家庭作为内容类型,并且每个都有各种事件作为来自 gedcom 文件的字段。

gedcom 文件是家谱信息的通用格式。不同的桌面应用程序获取数据并将其转换为专有格式。我不确定如何完成的是给最终用户一个表单来上传他们的 gedcom 文件,然后让它使用 Drupal 创建节点,也就是内容项。我可以找到使用 python、perl 或其他语言解析 gedcom 文件的开源代码。因此,我可以使用其中一个库从 gedcom 文件输出中创建 JSON、XML、CSV 等。

Drupal 是用 PHP 编写的,挑战的另一个细节是,对于最终用户,我不想让他/她找到在第一步中创建的文件(其中第一步是 gedcom 文件的解析和转换)并将其上传到 Drupal。就最终用户所见,我想以某种方式使这一步发生。不知何故,我需要一种方法来触发 Drupal 在将数据转换为 JSON、XML 或 CSV 后导入数据。

0 投票
3 回答
3060 浏览

javascript - 如何防止家谱生成器中的重叠?

我正在创建一个交互式家谱创建者,这与更简单的版本不同,后者是简单的谱系图/树。

我的要求(基于familyecho.com)是:

  • 多个合作伙伴与您通常看到的简单的 2 父母对 1 孩子。
  • 多个兄弟姐妹
  • 伴侣不一定要生孩子
  • 不必总是有父母“对”,可以只有一个父亲/母亲

我遇到的问题是:我正在根据“当前”节点/家庭成员生成偏移量,当我通过第一代时说,2 个父母,它重叠。

重叠示例以及未在同一 X 轴上绘制伙伴的示例:

在此处输入图像描述

这是我遇到问题的实际应用程序主 js 文件。这是我创建的一个简化的 jsfiddle,它演示了父/偏移量问题,尽管我确实必须为此解决重叠问题此外还要确保合作伙伴与其他合作伙伴在同一 x 轴上绘制。

我该如何解决这个和未来可能的重叠冲突?我是否需要某种重绘功能来检测碰撞并在检测时调整每个块的偏移量?我正在尝试使其无缝,因此完成的重绘数量有限。

计算相对于“上下文”或当前节点的偏移量的示例:

0 投票
2 回答
51 浏览

mysql - 亲子谱系 - 另一位父母的表格

我有一个名为“child_parent”的表,其中列出了孩子及其父母的 ID,例如,一个名为“person”的表。孩子-父母对是唯一的,一个孩子最多可以有两个父母。

我想要一个“其他”父级(称为“ChildOfpID_OtherParent”)的表,其中所有子级的父 ID(pID)等于 1,如果未列出另一个父级,则为 NULL。所以如果 pID=1,我想要:

我无法弄清楚如何生成这样的表。

0 投票
1 回答
207 浏览

neo4j - Neo4j 密码查询具有基于性别的不同关系

在家谱中,我们使用 DNA 来寻找匹配项。Y-DNA 发现父系匹配。执行此操作的 neo4j 查询(其中 RN 是一个人的唯一标识符)是:

MATCH (n{RN:1}) match p=n-[r:father*..22]->m return m.RN as RN,m.fullname as FullName,m.sex as Sex,m.bd as BD,m.dd as DD,length(p) as generation,case when left(m.bd,4)>'1930' and rtrim(m.dd)='' then 'Y' else 'N' end as mtDNA_Candidate, reduce(srt2 ='|', q IN nodes(p)| srt2 + q.RN + '|') AS PathOrder order by generation desc,PathOrder desc

或者我们使用线粒体 DNA 进行母系匹配:

我的问题与 X 染色体 DNA 有关。一位父亲只给他的女儿一个 X 染色体,一位母亲给她所有的孩子一个。因此,我需要一个密码查询,当在最近的时间一代中有一个女儿时,它可以获取所有母亲的信息,但只有父亲的信息。后世若有子,则除父。我在节点中有一个属性“性别”,其值为 M 或 F。出生日期并不总是已知的,因此它不能用于确定方向性

我试过这个,但得到一个错误:

0 投票
5 回答
4992 浏览

javascript - 使用深度优先搜索渲染动态创建的族图没有重叠?

我想生成这个:

在此处输入图像描述

使用这种数据结构(ID 是随机的,顺便说一句不是顺序的):

为了描述数据结构,定义了根/起始节点(me)。任何合作伙伴(妻子,前任)都处于同一水平。低于的任何东西都会变成-1、-2级。上面的任何内容都是级别 1、2 等。父母、兄弟姐妹、孩子合作伙伴的属性定义了该特定字段的 id。

在我之前的问题中,eh9描述了他将如何解决这个问题。我正在尝试这样做,但正如我发现的那样,这不是一件容易的事。

我的第一次尝试是从上到下按级别渲染。在这个更简单的尝试中,我基本上将所有的人按层嵌套并从上到下渲染。

我的第二次尝试是使用深度优先搜索使用其中一个祖先节点来渲染它。

我的主要问题是:我如何才能将这个答案实际应用到我目前拥有的东西上?在我的第二次尝试中,我尝试进行深度优先遍历,但我什至如何开始计算偏移网格所需的距离以使其与我想要生成的方式一致?

另外,我对深度优先理想的理解/实现,还是我可以以不同的方式遍历它?

在我的第二个示例中,节点显然重叠,因为我没有偏移/距离计算代码,但我对实际弄清楚如何开始这一点感到迷茫。

这是我制作的 walk 函数的描述,我正在尝试深度优先遍历:

}

要求/限制:

  1. 这是给编辑的,类似于familyecho.com。几乎所有未定义的业务规则都可以通过它来假设。
  2. 不支持家庭繁殖,因为这会使这种方式过于复杂。不要担心这个。
  3. 支持多个合作伙伴,因此这不像只有 2 个父母和 1 个孩子的传统“家谱”那么容易。
  4. 只有一个“根”节点,即起始节点。

注意:familyecho.com 似乎“隐藏”了一个分支,如果有很多叶节点并且存在冲突。可能需要实现这一点。

0 投票
3 回答
204 浏览

neo4j - Neo4j 密码查询 X 染色体祖先

在遗传谱系学中,X 染色体数据有助于与某些祖先联系起来。这在以下位置得到了很好的说明:X-DNA Inheritance Chart

我的 Neo4j 数据库具有每个人的节点以及连接它们的父亲和母亲的关系。每个节点都有一个属性 sex(代表 Person 的性别;M 或 F)。雌性有两条 X 染色体,一条来自父母一方。男性有一条 X 染色体,总是来自母亲。

您可以使用 reduce 来查看与祖先继承有关的性别:

因此,从男性 (RN:1) 开始,c 的结果是他父亲的 MM 和他母亲的 MF,祖父的 MMM 和外祖父的 MFM,等等。这个模式表明,当 c 包含 MM (两个 Ms 按顺序在一起)这些对起始人的 X 染色体没有贡献。

我想删除任何具有 MM 模式的节点。使用外部代码很容易做到这一点,但我无法弄清楚如何在密码查询中做到这一点。

0 投票
2 回答
1415 浏览

mysql - 为家谱研究创建数据库

首先,让我声明我不是编码员,当谈到数据库时,我基本上是最终用户。

好的,除此之外,这是我的场景:

在过去的 4 年里,我一直在研究意大利特伦蒂诺的旧教区记录。我有近 5,000 名“相关”人员使用了大多数标准家谱技术(Ancestry.com、Family Tree Maker、Legacy 8、GEDCOM 等),并且还对另外 2,000 人左右进行了编目。我的一位同事(也是远房表亲)一直在另一个特伦蒂诺教区做类似的工作,并在过去十年中对大约 60,000 个条目进行了编目。

现在,我想为我的研究创建一个在线可搜索数据库,它比我自己的家谱延伸得更远。我的目标是对我一直在研究的特定教区(最终也是我表弟也在研究的那个教区)的所有教区记录进行编目,从 1545 年(记录开始时)到 1923 年(记录开始时)可供公众使用),以及我收集的其他 20 世纪后裔的记录。那是出生,婚姻和死亡记录。

最终目标是使其不仅可以搜索以定位个人的记录,而且能够显示这些个人在几代人之间的关系(出生、婚姻、父母、祖父母、孩子、孙子孙女的死亡),这样最终用户(在在线环境中)几乎可以相对快速地构建自己的(当然是来自该教区的人的)家谱。

这个想法也是交叉检查所有这些关系,以确保正确的人被列在正确的家庭中(相信我,知道你在做什么需要几年时间),并且还包括对边缘评论的交叉引用,对教父、证人等的引用。我知道没有其他可用的研究资源(至少对于特伦蒂诺的记录来说不是)可以做所有这些事情。

你可能会问,“为什么他们不能只看你的家谱?” 这不是解决方案的原因有很多。但主要的一点是,我发现大多数人都被家谱所淹没,他们“迷失”了它们。我已经看到它一次又一次地发生。我想创造一些“块状”的东西,这样他们就可以以对不是系谱学家的普通人有意义的方式将它们拼凑起来。

我开始在电子表格上组织我的数据,这使我能够进行简单的家庭分组。我很快意识到这太有限了。现在我已经开始使用 Access,但老实说,我并不真正了解如何在搜索查询期间组织表格以获得最佳结果。是的,我买了《Dummies》这本书(今天到货了),但我还没有真正玩过数据关系。问题是,我什至不确定我是否想学习技术方面,因为我的时间可能更好地用于阅读和翻译/转录记录。

所以这里是我的实际问题:

  1. 您是否认为 Access 是一个合适的程序,可以用来创建我所设想的那种在线数据库?
  2. MySQL会是更好的选择吗?
  3. 你认为我想做的项目的性质是在一个相当技术但不是编码员的人的能力范围内吗?
  4. 除了 Access 或 MySQL,还有其他更适合用途的软件程序吗?我在这个论坛上看到另一个帖子,其中 amirouche 提到了他创建的两个可能适用于家谱的程序,但我知道它们会超出我的想象。
  5. 失败了,你们中的任何人都想谈谈为我做这个项目吗?当然,我的意思是为了钱。我计划在几个月内进行一次众筹,因为这是一个社区项目(我将把所有的研究捐赠给各种档案组织)。
  6. 关于它在网上使用的能力,我现在应该考虑什么具体的事情吗?

好的,我知道这是很多问题,我可能听起来很天真,但我真的很欢迎并感谢您提供的任何专业知识和指导。

0 投票
1 回答
254 浏览

ruby-on-rails - 使用没有导轨的 Rubyclosure_tree gem

我想尝试使用 gem closure_tree为我的家谱数据库构建一棵树。我在 Windows 7 机器上安装了 Ruby MRI 2.3.0 下的 gem。依赖项的版本在下面的错误日志中。

当我尝试最简约的代码时它失败了,我想是因为我不使用 Rails 并且不进行迁移,我再次假设创建表tag_hierachies

我的问题是:我可以在没有 Rails 的情况下使用这个 gem,如果可以的话怎么办?

0 投票
1 回答
359 浏览

mysql - 使用闭包表的 SQL 家谱系谱,支持配偶、兄弟姐妹、姻亲、兄弟姐妹等

我已经阅读了 Bill Karwin 在这篇文章中的回答,我很惊讶它如何解决了我一直在使用 MySQL 数据库(至少在父子关系或祖先-后代级别)研究的家谱谱系的基本问题。与邻接列表和其他模型相比,它的优势使其成为我的项目的绝佳选择。但是,正如所讨论的,不支持为兄弟或侄子连接节点。此外,我想将这样的原则应用到我的数据库项目中,以支持姻亲、侄子、孙侄女、配偶等的连接。如果可能,我想扩展 Closure Table 原则及其查询以支持这种关系。

参考图片(黄色节点为配偶): 样本家庭树结构

具有正确节点连接的查询可以给出答案,例如在引用时:

  1. (4) 至 (5):兄弟姐妹

  2. (9) 至 (2):配偶

  3. (3) 至 (5):侄子/侄女

  4. (4) 至 (3) 或 (6) 至 (2):叔叔/阿姨

  5. (1) 至 (9):儿媳

  6. (10) 至 (4):侄子

在这种情况下,当我提到单个节点时,比如说(2),它可以给我相关节点的列表以及它们如何相互关联:

  1. (1) 是父母

  2. (5) 和 (4) 是儿童

  3. (3) 是兄弟姐妹

  4. (9) 是配偶

  5. (10) 是姐夫

  6. (6) 是侄子/侄女

  7. (8) 和 (7) 是孙子

在构建家谱系谱时还有其他场景,例如半兄弟姐妹(父节点不同,因此您不能假设这两个节点是否具有相同的父节点);和其他关系,例如“我的配偶和我兄弟姐妹的配偶也是兄弟姐妹”。这也表明我的孩子是我兄弟姐妹的配偶的侄子)。

我确信这可以通过 Closure Table 完成,但可能不是那么简单。任何文章或建议或查询都会有很大帮助。谢谢!(也许很久以前有人已经解决了这个问题,我只是找不到合适的资源)。:)