【问题标题】:weighted RDF predicate (owl:ObjectProperty)加权 RDF 谓词 (owl:ObjectProperty)
【发布时间】:2010-09-07 15:25:46
【问题描述】:

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

感谢任何建议!

【问题讨论】:

标签: object properties rdf predicate owl


【解决方案1】:

我不会使用 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 创建一个空白节点,但您也可以创建一个地面对象,有时您可能希望/需要避免 bNodes。在这种情况下:

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

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

【讨论】:

  • 尽管您声称,您的答案仍然有效地使用具体化,通过 reifyinglike 关系与称为LikeLevel 的一阶实体(一个概念),允许您将属性附加到关系本身,例如对象 (Pet) 和“比例”(整数值)。这通常是正确的方法,称为reification
  • 另外,您声称物化(在这种情况下)使执行 OWL 推理变得困难的说法不正确。请注意,具体化不仅适用于将 RDF 三元组 s-p-o 转换为三个三元组 r-s、r-p、r-o,这实际上确实使 OWL 推理变得困难,但在这种情况下不是,其中唯一的具体化是模型中的单个属性。
  • @rati 你可能是对的,我所做的可以被视为计算机科学的一般术语具体化。但不是纯粹的 RDF 物化,其中使用了 rdf:subject、rdf:predicate 和 rdf:object(参见w3.org/TR/rdf-mt/#ReifAndCont)。我的意思是在使用 RDF 物化时很难进行推理,主要是因为应该始终考虑用户数据模型之外的间接/抽象级别。相反,我的解决方案将设计保留在用户的数据模型中。
  • @rati @elgcom 答案已编辑以明确说明 RDF 物化。
  • @msalvadores;我同意 RDF 物化 在这种情况下是完全不合适的,并且您的解决方案在这里应用 OWL TBox 中的属性物化 来正确解决问题。 (+1)
【解决方案2】:

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

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

  1. 创建具体属性,如somewhatLikesdoesntLikeloves;如果您有一组有限的替代方案,并且不介意创建额外的属性,这可能是合适的。如果您打算用整数(或任何广泛的替代方案)对“相似度”进行编码,这将变得乏味和繁琐(我什至建议不正确) - 遵循这个方法,您将拥有likes0likes1、...、likes99likes100 等属性。例如,此方法还可以排除在一定度数值范围内一个人喜欢的所有狗的查询,这在 SPARQL 中可以使用您指定的具体化方法,但不能使用此方法。
  2. likesDogs 属性附加到Person 实例,如果可以针对Dog所有 类型/实例而不是单个实例的人作出断言。当然,这将取决于您要在此处捕获的内容;如果是后者,那也不合适。

祝你好运!

【讨论】:

    【解决方案3】:

    我认为@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 声明对我来说没有意义;我喜欢一个like的关卡,哪些物体是狗???

    但我喜欢狗的“程度”如何形容呢?

    就我非常有限的 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]
    

    我认为有很大的不同。具体化是关于陈述而不是关于谓词的陈述......

    【讨论】:

      【解决方案4】:

      Jena 文档中的一句话引起了我的注意。

      ...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>
      

      【讨论】:

      • RDF/XML 语法很难阅读 我建议您使用 RDF/Turtle 或 Manchester 语法来编写您的帖子和 cmets。它们更容易理解/。
      • 如果 catty 喜欢狗的程度与 bob 不同,会发生什么?您的信心程度与财产有关,因此您将无法拥有不同的程度。除此之外,您还需要为人们可能喜欢的所有内容提供多个属性。
      • @msalvadores:所以这个想法是让谓词“Like”作为一个类,并为每个“Like”关系声明它的个体。我可以为 RDF 中的“谓词”提供 Bnode 吗?
      • @msalvadores:当然,我不确定这个想法是否是一种好的做法。在我的应用程序中,“关系”(例如,喜欢)比主语或宾语重要得多。因此,我想对它们进行建模,以便我可以轻松地遍历或查询这些关系。
      • bNodes 作为谓词?我不这么认为。您将无法引用它们。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多