确保多个主题指向相同的空白节点列表

par*_*ent 5 rdf n3 turtle-rdf blank-nodes

考虑以下实例SomeClass:

 instances:some_thing1
                a semapi:SomeClass ;
                semapi:hasChainTo (
                      [ ... ] [ ... ] [ ... ]
                ) .
Run Code Online (Sandbox Code Playgroud)

我需要每个实例(some_thing2,some_thing3等)将其hasChainTo属性指向同一个空白节点列表(因为它只有一个副本).我需要保持空白节点语法的列表,因为链变得非常深,这个语法是写出每个链很流体(SomeClass2,SomeClass3,等).

如果我只是从它创建一个基类和subClassOf,该hasChainTo属性继承但不是它指向的对象.这直观有意义,但我需要其他行为.

如何实现这一目标?

Ian*_*son 5

如果要从图中的多个节点引用相同的内容,则应该为其指定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 (
    [ .. ] [ .. ] [ .. ]
  ).
Run Code Online (Sandbox Code Playgroud)

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

  • 是的,你可以做到这一点.您需要权衡OWL推理器的复杂性,而不是每次创建实例时需要断言一个额外的三元组.由于议会已经将更新表现作为一个担忧,我不确定我是否会为推理者做出权衡.但这个决定完全取决于项目背景的全部细节. (3认同)
  • 如果OWL在图片中(可能不是,因为正在使用RDF列表),一旦有了引用列表的方法,你可以指定`SomeClass SubClassOf semapi:hasChainTo value <urn:uuid:12345 >`,这意味着`SomeClass`的每个实例实际上都是`semapi:hasChainTo <urn:uuid:12345>`(和"每个实例"包括子类的实例). (2认同)