考虑到我在OWL中有A和B类。存在两个不同的对象属性P1和P2,其范围分别是C类和域A和B.
我想创建一个D类,它代表任何包含对象属性P1的A,其值等于B所包含的任何对象属性P2。
是否可以使用OWL来描述这个?
答案 0 :(得分:3)
我想创建一个D类,它代表任何包含a的A. 对象属性P1,其值等于任何对象属性P2 由B包含。
我认为你正在寻找这样的类表达式(在DL和曼彻斯特语法中):
D≡A⊓⊓p 1 。(∃p 2 -1 .B)
D equivalentClass (A 和(p1 一些(反向(p2)一些 B)))
这表示某个东西是D,当且仅当它是A,并且p1的某个值是某个B实例的p2值。
如果p1和p2的域分别是A和B,那么你实际上可以简化为:
D≡∃p 1 .∃p 2 -1
D equivalentClass p1 some (反向(p2)某些事情)
这是第一个在OWL的N3 RDF序列化中的样子。
@prefix : <http://stackoverflow.com/q/28506192/1281433/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
:A a owl:Class .
:B a owl:Class .
:p a owl:ObjectProperty .
:q a owl:ObjectProperty .
:D a owl:Class ;
owl:equivalentClass [ a owl:Class ;
owl:intersectionOf ( :A _:b0 )
] .
_:b0 a owl:Restriction ;
owl:onProperty :p ;
owl:someValuesFrom [ a owl:Restriction ;
owl:onProperty [ owl:inverseOf :q ] ;
owl:someValuesFrom :B
] .
如果你有域和范围公理,那么你可以使用更简单的形式,它是:
@prefix : <http://stackoverflow.com/q/28506192/1281433/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
:A a owl:Class .
:B a owl:Class .
:p a owl:ObjectProperty ;
rdfs:domain :A .
:q a owl:ObjectProperty ;
rdfs:domain :B .
:D a owl:Class ;
owl:equivalentClass [ a owl:Restriction ;
owl:onProperty :p ;
owl:someValuesFrom [ a owl:Restriction ;
owl:onProperty [ owl:inverseOf :q ] ;
owl:someValuesFrom owl:Thing
]
] .