Gedcom зсередини Авторська спроба опису формату GEDCOM |
Даний опис зібрано мною з кількох моїх нотаток (оглядів) у темі про формат GEDCOM на форумі GENEO Посилання на цю тему : http://forum.genoua.name/viewtopic.php?id=8865 Якщо Вам є що додати до мого опису, пишіть у вказану тему, обговоримо та включимо Теми оглядів:
|
Опис формату GEDCOM у Вікіпедії
GEDCOM (від англ. Genealogical Data Communications) - специфікація для обміну генеалогічними даними між різними генеалогічними програмами. GEDCOM був розроблений Церквою Ісуса Христа Святих Останніх Днів для допомоги у генеалогічних дослідженнях. Більшість сучасних генеалогічних комп'ютерних програм підтримує імпорт/експорт даних у форматі GEDCOM .
GEDCOM використовує lineage-linked модель даних. В основі цієї моделі ядром є сім'я чи особистість .
Нижче наведено приклад файлу GEDCOM. Перший стовпець означає рівень вкладеності.
Приклад (sample.ged): 0 HEAD
Заголовок (HEAD) включає вихідну програму та версію (Reunion, V8.0), версію GEDCOM (5.5) та кодування символів (MACINTOSH). Особисті записи (INDI) визначають персон Bob Cox (ID 1 - @ I1 @), Joann Para (ID 2) і Bobby Jo Cox (ID 3). Запис сім'ї (FAM) посилається на чоловіка (HUSB), дружину (WIFE) та дитину (CHIL) за їх ID-номерами.
Версії: 6 грудня 2002 року бета-версію GEDCOM 6.0 випустили для розробників, щоб вони вивчили її та почали впроваджувати у своїх програмах. GEDCOM 6.0 мав бути першою версією, в якій для зберігання даних використовується формат XML, і є зміна кращим кодуванням від ANSEL Юнікод (UNICODE). (Єдине використання Unicode дозволить використання міжнародних кодувань. Приклад зберігання: східно-азіатські імена з оригінальною командою символів, без яких вони могли б бути неясними та мало корисними для генеалогічних та історичних досліджень.)
Специфікації: Попередня специфікація GEDCOM XML 6.0 (англ.) http://xml.coverpages.org/Gedcom-XMLv60.pdf
Огляди:
Докладніше: https://ua.wikipedia.org/wiki/GEDCOM
|
Загальний огляд формату GEDCOM та мої особисті враження про нього
Зайвий раз переконуюсь, що за що б не взялися мормони, вони роблять це якісно.
Як виявилося, формат GEDCOM – теж їхніх рук справа.
Спочатку мені, як
людині, знайомій з принципами побудови реляційних баз даних, цей формат
здався надлишковим. Із запису персони ("особистості") є посилання на сім'ї
(власні сім'ї та сім'я батьків). А з сімей, у свою чергу, є посилання на
персони. Начебто б навіщо? Адже це й так можна вирахувати?
Не дивуюсь чому не дуже прижився GEDCOM 6 версії (той, що у "модному" нині форматі XML). Попередній формат (версії 5.5.1) виявився неймовірно простим і вдалим. Але, насправді, і в
цьому форматі не все так добре, як хотілося б. Проте цей стандарт залишається єдиним загальноприйнятим, що найкраще підтверджує, що він вийшов дуже вдалим при всіх його недоліках.
Отже, про структуру
загалом написано у першому повідомленні цієї теми, яка майже є описом
формату з Вікіпедії. Але спочатку ще раз про формат рядка level + delim +
[optional_xref_ID] + tag + [optional_line_value] + terminator,
Як писав вище, буває
кілька типів записів. Тут доречно зазначети,
що формат GEDCOM дуже надмірний. У ньому передбачено безліч можливостей,
більшість яких залишилися практично не затребуваними. Це добре видно і за
типами записів. Ще хочу сказати про порядок слідування записів
у файлі Gedcom.
Структура записів типу Персона (INDI) та теги, які можна використовувати.
Як і будь-який інший
тип запису, запис про персону починається з рядка нульового рівня, в якому
міститься тип рядка ( INDI ) та унікальний
номер. 0 @I3@ INDI Як нумеруються записи
осіб (як і записи інших типів). У будь-якому випадку, у будь-якому записі INDI від різних програм завжди є дані з тегом NAME . Без імені – нікуди, навіть якщо воно невідоме Ось приклад мінімально можливого запису персони:
0 @I2618@ INDI 1 NAME Vladlen /LIPOVENKO/ 1 SEX M Це означає, що
персону звали Vladlen, прізвище LIPOVENKO, чоловік.
1 SEX U Що таке "1" перед Sex, це означає, що це тег першого рівня. Двійка ("2") означає, що тег другого рівня, і це деталізація інформації першого рівня. Розглянемо це з
прикладу тега BIRT - народження.
1 BIRT 2 DATE 5 SEP 2012 Як бачимо, сама дата народження - дані другого рівня, тобто це означає, що це деталізація інформації першого рівня (у разі - народження). Якщо розглянути інформацію про смерть ( DEAT ), вона матиме схожу структуру, наприклад:
1 DEAT 2 DATE 23 JUN 1848 2 NOTE Umer v Ozerâne, Radomysl', Kiev, Ukraina 3 CONT Žitel' Severinovki Vasil'kovskogo uezda Тут – смерть – інформація першого рівня, дата смерті – другого, NOTE – примітка, опис, замітка – інформація теж другого рівня, але відноситься до смерті, а CONT – інформація третього рівня, з чого робимо висновок, що це деталізація інформації другого рівня, у даному разі - описи до смерті. Тут я навів приклад, коли дані наведені у латиниці.
Але це зовсім необов'язково. Які ще є корисні теги у записах типу INDI (персони)? Одні з найважливіших - це інформація про зв'язки
персони, а саме батьків та дітей. Самі записи типу "Сім'я" ми розглянемо пізніше, зараз тільки розберемо, як посилаються персони на свої сім'ї. Краще відразу наведу приклад персони зі зв'язками, заразом і розглянемо ще кілька нових тегів:
0 @I682@ INDI 1 _UID qTgGBh0yfz 1 NAME Пилип Григор'єв /ЯЦЕНКО/ 2 GIVN Пилип Григор'єв 1 SEX M 1 BIRT 2 DATE 1845 2 PLAC Україна, Київська область, Юзефівка 1 FAMC @F393@ 1 DEAT 2 DATE 17 SEP 1914 2 PLAC Україна, Київська область, Рокитне 2 CAUS від старості 2 NOTE 435об-436 68 (ош) 1914 09.17/09.18 Юзефівка кр Філіп Гри 3 CONC горіїв ЯЦЕНКО 69 від старості о. І. Дурдуковськ 3 CONC ий з дияконом Фаддеєм Донцем на парафію. цвинтар. Ф.127 Оп.10 3 CONC 79 Д.555 Ч.3 Л.420про-441 Олег 10.2011 1 FAMS @F138@ 1 FAMS @F480@ 1 FAMS @F712@ 1 NOTE 1843-1847 народження в Рокитному немає 2 CONT 1842(1897-55) / 2 CONT PC1850(16)-4 2 CONT 1858-12 2 CONT ІР1866-20 2 CONT Шлюбу немає, перевірити на прізвище Роскокошенко(Роскокоха) Як бачимо з цього запису, сім'я в якому народився Пилип Григорієв ЯЦЕНКО:
FAMC @F393@ А сімей, у яких він був батьком (з різними дружинами) – три. Ось вони всі:
1 FAMS @F138@ 1 FAMS @F480@ 1 FAMS @F712@ Ми бачимо нові теги
1 BIRT 2 DATE 1845 2 PLAC Україна, Київська область (Київська губернія), Юзефівка Означає, що народження було 1845 року в Юзефівці. А смерть-17.09.1914 - в Рокитному, причина - від старості (тег CAUS )
1 DEAT 2 DATE 17 SEP 1914 2 PLAC Україна, Київська область, Рокитне 2 CAUS від старості Ми бачимо ще теги CONT і
CONC - це продовження
інформації, яка почалася в тезі вищого рівня, але не помістилася в рядок
або примусове перенесення. Ще зупинюся на незрозумілому на вигляд тезі
1 _UID qTgGBh0yfz Як правило, з підкреслення починаються поля
користувача. Це можуть бути як поля, які сам визначив користувач (якщо
програма дозволяє) або поля програми, які не передбачені стандартом
GEDCOM.
Ну і останні теги, які сьогодні розглянемо, це GIVN та SURN 1 NAME Пилип Григор'єв /ЯЦЕНКО/ 2 GIVN Пилип Григор'єв В даному випадку – GIVN це ім'я персони.
Причому, оскільки в стандарті GEDCOM не передбачені
окремо теги для імені та по батькові (один з головних недоліків формату),
ім'я та по батькові розташовані в одному тезі.
1 NAME Ганна Францівна /РЕМБЕЦЬКА (МЕДИНСЬКА)/ 2 GIVN Ганна Францівна 2 SURN МЕДИНСЬКА У цьому прикладі прізвище після заміжжя (РЕМБЕЦЬКА) ми бачимо тільки в тезі NAME , тому що в SURN - її дівоче прізвище. Загалом, як бачимо, у цьому питанні "можливі варіанти", що не може тішити. А деякі програми (наприклад Ahnenblatt ) взагалі обходяться тегом NAME і не використовують ні GIVN ні SURN. Наприклад, я раніше дуже любив писати варіанти
прізвищ, які можуть зустрічатися в однієї персони в різних документах,
через слеш, наприклад:
КОНОНЕНКО/ЗІНЧЕНКО
Зараз я такого намагаюся уникати, оскільки різні програми можуть витлумачити зайві слеші неправильно. Ось чому буває важливо знати особливості формату обміну даними – GEDCOM . В імені (тегах другого рівня) є ще різні суфікси ( NSFX ), префікси ( NPFX ), але так як у слов'ян вони не використовуються, то я їх не розглядатиму.
Про дати в GEDCOM Спосіб надання дат у форматі GEDCOM - теж важлива та цікава тема
Здавалося б, дата є дата, звичайне поле і що тут може бути особливого. Але в генеалогії ми найчастіше маємо справу з неточними, приблизними, неповними датами. І все це різноманіття треба якось позначити.
Почнемо з найпростішого виду дати- точної дати . Дата позначається тегом DATE .
Тут все просто: число, місяць (абревіатура), рік.
Хоча є нюанси – за документацією число дати – одна чи дві
цифри, тобто до десятого числа має бути одна цифра, після – дві. Але за
фактом я зустрічав і такий запис: 02 FEB 1999 Те саме Якщо не вказано інше, це григоріанська дата нашої ери.
Позначення місяців не викликає
труднощів: Якщо дата в відмінному від григоріанського календаря,
то додається так званий "Date
Escape" і тоді запис, наприклад, виглядає таким
чином:
2 DATE @#DJULIAN@ 4 NOV 1828
"Date Escape" бувають такі: @ # DHEBREW @ | @#DROMAN@
| @#DFRENCH R@ | @#DGREGORIAN@ |
Як бачимо, позначення є і для григоріанського календаря, але воно не обов'язкове, оскільки григоріанський календар у нас йде за замовчуванням. Хоч до революції у нас був і юліанський календар, я в ДЖ майже ніколи не ставлю його ознаки (ставив тільки на початку своїх досліджень). Більше того, останнім часом і не рекомендую цього робити іншим. По-перше, це і так зрозуміло, по-друге, дати в смутний до-і пост-революційний час, як показує практика, писали й так приблизно, а по-третє це просто нагромаджує вид запису. Проте треба враховувати, що так роблять не всі, і знати, що існують інші види календаря, потрібно.
Тепер про неточні дати .
де абревіатура перед датою характеризує
"приблизність" дати або як вона отримана (від слів ABT = About,
CAL = Calculated,
EST =
Estimated)
У Древі життя це перекладено як "Близько",
"Розраховано", "Приблизно" або знаком "~" у короткому вигляді.
Це допускається і у "точному" вигляді запису
дати. Допускається, що може бути відсутня будь-яка із
складових дати, наприклад: Але позбавлений сенсу такий запис:
Поїхали далі.
Дати - діапазони
: DATE BEF 1858
Відповідно "До" (від before), "Після" (від after), "Між" (від between)
Хороший вид запису для генеалогії, особливо мені
подобається BET , оскільки дозволяє
час від часу звужувати діапазони з появою нових відомостей, що зрештою
полегшує з певною точністю обчислювати дату події. Але знову ж таки, є обмеження, продиктовані здоровим
глуздом:
Ну і про еквіваленти запису дат - два слова. Очевидно, що наступні записи будуть ідентичні за змістом:
Є ще один тип запису дат, який я не зустрічав у документації, але бачив у GEDCOM файлах. Зокрема в GEDCOM від Древа життя :
Тобто, в першому випадку "або 1853 або 1855"
Здавалося б трохи абсурдно, але на практиці таке
часто буває, наприклад:
Хоча в останньому випадку я все-таки віддаю перевагу
використанню запису BET (між), тому що
насправді істина може виявитися
посередині
Ще один вид запису дат, який використовується
переважно (а швидше за все - тільки) для подій, це запис типу
"Період"
Це коли подія відбувається не певного дня, а протягом
деякого часу.
DATE
FROM 1877
Різниця в цих записах у тому, що в перших двох
випадках початкова або кінцева дати не визначені (не відомі чи не мають
сенсу), а в останній є дата початку та дата закінчення.
От начебто б і все. Хоча ні.
Дата до нашої ери
.
І останнє, якщо
нічого не забув, тип дати, це довільний текст .
2 DATE (після 01.01.1860)
Потім ще:
2 DATE (бл. 1848 (1854))
І наостанок:
2 DATE (старша за Казимира)
Виявилося, що таке припускає стандарт GEDCOM і це "дати-фрази" , в якому сама дата представляє звичайний текст. Цей текст береться в круглі дужки, щоб при аналізі ми розуміли, що він не стандартизований і може містити абсолютно будь-яку інформацію (кожною мовою). Ось таке непросте уявлення дати в такому звичайному на вигляд тегу DATE
Записи типу "Сім'я" (FAM) Отже, один із найголовніших видів запису в GEDCOM - Сім'ї: FAM При всій значущості і важливості даного типу запису
(а ці типи запису є в будь-якому файлі GEDCOM ), насправді
структура цього запису напрочуд проста.
Не дарма кажуть: Все геніальне – просто.
Запис FAM призначений для
зберігання зареєстрованих шлюбів, шлюбів, цивільних, церковних шлюбів, а
також будь-якого об'єднання 2 людей, що викликало народження дитини.
У записах цього типу не може бути більше одного
чоловіка ( HUSB ) та однієї дружини
( WIFE ).
Структура запису FAM передбачає, що
HUSB – це батько, чоловік
та WIFE – мати, жінка,
дружина.
Візьмемо простий приклад запису FAM:
0 @ F294 @ FAM
З першого погляду – нічого не зрозуміло.
Решту інформації про надані персони (дату та місце народження, стать, ім'я тощо) ми можемо легко дізнатися, звернувшись до запису персони ( INDI ) за відповідним номером. Як дізнатися чи одружувалися зазначені персони?
Елементарно: по наявності події Шлюб (тег MARR )
Ось приклад із більш заповненою подією шлюб: 1 HUSB @ I460 @ 1 WIFE @ I467 @ 1 CHIL @ I601 @ 1 CHIL @ I621 @ 1 CHIL @ I622 @
NOTE Шлюб із Аггеєм Євменевичем був першим. Після весілля стала п 3 CONC роживати чоловіка в Юзефівці. 3 CONT Вінчання, найімовірніше, відбувалося за місцем проживання 3 CONC нареченої, тобто. у с.
Насташка.
Тут ми бачимо всі знайомі нам теги та пояснювати їх немає потреби. Як вже писав вище, чоловік і дружина мають бути
представлені не більше, ніж в одному екземплярі.
Та й обіцяна
подія усиновлення .
0 @I735@ INDI
Тут наш інтерес представляє така
структура:
1 ADOP
Яка позначає подію усиновлення, номер сім'ї, де він був усиновлений, і ким усиновлений (BOTH - у даному випадку обома батьками). Є ще одна, пов'язана з усиновленням, структура:
Її необхідність я не зовсім розумію Якщо ми подивимося 102 сім'ю, побачимо ще раз ADOP . Це значення мені також не зрозуміло. Як рудимент начебто. А ось ще один приклад із цього ж
GEDCOM-файлу:
0 @I228@ INDI 1 ADOP 1 FAMS @F136@
Відмінності від першого - це наявність крім сім'ї, в якій дитину усиновили (F559), ще й сім'ї, в якій дитина народилася (F108). Ну і, мабуть, усиновлював дитину тільки батько:
Сім'ї батьків, на які
посилається запис: 0 @F108@ FAM
Тут усе стандартно. І "родина", прийомна:
0 @F559@ FAM
Тут ми бачимо те, про що я казав: у сім'ї лише один
батько – це прийомний
батько . Тут ми не спостерігаємо події
ADOP Мабуть, і все. Якщо ще згадаю, допишу.
Нарешті я дописав цей розділ, до якого не доходили у
мене руки довгих 8 років Хоча GEDCOM і є стандартом генеалогічних даних, багато
програм привносять до нього свої особливості. Як вже сказано вище, формат
дозволяє додавати "користувацькі" поля і багато генеалогічних програм цим
користуються при реалізації експорту своїх даних. З високою вірогідністю,
коли така програма буде імпортувати файл, яка створила сама ж, то вона
"зрозуміє" ці данні і імпортує їх повністю. Але чи зрозуміють інші
програми таку "творчість"? З величезною вірогідністю, що ні. Як зазначалося вище, навіть стандартні поля, такі як
прізвище, ім'я можуть писатися у GEDCOM "по-своєму". По-батькові, яке не передбачено стандартом та
розповсюджено у слов'ян, якась програма може додати у ім'я (і більшість
роблять саме так). А деякі програми можуть, як це, наприклад реалізовано у
GenoPro, дадати свій тег MIDDLE. При чому, хоч це й користувацьке поле
(тому що в стандарті його немає), перед ним відсутнє підкреслення, як того
вимагає стандарт. Деякі програми взагалі в інтерфейсі не передбачили
по-батькові. А якщо його немає, то і писати в Gedcom вони нічого не
будуть. Але з іншого боку, при імпорті з gedcom, де по-батькові є, вони
навряд-чи його звідти візьмуть. Бо куди його розмістити? Схожа ситуація з дівочим прізвищем. У стандарті є
одне стандартне поле для прізвища (SURN). Як же бути з дівочим (при народженні), адже це
прізвище в генеалогії має велике значення? Наприклад, "Дерево життя" цей тег використовує для
позначення прізвища при народженні (дівочому), а для чоловіків цей тег
відсутній. Інші програми пишуть в SURN прізвище незалежно від статі. Для чоловіків
то не проблема. А для жінок? Причому, для жінок в SURN може бути як дівоче
прізвище, так і прізвище, отримане після одруження. Деякі програми (наприклад теж ДЖ) пишуть поточне
прізвище (а саме прізвище після одруження для жінок) у тег NAME Ось приклад із ДЖ для жінок: 1 NAME Анна Францівна /РЕМБЕЦЬКА (МЕДИНСЬКА)/ 2 GIVN Ганна Францівна 2 SURN МЕДИНСЬКА У цьому прикладі прізвище після одруження (РЕМБЕЦЬКА)
ми бачимо тільки в тезі NAME , тому що в SURN - її дівоче прізвище (МЕДИНСЬКА).
Загалом, як бачимо, у цьому питанні "можливі варіанти", що не може
тішити. Деякі програми (наприклад Ahnenblatt )
взагалі обходяться тегом NAME і не використовують ні GIVN ні SURN. Деякі програми можуть, як це, наприклад реалізовано у
FamilyTreeBuilder (FTB), а також в GenoPro, дадати прізвище у жінок після
одруження у користувацькі поля. І якщо FTB додало нове поле і розробник
дотримався стандарту (додав поле з тегом _MARNM, а як
я вже описав вище, підкреслення перед іменем вказує на те, що це
користувацьке поле), то GenoPro просто додав своє поле LAST2. Як бачимо, GenoPro, досить вільно додає не стандартні
поля на всі випадки життя. З одного боку, ця програма заповнює прогалини і
недоліки стандарту, але чи завжди це на користь? Поки ми користуємося тільки однією програмою, ми
цього не помічаємо. Але уявимо, що ми вирішили поміняти програму на іншу.
І єдиний спосіб перенести до неї дані - це GEDCOM - файл, який мають
розуміти всі. Чи врахує якась одна програма не стандартні теги
іншої? Я в цьому не впевнений. В GedomReport я в різний час її розвитку реалізовував
більшість особливостей різних загальновідомих програм. Користувачі мені
присилали свої GEDCOM-файли, які вони експортовували з різних програм, я
їх "розбирав" на складові і адаптував свою програму під їх "примхи". Чи
враховано все? Скоріш за все - ні, тому що програми розвиваються і ніхто
не дає гарантії, що в якійсь новій версії кожної з них не буде додано якусь нову "екзотику". Як же себе застрахувати від втрати даних при
переносі
даних з однієї програми до іншої? По-перше, глянути GEDCOM від вашої програми на
предмет наявності не стандартних тегів (як вже неодноразово говорив, на
початку імені такого поля має бути підкреслення). Якщо такі поля виявлено,
то гляньте, що за інформацію таке поле містить. Це не стосується GenoPro,
яке додає свої поля без підкреслень. Як варіант, перевірити всі поля чи входять вони в
стандарт. Звісно, це ще складніше, але на кону збереження даних. Що далі робити, якщо ви знайшли не стандартні поля?
Бажано, не писати в них важливої інформації. З великою вірогідністю вона
може бути втрачена. Жорстко? Певно що так, але я не бачу іншого
виходу. Взагалі, бажано використовувати якесь обмежену
кількість основних полів та не користуватися "екзотикою". Чим менше
розповсюджено поле, тем більша вірогідність втрати в таких полях
даних.
Є надія, що розробник тієї програми, в яку ви будете
імпортувати дані, передбачив різноманіття стандартів і імпортує гедком від
інших програм без втрати інформації. Така вірогідність є, і вона не мала.
Але чи буде заморочуватись такий розробник, якщо ви
звернетеся до нього з проханням реалізувати коректний імпорт з маловідомої
програми? Не впевнений. Тому ще одна порада - користуйтеся відомими
програмами, присутність на ринку яких значна. Ну і наостанок - яку я програму вважаю такою, яка
більше за інших нехтує стандартом? Це, безумовно, GenoPro. У
всякому разі, найбільше проблем при обробці Gedcom я мав саме від цієї
програми. Єдине, що "рятує" ситуацію - це те, що програма ця
відома. А це - дивіться вище. Ще один "антилідер" - це Ahnenblatt.
І вона не розповсюджена в Україні. Не знаю, чи широко розповсюджена вона
за кордоном, якщо - так, то є надія, що такий файл "зрозуміють" інші
програми, але якщо не розповсюджена, тоді я би не рекомендував її для
роботи. Врешті, вирішувати вам. Я лише виклав свої знання та
роздуми на цю тему, як людина, яка все це перещупала руками і знає
з середини про ситуацію з таким нестандартним стандартом
GEDCOM. |