rnd*_*gen 7 rdf properties predicate owl object
在RDF中,语句用S,P和O表示; 在OWL中,owl:ObjectProperty表示谓词逻辑.
(S) (P) (O)
I like dog
<owl:Class rdf:about="Person" />
<owl:NamedIndividual rdf:about="I">
<rdf:type rdf:resource="Person"/>
<like rdf:resource="Dog"/>
</owl:NamedIndividual>
<owl:Class rdf:about="Pet" />
<owl:NamedIndividual rdf:about="Dog">
<rdf:type rdf:resource="Pet"/>
</owl:NamedIndividual>
<owl:ObjectProperty rdf:about="like">
<rdfs:domain>
<owl:Restriction>
<owl:onProperty rdf:resource="like"/>
<owl:someValuesFrom rdf:resource="Person"/>
</owl:Restriction>
</rdfs:domain>
<rdfs:range>
<owl:Restriction>
<owl:onProperty rdf:resource="like"/>
<owl:someValuesFrom rdf:resource="Pet"/>
</owl:Restriction>
</rdfs:range>
</owl:ObjectProperty>
Run Code Online (Sandbox Code Playgroud)
但如何描述我喜欢狗的"程度"呢?如何为谓词提供属性或值?我得到的一个解决方案是将一个(S,P,O)语句扩展为3个语句.例如,
(S) (P) (O)
Person isSrcOf LikeRelation
Pet isTargetOf LikeRelation
LikeRelation hasValue [0~100]
Run Code Online (Sandbox Code Playgroud)
它应该工作,但显然它会让本体大3倍:(
我很感激任何建议!
我不会使用RDF具体化,不是在这种情况下,几乎不在任何情况下.RDF的具体化使事情变得更加复杂.正如你所评论的那样,它会膨胀你的本体论,但不仅如此,它还会使你的本体论很难应用OWL推理.
我已经处理过你所呈现的相同场景,而且大多数时候我最终得到了以下设计.
(S)(P)[(P)(O)(P)(O)]
我喜欢['我喜欢什么'狗','我多么喜欢它''很多']
Class: LikeLevel //it represents class of things a person likes with a degree factor.
ObjectProperty: likeObject
Domain: LikeLevel
Range: Pet //(or Thing)
ObjectProperty: likeScale
Domain: LikeLevel
Range: xsd:int //(or an enumeration class i.e: 'nothing', 'a bit', 'very much',...)
ObjectProperty: like
Domain: Person
Range: LikeLevel
Run Code Online (Sandbox Code Playgroud)
如果要使用此模型表示某些实例数据(使用RDF/Turtle语法):
:I :like [ a :LikeLevel;
:likeObject :dogs;
:likeScale 5.7] .
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我正在为对象创建一个空白节点,LikeLevel但您也可以创建一个地面对象,有时您可能需要/需要避免使用bNode.在这种情况下:
:I :like :a0001 .
:a0001 a :LikeLevel;
:likeObject :dogs;
:likeScale 5.7.
Run Code Online (Sandbox Code Playgroud)
这种设计可以考虑一个简明的具体化案例,与RDF具体化的主要区别在于将本体设计保留在用户的模型中.