You can only use curly braces to substitute values in attributes that are defined in the XSLT spec as AVTs (attribute value templates). You can't use them to set anything you like dynamically - XSLT isn't a macro language where everything is done on the fly. Places you can't use AVTs include template names and modes, the href attribute of include/import, variable names (yes, you see people trying to do select="${$varname}"!), parameters to xsl:output, and a whole lot more.
Michael Kay
http://www.saxonica.com/
Author, XSLT Programmer's Reference and XPath 2.0 Programmer's Reference