我有一个叫做ResponseInformation的类,它有一个名为 hasResponseType 的数据类型属性,它必须只有以下字符串值:“Accept”,“Decline”和“Provisional”。
我理解我可以将其建模为一组名为ResponseType的类的个体,然后分别称为accept,decline和provisional,以及一个owl:oneOf公理,声明类ResponseType等同于“ “这一组实例。但是,我开始意识到OWL 2支持值列表作为数据类型属性的范围。例如,我可以将以下内容指定为Protege中 hasResponseType 属性的范围:{“接受”,“拒绝”,“临时”}
这似乎更容易两个选项,因为它不涉及创建额外的类,个人等。我想知道如果我采取第二种选择潜在的权衡,即是否有任何其他优势,或除了以外的其他优势方便吗?
答案 0 :(得分:1)
第二种选择并不是特别简单或容易。在一个案例中,你需要一个额外的班级和3个人;在另一种情况下,您需要一个额外的数据类型和3个值。我没有看到本体开发的努力方面存在显着差异。在推理方面,它取决于实现,但我不确定reasoners通常更擅长处理枚举数据类型而不是枚举类。
此外,存在一个概念性问题,即“响应类型”是一系列字符。特别是,考虑到“拒绝”响应类型,法语中的“refuser”,我会发现很难说“refuser”是一个字符串,从首都“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 .
如果您真的希望Accept,Deny和Provisional成为唯一可能的响应类型,您可以添加:
: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行,但这并不意味着使用高效的用户界面会更快。
答案 1 :(得分:0)
我认为Antoine Zimmermann's answer涵盖如何你可以做得相当好。我同意实施这两种方法所需的努力是相似的。我希望,虽然我没有对此进行测试,但是对于数据类型选项,某些类型的推理会更有效,因为我希望可以比单个版本更快地比较类型文字的平等和不等式。
但是,我认为我仍然建议采用枚举个体(以便 hasResponseType 是对象属性)方法,至少有两个原因:
(这是我的主要观点。)如果你想说任何关于的响应类型,他们需要是个人。例如,当响应类型是个体时,您可以为其提供其他类型,例如
Accept a GuaranteedResponse
Decline a not GuaranteedResponse
Provisional a not GuaranteedResponse
然后你可以询问,例如,给定的轮询器收集了多少not GuaranteedRepsonses
。您还可以将代码与每种响应类型相关联,例如
Accept hasCode "x789"
Decline hasCode "x234"
Provisional hasCode "x900"
然后将其传递给回复:
hasResponseCode subPropertyOf hasResponseType o hasCode
如果你的ResponseTypes是文字,你将无法做到这一点,因为文字不能成为陈述的主语。