7

在 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

4 回答 4

7

我不会使用RDF reification,在这种情况下也不会,几乎在任何情况下都不会。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具体化的主要区别在于将本体设计保留在用户模型中。

于 2010-09-09T09:51:04.613 回答
2

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

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

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

祝你好运!

于 2010-09-08T06:25:41.710 回答
1

我认为@msalvadores 弄错了。

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

a x b
axb y c
axb z d

whereaxba 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"

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

如何为谓词赋予属性或值?

我认为您不了解谓词和语句之间的区别。关于它的一个很好的例子可以在这里找到:RDF 中具体化的简单例子

Tolkien wrote Lord of the rings
Wikipedia said that

这里的声明:

that: [Tolkien, wrote, LotR]

如果我们正在对语句进行陈述,我们会写如下内容:

[Wikipedia, said, that]

如果我们要对谓词进行陈述,那么我们会这样写:

[Wikipedia, said, wrote]

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

于 2015-11-20T20:46:39.697 回答
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>
于 2010-09-09T14:56:57.750 回答