View on GitHub

GEDCOM Grammars : 5.5 vs 5.5.1

In a blog entry, Bob Coret provides a useful comparison between the two variants of the GEDCOM 5.5 grammar.

Below I show a similar comparison between the 5.5 and 5.5.1 grammars. Specifically, the "2 Jan 1996" variant of the 5.5 specification.

The text from the GEDCOM 5.5 grammar has been lightly edited to remove spurious differences. E.g. in both grammars, the FAM_RECORD includes these elements:

+1 <<NOTE_STRUCTURE>> {0:M}
+1 <<SOURCE_CITATION>> {0:M}
+1 <<MULTIMEDIA_LINK>> {0:M}
However, in the two specification documents, the elements are listed in different positions and in a different order. Since the specification states the order of elements is not significant, I have reduced "noise" by tweaking the text of the 5.5 specification.

I don't pretend this is comprehensive, I have not examined the "primitive elements" of the grammars for differences. Any typos, errors, etc. are my own and not the fault of the Family History Department of the Church of Jesus Christ of Latter-day Saints.

The difference table was produced thanks to Beyond Compare.

GEDCOM 5.5 vs 5.5.1

Produced: 8/15/2016 4:16:19 PM
   
GEDCOM 5.5   GEDCOM 5.5.1
HEADER:= = HEADER:=
n HEAD {1:1}   n HEAD {1:1}
+1 SOUR <APPROVED_SYSTEM_ID> {1:1}   +1 SOUR <APPROVED_SYSTEM_ID> {1:1}
+2 VERS <VERSION_NUMBER> {0:1}   +2 VERS <VERSION_NUMBER> {0:1}
+2 NAME <NAME_OF_PRODUCT> {0:1}   +2 NAME <NAME_OF_PRODUCT> {0:1}
+2 CORP <NAME_OF_BUSINESS> {0:1}   +2 CORP <NAME_OF_BUSINESS> {0:1}
+3 <<ADDRESS_STRUCTURE>> {0:1}   +3 <<ADDRESS_STRUCTURE>> {0:1}
+2 DATA <NAME_OF_SOURCE_DATA> {0:1}   +2 DATA <NAME_OF_SOURCE_DATA> {0:1}
+3 DATE <PUBLICATION_DATE> {0:1}   +3 DATE <PUBLICATION_DATE> {0:1}
+3 COPR <COPYRIGHT_SOURCE_DATA> {0:1}   +3 COPR <COPYRIGHT_SOURCE_DATA> {0:1}
  -+ +4 [CONT|CONC]<COPYRIGHT_SOURCE_DATA> {0:M}
+1 DEST <RECEIVING_SYSTEM_NAME> {0:1} = +1 DEST <RECEIVING_SYSTEM_NAME> {0:1}
+1 DATE <TRANSMISSION_DATE> {0:1}   +1 DATE <TRANSMISSION_DATE> {0:1}
+2 TIME <TIME_VALUE> {0:1}   +2 TIME <TIME_VALUE> {0:1}
+1 SUBM @<XREF:SUBM>@ {1:1}   +1 SUBM @<XREF:SUBM>@ {1:1}
+1 SUBN @<XREF:SUBN>@ {0:1}   +1 SUBN @<XREF:SUBN>@ {0:1}
+1 FILE <FILE_NAME> {0:1}   +1 FILE <FILE_NAME> {0:1}
+1 COPR <COPYRIGHT_GEDCOM_FILE> {0:1}   +1 COPR <COPYRIGHT_GEDCOM_FILE> {0:1}
+1 GEDC {1:1}   +1 GEDC {1:1}
+2 VERS <VERSION_NUMBER> {1:1}   +2 VERS <VERSION_NUMBER> {1:1}
+2 FORM <GEDCOM_FORM> {1:1}   +2 FORM <GEDCOM_FORM> {1:1}
+1 CHAR <CHARACTER_SET> {1:1}   +1 CHAR <CHARACTER_SET> {1:1}
+2 VERS <VERSION_NUMBER> {0:1}   +2 VERS <VERSION_NUMBER> {0:1}
+1 LANG <LANGUAGE_OF_TEXT> {0:1}   +1 LANG <LANGUAGE_OF_TEXT> {0:1}
+1 PLAC {0:1}   +1 PLAC {0:1}
+2 FORM <PLACE_HIERARCHY> {1:1}   +2 FORM <PLACE_HIERARCHY> {1:1}
+1 NOTE <GEDCOM_CONTENT_DESCRIPTION> {0:1}   +1 NOTE <GEDCOM_CONTENT_DESCRIPTION> {0:1}
+2 [CONC|CONT] <GEDCOM_CONTENT_DESCRIPTION> {0:M}   +2 [CONC|CONT] <GEDCOM_CONTENT_DESCRIPTION> {0:M}
RECORD:=   RECORD:=
[   [
n <<FAM_RECORD>> {1:1}   n <<FAM_RECORD>> {1:1}
|   |
n <<INDIVIDUAL_RECORD>> {1:1}   n <<INDIVIDUAL_RECORD>> {1:1}
|   |
n <<MULTIMEDIA_RECORD>> {1:1}   n <<MULTIMEDIA_RECORD>> {1:1}
|   |
n <<NOTE_RECORD>> {1:1}   n <<NOTE_RECORD>> {1:1}
|   |
n <<REPOSITORY_RECORD>> {1:1}   n <<REPOSITORY_RECORD>> {1:1}
|   |
n <<SOURCE_RECORD>> {1:1}   n <<SOURCE_RECORD>> {1:1}
|   |
n <<SUBMITTER_RECORD>> {1:1}   n <<SUBMITTER_RECORD>> {1:1}
]   ]
FAM_RECORD:=   FAM_RECORD:=
n @<XREF:FAM>@ FAM {1:1}   n @<XREF:FAM>@ FAM {1:1}
  -+ +1 RESN <RESTRICTION_NOTICE> {0:1}
+1 <<FAMILY_EVENT_STRUCTURE>> {0:M} = +1 <<FAMILY_EVENT_STRUCTURE>> {0:M}
+2 HUSB {0:1} +-  
+3 AGE <AGE_AT_EVENT> {1:1}    
+2 WIFE {0:1}    
+3 AGE <AGE_AT_EVENT> {1:1}    
+1 HUSB @<XREF:INDI>@ {0:1} = +1 HUSB @<XREF:INDI>@ {0:1}
+1 WIFE @<XREF:INDI>@ {0:1}   +1 WIFE @<XREF:INDI>@ {0:1}
+1 CHIL @<XREF:INDI>@ {0:M}   +1 CHIL @<XREF:INDI>@ {0:M}
+1 NCHI <COUNT_OF_CHILDREN> {0:1}   +1 NCHI <COUNT_OF_CHILDREN> {0:1}
+1 SUBM @<XREF:SUBM>@ {0:M}   +1 SUBM @<XREF:SUBM>@ {0:M}
+1 <<LDS_SPOUSE_SEALING>> {0:M}   +1 <<LDS_SPOUSE_SEALING>> {0:M}
+1 REFN <USER_REFERENCE_NUMBER> {0:M}   +1 REFN <USER_REFERENCE_NUMBER> {0:M}
+2 TYPE <USER_REFERENCE_TYPE> {0:1}   +2 TYPE <USER_REFERENCE_TYPE> {0:1}
+1 RIN <AUTOMATED_RECORD_ID> {0:1}   +1 RIN <AUTOMATED_RECORD_ID> {0:1}
+1 <<CHANGE_DATE>> {0:1}   +1 <<CHANGE_DATE>> {0:1}
+1 <<NOTE_STRUCTURE>> {0:M}   +1 <<NOTE_STRUCTURE>> {0:M}
+1 <<SOURCE_CITATION>> {0:M}   +1 <<SOURCE_CITATION>> {0:M}
+1 <<MULTIMEDIA_LINK>> {0:M}   +1 <<MULTIMEDIA_LINK>> {0:M}
INDIVIDUAL_RECORD:=   INDIVIDUAL_RECORD:=
n @XREF:INDI@ INDI {1:1}   n @XREF:INDI@ INDI {1:1}
+1 RESN <RESTRICTION_NOTICE> {0:1}   +1 RESN <RESTRICTION_NOTICE> {0:1}
+1 <<PERSONAL_NAME_STRUCTURE>> {0:M}   +1 <<PERSONAL_NAME_STRUCTURE>> {0:M}
+1 SEX <SEX_VALUE>  {0:1}   +1 SEX <SEX_VALUE>  {0:1}
+1 <<INDIVIDUAL_EVENT_STRUCTURE>> {0:M}   +1 <<INDIVIDUAL_EVENT_STRUCTURE>> {0:M}
+1 <<INDIVIDUAL_ATTRIBUTE_STRUCTURE>> {0:M}   +1 <<INDIVIDUAL_ATTRIBUTE_STRUCTURE>> {0:M}
+1 <<LDS_INDIVIDUAL_ORDINANCE>> {0:M}   +1 <<LDS_INDIVIDUAL_ORDINANCE>> {0:M}
+1 <<CHILD_TO_FAMILY_LINK>> {0:M}   +1 <<CHILD_TO_FAMILY_LINK>> {0:M}
+1 <<SPOUSE_TO_FAMILY_LINK>> {0:M}   +1 <<SPOUSE_TO_FAMILY_LINK>> {0:M}
+1 SUBM @<XREF:SUBM>@ {0:M}   +1 SUBM @<XREF:SUBM>@ {0:M}
+1 <<ASSOCIATION_STRUCTURE>> {0:M}   +1 <<ASSOCIATION_STRUCTURE>> {0:M}
+1 ALIA @<XREF:INDI>@ {0:M}   +1 ALIA @<XREF:INDI>@ {0:M}
+1 ANCI @<XREF:SUBM>@ {0:M}   +1 ANCI @<XREF:SUBM>@ {0:M}
+1 DESI @<XREF:SUBM>@ {0:M}   +1 DESI @<XREF:SUBM>@ {0:M}
+1 RFN <PERMANENT_RECORD_FILE_NUMBER> {0:1}   +1 RFN <PERMANENT_RECORD_FILE_NUMBER> {0:1}
+1 AFN <ANCESTRAL_FILE_NUMBER> {0:1}   +1 AFN <ANCESTRAL_FILE_NUMBER> {0:1}
+1 REFN <USER_REFERENCE_NUMBER> {0:M}   +1 REFN <USER_REFERENCE_NUMBER> {0:M}
+2 TYPE <USER_REFERENCE_TYPE> {0:1}   +2 TYPE <USER_REFERENCE_TYPE> {0:1}
+1 RIN <AUTOMATED_RECORD_ID> {0:1}   +1 RIN <AUTOMATED_RECORD_ID> {0:1}
+1 <<CHANGE_DATE>> {0:1}   +1 <<CHANGE_DATE>> {0:1}
+1 <<NOTE_STRUCTURE>> {0:M}   +1 <<NOTE_STRUCTURE>> {0:M}
+1 <<SOURCE_CITATION>> {0:M}   +1 <<SOURCE_CITATION>> {0:M}
+1 <<MULTIMEDIA_LINK>> {0:M}   +1 <<MULTIMEDIA_LINK>> {0:M}
MULTIMEDIA_RECORD:=   MULTIMEDIA_RECORD:=
n @XREF:OBJE@ OBJE {1:1}   n @XREF:OBJE@ OBJE {1:1}
  <> +1 FILE <MULTIMEDIA_FILE_REFN> {1:M}
+1 FORM <MULTIMEDIA_FORMAT> {1:1}   +2 FORM <MULTIMEDIA_FORMAT> {1:1}
    +3 TYPE <SOURCE_MEDIA_TYPE> {0:1}
+1 TITL <DESCRIPTIVE_TITLE> {0:1}   +2 TITL <DESCRIPTIVE_TITLE> {0:1}
+1 BLOB {1:1}    
+2 CONT <ENCODED_MULTIMEDIA_LINE> {1:M}    
+1 OBJE @<XREF:OBJE>@ /* chain to continued object */ {0:1}    
+1 REFN <USER_REFERENCE_NUMBER> {0:M} = +1 REFN <USER_REFERENCE_NUMBER> {0:M}
+2 TYPE <USER_REFERENCE_TYPE> {0:1}   +2 TYPE <USER_REFERENCE_TYPE> {0:1}
+1 RIN <AUTOMATED_RECORD_ID> {0:1}   +1 RIN <AUTOMATED_RECORD_ID> {0:1}
+1 <<NOTE_STRUCTURE>> {0:M}   +1 <<NOTE_STRUCTURE>> {0:M}
  -+ +1 <<SOURCE_CITATION>> {0:M}
+1 <<CHANGE_DATE>> {0:1} = +1 <<CHANGE_DATE>> {0:1}
NOTE_RECORD:=   NOTE_RECORD:=
n @<XREF:NOTE>@ NOTE <SUBMITTER_TEXT> {1:1}   n @<XREF:NOTE>@ NOTE <SUBMITTER_TEXT> {1:1}
+1 [ CONC | CONT] <SUBMITTER_TEXT> {0:M}   +1 [CONC|CONT] <SUBMITTER_TEXT> {0:M}
+1 REFN <USER_REFERENCE_NUMBER> {0:M}   +1 REFN <USER_REFERENCE_NUMBER> {0:M}
+2 TYPE <USER_REFERENCE_TYPE> {0:1}   +2 TYPE <USER_REFERENCE_TYPE> {0:1}
+1 RIN <AUTOMATED_RECORD_ID> {0:1}   +1 RIN <AUTOMATED_RECORD_ID> {0:1}
+1 <<SOURCE_CITATION>> {0:M}   +1 <<SOURCE_CITATION>> {0:M}
+1 <<CHANGE_DATE>> {0:1}   +1 <<CHANGE_DATE>> {0:1}
REPOSITORY_RECORD:=   REPOSITORY_RECORD:=
n @<XREF:REPO>@ REPO {1:1}   n @<XREF:REPO>@ REPO {1:1}
+1 NAME <NAME_OF_REPOSITORY>  {0:1} <> +1 NAME <NAME_OF_REPOSITORY>  {1:1}
+1 <<ADDRESS_STRUCTURE>> {0:1} = +1 <<ADDRESS_STRUCTURE>> {0:1}
+1 <<NOTE_STRUCTURE>> {0:M}   +1 <<NOTE_STRUCTURE>> {0:M}
+1 REFN <USER_REFERENCE_NUMBER> {0:M}   +1 REFN <USER_REFERENCE_NUMBER> {0:M}
+2 TYPE <USER_REFERENCE_TYPE> {0:1}   +2 TYPE <USER_REFERENCE_TYPE> {0:1}
+1 RIN <AUTOMATED_RECORD_ID> {0:1}   +1 RIN <AUTOMATED_RECORD_ID> {0:1}
+1 <<CHANGE_DATE>> {0:1}   +1 <<CHANGE_DATE>> {0:1}
SOURCE_RECORD:=   SOURCE_RECORD:=
n @<XREF:SOUR>@ SOUR {1:1}   n @<XREF:SOUR>@ SOUR {1:1}
+1 DATA {0:1}   +1 DATA {0:1}
+2 EVEN <EVENTS_RECORDED> {0:M}   +2 EVEN <EVENTS_RECORDED> {0:M}
+3 DATE <DATE_PERIOD> {0:1}   +3 DATE <DATE_PERIOD> {0:1}
+3 PLAC <SOURCE_JURISDICTION_PLACE> {0:1}   +3 PLAC <SOURCE_JURISDICTION_PLACE> {0:1}
+2 AGNC <RESPONSIBLE_AGENCY> {0:1}   +2 AGNC <RESPONSIBLE_AGENCY> {0:1}
+2 <<NOTE_STRUCTURE>> {0:M}   +2 <<NOTE_STRUCTURE>> {0:M}
+1 AUTH <SOURCE_ORIGINATOR> {0:1}   +1 AUTH <SOURCE_ORIGINATOR> {0:1}
+2 [CONC|CONT] <SOURCE_ORIGINATOR> {0:M}   +2 [CONC|CONT] <SOURCE_ORIGINATOR> {0:M}
+1 TITL <SOURCE_DESCRIPTIVE_TITLE> {0:1}   +1 TITL <SOURCE_DESCRIPTIVE_TITLE> {0:1}
+2 [CONC|CONT] <SOURCE_DESCRIPTIVE_TITLE> {0:M}   +2 [CONC|CONT] <SOURCE_DESCRIPTIVE_TITLE> {0:M}
+1 ABBR <SOURCE_FILED_BY_ENTRY> {0:1}   +1 ABBR <SOURCE_FILED_BY_ENTRY> {0:1}
+1 PUBL <SOURCE_PUBLICATION_FACTS> {0:1}   +1 PUBL <SOURCE_PUBLICATION_FACTS> {0:1}
+2 [CONC|CONT] <SOURCE_PUBLICATION_FACTS> {0:M}   +2 [CONC|CONT] <SOURCE_PUBLICATION_FACTS> {0:M}
+1 TEXT <TEXT_FROM_SOURCE> {0:1}   +1 TEXT <TEXT_FROM_SOURCE> {0:1}
+2 [CONC|CONT] <TEXT_FROM_SOURCE> {0:M}   +2 [CONC|CONT] <TEXT_FROM_SOURCE> {0:M}
+1 <<SOURCE_REPOSITORY_CITATION>> {0:1} <> +1 <<SOURCE_REPOSITORY_CITATION>> {0:M}
+1 REFN <USER_REFERENCE_NUMBER> {0:M} = +1 REFN <USER_REFERENCE_NUMBER> {0:M}
+2 TYPE <USER_REFERENCE_TYPE> {0:1}   +2 TYPE <USER_REFERENCE_TYPE> {0:1}
+1 RIN <AUTOMATED_RECORD_ID> {0:1}   +1 RIN <AUTOMATED_RECORD_ID> {0:1}
+1 <<CHANGE_DATE>> {0:1}   +1 <<CHANGE_DATE>> {0:1}
+1 <<NOTE_STRUCTURE>> {0:M}   +1 <<NOTE_STRUCTURE>> {0:M}
+1 <<MULTIMEDIA_LINK>> {0:M}   +1 <<MULTIMEDIA_LINK>> {0:M}
SUBMISSION_RECORD:=   SUBMISSION_RECORD:=
n @XREF:SUBN@ SUBN {1:1}   n @XREF:SUBN@ SUBN {1:1}
+1 SUBM @XREF:SUBM@ {0:1}   +1 SUBM @XREF:SUBM@ {0:1}
+1 FAMF <NAME_OF_FAMILY_FILE> {0:1}   +1 FAMF <NAME_OF_FAMILY_FILE> {0:1}
+1 TEMP <TEMPLE_CODE> {0:1}   +1 TEMP <TEMPLE_CODE> {0:1}
+1 ANCE <GENERATIONS_OF_ANCESTORS> {0:1}   +1 ANCE <GENERATIONS_OF_ANCESTORS> {0:1}
+1 DESC <GENERATIONS_OF_DESCENDANTS> {0:1}   +1 DESC <GENERATIONS_OF_DESCENDANTS> {0:1}
+1 ORDI <ORDINANCE_PROCESS_FLAG> {0:1}   +1 ORDI <ORDINANCE_PROCESS_FLAG> {0:1}
+1 RIN <AUTOMATED_RECORD_ID> {0:1}   +1 RIN <AUTOMATED_RECORD_ID> {0:1}
  -+ +1 <<NOTE_STRUCTURE>> {0:M}
    +1 <<CHANGE_DATE>> {0:1}
SUBMITTER_RECORD:= = SUBMITTER_RECORD:=
n @<XREF:SUBM>@ SUBM {1:1}   n @<XREF:SUBM>@ SUBM {1:1}
+1 NAME <SUBMITTER_NAME> {1:1}   +1 NAME <SUBMITTER_NAME> {1:1}
+1 <<ADDRESS_STRUCTURE>> {0:1}   +1 <<ADDRESS_STRUCTURE>> {0:1}
+1 <<MULTIMEDIA_LINK>> {0:M}   +1 <<MULTIMEDIA_LINK>> {0:M}
+1 LANG <LANGUAGE_PREFERENCE> {0:3}   +1 LANG <LANGUAGE_PREFERENCE> {0:3}
+1 RFN <SUBMITTER_REGISTERED_RFN> {0:1}   +1 RFN <SUBMITTER_REGISTERED_RFN> {0:1}
+1 RIN <AUTOMATED_RECORD_ID> {0:1}   +1 RIN <AUTOMATED_RECORD_ID> {0:1}
  -+ +1 <<NOTE_STRUCTURE>> {0:M}
+1 <<CHANGE_DATE>> {0:1} = +1 <<CHANGE_DATE>> {0:1}
ADDRESS_STRUCTURE:=   ADDRESS_STRUCTURE:=
n ADDR <ADDRESS_LINE> {0:1} <> n ADDR <ADDRESS_LINE> {1:1}
+1 CONT <ADDRESS_LINE> {0:M}   +1 CONT <ADDRESS_LINE> {0:3}
+1 ADR1 <ADDRESS_LINE1> {0:1} = +1 ADR1 <ADDRESS_LINE1> {0:1}
+1 ADR2 <ADDRESS_LINE2> {0:1}   +1 ADR2 <ADDRESS_LINE2> {0:1}
  -+ +1 ADR3 <ADDRESS_LINE3> {0:1}
+1 CITY <ADDRESS_CITY> {0:1} = +1 CITY <ADDRESS_CITY> {0:1}
+1 STAE <ADDRESS_STATE> {0:1}   +1 STAE <ADDRESS_STATE> {0:1}
+1 POST <ADDRESS_POSTAL_CODE> {0:1}   +1 POST <ADDRESS_POSTAL_CODE> {0:1}
+1 CTRY <ADDRESS_COUNTRY> {0:1}   +1 CTRY <ADDRESS_COUNTRY> {0:1}
n PHON <PHONE_NUMBER> {0:3}   n PHON <PHONE_NUMBER> {0:3}
  -+ n EMAIL <ADDRESS_EMAIL> {0:3}
    n FAX <ADDRESS_FAX> {0:3}
    n WWW <ADDRESS_WEB_PAGE> {0:3}
ASSOCIATION_STRUCTURE:= = ASSOCIATION_STRUCTURE:=
n ASSO @<XREF:INDI>@ {0:M} <> n ASSO @<XREF:INDI>@ {1:1}
+1 TYPE <RECORD_TYPE> {1:1}    
+1 RELA <RELATION_IS_DESCRIPTOR> {1:1} = +1 RELA <RELATION_IS_DESCRIPTOR> {1:1}
+1 <<SOURCE_CITATION>> {0:M}   +1 <<SOURCE_CITATION>> {0:M}
+1 <<NOTE_STRUCTURE>> {0:M}   +1 <<NOTE_STRUCTURE>> {0:M}
CHANGE_DATE:=   CHANGE_DATE:=
n CHAN {1:1}   n CHAN {1:1}
+1 DATE <CHANGE_DATE> {1:1}   +1 DATE <CHANGE_DATE> {1:1}
+2 TIME <TIME_VALUE> {0:1}   +2 TIME <TIME_VALUE> {0:1}
+1 <<NOTE_STRUCTURE>> {0:M}   +1 <<NOTE_STRUCTURE>> {0:M}
CHILD_TO_FAMILY_LINK:=   CHILD_TO_FAMILY_LINK:=
n FAMC @<XREF:FAM>@ {1:1}   n FAMC @<XREF:FAM>@ {1:1}
+1 PEDI <PEDIGREE_LINKAGE_TYPE> {0:M} <> +1 PEDI <PEDIGREE_LINKAGE_TYPE> {0:1}
    +1 STAT <CHILD_LINKAGE_STATUS> {0:1}
+1 <<NOTE_STRUCTURE>> {0:M} = +1 <<NOTE_STRUCTURE>> {0:M}
EVENT_DETAIL:=   EVENT_DETAIL:=
n TYPE <EVENT_DESCRIPTOR> {0:1} <> n TYPE <EVENT_OR_FACT_CLASSIFICATION> {0:1}
n DATE <DATE_VALUE> {0:1} = n DATE <DATE_VALUE> {0:1}
n <<PLACE_STRUCTURE>> {0:1}   n <<PLACE_STRUCTURE>> {0:1}
n <<ADDRESS_STRUCTURE>> {0:1}   n <<ADDRESS_STRUCTURE>> {0:1}
n AGE <AGE_AT_EVENT> {0:1} +-  
n AGNC <RESPONSIBLE_AGENCY> {0:1} = n AGNC <RESPONSIBLE_AGENCY> {0:1}
  -+ n RELI <RELIGIOUS_AFFILIATION> {0:1}
n CAUS <CAUSE_OF_EVENT> {0:1} = n CAUS <CAUSE_OF_EVENT> {0:1}
  -+ n RESN <RESTRICTION_NOTICE> {0:1}
n <<NOTE_STRUCTURE>> {0:M} = n <<NOTE_STRUCTURE>> {0:M}
n <<SOURCE_CITATION>> {0:M}   n <<SOURCE_CITATION>> {0:M}
n <<MULTIMEDIA_LINK>> {0:M}   n <<MULTIMEDIA_LINK>> {0:M}
  -+ FAMILY_EVENT_DETAIL:=
    n HUSB {0:1}
    +1 AGE <AGE_AT_EVENT> {1:1}
    n WIFE {0:1}
    +1 AGE <AGE_AT_EVENT> {1:1}
    n <<EVENT_DETAIL>> {0:1}
FAMILY_EVENT_STRUCTURE:= = FAMILY_EVENT_STRUCTURE:=
[   [
n [ ANUL | CENS | DIV | DIVF ] [Y|<NULL>] {1:1} <> n [ ANUL | CENS | DIV | DIVF ]  {1:1}
+1 <<EVENT_DETAIL>> {0:1}   +1 <<FAMILY_EVENT_DETAIL>> {0:1}
| = |
n [ ENGA | MARR | MARB | MARC ] [Y|<NULL>] {1:1} <> n [ ENGA | MARB | MARC ] {1:1}
+1 <<EVENT_DETAIL>> {0:1}   +1 <<FAMILY_EVENT_DETAIL>> {0:1}
| = |
  <> n MARR [Y|<NULL>] {1:1}
    +1 <<FAMILY_EVENT_DETAIL>> {0:1}
    |
n [ MARL | MARS ] [Y|<NULL>] {1:1}   n [ MARL | MARS ] {1:1}
+1 <<EVENT_DETAIL>> {0:1}   +1 <<FAMILY_EVENT_DETAIL>> {0:1}
| = |
  <> n RESI
    +1 <<FAMILY_EVENT_DETAIL>> {0:1}
    |
n EVEN {1:1}   n EVEN [<EVENT_DESCRIPTOR> | <NULL>]  {1:1}
+1 <<EVENT_DETAIL>> {0:1}   +1 <<FAMILY_EVENT_DETAIL>> {0:1}
] = ]
INDIVIDUAL_ATTRIBUTE_STRUCTURE:=   INDIVIDUAL_ATTRIBUTE_STRUCTURE:=
[   [
n CAST <CASTE_NAME>  {1:1}   n CAST <CASTE_NAME>  {1:1}
+1 <<EVENT_DETAIL>> {0:1} <> +1 <<INDIVIDUAL_EVENT_DETAIL>> {0:1}
| = |
n DSCR <PHYSICAL_DESCRIPTION>  {1:1}   n DSCR <PHYSICAL_DESCRIPTION>  {1:1}
  <> +1 [CONC | CONT ] <PHYSICAL_DESCRIPTION> {0:M}
+1 <<EVENT_DETAIL>> {0:1}   +1 <<INDIVIDUAL_EVENT_DETAIL>> {0:1}
| = |
n EDUC <SCHOLASTIC_ACHIEVEMENT>  {1:1}   n EDUC <SCHOLASTIC_ACHIEVEMENT>  {1:1}
+1 <<EVENT_DETAIL>> {0:1} <> +1 <<INDIVIDUAL_EVENT_DETAIL>> {0:1}
| = |
n IDNO <NATIONAL_ID_NUMBER>  {1:1}   n IDNO <NATIONAL_ID_NUMBER>  {1:1}
+1 <<EVENT_DETAIL>> {0:1} <> +1 <<INDIVIDUAL_EVENT_DETAIL>> {0:1}
| = |
n NATI <NATIONAL_OR_TRIBAL_ORIGIN>  {1:1}   n NATI <NATIONAL_OR_TRIBAL_ORIGIN>  {1:1}
+1 <<EVENT_DETAIL>> {0:1} <> +1 <<INDIVIDUAL_EVENT_DETAIL>> {0:1}
| = |
n NCHI <COUNT_OF_CHILDREN>  {1:1}   n NCHI <COUNT_OF_CHILDREN>  {1:1}
+1 <<EVENT_DETAIL>> {0:1} <> +1 <<INDIVIDUAL_EVENT_DETAIL>> {0:1}
| = |
n NMR <COUNT_OF_MARRIAGES>  {1:1}   n NMR <COUNT_OF_MARRIAGES>  {1:1}
+1 <<EVENT_DETAIL>> {0:1} <> +1 <<INDIVIDUAL_EVENT_DETAIL>> {0:1}
| = |
n OCCU <OCCUPATION>  {1:1}   n OCCU <OCCUPATION>  {1:1}
+1 <<EVENT_DETAIL>> {0:1} <> +1 <<INDIVIDUAL_EVENT_DETAIL>> {0:1}
| = |
n PROP <POSSESSIONS>  {1:1}   n PROP <POSSESSIONS>  {1:1}
+1 <<EVENT_DETAIL>> {0:1} <> +1 <<INDIVIDUAL_EVENT_DETAIL>> {0:1}
| = |
n RELI <RELIGIOUS_AFFILIATION>  {1:1}   n RELI <RELIGIOUS_AFFILIATION>  {1:1}
+1 <<EVENT_DETAIL>> {0:1} <> +1 <<INDIVIDUAL_EVENT_DETAIL>> {0:1}
| = |
n RESI  {1:1} <> n RESI  /* Resides at */ {1:1}
+1 <<EVENT_DETAIL>> {0:1}   +1 <<INDIVIDUAL_EVENT_DETAIL>> {0:1}
| = |
n SSN <SOCIAL_SECURITY_NUMBER>  {0:1} <> n SSN <SOCIAL_SECURITY_NUMBER>  {1:1}
+1 <<EVENT_DETAIL>> {0:1}   +1 <<INDIVIDUAL_EVENT_DETAIL>> {0:1}
| = |
n TITL <NOBILITY_TYPE_TITLE> {1:1}   n TITL <NOBILITY_TYPE_TITLE> {1:1}
+1 <<EVENT_DETAIL>> {0:1} <> +1 <<INDIVIDUAL_EVENT_DETAIL>> {0:1}
    |
    n FACT <ATTRIBUTE_DESCRIPTOR> {1:1}
    +1 <<INDIVIDUAL_EVENT_DETAIL>> {0:1}
] = ]
  -+ INDIVIDUAL_EVENT_DETAIL:=
    n <<EVENT_DETAIL>> {1:1}
    n AGE <AGE_AT_EVENT> {0:1}
INDIVIDUAL_EVENT_STRUCTURE:= = INDIVIDUAL_EVENT_STRUCTURE:=
[   [
n [ BIRT | CHR ] [Y|<NULL>] {1:1}   n [ BIRT | CHR ] [Y|<NULL>] {1:1}
+1 <<EVENT_DETAIL>> {0:1} <> +1 <<INDIVIDUAL_EVENT_DETAIL>> {0:1}
+1 FAMC @<XREF:FAM>@ {0:1} = +1 FAMC @<XREF:FAM>@ {0:1}
|   |
n [ DEAT | BURI | CREM ] [Y|<NULL>]  {1:1} <> n DEAT [Y|<NULL>]  {1:1}
+1 <<EVENT_DETAIL>> {0:1}   +1 <<INDIVIDUAL_EVENT_DETAIL>> {0:1}
| = |
  <> n [ BURI | CREM ]  {1:1}
    +1 <<INDIVIDUAL_EVENT_DETAIL>> {0:1}
    |
n ADOP [Y|<NULL>] {1:1}   n ADOP {1:1}
+1 <<EVENT_DETAIL>> {0:1}   +1 <<INDIVIDUAL_EVENT_DETAIL>> {0:1}
+1 FAMC @<XREF:FAM>@ {0:1} = +1 FAMC @<XREF:FAM>@ {0:1}
+2 ADOP <ADOPTED_BY_WHICH_PARENT> {0:1}   +2 ADOP <ADOPTED_BY_WHICH_PARENT> {0:1}
|   |
n [ BAPM | BARM | BASM | BLES ] [Y|<NULL>] {1:1} <> n [ BAPM | BARM | BASM | BLES ] {1:1}
+1 <<EVENT_DETAIL>> {0:1}   +1 <<INDIVIDUAL_EVENT_DETAIL>> {0:1}
| = |
n [ CHRA | CONF | FCOM | ORDN ] [Y|<NULL>] {1:1} <> n [ CHRA | CONF | FCOM | ORDN ] {1:1}
+1 <<EVENT_DETAIL>> {0:1}   +1 <<INDIVIDUAL_EVENT_DETAIL>> {0:1}
| = |
n [ NATU | EMIG | IMMI ] [Y|<NULL>] {1:1} <> n [ NATU | EMIG | IMMI ] {1:1}
+1 <<EVENT_DETAIL>> {0:1}   +1 <<INDIVIDUAL_EVENT_DETAIL>> {0:1}
| = |
n [ CENS | PROB | WILL] [Y|<NULL>] {1:1} <> n [ CENS | PROB | WILL] {1:1}
+1 <<EVENT_DETAIL>> {0:1}   +1 <<INDIVIDUAL_EVENT_DETAIL>> {0:1}
| = |
n [ GRAD | RETI ] [Y|<NULL>] {1:1} <> n [ GRAD | RETI ]  {1:1}
+1 <<EVENT_DETAIL>> {0:1}   +1 <<INDIVIDUAL_EVENT_DETAIL>>  {0:1}
| = |
n EVEN {1:1}   n EVEN  {1:1}
+1 <<EVENT_DETAIL>> {0:1} <> +1 <<INDIVIDUAL_EVENT_DETAIL>>  {0:1}
] = ]
LDS_INDIVIDUAL_ORDINANCE:=   LDS_INDIVIDUAL_ORDINANCE:=
[   [
n [ BAPL | CONL ] {1:1}   n [ BAPL | CONL ] {1:1}
+1 DATE <DATE_LDS_ORD> {0:1}   +1 DATE <DATE_LDS_ORD> {0:1}
+1 TEMP <TEMPLE_CODE> {0:1}   +1 TEMP <TEMPLE_CODE> {0:1}
+1 PLAC <PLACE_LIVING_ORDINANCE> {0:1}   +1 PLAC <PLACE_LIVING_ORDINANCE> {0:1}
+1 STAT <LDS_BAPTISM_DATE_STATUS> {0:1}   +1 STAT <LDS_BAPTISM_DATE_STATUS> {0:1}
  -+ +2 DATE <CHANGE_DATE> {1:1}
+1 <<NOTE_STRUCTURE>> {0:M} = +1 <<NOTE_STRUCTURE>> {0:M}
+1 <<SOURCE_CITATION>> {0:M}   +1 <<SOURCE_CITATION>> {0:M}
|   |
n ENDL {1:1}   n ENDL {1:1}
+1 DATE <DATE_LDS_ORD> {0:1}   +1 DATE <DATE_LDS_ORD> {0:1}
+1 TEMP <TEMPLE_CODE> {0:1}   +1 TEMP <TEMPLE_CODE> {0:1}
+1 PLAC <PLACE_LIVING_ORDINANCE> {0:1}   +1 PLAC <PLACE_LIVING_ORDINANCE> {0:1}
+1 STAT <LDS_ENDOWMENT_DATE_STATUS> {0:1}   +1 STAT <LDS_ENDOWMENT_DATE_STATUS> {0:1}
  -+ +2 DATE <CHANGE_DATE> {1:1}
+1 <<NOTE_STRUCTURE>> {0:M} = +1 <<NOTE_STRUCTURE>> {0:M}
+1 <<SOURCE_CITATION>> {0:M}   +1 <<SOURCE_CITATION>> {0:M}
|   |
n SLGC {1:1}   n SLGC {1:1}
+1 DATE <DATE_LDS_ORD> {0:1}   +1 DATE <DATE_LDS_ORD> {0:1}
+1 TEMP <TEMPLE_CODE> {0:1}   +1 TEMP <TEMPLE_CODE> {0:1}
+1 PLAC <PLACE_LIVING_ORDINANCE> {0:1}   +1 PLAC <PLACE_LIVING_ORDINANCE> {0:1}
+1 FAMC @<XREF:FAM>@ {1:1}   +1 FAMC @<XREF:FAM>@ {1:1}
+1 STAT <LDS_CHILD_SEALING_DATE_STATUS> {0:1}   +1 STAT <LDS_CHILD_SEALING_DATE_STATUS> {0:1}
  -+ +2 DATE <CHANGE_DATE> {1:1}
+1 <<NOTE_STRUCTURE>> {0:M} = +1 <<NOTE_STRUCTURE>> {0:M}
+1 <<SOURCE_CITATION>> {0:M}   +1 <<SOURCE_CITATION>> {0:M}
]   ]
LDS_SPOUSE_SEALING:=   LDS_SPOUSE_SEALING:=
n SLGS {1:1}   n SLGS {1:1}
+1 DATE <DATE_LDS_ORD> {0:1}   +1 DATE <DATE_LDS_ORD> {0:1}
+1 TEMP <TEMPLE_CODE> {0:1}   +1 TEMP <TEMPLE_CODE> {0:1}
+1 PLAC <PLACE_LIVING_ORDINANCE> {0:1}   +1 PLAC <PLACE_LIVING_ORDINANCE> {0:1}
+1 STAT <LDS_SPOUSE_SEALING_DATE_STATUS> {0:1}   +1 STAT <LDS_SPOUSE_SEALING_DATE_STATUS>  {0:1}
  -+ +2 DATE <CHANGE_DATE>  {1:1}
+1 <<NOTE_STRUCTURE>> {0:M} = +1 <<NOTE_STRUCTURE>>  {0:M}
+1 <<SOURCE_CITATION>> {0:M}   +1 <<SOURCE_CITATION>>  {0:M}
MULTIMEDIA_LINK:=   MULTIMEDIA_LINK:=
[ /* embedded form*/ +-  
n OBJE @<XREF:OBJE>@ {1:1} = n OBJE @<XREF:OBJE>@  {1:1}
| /* linked form*/ <> |
n OBJE  {1:1}   n OBJE
    +1 FILE <MULTIMEDIA_FILE_REFN>  {1:M}
+1 FORM <MULTIMEDIA_FORMAT> {1:1}   +2 FORM <MULTIMEDIA_FORMAT>  {1:1}
    +3 MEDI  <SOURCE_MEDIA_TYPE>  {0:1}
+1 TITL <DESCRIPTIVE_TITLE> {0:1} = +1 TITL <DESCRIPTIVE_TITLE>  {0:1}
+1 FILE <MULTIMEDIA_FILE_REFERENCE> {1:1} +-  
+1 <<NOTE_STRUCTURE>> {0:M}    
]    
NOTE_STRUCTURE:= = NOTE_STRUCTURE:=
[   [
n NOTE @<XREF:NOTE>@ {1:1}   n NOTE @<XREF:NOTE>@  {1:1}
+1 <<SOURCE_CITATION>> {0:M} +-  
| = |
n NOTE [<SUBMITTER_TEXT> | <NULL>] {1:1}   n NOTE [<SUBMITTER_TEXT> | <NULL>]  {1:1}
+1 [CONC|CONT] <SUBMITTER_TEXT> {0:M}   +1 [CONC|CONT] <SUBMITTER_TEXT>  {0:M}
+1 <<SOURCE_CITATION>> {0:M} +-  
] = ]
  -+ PERSONAL_NAME_PIECES:=
    n NPFX <NAME_PIECE_PREFIX>  {0:1}
    n GIVN <NAME_PIECE_GIVEN>  {0:1}
    n NICK <NAME_PIECE_NICKNAME>  {0:1}
    n SPFX <NAME_PIECE_SURNAME_PREFIX  {0:1}
    n SURN <NAME_PIECE_SURNAME>  {0:1}
    n NSFX <NAME_PIECE_SUFFIX>  {0:1}
    n <<NOTE_STRUCTURE>>  {0:M}
    n <<SOURCE_CITATION>>  {0:M}
PERSONAL_NAME_STRUCTURE:= = PERSONAL_NAME_STRUCTURE:=
n NAME <NAME_PERSONAL> {1:1}   n NAME <NAME_PERSONAL>  {1:1}
+1 NPFX <NAME_PIECE_PREFIX> {0:1} <> +1 TYPE <NAME_TYPE>  {0:1}
+1 GIVN <NAME_PIECE_GIVEN> {0:1}   +1 <<PERSONAL_NAME_PIECES>>  {0:1}
+1 NICK <NAME_PIECE_NICKNAME> {0:1}   +1 FONE <NAME_PHONETIC_VARIATION>  {0:M}
    +2 TYPE <PHONETIC_TYPE>  {1:1}
+1 SPFX <NAME_PIECE_SURNAME_PREFIX {0:1}   +2 <<PERSONAL_NAME_PIECES>>  {0:1}
+1 SURN <NAME_PIECE_SURNAME> {0:1}   +1 ROMN <NAME_ROMANIZED_VARIATION>  {0:M}
+1 NSFX <NAME_PIECE_SUFFIX> {0:1}    
+1 <<SOURCE_CITATION>> {0:M}   +2 TYPE <ROMANIZED_TYPE>  {1:1}
+1 <<NOTE_STRUCTURE>> {0:M}   +2 <<PERSONAL_NAME_PIECES>>  {0:1}
PLACE_STRUCTURE:= = PLACE_STRUCTURE:=
n PLAC <PLACE_VALUE> {1:1} <> n PLAC <PLACE_NAME>  {1:1}
+1 FORM <PLACE_HIERARCHY> {0:1} = +1 FORM <PLACE_HIERARCHY>  {0:1}
+1 <<SOURCE_CITATION>> {0:M} <> +1 FONE <PLACE_PHONETIC_VARIATION> {0:M}
    +2 TYPE <PHONETIC_TYPE> {1:1}
    +1 ROMN <PLACE_ROMANIZED_VARIATION> {0:M}
    +2 TYPE <ROMANIZED_TYPE> {1:1}
    +1 MAP {0:1}
    +2 LATI <PLACE_LATITUDE> {1:1}
    +2 LONG <PLACE_LONGITUDE> {1:1}
+1 <<NOTE_STRUCTURE>> {0:M} = +1 <<NOTE_STRUCTURE>> {0:M}
SOURCE_CITATION:=   SOURCE_CITATION:=
[ <> [ /* pointer to source record (preferred)*/
n SOUR @<XREF:SOUR>@ /* pointer to source record */ {1:1}   n SOUR @<XREF:SOUR>@ {1:1}
+1 PAGE <WHERE_WITHIN_SOURCE> {0:1} = +1 PAGE <WHERE_WITHIN_SOURCE> {0:1}
+1 EVEN <EVENT_TYPE_CITED_FROM> {0:1}   +1 EVEN <EVENT_TYPE_CITED_FROM> {0:1}
+2 ROLE <ROLE_IN_EVENT> {0:1}   +2 ROLE <ROLE_IN_EVENT> {0:1}
+1 DATA {0:1}   +1 DATA {0:1}
+2 DATE <ENTRY_RECORDING_DATE> {0:1}   +2 DATE <ENTRY_RECORDING_DATE> {0:1}
+2 TEXT <TEXT_FROM_SOURCE> {0:M}   +2 TEXT <TEXT_FROM_SOURCE> {0:M}
+3 [ CONC | CONT ] <TEXT_FROM_SOURCE> {0:M}   +3 [CONC|CONT] <TEXT_FROM_SOURCE> {0:M}
+1 <<MULTIMEDIA_LINK>> {0:M}   +1 <<MULTIMEDIA_LINK>> {0:M}
+1 <<NOTE_STRUCTURE>> {0:M}   +1 <<NOTE_STRUCTURE>> {0:M}
+1 QUAY <CERTAINTY_ASSESSMENT> {0:1}   +1 QUAY <CERTAINTY_ASSESSMENT> {0:1}
| /* Systems not using source records */   | /* Systems not using source records */
n SOUR <SOURCE_DESCRIPTION> {1:1}   n SOUR <SOURCE_DESCRIPTION> {1:1}
+1 [ CONC | CONT ] <SOURCE_DESCRIPTION> {0:M}   +1 [CONC|CONT] <SOURCE_DESCRIPTION> {0:M}
+1 TEXT <TEXT_FROM_SOURCE> {0:M}   +1 TEXT <TEXT_FROM_SOURCE> {0:M}
+2 [CONC | CONT ] <TEXT_FROM_SOURCE> {0:M}   +2 [CONC|CONT] <TEXT_FROM_SOURCE> {0:M}
  -+ +1 <<MULTIMEDIA_LINK>> {0:M}
+1 <<NOTE_STRUCTURE>> {0:M} = +1 <<NOTE_STRUCTURE>> {0:M}
  -+ +1 QUAY <CERTAINTY_ASSESSMENT> {0:1}
] = ]
SOURCE_REPOSITORY_CITATION:=   SOURCE_REPOSITORY_CITATION:=
n REPO @XREF:REPO@ {1:1} <> n REPO [ @XREF:REPO@ | <NULL>] {1:1}
+1 <<NOTE_STRUCTURE>> {0:M} = +1 <<NOTE_STRUCTURE>> {0:M}
+1 CALN <SOURCE_CALL_NUMBER> {0:M}   +1 CALN <SOURCE_CALL_NUMBER> {0:M}
+2 MEDI <SOURCE_MEDIA_TYPE> {0:1}   +2 MEDI <SOURCE_MEDIA_TYPE> {0:1}
SPOUSE_TO_FAMILY_LINK:=   SPOUSE_TO_FAMILY_LINK:=
n FAMS @<XREF:FAM>@ {1:1}   n FAMS @<XREF:FAM>@ {1:1}
+1 <<NOTE_STRUCTURE>> {0:M}   +1 <<NOTE_STRUCTURE>> {0:M}