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

时间:2013-06-27 07:38:18

标签: rdf turtle-rdf n3 blank-nodes

考虑SomeClass的以下实例:

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

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

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

如何实现这一目标?

2 个答案:

答案 0 :(得分: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 (
    [ .. ] [ .. ] [ .. ]
  ).

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

答案 1 :(得分:2)

你可能在RDF(S)工作,而不是在OWL工作,但如果你有能力使用基于OWL的工具,并且为了找到这个问题并且可以使用基于OWL的工具的人,这里是基于OWL的答案。

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

SomeClass SubClassOf hasValue value sharedIndividual

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

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

@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属性的值显示所有个体。

result of <code>hasValue value sharedProperty</code> DL query