【问题标题】:Ensure that multiple subjects point to same list of blank nodes确保多个主题指向相同的空白节点列表
【发布时间】:2013-06-27 07:38:18
【问题描述】:

考虑以下SomeClass 的实例:

 instances:some_thing1
                a semapi:SomeClass ;
                semapi:hasChainTo (
                      [ ... ] [ ... ] [ ... ]
                ) .

我需要 每个 实例(some_thing2some_thing3 等)使其hasChainTo 属性指向相同的空白节点列表(如里面只有一份)。我需要维护空白节点语法列表,因为链变得非常深,并且这种语法对于写出每个链非常流畅(对于SomeClass2SomeClass3 等)。

如果我只是从它创建一个基类和 subClassOf,hasChainTo 属性会继承而不是它指向的对象。这在直觉上是有道理的,但我需要其他行为。

如何做到这一点?

【问题讨论】:

    标签: rdf turtle-rdf n3 blank-nodes


    【解决方案1】:

    如果你想从图中的多个节点引用相同的东西,你应该给它一个 URI。它不必是完整的 http: URI - 您可以使用 UUID:

    instances:some_thing_1
      semapi:hasChainTo <urn:uuid:12345>.
    instances:some_thing_2
      semapi:hasChainTo <urn:uuid:12345>.
    instances:some_thing_3
      semapi:hasChainTo <urn:uuid:12345>.
    
    <urn:uuid:12345>
      semapi:chain (
        [ .. ] [ .. ] [ .. ]
      ).
    

    不要将 RDFS/OWL 子类与面向对象语言中的状态和行为继承相混淆。 RDFS 中的类层次结构用于 分类 节点 - 即将它们分配给一个类,其中一个类是一组资源。在 Java 等语言中,从继承中获得的代码重用没有直接的等价物。

    【讨论】:

    • 如果 OWL 在图片中(它可能不是,因为正在使用 RDF 列表),一旦有办法引用该列表,您可以指定 SomeClass SubClassOf semapi:hasChainTo value &lt;urn:uuid:12345&gt;,它表示SomeClass 的每个实例实际上确实是semapi:hasChainTo &lt;urn:uuid:12345&gt;(并且“每个实例”包括子类的实例)。
    • 是的,您确实可以这样做。您将在需要 OWL 推理器的复杂性与需要在每次创建实例时断言一个额外的三元组之间进行权衡。由于议会已经将更新性能标记为一个问题,我不确定我是否会做出有利于推理者的权衡。但该决定完全取决于项目背景的全部细节。
    【解决方案2】:

    您可能在 RDF(S) 中工作,而不是在 OWL 中工作,但如果您确实有能力使用基于 OWL 的工具,并且为了任何发现此问题并可以使用基于 OWL 的工具的人,这里是基于 OWL 的答案。

    如果您希望类的每个实例(包括其子类的实例)都有一些共同的属性值,您可以使用Individual Value Restriction。在曼彻斯特语法中,您可以说 SomeClass 的实例都具有属性 sharedIndividual 的值 hasValue 通过公理:

    SomeClass SubClassOf hasValue value sharedIndividual
    

    那么SomeClass 的每个实例都具有hasValue value sharedIndividual 类型,这意味着该实例具有sharedIndividual 作为hasValue 属性的值。

    这是具有类SomeClass 和两个子类SomeSubClassAnotherSubClass 的本体的N3 序列化。这三个类别中的每一个都有一个声明的个体。 hasValue value sharedIndividual 类型是 SomeClass 的超类。

    @prefix :        <http://www.example.com/valueClassExample#> .
    @prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
    @prefix owl:     <http://www.w3.org/2002/07/owl#> .
    @prefix xsd:     <http://www.w3.org/2001/XMLSchema#> .
    @prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
    
    <http://www.example.com/valueClassExample>
          a       owl:Ontology .
    
    :hasValue
          a       owl:ObjectProperty .
    
    :sharedValue
          a       owl:Thing , owl:NamedIndividual .
    
    :SomeClass
          a       owl:Class ;
          rdfs:subClassOf
                  [ a       owl:Restriction ;
                    owl:hasValue :sharedValue ;
                    owl:onProperty :hasValue
                  ] .
    
    :SomeSubClass
          a       owl:Class ;
          rdfs:subClassOf :SomeClass .
    
    :AnotherSubClass
          a       owl:Class ;
          rdfs:subClassOf :SomeClass .
    
    :SomeClassInstance
          a       :SomeClass , owl:NamedIndividual .
    
    :SomeSubClassInstance
          a       owl:NamedIndividual , :SomeSubClass .
    
    :AnotherSubClassInstance
          a       owl:NamedIndividual , :AnotherSubClass .
    

    在 Protégé 中加载此本体并附加 Pellet 进行推理后,询问哪些个体将sharedValue 作为hasValue 属性的值会显示所有个体。

    【讨论】:

    • 感谢您的回复。对于其他人来说,值得注意的是,OWL 2 配置文件 EL 和 RL 支持这一点,但通过 ObjectHasValue 限制不支持 QL。 w3.org/TR/owl2-profiles
    • @parliament 很好的观察!我几乎总是在 OWL DL 中工作,所以我还没有了解各种配置文件的所有细节,但这对于需要留在其中一个的人来说可能非常重要!
    猜你喜欢
    • 2017-04-12
    • 2022-10-07
    • 2018-02-19
    • 2021-11-29
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    相关资源
    最近更新 更多