If you want to structuring xsl like this separating out attribute template, you need to add @* to the apply-templates select because an attribute must be a child of an element. But some detail may be tricker in concept. In the @* template, it is simply non-sense to script apply-templates. An attribute as leaf would have no subnode. A xsl:copy would do it all.
 Do you know what a select or match of node() means? It means *|text() quite literally. So use more consistent form would show you off as having a clearer understanding.
 You might one day see @* being integrated into the *|text() in the match attribute. That is the usual concise way to write a so-called identity transformation...
 I take out apply-templates within the @* template for the semantic reason, you can put it there and it won't be erroring out of any kind in xslt as it is a kind of functional language. Only that it is "non-sense" in my sense and I mean just that.