Next was handling the SCHEMA tag. This tag is a different sort of tag. It is really a Meta-tag that gives information about extra tags added by a program. In the test files that I have, only five of them use the SCHEMA tag, but they are all from Family Tree Maker, so it is important for Behold to handle them.
GEDCOMs from early versions of Family Tree Maker output the SCHEMA tag, and later versions (e.g. Version 11) added a leading underscore to it and made it a _SCHEMA tag.
The use of the SCHEMA tag was eliminated from GEDCOM version 5.4 and that was many years ago. The reason was written as: “although the schema concept is valid and essential to the growth of GEDCOM, it is too complex and premature to be implemented successfully into current products. Implementing it too early could cause developers to spend a great deal of resources programming something that would be outdated very quickly. Object definition languages (such as XML) are likely to contribute to meeting these needs.” But Family Tree Maker continued to use it, by putting the underscore before it which indicates a custom tag, allowed by GEDCOM.
Until I found this out, I was going to put in full SCHEMA support into Behold. That would have entailed allowing the same Tag to be defined differently for each GEDCOM read in when multiple GEDCOMs are read at the same time. This may be required in the future, but adds too many extra complications to the Tag definitions in Behold right now, and is overkill for handling the simplistic way that Family Tree Maker outputs its SCHEMA.
So for now what I did was put in code to allow the meta-definition of tags, which easily and properly handles all the test files I have with the SCHEMA tag.