This document声明“因此,将ack(原文如此)指向上面的例子,如果有价格,那么它可以作为Product的实例处理,即使它参与其他声明(或三元组) )“
执行单词搜索以查找参考。
基本上,他们说的是“hasPrice”属性的域名是“Product”。这意味着所有产品都有价格(到目前为止有意义),但这也意味着任何具有“hasPrice”属性的东西都可以被视为“产品”。这对我来说似乎有点宽松。用OOP术语来说,当然它们并不意味着具有“hasPrice”属性的任何东西实现了“Product”接口,是吗?那将是疯狂的!
答案 0 :(得分:2)
如果您声明hasPrice
的域名为Product
,则RDF和OWL都会推断具有hasPrice
属性的任何内容都属于Product
类型。所以在这方面你的理解是正确的。请注意,如果在没有域的情况下定义hasPrice
,则推理器不会进行此推断。
在本体中,如果您的Service
也具有hasPrice
属性,则会推断它是Product
。如果您声明Service
与Product
不相交,则您的本体会出现不一致。
解决这个问题的方法是在你的本体中引入一个用于表示域的类,比如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章。