@age is defined on <person> and <personGrp> separately. This seems a bit redundant, since the definitions are essentially identical.
person/@age suggests the following example values:
infant, child, teen, adult, and senior
then the example which actually uses the attribute has a completely different value, "mid":
<person sex="2" age="mid">
<p>Female respondent, well-educated, born in Shropshire UK, 12 Jan 1950, of unknown occupation. Speaks French fluently. Socio-Economic
The datatype for @age in both cases is data.enumerated, which is "a single XML name"; this has the side-effect of making it impossible to use integers. I think an attribute called "age" which doesn't allow you to put in the actual age as an integer is a bit ridiculous.
What I'd like to suggest is this:
1. We should consider an attribute class for the attributes which are shared by <person> and <personGrp> (@age, @sex and @role, although the last is slightly more problematic because there's an @role in att.naming which might overlap).
2. We should also consider a datatype for @age which allows enumerated values (infant, teen, etc.; teens, twenties, thirties, etc.) but also allows an integer value for the actual age of the person. It should probably allow floating-point numbers, actually -- <person id="AdrianMole" age="13.75"></person>.
Neither of these changes would break backward compatibility as far as I can tell. Although moving an attribute into a class might break some existing ODD files, it would not render any existing TEI documents invalid.
One thing I haven't figured out is how to have a datatype that allows both enumerated values and integers or floats.