使OWL数据和对象属性成为同一属性

时间:2016-02-15 22:54:21

标签: rdf owl protege triplestore triples

假设我有类:

> Element
> ElementProperty

elementProperty的子类是:

> AtomicNumber
> AtomicMass

还要考虑以下对象属性及其域和范围:

> hasElementProperty
  Domain:Element
  Range:ElementProperty

hasElementProperty具有以下子属性:

> hasAtomicNumber
  Domain:Element
  Range:AtomicNumber
> hasAtomicMass
  Domain:Element
  Range:AtomicMass

因此,当我说:Lithium :hasAtomicNumber :3时,我会推断出:Lithium :hasElementProperty :3三联:3,其中AtomicNumberhasElementName类的实例。

好的,现在考虑我拥有数据属性:Lithium :hasElementName "Lithium"的情况,我也想要它,以便当我有三:Lithium :hasElementProperty "Lithium"时,推断出三hasElementName。由于hasElementProperty是一个数据属性,因此我现在设置它的方式是不可能的,因此不能是对象属性List = [68, -99,"abc", -8,100, [-92, 89, 81, 96]] result = [] def flatten(my_list): for i in my_list: if isinstance(i, list): return flatten(i) else: result.append(i) return result print(flatten(List)) 的子属性。 我已经尝试使用Literal Reification(请参阅Literal Reification)并取得了成功,但我觉得可能有更好的方法来实现这一点,因为文字具体化的目的是因此可以使用文字作为对象,而且#&# 39;不是我需要做的。 任何想法都将不胜感激。

由于

1 个答案:

答案 0 :(得分:3)

这在OWL 2 DL中是不可能的,仅在OWL 2 FULL中 - 这意味着reasoners和工具可能会抱怨你的本体,或者你可能会得到意想不到的结果。

如果您的应用程序需要收集相同属性下的所有值,我将继续使用文字具体化 - 似乎是获得所需结果的最简单方法。