语句用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倍:(
我感谢任何建议!
答案 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图中两个项之间关系固有属性的标准方式,其中语句以成对方式在项之间进行 - 这是对数据模型本身有时需要进行具体化。
如果您担心具体化会使您的本体论膨胀,您可以尝试以下方法,但通常不太可取并且遇到自己的问题:
somewhatLikes
,doesntLike
,loves
;如果您拥有有限的备选方案,并且不介意创建额外的属性,这可能是合适的。如果你打算用整数(或任何广泛的替代品)编码“相似度”,这会变得单调乏味(我甚至建议不正确的) - 在此之后方法,您有likes0
,likes1
,...,likes99
,likes100
等属性。这种方法也可以排除查询,例如,一个人在一定程度值范围内喜欢的所有狗,这可能在SPARQL中使用您指定的具体化方法,但不是这种方法。likesDogs
属性附加到Person
实例,如果可以针对所有类型/ Dog
实例的人进行断言,而不是个别情况。当然,这将取决于你在这里捕获的内容;如果是后者,那么这也不合适。答案 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
其中axb
是a 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]
我认为存在很大差异。具体化是关于陈述与谓词不相关的陈述......