第二个选项并不是特别简单或容易。在一种情况下,您需要一个额外的班级和 3 个人;在另一种情况下,您需要一个额外的数据类型和 3 个值。我认为本体开发的努力没有显着差异。在推理方面,它取决于实现,但我不确定推理者通常更擅长处理枚举数据类型而不是枚举类。
此外,将“响应类型”称为字符序列存在概念上的问题。特别是考虑到“拒绝”响应类型,即法语中的“拒绝者”,我很难说“拒绝者”是一个以大写“D”开头的字符串!对于个人,我可以为不同的语言指明不同的名称并提供对它们的描述。此外,为什么必须将响应类型严格限制在这三种类型?我宁愿将其建模如下:
: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 .
如果您真的希望接受、拒绝和临时成为唯一可能的响应类型,您可以添加:
:ResponseType rdfs:subClassOf [
a owl:Class;
owl:oneOf ( :accept :decline :provisional )
] .
如果你想更简洁,你也可以这样写:
: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 )
] .
您正在寻找的替代方案可以这样表达:
:hasResponseType a owl:DatatypeProperty;
rdfs:range [
a rdfs:Datatype;
owl:oneOf ( "Accept" "Decline" "Provisional" )
] .
是的,Turtle 序列化少了 3 行,但这并不意味着使用高效的用户界面会更快。