如何区分描述所表示对象的OWL属性和描述该表示的属性。这是一个小例子:
:fgst1425 rdf:type :Building ,
owl:NamedIndividual ;
rdfs:label "B28"@en ;
:isWorkLocationOf :hugr9807 ; #this is a property of the building
:hasURItype :ihuy8965 . #this is a property of the URI representing the building
:hugr9807 rdf:type :Person ,
owl:NamedIndividual ;
rdfs:label "Ivo"@en .
:ihuy8965 rdf:type owl:NamedIndividual ,
owl:Thing ;
rdfs:label "OpaqueURI"@en .
以类似的方式,描述访问权限的属性可以表示对建筑物的访问以及对表示建筑物的URI的读取访问权。
目的是为表示的对象和表示使用推理。如果我有一个被爆炸杀死的人,并且这个爆炸是用URI注册的,我想说只有满足特定条件的人才能访问这个URI,并且让reasoners找出谁是非法访问,但是避免扣除URI杀人的排序。
我想到的一个可能的解决方案是将所有元数据属性放在:metaDataProperty
下,然后使用SPARQL查询可以区分两种不同类型的语句。
建议的另一种方法是对元数据使用单独的本体。
你会建议什么?
答案 0 :(得分:2)
如何区分描述所表示对象的OWL属性和描述该表示的属性。
这是OWL没有做出的明显区别。制作这个本体的人做了一些可能被认为有点不寻常的事情。而
:hasURItype :ihuy8965 . #this is a property of the URI representing the
建筑
可能是“关于表示”,就OWL而言,它只是建筑物的另一个属性。毕竟,根据
:ihuy8965 rdf:type owl:NamedIndividual , owl:Thing ;
价值只是另一个有名的个人。
然而,可能可能有一件事,这取决于本体设计师所做的事情。 OWL允许您定义三种类型的属性:
前两个对象和数据类型属性是OWL reasoners使用的属性,应该代表数据的实际含义。第三种类型,注释属性是一种“额外”数据。本体设计者可能已将:hasURItype 定义为注释属性,以表示其值不是推理所需的;也就是说,它们是对“真实”数据的注释。如果是这种情况,那么你可以做类似的事情:
construct { ?s ?p ?o }
where {
values ?s { :fgst1425 }
?s ?p ?o .
filter not exists {
?p rdf:type owl:AnnotationProperty
}
}
排除已声明为注释属性的属性。但是,我们没有足够的数据来了解这种方法是否适用于此。
根据对问题的更新,我认为您可能想要创建一个新的注释属性,以区分属性是否为“表示属性”。例如,
:isRepresentationProperty a owl:AnnotationProperty
然后您的属性定义可以考虑到这一点:
:isWorkLocationOf a owl:ObjectProperty .
:hasURItype a owl:ObjectProperty ;
:isRepresentationProperty true .
然后,您可以将SPARQL查询更新为:
construct { ?s ?p ?o }
where {
values ?s { :fgst1425 }
?s ?p ?o .
filter not exists {
?p :isRepresentationProperty true
}
}