Hierarchies should be 4-7 levels deep.
Three or less is not really a model. Ten or more is too complex.
Two levels is really just a tuple. Three levels is is just grouping of tuples, which doesn’t really require modeling. Of course there are exceptions.
You often see models (especially in XML, but also in OOP) where people sense this, and create artificial depth in hierarchies. For example:
<features> is just a useless wrapper around features that tells you “one or more features” may follow. That’s really just a crutch for the parser. You could just count up the individual <feature> element underneath <product>.
If a featurset has attributes that can’t be expressed in the individual features, then its okay. But if it’s only a grouping, then the grouping is really just an instance of a higher level element.
You also see a base element that is only there to have a base element. That’s a flaw in XML, but a base element can be good for descriptive naming purposes, or to describe domain level attributes. I think top level attributes are a bad practice though.