I have class called ResponseInformation that a has a datatype property called hasResponseType, which must have only the following string values: \"Accept\", \"Decl
I think that Antoine Zimmermann's answer covers how you can do this fairly well. I do agree that effort required to implement the two approaches is similar. I expect, though I haven't tested this, that some types of reasoning will be more efficient on the datatype option, since I expect that typed literals can be compared for equality and inequality much faster than individuals can be.
However, I think that I'd still suggest taking the enumerated individuals (so that hasResponseType is an object property) approach for at least two reasons:
(This is my primary point.) If you want to say anything about response types, they need to be individuals. For instance, when response types are individuals, you can give them additional types, e.g.,
Accept a GuaranteedResponse
Decline a not GuaranteedResponse
Provisional a not GuaranteedResponse
and then you could ask, for instance, how many not GuaranteedRepsonses
a given poller collected. You could also associate a code with each response type, e.g.,
Accept hasCode "x789"
Decline hasCode "x234"
Provisional hasCode "x900"
and then pass this on to the responses:
hasResponseCode subPropertyOf hasResponseType o hasCode
You won't be able to do this if your ResponseTypes are literals, because literals can't be the subject of statements.