Steve wrote an article about semantics. He does a good job of explaining his process.
We need to teach newbies to take a slightly broader view. Imagine, for example, an action list, which allows you to execute a certain number of actions relative to the context in which it is found. Think; “print”, “save”, “email”, or “move”.
I would place the class for that list on the list itself, and no higher. The logic of that list should be consistent site-wide. If not their has been an error in the design phase. I think this was what Steve was trying to say, but I wanted to reemphasize it because it seemed like it could get lost in the fray, especially if people are extremely adverse to adding classes.
It is important to see both the forest and the trees. Semantics have, until now, been a little over-focused on the trees.