role属性はclass属性と似た働きで、要素の「役割」を示す。要素に与えられたRoleを参考に、アプリケーションの挙動を変化させるなどができるようになる。元々はXHTML 2.0で提供される属性だったが、その可能性やRDFaのXHTML 1.1への対応などの理由から、XHTMLのモジュールとして定義しなおされた。2007年10月現在、仕様書はLast Callの段階にある。
class属性との大きな違いはRoleがCURIE*1で提供されること、つまりRoleがNamespaceを持つことにある。ただの文字列であるclass属性値はコリジョンを起こす可能性が非常に高いが、Namespaceを持つRoleではその心配がない。またRoleをRDFのtaxonomyとして提供すれば、それを元に推論などの操作を行うことができる。
XHTML Role Attribute Moduleにはあらかじめいくつかの値が定義されている。
*1:Compact URI—prefix:referenceで表されるURIの短縮構文、QNameのスーパーセット