【问题标题】:Modelling OWL datatype property restrictions with a list of values使用值列表对 OWL 数据类型属性限制进行建模
【发布时间】:2013-09-13 11:43:31
【问题描述】:

我有一个名为 ResponseInformation 的类,它有一个名为 hasResponseType 的数据类型属性,它必须只有以下字符串值:“Accept”、“Decline”和“Provisional”。

我知道我可以将其建模为一个名为 ResponseType 的类的一组个体,然后分别称为接受、拒绝和临时,以及一个 owl:oneOf 公理,说明 ResponseType 类完全等同于“一个“这组实例。但是,我开始意识到 OWL 2 支持将值列表作为数据类型属性的范围。例如,我可以将以下内容指定为 Protege 中 hasResponseType 属性的范围:{"Accept" , "Decline" , "Provisional"}

这似乎是两个选项中更容易的一个,因为它不涉及创建额外的类、个人等。我想知道如果我采用第二个选项可能会做出权衡,即除此之外还有其他优势或劣势吗?方便吗?

【问题讨论】:

    标签: owl


    【解决方案1】:

    第二个选项并不是特别简单或容易。在一种情况下,您需要一个额外的班级和 3 个人;在另一种情况下,您需要一个额外的数据类型和 3 个值。我认为本体开发的努力没有显着差异。在推理方面,它取决于实现,但我不确定推理器通常更擅长处理枚举数据类型而不是枚举类。

    此外,说“响应类型”是字符序列存在概念上的问题。特别是,考虑到“拒绝”响应类型,即法语中的 "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 .
    

    如果您确实希望接受、拒绝和临时作为唯一可能的响应类型,您可以添加:

    :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 行,但这并不意味着有了高效的用户界面就会快得多。

    【讨论】:

    • 我认为使用枚举数据类型的一个优点是它更容易通过查看来判断两个文字是否是不同的值。在 OWL 中声明个人彼此不同是很容易的,使用该信息仍然需要一个必须考虑该信息的上诉。知道"string1"^^xsd:string"string2"^^xsd:string 不同是直接的,并且完全不依赖于本体中的公理。
    • 是的,我确实意识到某些数据类型有多个词法形式映射到数据类型的同一元素(例如,"TRUE"^^xsd:boolean"1"^^xsd:boolean 可能都代表抽象值 true)。所以它并不像比较词汇形式那么简单,但是一旦将文字解析为其规范形式,比较就会非常快。
    【解决方案2】:

    我认为Antoine Zimmermann's answer 涵盖了如何你可以很好地做到这一点。我同意实施这两种方法所需的努力是相似的。尽管我没有对此进行测试,但我希望某些类型的推理在数据类型选项上会更有效,因为我希望类型化的文字可以比个人更快地比较相等和不等式。

    但是,我认为我仍然建议采用枚举个体(因此 hasResponseType 是一个对象属性)方法,原因至少有两个:

    1. 正如 Atoine 的回答所指出的,响应类型实际上是字符串有点令人怀疑。相反,响应类型似乎有一个标签(或多个标签,例如不同语言),它是一个字符串。
    2. (这是我的主要观点。)如果您想说任何关于响应类型的内容,它们必须是个人。例如,当响应类型是个体时,您可以给它们附加类型,例如,

      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
      

      如果您的 ResponseType 是文字,您将无法执行此操作,因为文字不能成为语句的主题。

    【讨论】:

      猜你喜欢
      • 2017-12-23
      • 2017-06-23
      • 2016-09-02
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 2012-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多