Libgedcom interface details


Index



Record identifiers

The following table describes the identifiers to be used in the record callbacks.  The last column gives the Gedcom_val type of the xref argument in the header start callback.

Record
Meaning
Possible
 xref types

REC_HEAD
The header of the GEDCOM file
NULL
REC_FAM
A record describing a family
STRING
REC_INDI
A record describing an individual
STRING
REC_OBJE
A record describing a multimedia object
STRING
REC_NOTE
A record describing a note
STRING
REC_REPO
A record describing a source repository
STRING
REC_SOUR
A record describing a source
STRING
REC_SUBN
A record describing the submission
STRING
REC_SUBM
A record describing the submitter
STRING
REC_USER
An application-specific record (the tag in the start callback contains the actually used tag).
NULL
STRING

Element identifiers

The following table describes the identifiers to be used in the element callbacks.  The last column gives the Gedcom_val type of the val argument in the element start callback.

Element
Possible
tags

Used within
Possible
val types

ELT_HEAD_SOUR
SOUR
REC_HEAD
STRING
ELT_HEAD_SOUR_VERS
VERS
ELT_HEAD_SOUR
STRING
ELT_HEAD_SOUR_NAME
NAME
ELT_HEAD_SOUR
STRING
ELT_HEAD_SOUR_CORP
CORP
ELT_HEAD_SOUR
STRING
ELT_HEAD_SOUR_DATA
DATA
ELT_HEAD_SOUR
STRING
ELT_HEAD_SOUR_DATA_DATE
DATE
ELT_HEAD_SOUR_DATA
DATE
ELT_HEAD_SOUR_DATA_COPR
COPR
ELT_HEAD_SOUR_DATA
STRING
ELT_HEAD_DEST
DEST
REC_HEAD
STRING
ELT_HEAD_DATE
DATE
REC_HEAD
DATE
ELT_HEAD_DATE_TIME
TIME
ELT_HEAD_DATE
STRING
ELT_HEAD_SUBM
SUBM
REC_HEAD
STRING
ELT_HEAD_SUBN
SUBN
REC_HEAD
STRING
ELT_HEAD_FILE
FILE
REC_HEAD
STRING
ELT_HEAD_COPR
COPR
REC_HEAD
STRING
ELT_HEAD_GEDC
GEDC
REC_HEAD
NULL
ELT_HEAD_GEDC_VERS
VERS
ELT_HEAD_GEDC
STRING
ELT_HEAD_GEDC_FORM
FORM
ELT_HEAD_GEDC
STRING
ELT_HEAD_CHAR
CHAR
REC_HEAD
STRING
ELT_HEAD_CHAR_VERS
VERS
ELT_HEAD_CHAR
STRING
ELT_HEAD_LANG
LANG
REC_HEAD
STRING
ELT_HEAD_PLAC
PLAC
REC_HEAD
NULL
ELT_HEAD_PLAC_FORM
FORM
ELT_HEAD_PLAC
STRING
ELT_HEAD_NOTE
NOTE
REC_HEAD
STRING
ELT_FAM_HUSB
HUSB
REC_FAM
STRING
ELT_FAM_WIFE
WIFE
REC_FAM
STRING
ELT_FAM_CHIL
CHIL
REC_FAM
STRING
ELT_FAM_NCHI
NCHI
REC_FAM
STRING
ELT_FAM_SUBM
SUBM
REC_FAM
STRING
ELT_INDI_RESN
RESN
REC_INDI
STRING
ELT_INDI_SEX
SEX
REC_INDI
STRING
ELT_INDI_SUBM
SUBM
REC_INDI
STRING
ELT_INDI_ALIA
ALIA
REC_INDI
STRING
ELT_INDI_ANCI
ANCI
REC_INDI
STRING
ELT_INDI_DESI
DESI
REC_INDI
STRING
ELT_INDI_RFN
RFN
REC_INDI
STRING
ELT_INDI_AFN
AFN
REC_INDI
STRING
ELT_OBJE_FORM
FORM
REC_OBJE
STRING
ELT_OBJE_TITL
TITL
REC_OBJE
STRING
ELT_OBJE_BLOB
BLOB
REC_OBJE
NULL
ELT_OBJE_BLOB_CONT
CONT
ELT_OBJE_BLOB
STRING
ELT_OBJE_OBJE
OBJE
REC_OBJE
STRING
ELT_REPO_NAME
NAME
REC_REPO
STRING
ELT_SOUR_DATA
DATA
REC_SOUR
NULL
ELT_SOUR_DATA_EVEN
EVEN
ELT_SOUR_DATA
STRING
ELT_SOUR_DATA_EVEN_DATE
DATE
ELT_SOUR_DATA_EVEN
DATE
ELT_SOUR_DATA_EVEN_PLAC
PLAC
ELT_SOUR_DATA_EVEN
STRING
ELT_SOUR_DATA_AGNC
AGNC
ELT_SOUR_DATA
STRING
ELT_SOUR_AUTH
AUTH
REC_SOUR
STRING
ELT_SOUR_TITL
TITL
REC_SOUR
STRING
ELT_SOUR_ABBR
ABBR
REC_SOUR
STRING
ELT_SOUR_PUBL
PUBL
REC_SOUR
STRING
ELT_SOUR_TEXT
TEXT
REC_SOUR
STRING
ELT_SUBN_SUBM
SUBM
REC_SUBN
STRING
ELT_SUBN_FAMF
FAMF
REC_SUBN
STRING
ELT_SUBN_TEMP
TEMP
REC_SUBN
STRING
ELT_SUBN_ANCE
ANCE
REC_SUBN
STRING
ELT_SUBN_DESC
DESC
REC_SUBN
STRING
ELT_SUBN_ORDI
ORDI
REC_SUBN
STRING
ELT_SUBN_RIN
RIN
REC_SUBN
STRING
ELT_SUBM_NAME
NAME
REC_SUBM
STRING
ELT_SUBM_LANG
LANG
REC_SUBM
STRING
ELT_SUBM_RFN
RFN
REC_SUBM
STRING
ELT_SUBM_RIN
RIN
REC_SUBM
STRING
ELT_SUB_ADDR
ADDR
ELT_HEAD_SOUR_CORP,
REC_REPO, REC_SUBM,
ELT_SUB_FAM_EVT,
ELT_SUB_FAM_EVT_EVEN,
ELT_SUB_INDIV_ATTR,
ELT_SUB_INDIV_RESI,
ELT_SUB_INDIV_BIRT,
ELT_SUB_INDIV_GEN,
ELT_SUB_INDIV_ADOP


STRING
ELT_SUB_ADDR_CONT
CONT
ELT_SUB_ADDR
STRING
ELT_SUB_ADDR_ADR1
ADR1
ELT_SUB_ADDR
STRING
ELT_SUB_ADDR_ADR2
ADR2
ELT_SUB_ADDR
STRING
ELT_SUB_ADDR_CITY
CITY
ELT_SUB_ADDR
STRING
ELT_SUB_ADDR_STAE
STAE
ELT_SUB_ADDR
STRING
ELT_SUB_ADDR_POST
POST
ELT_SUB_ADDR
STRING
ELT_SUB_ADDR_CTRY
CTRY
ELT_SUB_ADDR
STRING
ELT_SUB_PHON
PHON
ELT_HEAD_SOUR_CORP,
REC_REPO, REC_SUBM,
ELT_SUB_FAM_EVT,
ELT_SUB_FAM_EVT_EVEN,
ELT_SUB_INDIV_ATTR,
ELT_SUB_INDIV_RESI,
ELT_SUB_INDIV_BIRT,
ELT_SUB_INDIV_GEN,
ELT_SUB_INDIV_ADOP


STRING
ELT_SUB_ASSO
ASSO
REC_INDI
STRING
ELT_SUB_ASSO_TYPE
TYPE
ELT_SUB_ASSO
STRING
ELT_SUB_ASSO_RELA
RELA
ELT_SUB_ASSO
STRING
ELT_SUB_CHAN
CHAN
REC_FAM, REC_INDI,
REC_OBJE, REC_NOTE,
REC_REPO, REC_SOUR,
REC_SUBM

NULL
ELT_SUB_CHAN_DATE
DATE
ELT_SUB_CHAN
DATE
ELT_SUB_CHAN_TIME
TIME
ELT_SUB_CHAN_DATE
STRING
ELT_SUB_FAMC
FAMC
REC_INDI
STRING
ELT_SUB_FAMC_PEDI
PEDI
ELT_SUB_FAMC
STRING
ELT_SUB_CONT
CONT
ELT_HEAD_NOTE, REC_NOTE,
ELT_SOUR_AUTH, ELT_SOUR_TITL,
ELT_SOUR_PUBL, ELT_SOUR_TEXT,
ELT_SUB_NOTE,
ELT_SUB_SOUR, ELT_SUB_SOUR_TEXT

STRING
ELT_SUB_CONC
CONC
ELT_HEAD_NOTE, REC_NOTE,
ELT_SOUR_AUTH, ELT_SOUR_TITL,
ELT_SOUR_PUBL, ELT_SOUR_TEXT,
ELT_SUB_NOTE,
ELT_SUB_SOUR, ELT_SUB_SOUR_TEXT

STRING
ELT_SUB_EVT_TYPE
TYPE
ELT_SUB_FAM_EVT,
ELT_SUB_FAM_EVT_EVEN,
ELT_SUB_INDIV_ATTR,
ELT_SUB_INDIV_RESI,
ELT_SUB_INDIV_BIRT,
ELT_SUB_INDIV_GEN,
ELT_SUB_INDIV_ADOP

STRING
ELT_SUB_EVT_DATE
DATE
ELT_SUB_FAM_EVT,
ELT_SUB_FAM_EVT_EVEN,
ELT_SUB_INDIV_ATTR
,
ELT_SUB_INDIV_RESI,
ELT_SUB_INDIV_BIRT,
ELT_SUB_INDIV_GEN,
ELT_SUB_INDIV_ADOP



DATE
ELT_SUB_EVT_AGE
AGE
ELT_SUB_FAM_EVT,
ELT_SUB_FAM_EVT_EVEN,
ELT_SUB_INDIV_ATTR,
ELT_SUB_INDIV_RESI
,
ELT_SUB_INDIV_BIRT,
ELT_SUB_INDIV_GEN,
ELT_SUB_INDIV_ADOP



STRING
ELT_SUB_EVT_AGNC
AGNC
ELT_SUB_FAM_EVT,
ELT_SUB_FAM_EVT_EVEN,
ELT_SUB_INDIV_ATTR,
ELT_SUB_INDIV_RESI
,
ELT_SUB_INDIV_BIRT,
ELT_SUB_INDIV_GEN,
ELT_SUB_INDIV_ADOP



STRING
ELT_SUB_EVT_CAUS
CAUS
ELT_SUB_FAM_EVT,
ELT_SUB_FAM_EVT_EVEN,
ELT_SUB_INDIV_ATTR,
ELT_SUB_INDIV_RESI
,
ELT_SUB_INDIV_BIRT,
ELT_SUB_INDIV_GEN,
ELT_SUB_INDIV_ADOP



STRING
ELT_SUB_FAM_EVT
ANUL, CENS, DIV,
DIVF, ENGA, MARR,
MARB, MARC, MARL,
MARS

REC_FAM
NULL
STRING

ELT_SUB_FAM_EVT_HUSB
HUSB
ELT_SUB_FAM_EVT,
ELT_SUB_FAM_EVT_EVEN
NULL
ELT_SUB_FAM_EVT_WIFE
WIFE
ELT_SUB_FAM_EVT,
ELT_SUB_FAM_EVT_EVEN
NULL
ELT_SUB_FAM_EVT_AGE
AGE
ELT_SUB_FAM_EVT_HUSB,
ELT_SUB_FAM_EVT_WIFE
STRING
ELT_SUB_FAM_EVT_EVEN
EVEN
REC_FAM
NULL
ELT_SUB_IDENT_REFN
REFN
REC_FAM, REC_INDI,
REC_OBJE, REC_NOTE,
REC_REPO, REC_SOUR

STRING
ELT_SUB_IDENT_REFN_TYPE
TYPE
ELT_SUB_IDENT_REFN
STRING
ELT_SUB_IDENT_RIN
RIN
REC_FAM, REC_INDI,
REC_OBJE, REC_NOTE,
REC_REPO, REC_SOUR

STRING
ELT_SUB_INDIV_ATTR
CAST, DSCR, EDUC,
IDNO, NATI, NCHR,
NMR, OCCU, PROP,
RELI, SSN, TITL

REC_INDI
STRING
ELT_SUB_INDIV_RESI
RESI
REC_INDI
NULL
ELT_SUB_INDIV_BIRT
BIRT, CHR
REC_INDI
NULL
STRING

ELT_SUB_INDIV_BIRT_FAMC
FAMC
ELT_SUB_INDIV_BIRT
STRING
ELT_SUB_INDIV_GEN
DEAT, BURI, CREM,
BAPM, BARM, BASM,
BLES, CHRA, CONF,
FCOM, ORDN, NATU,
EMIG, IMMI, CENS,
PROB, WILL, GRAD,
RETI

REC_INDI
NULL
STRING

ELT_SUB_INDIV_ADOP
ADOP
REC_INDI
NULL
STRING

ELT_SUB_INDIV_ADOP_FAMC
FAMC
ELT_SUB_INDIV_ADOP
STRING
ELT_SUB_INDIV_ADOP_FAMC_ADOP
ADOP
ELT_SUB_INDIV_ADOP_FAMC
STRING
ELT_SUB_INDIV_EVEN
EVEN
REC_INDI
NULL
ELT_SUB_LIO_BAPL
BAPL, CONL, ENDL
REC_INDI
NULL
ELT_SUB_LIO_BAPL_STAT
STAT
ELT_SUB_LIO_BAPL,
ELT_SUB_LIO_SLGC

STRING
ELT_SUB_LIO_BAPL_DATE
DATE
ELT_SUB_LIO_BAPL,
ELT_SUB_LIO_SLGC


DATE
ELT_SUB_LIO_BAPL_TEMP
TEMP
ELT_SUB_LIO_BAPL,
ELT_SUB_LIO_SLGC


STRING
ELT_SUB_LIO_BAPL_PLAC
PLAC
ELT_SUB_LIO_BAPL,
ELT_SUB_LIO_SLGC


STRING
ELT_SUB_LIO_SLGC
SLGC
REC_INDI
NULL
ELT_SUB_LIO_SLGC_FAMC
FAMC
ELT_SUB_LIO_SLGC
STRING
ELT_SUB_LSS_SLGS
SLGS
REC_FAM
NULL
ELT_SUB_LSS_SLGS_STAT
STAT
ELT_SUB_LSS_SLGS
STRING
ELT_SUB_LSS_SLGS_DATE
DATE
ELT_SUB_LSS_SLGS
DATE
ELT_SUB_LSS_SLGS_TEMP
TEMP
ELT_SUB_LSS_SLGS
STRING
ELT_SUB_LSS_SLGS_PLAC
PLAC
ELT_SUB_LSS_SLGS
STRING
ELT_SUB_MULTIM_OBJE
OBJE
REC_FAM, REC_INDI,
REC_SOUR, REC_SUBM,
ELT_SUB_FAM_EVT,
ELT_SUB_FAM_EVT_EVEN,
ELT_SUB_INDIV_ATTR,
ELT_SUB_INDIV_RESI
,
ELT_SUB_INDIV_BIRT,
ELT_SUB_INDIV_GEN,
ELT_SUB_INDIV_ADOP,
ELT_SUB_SOUR

NULL
ELT_SUB_MULTIM_OBJE_FORM
FORM
ELT_SUB_MULTIM_OBJE
STRING
ELT_SUB_MULTIM_OBJE_TITL
TITL
ELT_SUB_MULTIM_OBJE
STRING
ELT_SUB_MULTIM_OBJE_FILE
FILE
ELT_SUB_MULTIM_OBJE
STRING
ELT_SUB_NOTE
NOTE
REC_FAM, REC_INDI,
REC_OBJE, REC_REPO,
REC_SOUR, ELT_SOUR_DATA,
ELT_SUB_ASSO, ELT_SUB_CHAN,
ELT_SUB_FAMC,
ELT_SUB_FAM_EVT,
ELT_SUB_FAM_EVT_EVEN,
ELT_SUB_INDIV_ATTR,
ELT_SUB_INDIV_RESI
,
ELT_SUB_INDIV_BIRT,
ELT_SUB_INDIV_GEN,
ELT_SUB_INDIV_ADOP,
ELT_SUB_LIO_BAPL,
ELT_SUB_LIO_SLGC,
ELT_SUB_LSS_SLGS,
ELT_SUB_MULTIM_OBJE,
ELT_SUB_PERS_NAME,
ELT_SUB_PLAC,
ELT_SUB_SOUR,
ELT_SUB_REPO,
ELT_SUB_FAMS

NULL
STRING

ELT_SUB_PERS_NAME
NAME
REC_INDI
STRING
ELT_SUB_PERS_NAME_NPFX
NPFX
ELT_SUB_PERS_NAME
STRING
ELT_SUB_PERS_NAME_GIVN
GIVN
ELT_SUB_PERS_NAME
STRING
ELT_SUB_PERS_NAME_NICK
NICK
ELT_SUB_PERS_NAME
STRING
ELT_SUB_PERS_NAME_SPFX
SPFX
ELT_SUB_PERS_NAME
STRING
ELT_SUB_PERS_NAME_SURN
SURN
ELT_SUB_PERS_NAME
STRING
ELT_SUB_PERS_NAME_NSFX
NSFX
ELT_SUB_PERS_NAME
STRING
ELT_SUB_PLAC
PLAC
ELT_SUB_FAM_EVT,
ELT_SUB_FAM_EVT_EVEN,
ELT_SUB_INDIV_ATTR,
ELT_SUB_INDIV_RESI

STRING
ELT_SUB_PLAC_FORM
FORM
ELT_SUB_PLAC
STRING
ELT_SUB_SOUR
SOUR
REC_FAM, REC_INDI,
REC_NOTE, ELT_SUB_ASSO
ELT_SUB_FAM_EVT,
ELT_SUB_FAM_EVT_EVEN,
ELT_SUB_INDIV_ATTR,
ELT_SUB_INDIV_RESI
,
ELT_SUB_INDIV_BIRT,
ELT_SUB_INDIV_GEN,
ELT_SUB_INDIV_ADOP,
ELT_SUB_LIO_BAPL,
ELT_SUB_LIO_SLGC,
ELT_SUB_LSS_SLGS,
ELT_SUB_NOTE,
ELT_SUB_PERS_NAME,
ELT_SUB_PLAC

STRING
ELT_SUB_SOUR_PAGE
PAGE
ELT_SUB_SOUR
STRING
ELT_SUB_SOUR_EVEN
EVEN
ELT_SUB_SOUR
STRING
ELT_SUB_SOUR_EVEN_ROLE
ROLE
ELT_SUB_SOUR_EVEN
STRING
ELT_SUB_SOUR_DATA
DATA
ELT_SUB_SOUR
NULL
ELT_SUB_SOUR_DATA_DATE
DATE
ELT_SUB_SOUR_DATA
DATE
ELT_SUB_SOUR_TEXT
TEXT
ELT_SUB_SOUR
ELT_SUB_SOUR_DATA

STRING
ELT_SUB_SOUR_QUAY
QUAY
ELT_SUB_SOUR
STRING
ELT_SUB_REPO
REPO
REC_SOUR
STRING
ELT_SUB_REPO_CALN
CALN
ELT_SUB_REPO
STRING
ELT_SUB_REPO_CALN_MEDI
MEDI
ELT_SUB_REPO_CALN
STRING
ELT_SUB_FAMS
FAMS
REC_INDI
STRING
ELT_USER
any tag starting
with an underscore

anywhere
NULL
STRING


Gedcom_val types

Currently, the specific Gedcom_val types are (with val of type Gedcom_val):


type checker
cast operator
null value
GEDCOM_IS_NULL(val)
N/A
string
GEDCOM_IS_STRING(val)
char* str = GEDCOM_STRING(val);
date
GEDCOM_IS_DATE(val)
struct date_value dv = GEDCOM_DATE(val);


The type checker returns a true or a false value according to the type of the value, but this is in principle only necessary in the rare circumstances that two types are possible, or where an optional value can be provided.  In most cases, the type is fixed for a specific tag.

The null value is used for when the GEDCOM spec doesn't allow a value, or when an optional value is allowed but none is given.
 
The string value is the most general used value currently, for all those values that don't have a more specific meaning.  In essence, the value that is returned by GEDCOM_STRING is always the same as the raw_value passed to the start callback, and is thus in fact redundant.

The date value is used for all elements that return a date.

struct date_value

This struct describes a date as given in the GEDCOM file, and has the following definition:
struct date_value {
  Date_value_type  type;
  struct date      date1;
  struct date      date2;
  char              phrase[MAX_PHRASE_LEN + 1];
};

It depends on the first member, the type, which members are actually relevant:

Date_value_type
Meaning
Relevant members
DV_NO_MODIFIER
just a simple date
date1
DV_BEFORE
a range (BEFORE date1)
date1
DV_AFTER
a range (AFTER date1)
date1
DV_BETWEEN
a range (BETWEEN date1 AND date2)
date1, date2
DV_FROM
a period (FROM date1)
date1
DV_TO
a period (TO date1)
date1
DV_FROM_TO
a period (FROM date1 TO date2)
date1, date2
DV_ABOUT
an approximation (ABOUT date1)
date1
DV_CALCULATED
an approximation (CALCULATED date1)
date1
DV_ESTIMATED
an approximation (ESTIMATED date1)
date1
DV_INTERPRETED
INTERPRETED date1 FROM a given free form date phrase
date1, phrase
DV_PHRASE
a free form date phrase
phrase

struct date

The date1 and date2 also have a strict syntax:
struct date {
  Calendar_type  cal;
  char           day_str[MAX_DAY_LEN + 1];
  char           month_str[MAX_MONTH_LEN + 1];
  char           year_str[MAX_YEAR_LEN + 1];

  int            day;
  int            month;
  int            year;
  Year_type      year_type;

  Date_type      type;
  long int       sdn1;
  long int       sdn2;
};

The first four fields are the primary fields parsed from the value in the GEDCOM file.  The day_str, month_str and year_str are the literal parts of the date that denote the day, month and year (the day_str and month_str can be empty) .  The calendar type cal is one of (see calendar overview LINK TBD):
The next four fields are deduced from the first four:
It is possible that the year_str is given as e.g. "1677/78".  This is coming from a date in a so called "annunciation style", where the year began on 25 March: "20 March 1677/78" is 20 March 1677 in "annunciation style" and 20 March 1678 in "circumcision style" (the current style).  See calendar overview (LINK TBD).

In this case, the year will contain the "circumcision style" year (1678 in the example), and year_type will be YEAR_DOUBLE.  Normal dates will have a year_type equal to YEAR_SINGLE .

Finally, the last three fields are probably the most interesting values for applications that want to process dates.  Basically, the date is converted to a serial day number (aka Julian day), which is the unique day number since November 25, 4714 BC in the Gregorian calendar.  The advantage of these day numbers is that they are unique and independent of the calendar system.  Furthermore, date differences can just be computed by subtracting the serial day numbers.

However, since dates in GEDCOM are not necessarily exact (e.g. "MAR 1990"), it is not possible to represent all GEDCOM dates with 1 serial day number.  Two cases can be distinguished:
These are represented by a serial day number in sdn1 and a Date_type equal to DATE_EXACT.
These are represented by 2 serial day numbers ( sdn1 and sdn2) and a Date_type equal to DATE_BOUNDED.

For example, the Gregorian date "MAR 1990" is represented by the serial day numbers for "1 MAR 1990" and "31 MAR 1990", and the Gregorian date "1990" is represented by the serial day numbers for "1 JAN 1990" and "31 DEC 1990".  Similarly for the other calendar types.


$Id$
$Name$