考虑SomeClass
的以下实例:
instances:some_thing1
a semapi:SomeClass ;
semapi:hasChainTo (
[ ... ] [ ... ] [ ... ]
) .
我需要每个实例(some_thing2
,some_thing3
等),使其hasChainTo
属性指向相同的空白节点列表(因为只有一个副本)。我需要维护空白节点语法列表,因为链变得非常深,这种语法非常流畅,可以写出每个链(对于SomeClass2
,SomeClass3
等。)。
如果我只是从它创建一个基类和subClassOf,hasChainTo
属性继承但不是它所指向的对象。这直观有意义,但我需要其他行为。
如何实现这一目标?
答案 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
和两个子类SomeSubClass
和AnotherSubClass
的本体的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
属性的值显示所有个体。