#366 rationalize content models of org and place (etc)


As discussed in ticket http://purl.org/TEI/FR/3440977, the content models of <place> and <org> are unnecessarily messy, and would benefit from being rationalized by the creation of a model.placePart and model.orgPart respectively (along the lines of model.personPart).

It might even be the case that some subset of the overlap of these three models could be defined as a smaller model (entityPart?) that all such elements would inherit (containing, e.g., idno), so that any new entityLike element in future can inherit them as a quick start.

While we're at it, we should look at whether we can also create *Part models for the elements <object>, <event> and <nym>, all of which arguably want to inherit <idno> for the same reason as person and place; all can have names, bibliography, relations, etc.


Bugs: #624
Bugs: #751
Feature Requests: #503


  • Peter Stadler

    Peter Stadler - 2012-06-20

    Although I'm personally not fond of it, I think it should be mentioned that there has been some discussion on TEI-ontology-SIG about aligning person, place etc with msDesc. Cf the thread starting with https://sourceforge.net/mailarchive/message.php?msg_id=29144155

  • James Cummings

    James Cummings - 2012-06-29
    • assigned_to: nobody --> jcummings
  • James Cummings

    James Cummings - 2012-09-19

    James will go away and make up a straw man proposal for rationalization of these to bring back to Council. (Oxford Face to Face 2012-09)

  • James Cummings

    James Cummings - 2012-10-31

    Ok, this isn't a strawman proposal, more like a thin gossamer spider web of a proposal. It is really my notes in thinking about it because it takes me 5 minutes _just_ to get my head around the content models of person/place/org.

    The current content models, excluding attributes and attribute classes are:

    person: ( model.pLike+ | ( model.personPart | model.global )* )

    place: (model.headLike*, ((model.pLike*) | (model.labelLike | model.placeStateLike | model.placeEventLike)*), (model.noteLike | model.biblLike | idno | linkGrp | link )*, (model.placeLike | listPlace )*

    org: (model.headLike*, ((model.pLike*) | (model.labelLike | model.nameLike | model.placeLike | model.orgPart)*),(model.noteLike | model.biblLike | linkGrp | link)*, model.personLike*)

    and for reference:

    model.personPart: model.persStateLike [persName affiliation age education faith floruit langKnowledge nationality occupation residence sex socecStatus state trait] model.persEventLike [birth death event] idno bibl

    model.nameLike: model.nameLike.agent [name orgName persName] model.offsetLike [offset geogFeat] model.placeStateLike [model.placeNamePart [placeName bloc country region district settlement geogName] climate location population state terrain trait] model.persNamePart [surname forename genName nameLink addName roleName] idno rs lang

    model.labelLike: desc label

    model.placeNamePart: [placeName bloc country region district settlement geogName] climate location population state terrain trait

    model.placeEventLike: event

    model.orgPart: listOrg listPerson listPlace

    Everytime I spend 5 minutes trying to untangle this, my head starts hurting. the reason for the grouping in org and place is so you can have either <head> followed by zero-or-more <p> _or_ zero-or-more structure content, and either of those followed by zero-or-more note/bibls/embeddedPlacesOrgs/etc.


    person/personGrp: ( model.pLike+ | (model.personPart | model.nameLike | model.global )*) -- i.e. add nameLike and simplify model.personPart or persStateLike so that it doesn't conflict with model.nameLike (e.g. remove idno and others that it will get from model.naming)

    place: (model.headLike*, ((model.pLike*) | (model.nameLike |model.labelLike | model.placeEventLike)*), (model.noteLike | model.biblLike | idno | linkGrp | link )*, (model.placeLike | listPlace )*
    - i.e. retain head and p vs structured distinction, replace model.placeStateLike by model.nameLike (since this contains it) Problem: idno is in nameLike and here. If we remove it, then you can't do <head> followed by <p> followed by <idno>... but this is what org is like and so would be consistent with that. If we did that (and I'd recommend it) it would look like:
    place: (model.headLike*, ((model.pLike*) | (model.nameLike |model.labelLike | model.placeEventLike)*), (model.noteLike | model.biblLike | linkGrp | link )*, (model.placeLike | listPlace )* I don't think there is a backwards compatibility problem really, since we just added it in this very release.

    org: (model.headLike*, ((model.pLike*) | (model.labelLike | model.nameLike | model.placeLike | model.orgPart)*),(model.noteLike | model.biblLike | linkGrp | link)*, model.personLike*) - i.e. keep the same.

    A more radical proposal would be to make org/place more like name and remove the note/bibl/link things from being allowed with just prose paragraphs. i.e. if you want to do that you must use structured information. Person's content model could do with some expanding to bring it in parallel with org/place (but again without the need for embedded person).

    Just thinking aloud, but would welcome any comments.


  • Kevin Hawkins

    Kevin Hawkins - 2012-11-01

    Regarding expanding the content model of <person> (and <personGrp?) to bring it in line with <org> and <place>, are you thinking of adding model.headLike* to the content model of <person> (and <personGrp>)? Or something else?

  • James Cummings

    James Cummings - 2012-11-02

    @kshawkin: I'm not sure what <head> inside <person> means. (Though I see some lovely opportunities for jokes here...)

    I think I was thinking about the alternative between structured and unstructured metadata object records. i.e. with <place> I can have:
    <head>My favourite Place</head>
    <p> Some paragraphs about it</p>
    <note>Some notes about it</note>
    <idno>An idno</idno>

    With <person> you can basically do the same, but don't have the category of information:
    ( model.noteLike | model.biblLike | idno | linkGrp | link )*,
    ( model.placeLike | listPlace )*
    which can appear after the paragraphs.

    We can have paragraphs inside <person> but should you be able to have a note, bibl, or idno after those paragraphs?


    • Kevin Hawkins

      Kevin Hawkins - 2013-04-21

      Sorry, wasn't subscribed to this ticket.

      I think a <head> inside a <person> is the same as a <head> inside a <place> or <org>: a heading that labels the description of the entity that follows. While in many situations that heading is simply the name, and you could therefore use one of the naming elements, you might have headings that contain something more than a name.

      Anyway, if we're going to allow <note>, <bibl>, and <idno> after <p> in <place>, I don't see why you wouldn't also allow this in <person>. For example, a prosopography might give an ID for each person after the prose biographical info about the person, and the encoder might not consider this ID to be part of the paragraph.

  • Martin Holmes

    Martin Holmes - 2012-11-02

    I wonder if we're edging towards a situation where a larger "entity" class might be useful. The more I think about it, the more person, place, org etc. have in common, even down to birth and death dates (organizations are set up and dismantled; cities may be founded and destroyed). Cities, for instance, can be viewed as both places and (through their municipality or their citizens acting as a group) as agents. Municipalities also fall into groups (the Capital Regional District is an amalgamation of several municipalities around Victoria).

    Would it be helpful to have a generic <entity> element, with <entityGrp>, and a simple common structure, on which <person>, <place> etc. can build?

    I know we can't really do inheritance in the true object-oriented sense in our system, so maybe this is a feature for P6, but it might be a helpful way of thinking about the problem.

  • James Cummings

    James Cummings - 2013-11-09

    More discussion needed.

  • James Cummings

    James Cummings - 2013-11-19

    At Oxford 2013-11 face-to-face JC to make ticket red, should stay with JC, and he should initiate the process, working with LB and SB.

  • James Cummings

    James Cummings - 2013-11-19
    • Group: AMBER --> RED
    • Priority: 5 --> 1(low)
  • James Cummings

    James Cummings - 2014-01-26

    Just adding a note that as part of this rationalization perhaps org and place should get att.datable? It seems strange to me that it is difficult to say that this organisation existed from X to Y.

  • Martin Holmes

    Martin Holmes - 2014-01-26

    A thousand times yes. And before anyone protests that placeName and orgName are att.datable, this is a different thing: an org may exist from 1950 to 1990, and have different names from 1950 to 1960, then from 1960 to 1990. We need both. Ditto for places.

  • Lou Burnard

    Lou Burnard - 2014-01-26

    Making them datable or not seems of lesser importance to me than getting their content models straightened out. For the record, I believe the decision to make org, person, place NOT datable was a conscious one: they are grouping elements, and you would look at their child elements (all of which are datable) to decide what the relevant dates should be. An org that is founded in 1860 should have an <event type="founding"> for example. Likewise, if you allow <person> or <place> to be datable you introduce the possiblty of a contradiction between the dates on it and (say) on birth and death children. And anyway it's nonsense: a person entity does not cease to exist when they die -- you might still give them a new name, for example.

    Last edit: Lou Burnard 2014-01-26
  • Martin Holmes

    Martin Holmes - 2014-01-26

    I would see the addition of att.datable as a simple, clean alternative to the often-unwanted overhead you would have to invoke to handle this stuff with event elements and similar things. There are always convoluted ways to do things, but simple and easily-comprehensible ones are also worth having.

    As far as the person issue goes, it's a quasi-religious issue to decide whether a person continues to exist after they die, but assuming for the moment that they do cease to exist, how does that prevent you from giving them a new name with dates subsequent to their demise? I don't see any contradition.

  • James Cummings

    James Cummings - 2014-01-26

    Hrmmm. Maybe the att.datable for person/place/org should be a separate ticket then. (While I like it for convenience sake, it shouldn't get in the way of rationalising the content models of person/place/org to be more coherent which is what this ticket was about. Just occurred to me while writing up some TEI exercises and thought I'd note it down somewhere. ;-) )