我是否正确地解释了这个“面向对象开发人员的语义Web入门”?

时间:2018-02-21 16:18:40

标签: rdf semantic-web rdfs

This document声明“因此,将ack(原文如此)指向上面的例子,如果有价格,那么它可以作为Product的实例处理,即使它参与其他声明(或三元组) )“

执行单词搜索以查找参考。

基本上,他们说的是“hasPrice”属性的域名是“Product”。这意味着所有产品都有价格(到目前为止有意义),但这也意味着任何具有“hasPrice”属性的东西都可以被视为“产品”。这对我来说似乎有点宽松。用OOP术语来说,当然它们并不意味着具有“hasPrice”属性的任何东西实现了“Product”接口,是吗?那将是疯狂的!

1 个答案:

答案 0 :(得分:2)

如果您声明hasPrice的域名为Product,则RDF和OWL都会推断具有hasPrice属性的任何内容都属于Product类型。所以在这方面你的理解是正确的。请注意,如果在没有域的情况下定义hasPrice,则推理器不会进行此推断。

在本体中,如果您的Service也具有hasPrice属性,则会推断它是Product。如果您声明ServiceProduct不相交,则您的本体会出现不一致。

解决这个问题的方法是在你的本体中引入一个用于表示域的类,比如HasPriceDomain,它是hasPrice属性的所有域的并集。这将导致hasPrice属性的任何内容被推断为HasPriceDomain类型。

DataProperty: hasPrice
    Domain: HasPriceDomain    
    Range: xsd:double

Class: HasPriceDomain
    EquivalentTo: Product or Service

Class: Product
    SubClassOf: hasPrice some xsd:double
    DisjointWith: Service

Class: Service
    SubClassOf: hasPrice some xsd:double
    DisjointWith: Product

从OOP的角度来看,最好将OOP类视为RDF / OWL类,将OOP实例视为RDF / OWL个体。

在OOP接口中通常指定行为(即方法),这些行为不能简单地转换为RDF / OWL。从RDF / OWL开始,最好只关注类。

有关将OOP转换为OWL的详细信息,请参阅https://henrietteharmse.com/uml-vs-owl/。有关方法翻译的详细信息,请参阅https://henrietteharmse.files.wordpress.com/2017/09/scenariotestingusingowl_v0-1-7-final.pdf的第5章。