假设我有类:
> 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
,其中AtomicNumber
是hasElementName
类的实例。
好的,现在考虑我拥有数据属性: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;不是我需要做的。
任何想法都将不胜感激。
由于
答案 0 :(得分:3)
这在OWL 2 DL中是不可能的,仅在OWL 2 FULL中 - 这意味着reasoners和工具可能会抱怨你的本体,或者你可能会得到意想不到的结果。
如果您的应用程序需要收集相同属性下的所有值,我将继续使用文字具体化 - 似乎是获得所需结果的最简单方法。