strongly type attributes

**please review**
`hasAttribute` sounds nicer than `containsAttribute`