It can't be modeled as an attribute, because attributes take only simple strings. Here, it also makes sense to use an element . Attributes need to be simple, short strings or else they become unreadable, if not unusable. The data changes frequently When the data will be frequently modified, especially by the end user, then it makes sense to model it as an element . XML-aware editors tend to make it very easy to find and modify element data.
Attributes can be somewhat harder to get to, and therefore somewhat more difficult to modify.
The data is small, simple string that rarely if ever changes This is data that can be modeled as an attribute . However, just because you can does not mean that you should. The data is confined to a small number of fixed choices Here is one time when it really makes sense to use an attribute . Using the DTD , the attribute can be prevented from taking on any value that is not in the preapproved list. Note, though, that the gain in validity restriction comes at a cost in extensibility.