This second option is not particularly simpler or easier. In one case, you need an extra class and 3 individuals; in the other case, you need an extra datatype and 3 values. I don't see a significant difference in terms of effort of ontology development. In terms of reasoning, it depends on the implementation, but I'm not sure reasoners are usually better at handling enumerated datatypes rather than enumerated classes.
Besides, there is a conceptual problem in saying that a "response type" is a sequence of character. Especially, thinking of a "decline" response type, which would be "refuser" in French, I would find it hard to argue that "refuser" is a character string that starts with a capital "D"! With individuals, I can indicate different names for different languages and provide a description of them. Besides, why must response types be strictly limited to only these three types? I would rather model this as follows:
:ResponseType a owl:Class .
:accept a :ResponseType;
rdfs:label "Accept"@en, "Accepter"@fr;
rdfs:comment "This response type indicates that the request is accepted."@en,
"Ce type de réponse indique que la requête est acceptée."@fr .
:decline a :ResponseType .
rdfs:label "Decline"@en, "Refuser"@fr;
rdfs:comment "..."@en, "..."@fr .
:provisional a :ResponseType .
rdfs:label "Provisional"@en, "Provisoire"@fr;
rdfs:comment "..."@en, "..."@fr .
[] a owl:AllDifferent;
owl:members ( :accept :decline :provisional ) .
:hasResponseType a owl:ObjectProperty;
rdfs:range :ResponseType .
If you really want Accept, Deny and Provisional to be the only possible response types, you can add:
:ResponseType rdfs:subClassOf [
a owl:Class;
owl:oneOf ( :accept :decline :provisional )
] .
If you want to be more concise, you can also write:
:accept a owl:Thing .
:decline a owl:Thing .
:provisional a owl:Thing .
:hasResponseType a owl:ObjectProperty;
rdfs:range [
a owl:Class;
owl:oneOf ( :accept :decline :provisional )
] .
The alternative that you were looking for can be expressed like this:
:hasResponseType a owl:DatatypeProperty;
rdfs:range [
a rdfs:Datatype;
owl:oneOf ( "Accept" "Decline" "Provisional" )
] .
Yes, the Turtle serialisation has 3 less lines, but it does not mean that with an efficient user interface it would be much faster.
"string1"^^xsd:string
and"string2"^^xsd:string
are different is immediate, and doesn't depend at all what axioms are in the ontology. – Gredel