加权RDF谓词(owl:ObjectProperty)

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倍:(

我很感激任何建议!

Man*_*res 7

我不会使用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具体化的主要区别在于将本体设计保留在用户的模型中.

  • 尽管你声称,你的答案仍然有效地使用了通过*将`like`关系重新统一到名为`LikeLevel`(_concept_)的一阶实体,允许你将属性附加到关系本身,就像对象一样(` Pet`)和'scale'(整数值).这通常是正确的方法,称为_reification_. (5认同)
  • @rati你可能是对的,我所做的可以被视为具体化,就像计算机科学的通用术语一样.但不是纯粹的RDF具体化,其中使用了rdf:subject,rdf:predicate和rdf:object(参见http://www.w3.org/TR/rdf-mt/#ReifAndCont).我的意思是在使用RDF实现时很难执行推理,主要是因为应该始终考虑用户数据模型之外的间接/抽象级别.与此相反,我的解决方案将设计保留在用户的数据模型中. (2认同)