加权RDF谓词(owl:ObjectProperty)

时间:2010-09-07 15:25:46

标签: object properties rdf predicate owl

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>

但如何描述我喜欢狗的“程度”呢? 如何为谓词提供属性或值? 我得到的一个解决方案是将一个(S,P,O)语句扩展为3个语句。 例如,

(S)             (P)        (O) 
 Person       isSrcOf    LikeRelation
 Pet          isTargetOf LikeRelation
 LikeRelation hasValue   [0~100]

它应该可以工作,但显然它会让本体变大3倍:(

我感谢任何建议!

4 个答案:

答案 0 :(得分: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

如果要使用此模型表示某些实例数据(使用RDF / Turtle语法):

:I :like [ a :LikeLevel; 
   :likeObject :dogs;
   :likeScale 5.7] . 

在这种情况下,我正在为对象LikeLevel创建一个空白节点,但您也可以创建一个地面对象,有时您可能需要/需要避免使用bNode。在那种情况下:

:I :like :a0001 .
:a0001 a :LikeLevel; 
   :likeObject :dogs;
   :likeScale 5.7.

这种设计可以考虑一个简明的具体化案例,与RDF具体化的主要区别在于将本体设计保留在用户的模型中。

答案 1 :(得分:2)

您的建议是有效的;它被称为 reification ,是表示本体或RDF图中两个项之间关系固有属性的标准方式,其中语句以成对方式在项之间进行 - 这是对数据模型本身有时需要进行具体化。

如果您担心具体化会使您的本体论膨胀,您可以尝试以下方法,但通常不太可取并且遇到自己的问题:

  1. 创建特定属性,例如somewhatLikesdoesntLikeloves;如果您拥有有限的备选方案,并且不介意创建额外的属性,这可能是合适的。如果你打算用整数(或任何广泛的替代品)编码“相似度”,这会变得单调乏味(我甚至建议不正确的) - 在此之后方法,您有likes0likes1,...,likes99likes100等属性。这种方法也可以排除查询,例如,一个人在一定程度值范围内喜欢的所有狗,这可能在SPARQL中使用您指定的具体化方法,但不是这种方法。
  2. likesDogs属性附加到Person实例,如果可以针对所有类型/ Dog实例的人进行断言,而不是个别情况。当然,这将取决于你在这里捕获的内容;如果是后者,那么这也不合适。
  3. 祝你好运!

答案 2 :(得分:0)

耶拿文件中的一句话引起了我的注意。

...OWL Full allows ... state the following .... construction:

<owl:Class rdf:ID="DigitalCamera">
  <rdf:type owl:ObjectProperty />
</owl:Class>
..

OWL Full是否真的允许ObjectProperty成为一个类? 如果一个ObjectProperty可以是一个类,并且可以有个人,那么我可以用

来描述一个语句
S_individual P_individual O_individual

我可以在P_individual上拥有更多属性。这样对吗? 或者我错过了一些观点?

由于以下RDF有效,因此应该可以实现相应的OWL。

<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:j.0="http://somewhere/" > 

  <rdf:Description rdf:about="http://somewhere/Dog_my_dog">
    <j.0:name>Lucky</j.0:name>
  </rdf:Description>
  <rdf:Description rdf:about="http://somewhere/like_dog">
    <j.0:degree>80</j.0:degree>
  </rdf:Description>

  <rdf:Description rdf:about="http://somewhere/Cat_my_cat">
    <j.0:name>Catty</j.0:name>
  </rdf:Description>
  <rdf:Description rdf:about="http://somewhere/like_cat">
    <j.0:degree>86</j.0:degree>
  </rdf:Description>

  <rdf:Description rdf:about="http://somewhere/Person_I">
    <j.0:name>Bob</j.0:name>
    <j.0:like_dog rdf:resource="http://somewhere/Dog_my_dog"/>
    <j.0:like_cat rdf:resource="http://somewhere/Cat_my_cat"/>
  </rdf:Description>

</rdf:RDF>

答案 3 :(得分:0)

我认为@msalvadores错了。

让我们忘记狗和喜欢。我们在这里真正做的是:

a x b
axb y c
axb z d

其中axba x b语句的标识符,a, b, c, d是主题或对象,x, y, z是谓词。我们需要的是以某种方式将a, x, b资源绑定到axb语句。

这就是具体化的方式:

axb subject a
axb predicate x
axb object b
我认为这很容易理解。

让我们来看看msalvadores的作用:

:I :like [ a :LikeLevel; 
   :likeObject :dogs;
   :likeScale 5.7] . 

我们可以轻松将其翻译为axb条款

a x w
w type AxbSpecificObjectWrapper
w object b
w y c

这只是用低质量的工具和更多的努力来模仿物化(你需要一个包装类并定义一个对象属性)。 a x w声明对我来说没有意义;我喜欢一个类似的水平,哪些物体是狗?

  

但如何描述我喜欢狗的“程度”呢?

据我所掌握的RDF知识非常有限,我有两种方法可以做到这一点。

1。)使用具体化

stmt_1
    a LikeStatement
    subject I
    predicate like
    object dogs
    how_much "very much"

2。)实例化谓词类

I like_1 dogs
like_1
    a Like
    how_much "very much"

这取决于您的口味和您选择的实际词汇。

  

如何为谓词提供属性或值?

我认为您不了解谓词和语句之间的区别。这里有一个很好的例子:Simple example of reification in RDF

Tolkien wrote Lord of the rings
Wikipedia said that

这里的陈述:

that: [Tolkien, wrote, LotR]

如果我们对声明做出陈述,我们写下这样的话:

[Wikipedia, said, that]

如果我们对谓词做出陈述,那么我们写下这样的东西:

[Wikipedia, said, wrote]

我认为存在很大差异。具体化是关于陈述与谓词不相关的陈述......