FamilySearch/gedcomx — pull request #79 by stoicflame (2012-11-07 16:54:52+00:00)
Title: support for first-class place model

The following commentary was submitted by @ttwetmore, opening it up here for discussion, my own comments to follow:

> In the GEDCOM X model places are “second-class citizens” (don’t occur in their own right as record level entities) and are not hierarchical. I believe there are places where places can be second-class citizens, that is, simply as attributes of an event or other attribute, but there are many places where an independent set of hierarchical place records could be useful. I also believe places should be hierarchical, with each place able to refer to one or more more inclusive places that they are a part of. Most modern genealogical systems seem to have some kind of place expert module built in that provides this associated structure of place information. Here is a proto specification of a possibility:

```c
enum PlaceType {
Village = 1;
Ward = 20;
District = 21;
Town = 2;
City = 3;
Parish = 4;
County = 5;
State = 6;
Province = 7;
Region = 8;
Country = 9;
Duchy = 20;
Bishopric = 21;
Kingdom = 22;
Continent = 10;
Planet = 11;
StellarSystem = 12;
Galaxy = 13;
Universe = 14; // In case the multi-universe conjecture is true.
}
message PlaceStructure
{
required string name = 2; // Name of this place.
optional PlaceType type = 3; // Type of this place.
repeated UUIDValue parentIds = 4; // Places this place is in.
repeated AttributeStructure attributes = 9; // Attributes of this place.
optional InfoStructure info = 10; // Other information about this place.
}
message PlaceMessage
{
// Record id of this place.
required UUIDValue recordId = 1;
required PlaceStructure place = 2; // Structure describing this place.
}
```

> In my Google protocol notation, a structure is information that is found inside a record, and a message is a record that will be encoded, transmitted and decoded as a whole. In the DeadEnds model a place structure may be used in a number of contexts. One such context is shown here as the contents, along with a UUID value for a record id, of a place record.