5

考虑以下实例SomeClass

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

我需要每个实例(some_thing2,some_thing3等)将其hasChainTo属性点放在相同的空白节点列表中(因为它只有一个副本)。我需要维护空白节点语法列表,因为链变得非常深,并且这种语法对于写出每个链(for , 等)非常SomeClass2流畅SomeClass3

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

如何实现?

4

2 回答 2

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 等语言的继承中获得的代码重用没有直接的等价物。

于 2013-06-27T08:30:55.460 回答
2

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

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

SomeClass SubClassOf hasValue value sharedIndividual

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

SomeClass这是具有一个类和两个子类的本体的 N3 序列化SomeSubClassAnotherSubClass. 这三个类别中的每一个都有一个声明的个体。该类型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属性的值会显示所有个体。

<code>hasValue value sharedProperty</code> DL 查询的结果

于 2013-06-27T11:41:25.060 回答