警告:新手问题。
我试图模拟(作为一个简化的例子)狗与一组与狗相关的类的相关数值,例如“蓬松”。我很困惑如何表示特定类型(例如狗)相对于另一种类型(例如,蓬松度)采用特定数值。例如:
:Dog rdf:type owl:Class .
:Fluffiness rdf:type owl:Class .
:describedBy rdf:type owl:ObjectProperty ;
rdfs:domain :Dog ;
rdfs:range :Fluffiness .
:hasValue rdf:type owl:DatatypeProperty ;
rdfs:domain :Fluffiness ;
rdfs:range :&xsd;float .
:Chihuahua rdf:type :Dog .
如何将吉娃娃与狗的一般属性(例如Fluffiness)的具体值(例如0.1)联系起来?有没有办法做到这一点,而不是只是将Fluffiness作为一个类并定义一个“hasFluffiness”数据类型属性?
答案 0 :(得分:4)
目前,您的陈述有效,但在我看来,这有点令人费解。最终得到的实例数据如下:
Chihuahua describedBy fluffiness72 .
fluffiness72 hasValue 4.
正如您所说,您可以使用hasFluffiness数据类型属性,但如果您不想这样做,我认为您最好的选择是拥有属性类,其中包含蓬松,大小,友善等都是实例。然后,您可以拥有 AttributeValue 类和属性属性和值(您可以提供更好的名称),以便您编写数据像这样:
:chihuahua62 rdf:type :Chihuahua ;
:hasAttributeValue [ :attribute :Fluffiness ; :value 3 ] ;
:hasAttributeValue [ :attribute :Friendliness ; :value 2 ] .
通过这种表述,你可以说“每只奇瓦瓦的绒毛水平都低于4”:
((∃hasAttributeValue -1 .Chihuahua)⊓(= attribute.Fluffiness))⊑⊑value.xsd:float [≤4.0]
((反向(hasAttributeValue)一些 Chihuahua)和(属性值蓬松度)) SubClassOf (值仅 xsd:float [< = 4.0])
在英语中,这表示对于属性蓬松的奇瓦瓦州的每个 AttributeValue 必须具有小于4.0的值。
您可以使用替代表示“如果Chihuahua具有属性值,那么如果属性为Fluffiness,那么该值小于4.0”。这相当于“如果Chihuahua有一个属性值,那么该属性不 Fluffiness,或者该值小于4.0”:
Chihuahua⊑⊑hasAttributeValue。(¬(= attribute.Fluffiness)⊔(∀value.xsd:float [≤4.0]))
这更容易写入本体编辑器,因为它是关于你感兴趣的类的子类公理。
这是一个显示两种方法的本体论:
@prefix : <http://stackoverflow.com/q/24760392/1281433/dogProperties#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
:Shagginess a owl:NamedIndividual , :Attribute .
:hasValue a owl:DatatypeProperty ;
rdfs:domain :_attVal .
[ a owl:Class ;
rdfs:subClassOf [ a owl:Restriction ;
owl:allValuesFrom [ a rdfs:Datatype ;
owl:onDatatype xsd:float ;
owl:withRestrictions ( [ xsd:minInclusive
10 ] )
] ;
owl:onProperty :hasValue
] ;
owl:intersectionOf ( [ a owl:Restriction ;
owl:onProperty [ owl:inverseOf :hasAttributeValue ] ;
owl:someValuesFrom :Newfoundland
] [ a owl:Restriction ;
owl:hasValue :Shagginess ;
owl:onProperty :hasAttribute
] )
] .
:Newfoundland a owl:Class ;
rdfs:subClassOf :Dog .
:Attribute a owl:Class .
:_attVal a owl:Class .
:hasAttribute a owl:ObjectProperty ;
rdfs:domain :_attVal ;
rdfs:range :Attribute .
:Chihuahua a owl:Class ;
rdfs:subClassOf :Dog ;
rdfs:subClassOf [ a owl:Restriction ;
owl:allValuesFrom [ a owl:Class ;
owl:unionOf ( [ a owl:Class ;
owl:complementOf [ a owl:Restriction ;
owl:hasValue :Shagginess ;
owl:onProperty :hasAttribute
]
] [ a owl:Restriction ;
owl:allValuesFrom [ a rdfs:Datatype ;
owl:onDatatype xsd:float ;
owl:withRestrictions ( [ xsd:maxInclusive
4 ] )
] ;
owl:onProperty :hasValue
] )
] ;
owl:onProperty :hasAttributeValue
] .
:hasAttributeValue a owl:ObjectProperty ;
rdfs:range :_attVal .
:Dog a owl:Class .
<http://stackoverflow.com/q/24760392/1281433/dogProperties>
a owl:Ontology .