If you add ? attribute-name after an attribute set it returns either true or false depending on whether the attribute set contains a key with the given attribute name[0]. But if you add ? value after an attribute key you define a default value for the key[1].
Is the ? symbol overloaded, and its meaning change between contexts; or does it have an abstract definition that make it behave this way?