АвторТема: Удобный формат для передачи генеалогической информации  (Прочитано 52521 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн AnodeАвтор темы

  • Группа N
  • *
  • Сообщений: 1423
  • Страна: ca
  • Рейтинг +147/-0
  • PS1 -> TT1 -> EE1 -> PS2
  • Y-ДНК: N1c1
  • мтДНК: H10a1, U5b1
У меня можно всё обозначить одной цепочкой, а у Вас придётся делать четыре (минимум!) для совершенно абстрактных братьев и сестёр.

Если же просто сказать дети такого-то троюродные братья такого-то, то Ваша нотация вообще станет в тупик. Или придётся пространно объяснять, что если это брат с сестрой, то имеем М.., Ж..; если брат с братом, то М.., М..; если сестра с сестрой, то Ж.., Ж.. и т. д.
Длинно и не нужно.


Конечно 4, а не 1!
брат,брат
брат,сестра
сестра,брат
сестра,сестра

отличается от брат,брат (даже для сестёр)!
Надеюсь, первые 2 колонки бы не будете заполнять брат,брат для всех случаев (хотя все примеры у Вас были только с мужчинами, о чём я неоднократно писал. Видимо, потому что Вы потеряли первую букву).

Я выше (и в другом топике) много раз упомянул о самодостаточности, напишу по-иному.

Вот моя запись:
сестра,брат,FМ,MМ,Папа Дедович (2500B.C.-?)

Вот Ваша запись (Вы ведь хотите различать сестру с братом?):
сестра,брат,М,М,Папа Дедович (2500B.C.-?)

Рассмотрим Интернет будущего.
Пути не самодостаточны, и надо парсить "сестра" и "брат", а самое главное - знать их семантику во всех будущеих программах (а если в иероглифах?). Это не удобно, это потенциальная проблема,головняк - для всех будущих писателей программ.

Пути же однозначны:
FМ,MМ,Папа Дедович (2500B.C.-?)
(и не надо знать никаких национальных терминологий родства!).

Оффлайн AnodeАвтор темы

  • Группа N
  • *
  • Сообщений: 1423
  • Страна: ca
  • Рейтинг +147/-0
  • PS1 -> TT1 -> EE1 -> PS2
  • Y-ДНК: N1c1
  • мтДНК: H10a1, U5b1
Тем временем сделал парсер atree для генератора GEDCOM. Пока сам генератор в процессе написания.
Это обратное преобразование (atree2gedcom) к уже существующему в программе aisgedcom экстрактору прямых линий (генератор atree).

Сценарии использования:
1) Легкое и быстрое составление прямого восходящего генеалогического дерева, например для загрузки на ФТДНА или 23андме - когда нет под рукой программы, генерирующей GEDCOM или её использование неудобно. Например, юзер может составлять первичную генеалогию в виде atree (например, в ноутпеде) и впоследствии продолжить делать это в генеалогической программе. Юзер печатает atree (в ноутпеде), запускает программу, получает гедком и аплодит его на веб-сайт.

2) GEDCOM уже существует (экспортированный из генеалогической программы), но он содержит много нерелевантных нисходящих веток так же как и персональную информацию, которую юзер хотел бы отредактировать до посылки на веб-сайт. Юзеру удобно апдейтить и поддерживать мастер-копию со всей информацией, включая ныне живущих, и иногда быстро генерировать второй, публичный гедком для загрузку на публичный сайт. Юзер запускает программу, генерирует atree.txt (из уже существующей программы aisgedcom), редактирует текстовый файл, например, скрывая какую-то информацию, или сокращая, запускает преобразование atree2gedcom и загружает результат (GEDCOM только восходящих отредактированных линий) на веб-сайт.

3) Генерируются персональные GEDCOM файлы для персон, уже существующих в более крупной базе. Например, родственник просит выделить его поддерево восходящих линий. Генерируется atree.txt, затем из него генерируется GEDCOM-файл, который отсылается родственнику или вместо родственника (по его просьбе) - загружается на веб-сайт.

4) В случае обмена, объединения генеалогий в виде форматов atree - результирующий файл может быть загружен (импортирован) в генеалогическую программу.

Оффлайн AnodeАвтор темы

  • Группа N
  • *
  • Сообщений: 1423
  • Страна: ca
  • Рейтинг +147/-0
  • PS1 -> TT1 -> EE1 -> PS2
  • Y-ДНК: N1c1
  • мтДНК: H10a1, U5b1
В процессе написания парсера написал формальное определение используемой на данный момент грамматики:

============================
atree format grammar
============================

Grammar below is BNF-like, where terminals are delimited by " " (double-quotes), non-terminals -
by < >, and simple regular expresions like character grouping [ ], repetitions *, +, {N,M} are used.
[:blank:], [:graph:], [:alpha:], [:punct:], [:digit:] - are standard POSIX character classes.
( ) denotes grouping, ? ? - verbal explanation of a character class



<atree> ::= ( <atree_line> "\n" )*
<atree_line> ::= <comment_line> | <person_line>
<comment_line> ::= "#" (<any_text_char>)*
<space_or_tab> :== [:blank:]
<person_line> ::= <path> <space_or_tab> (<optional_haplogroups> <space_or_tab>){0,1} <names>{0,1} <dates>{0,1} "," <location_other>{0,1}
<optional_haplogroups> ::= "[" ([:alpha:] | [:digit:]) "]"
<path> :== [FM]+
<location_other> ::= (<any_text_char>)*
<any_text_char> ::= [:alpha:] | [:punct:] | [:blank:]
<space_or_tab> ::= [:blank:]
<names> ::= <names_characters>* <surnames>{0,1} <names_characters>*
<surnames> ::= "/" <names_characters>* <maiden_names>{0,1} "/"
<names_characters> ::= ? any characters except '/', and no dates inside (valid date will be considered as names part delimiter) ?
<maiden_names> ::= "(" <names_characters>+ ")"
<dates> ::= "(" <birth_date_or_lifetime_range> ")"
<birth_date_or_lifetime_range> ::= <gedcom_year> | <full_date> | <lifetime_range> | "?"
<lifetime_range> ::= <gedcom_date> "-" <gedcom_date>
<gedcom_date> ::= <full_date> | <short_date> | <gedcom_year> | "?"
<full_date> ::= <date> [ ] <month> [ ] <year>
<short_date> ::= <month> [ ] <year>
<gedcom_year> ::= ("ABT " | "BEF " | "AFT ")* <year>
<year> ::= [:digit:]{4}
<month> ::= "JAN" | "FEB" | "MAR" | "APR" | "MAY" | "JUN" | "JUL" | "AUG" | "SEP" | "OCT" | "NOV" | "DEC"
<date> ::= [:digit:]{1,2}
« Последнее редактирование: 30 Декабрь 2011, 02:42:55 от Anode »

Оффлайн AnodeАвтор темы

  • Группа N
  • *
  • Сообщений: 1423
  • Страна: ca
  • Рейтинг +147/-0
  • PS1 -> TT1 -> EE1 -> PS2
  • Y-ДНК: N1c1
  • мтДНК: H10a1, U5b1
Проще показать пример валидных комбинаций, которые корректно обрабатывает парсер (путь, т.е. ID, префикс каждой строки - не показаны):
 
--------------------------8<--------------------------------
FirstName
FirstName (1600)
FirstName (ABT 1600)
FirstName (14 AUG 1855-5 APR 1877)
FirstName /Surname/
FirstName /Surname/ (ABT 1800)
FirstName /Surname/ (?)
FirstName /Surname/ (?-ABT 1800)
FirstName /Surname/ (?-?)
FirstName /Surname/ (AFT 1800-?)
FirstName /Surname/ (1600-1680)
/Surname/ (28 OCT 1852-BEF 1880)
/Surname/ (?-AFT 1673)
/Surname (?)/ (28 OCT 1852-BEF 1880)
FirstName /Surname/ (1742-20 DEC 1799), Place of Origin
FirstName /Surname (MadenSurname)/ (1764-6 OCT 1813)
FirstName Another Name /Surname (MadenSurname)/ (14 AUG 1855-5 APR 1877), Place of origin
FirstName Another Name /Surname (MadenSurname)/ (14 AUG 1855-5 APR 1877) Place of origin
FirstName // (1600)
   <== nothing is known
// <== nothing is known
/?/ <== nothing is known but surname refining is the priority
FirstName //
FirstName /?/
FirstName /? (?)/
FirstName /Surname (?)/
FirstName /Surname(?)/ ?
FirstName /Surname/, ?
FirstName /Surname/ (?)
FirstName /Surname/ (?), ?
# this is a comment

# commas in the names or surnames before the names - as some languages require
# and as in GEDCOM
/Surname/, AnotherName
/Surname/, AnotherName (1800)
/Surname/, AnotherName (1800), Place of origin

# if place of origin exists and not to confuse it with commas in names - use dates as the delimiter
Names (?), Place of origin
#or even
Names (?) Place of origin
--------------------------8<--------------------------------

На каждую существующую строку в гедкоме будет сгенерирована парсона (INDI). Количество персон может быть больше - если передаётся неполное atree (для наличия связей - недостающие звенья будут автоматически сгенерированы). При дубликатах ID (пути) выводится ошибка - для исправления юзером.
Вопросительные знаки опциональны - они введены для удобства - когда хочется подчеркнуть приоритет исследований.
Если имеется пустая строка в atree (но имеющая путь и/или ограничитель фамилии / /) - то персона (INDI) будет сгенерирована и показана в виде узла.
« Последнее редактирование: 30 Декабрь 2011, 02:43:58 от Anode »

Оффлайн AnodeАвтор темы

  • Группа N
  • *
  • Сообщений: 1423
  • Страна: ca
  • Рейтинг +147/-0
  • PS1 -> TT1 -> EE1 -> PS2
  • Y-ДНК: N1c1
  • мтДНК: H10a1, U5b1
Завершил генератор GEDCOM'ов из atree. Слава рождественским выходным! Загружена новая версия 0.7.

Два взаимо-обратных преобразования над восходящим деревом ведут к идентичности. Т.е. если генерируем atree из GEDCOMа (сводя граф только к восходящим линиям одной персоны), а потом из этого atree генерируем GEDCOM (новым тулом atree2gedcom), и потом опять запускаем aisconvert против этого нового гедкома - то получаем то же самое atree - что и в первый раз. Т.е. atree при текущей грамматике сохраняет информацию.

Кстати, сгегка подредактировал грамматику выше (правила составления atree) - для (на мой вгляд) наиболее гибкой формы записи - чтобы как можно меньше писать и помнить юзерам, но вместе с тем чтобы программа поняла нас правильно.

Просто добавил таб в существующую ГУЮ:


Оффлайн AnodeАвтор темы

  • Группа N
  • *
  • Сообщений: 1423
  • Страна: ca
  • Рейтинг +147/-0
  • PS1 -> TT1 -> EE1 -> PS2
  • Y-ДНК: N1c1
  • мтДНК: H10a1, U5b1
Тут же сделал следующее:
1) Скопипастил англоязычную версию своего atree.
2) Удалил строки которые нерелевантны (пустые, со знаками вопроса, которые просто означают приоритеты будущих исследований для меня, но будут неинтересны кузенам).
3) Сгенерировал из отредактированного atree соответствующий ему GEDCOM новой утилитой.
4) Загрузил полученный файл (gedcom.ged), как есть, на ФТДНА.
Получилось следующее:

Я намеренно оставил гаплогруппы как часть имён (пока генеалогические тулы включая гедком-вьюеры не умеют показывать гаплогруппы), чтобы они, гаплогруппы, были видны на дереве.

Т.е. теперь можно поддерживать (как я, впрочем, и раньше делал) восходящую генеалогию (структуру дерева) в кратком и простом atree формате, в одной мастер-копии (да хоть бы и на вебсайте) и периодически апдейтить графы-чарты на ФТДНА и на прочих генеалогических вебсайтах. Другие сценарии работы с atree (описанные выше) также возможны.

P.S. Всё, теперь aisgedcom можно оставить в покое, надоело программировать. Праздники на носу!

Оффлайн Mich Glitch

  • Genus regis
  • Сообщений: 36936
  • Страна: ca
  • Рейтинг +3773/-48
  • Y-ДНК: J2b1
  • мтДНК: H6a1a5a
Послезавтра попробую версию 0.7.
Уверен, она ещё лучше предыдущих!

:)

Оффлайн AnodeАвтор темы

  • Группа N
  • *
  • Сообщений: 1423
  • Страна: ca
  • Рейтинг +147/-0
  • PS1 -> TT1 -> EE1 -> PS2
  • Y-ДНК: N1c1
  • мтДНК: H10a1, U5b1
Послезавтра попробую версию 0.7.
Уверен, она ещё лучше предыдущих!

:)

Да нет, там всё точно то же самое, что и в предыдущих (для той функциональности, что мы с Вами писали, и что Вас, наверное, больше интересует).

В последней версии генерация гедкома добавилась, что есть как бы дополнительный, отдельный и отделённый (в коде) от предыдущего модуль (в том числе чтобы ничего предыдущего не сломать :)

Спасибо :)

Оффлайн Mich Glitch

  • Genus regis
  • Сообщений: 36936
  • Страна: ca
  • Рейтинг +3773/-48
  • Y-ДНК: J2b1
  • мтДНК: H6a1a5a
Я надеюсь, что и Вашими стараниями удастся создать набор инструментов для создания генеалогических сайтов: базы данных с возможностью разных поисков, стат обработок, вывода результатов (в том числе, и графических - родословий).

Оффлайн AnodeАвтор темы

  • Группа N
  • *
  • Сообщений: 1423
  • Страна: ca
  • Рейтинг +147/-0
  • PS1 -> TT1 -> EE1 -> PS2
  • Y-ДНК: N1c1
  • мтДНК: H10a1, U5b1
Я надеюсь, что и Вашими стараниями удастся создать набор инструментов для создания генеалогических сайтов: базы данных с возможностью разных поисков, стат обработок, вывода результатов (в том числе, и графических - родословий).

Если хотим поднять такой сайт - то надо либо найти профессионально знающих HTML5/javascript/YUI, кто _уже_ имеет на руках навыки делать быстро работающие и современно выглядящие сайты (стиля 2012го года а не стиля 90х прошлого века с HTML4/CGI/perl/етц). Потом сразу нужно художника/графика/вебдизайнера. Если бы у меня перечисленные навыки были прям сейчас на руках - не было б вопросов.
Надеюсь, что тоже смогу быть полезным, по-крайней мере с интеграцией или переводом/разъяснением алгоритмов. На первых порах можно будет подвязать на бэкэнде существующий джавовский код aisgedcom'a (лёгкость интеграции в существенной мере будет зависеть от того - на чём будет писаться бэкэнд). Но без фронеэнда какбы и нет сайта.

Может и я подтянусь, но что-то большое и новое по вечерам, после рабочего дня, поднять/изучить/пробить на практике не получается: для нового навыка/языка нужно "погружение" не несколько месяцев по 12 часов в день, иметь свежую голову, так как изучение новой технологии, ломание старых шаблонов - берут много энергии/здоровья/сил/времени. По вечерам же возможно что-то только исключительно для удовольствия: то что уже хорошо знаешь, без напряга, автоматически, практически  на автопилоте.

Я просто стараюсь быть реалистом.

Оффлайн rus_at

  • http://www.bastanovo.ru
  • Сообщений: 131
  • Страна: 00
  • Рейтинг +26/-0
  • http://www.bastanovo.ru
    • http://www.bastanovo.ru
Есть же уже разработанные классические и понятные всем форматы  ::) ::) ::)

  Поколенная роспись (родословная) — документ, в котором в форме разбитого на поколения списка людей (отсюда название) представлены сведения о чьих-то потомках (нисходящая роспись) или чьих-то предках (восходящая роспись; встречается гораздо реже нисходящей). В отличие от генеалогических таблиц, в которые родство отображается в графическом виде (с помощью скобок, линий, выравнивания по горизонталям или вертикалям и т.д.), в поколенных росписях информация о родстве передается через систему нумерации поколений и индивидуумов.
Источник: Материал из Википедии — свободной энциклопедии


  Родословная роспись представляет собой пронумерованный перечень всех членов рода, причем информация о каждом из них начинается с новой строки. Нумерация для восходящего родословия была разработана еще в XVII в. испанским генеалогом Х. де Соса и в XIX в. усовершенствована немецким ученым Стефаном Кекуле фонСтрадоницем. Принцип нумерации по системе Соса — Страдоница состоит в следующем: лицо, чья генеалогия устанавливается (Probant),получает вне зависимости от пола номер 1; его отец получает номер 2, мать — номер 3, дед по отцу — номер 4, бабка по отцу — номер 5, дед по матери — номер 6, бабка по матери — номер 7 и т. д. Мужчины в этой системе всегда обозначаются четными номерами, женщины — нечетными.

  Нумерация Соса — Страдоница удобна тем, что позволяет легко определить характер родственных отношений любых внесенных в роспись лиц: номер отца всегда равен удвоенному номеру ребенка, а номер матери — удвоенному номеру ребенка плюс один (номер мужа плюс один). Например, номер 20 соответствует мужчине — отцу мужчины под # 10 и деду женщины под # 5. А номер 21 — это женщина, мать мужчины под # 10 (21 = 10 х 2+ 1) и бабка женщины под # 5.

  Удобство этих расчетов связано с тем, что количество предковопределенного лица по мере погружения в прошлое растет в геометрической прогрессии. Значительно труднее сделать «говорящей» нумерацию при нисходящем родословии, ведь количество потомков некоего лица не подчиняется какой-либо математической закономерности.

  Русские генеалоги XIX — начала ХХв. пользовались довольно простой системой нумерации (в дальнейшем мы будем называть ее «традиционной»): поколения в нисходящем родословии они обозначали римскими цифрами, а представителей рода — арабскими (по валовой нумерации); при этом напротив имени каждого лица указывался номер его отца. В этих росписях, составленных по мужской линии, женщинам обычно не присваивались отдельные номера.

  Более сложную систему нумерации для нисходящего родословия разработали в ХХ в. французские ученые. Жак д'Абовилль предложил в каждом поколении начинать счет заново (в порядке старшинства); при этом к индивидуальному номеру лица присоединяется номер его отца: в результате каждая строка росписи открывается рядом цифр, разделенных косой чертой и содержащих информацию обо всех предках по прямой линии данного представителя рода. Так, если родоначальник получает номер 1, то его дети в порядке старшинства обозначаются как 1/1, 1/2, 1/3 и т. д., внуки от его старшего сына (или дочери) — 1/1/1, 1/1/2, 1/1/3 и т. д., внуки от его второго сына (или дочери) — 1/2/1, 1/2/2, 1/2/3 и т. д. Общее количество чисел, разделенных чертами, показывает, сколько поколений отделяет данное лицо от родоначальника. Совпадение нескольких чисел у двух лиц, включенных в роспись, свидетельствует о степени родства между ними: например, совпадение двух чисел в Ш поколении (трех цифр — в IV поколении, четырех — в V и т. п.) указывает на родных братьев и сестер; у двоюродных братьев/сестер — на одно число меньше. По общему правилу, чем больше чисел совпадает, тем ближе степень родства. Эта система позволяет также различать потомство от разных браков: для этого используются буквы алфавита (а, б, в...). Например,дети родоначальника от первого брака будут записаны как 1а/1, 1а/2, 1а/3..., от второго брака — 1б/1, 16/2, 1б/3... и т. д.

  Существует и комбинированный вариант нумерации, сочетающий в себе элементы систем д'Абовилля и Соса — Страдоница. От описанной выше методики он отличается тем, что позволяет дополнительно различать в росписи мужчин и женщин при помощи, соответственно, четных и нечетных чисел. Суть этой системы нумерации (Соса — Страдоница — Абовилля) состоит в следующем: родоначальник и старшие сыновья в каждом браке обозначаются цифрой О, а всем остальным мужчинам в роду присваиваются четные номера (2, 4, 6...); женщины получают нечетные номера (1, 3, 5...). Таким образом, старший сын родоначальника от первого брака обозначается как Оа/О, второй его сын от того же брака — Оа/2, старшая дочь от второго брака — Об/1, вторая дочь родоначальника от третьего брака — Ов/3 и т. д.

  В последние десятилетия элементы «французской системы» нумерации стали использоваться и российскими генеалогами; при этом сохраняются и некоторые принципы традиционной системы, применявшиеся еще князем П.В. Долгоруким и князем А.Б.Лобановым-Ростовским. В результате получившая сейчас распространение в отечественной генеалогии система нумерации имеет следующий вид: все лица, внесенные в роспись, получают индивидуальные порядковые номера (по валовой нумерации), однако, в соответствии с принципом Абовилля, к этим цифрам добавляются еще номера всех предков. Различение мужчин и женщин с помощью четных и нечетных чисел у нас практически не применяется...http://genotree.ru/design_genolist.htm


Оффлайн AnodeАвтор темы

  • Группа N
  • *
  • Сообщений: 1423
  • Страна: ca
  • Рейтинг +147/-0
  • PS1 -> TT1 -> EE1 -> PS2
  • Y-ДНК: N1c1
  • мтДНК: H10a1, U5b1
Проблема в том, что генеологи прошлых веков не имели понятия о вычислимости, бинарных деревьях, компьютерах, паттерн-матчингах, и прочем, и не ставили себе задач построения супер-деревьев, если не всех людей, то большого их количества, которые благодаря молекулярным генеалогиям, компьютерам и интернетам - возможно и можно будет построить.
Даже обычные (не супер) генеалогии могут иметь поколений 50. Посчитайте: 2^50=1125899906842624 (удобно работать с такими числами? Калькуляторы имеют предел).
Рубеж эр (тех, кто ведёт генеалогию от времён Иисуса или римских императоров) - это может быть и 100 поколений, а 2^100 - это 30-значное число, калькуляторы трудно будет найти. А Моисей же или другие пророки - сами понимаете - какие числа будут (скорее всего, числа будут больше атомов во вселенной).

Длина пути же равняется всего лишь количеству поколений. 100 поколений - 100 буковок. И вырожденные, т.е. разряжённые, неполные (а таких большинство) генеалогии легче описывать путями.

Потом, выше по топику мы уже обсуждали, что нумерация является суррогатным ключом (в терминах баз данных), счётчиком, числом, с которым трудно работать, хотя возможно, конечно, имея супер-калькулятор. В то время как путь (полов) от корня является уникальным паттерном, который в будущем можно будет сравнивать между различными деревьями, то есть он уникален (только внутри дерева) и является натуральным ключом.

Оффлайн AnodeАвтор темы

  • Группа N
  • *
  • Сообщений: 1423
  • Страна: ca
  • Рейтинг +147/-0
  • PS1 -> TT1 -> EE1 -> PS2
  • Y-ДНК: N1c1
  • мтДНК: H10a1, U5b1
Но самое главное преимущество это, конечно сравнение. Когда я увидел у ув. MichGlitch его подписи жммммжжж, я сразу увидел в них уникальные пути к ветвям бинарного дерева, которые можно сравнивать.
Вот, Вам дано 2 номера с 2х деревьев:
112589990684 и 865555336345635635635, и похоже звучащая фамилия (возможно, где-то посередине, или несколько). Как Вы определите вероятность - это один человек или разные по номерам? Если суперкалькулятора нет.
А паттерны несут информацию и их можно напрямую сравнивать как обычные стринги, причём очень легко.

Оффлайн Mich Glitch

  • Genus regis
  • Сообщений: 36936
  • Страна: ca
  • Рейтинг +3773/-48
  • Y-ДНК: J2b1
  • мтДНК: H6a1a5a
Есть же уже разработанные классические и понятные всем форматы  ::) ::) ::)

Посмотрите на мою подпись под этим сообщением.
А затем приведите варианты указанных в ней предков по уже существующим нотациям.
Потом посмотрите, какая из систем является интуитивно понятной, ну, а где придётся разбираться и вникать.

:)


*** Кстати, Василий очень правильно отметил, - вопрос этот уже в данной ветке обсуждался.

Оффлайн gecube_ru

  • Сообщений: 1439
  • Страна: hu
  • Рейтинг +268/-7
  • Незнайка на Луне
  • Y-ДНК: I-A6397 -> I-FGC79161
  • мтДНК: V7a1?
Хочу сказать, что увидев запись вида ММЖЖЖМММ сильно удивился. Но по размышлению понял, что это действительно сильно удобнее, чем произвольная цифровая запись типа аннентафелей, т.к. является человекочитаемой.

 

© 2007 Молекулярная Генеалогия (МолГен)

Внимание! Все сообщения отражают только мнения их авторов.
Все права на материалы принадлежат их авторам (владельцам) и сетевым изданиям, с которых они взяты.