我正在使用 Protege v4.3 制作本体。
我有一个关于 OWL 本体和 DL 查询的问题。
例如,在 Pizza 本体中,
http://owl.cs.manchester.ac.uk/co-ode-files/ontologies/pizza.owl
我可以执行 DL 查询hasTopping some CheeseTopping
结果是
American、AmericanHot、Cajun 等。没关系。
现在,我尝试了 DL 查询isToppingOf some American
但结果什么都不是。
因为属性 isToppingOf 是 hasTopping 的逆属性,
我希望从该查询(通过推理)获得包括 FourCheesesTopping、CheeseyVegetableTopping 等在内的结果。但它没有。
有没有办法像这样自动推理?
最佳答案
类表达式
hasTopping some CheeseTopping
是一组个体,每个个体都通过 hasTopping 属性与某个 CheeseTopping 相关。在没有个体的 Pizza 本体中,您仍然可以获得此查询的类子类结果,因为某些类型的 Pizza(例如,American)的定义是这样的,任何美国的 Pizza 都必须具有这样的浇头。
现在,类似结构的查询
isToppingOf some American
是一组个体,每个个体都通过 isToppingOf 属性与一些美国披萨相关。但是,Pizza 本体没有定义特定的个体,因此没有任何个体作为候选者。但是那些可能是这个表达式的子类的类呢?例如,您提到了 FourCheeseTopping。现在,FourCheeseTopping 的某个特定实例,例如,fourCheeseTopping23 可以是一些美式比萨的浇头,例如:
fourCheeseTopping23 isToppingOf americanPizza72
但是,fourCheeseTopping 可能尚未放置在任何特定的比萨饼上。当我们选择一个 FourCheeseTopping 类型的任意个体时,我们不能推断它是一些美国比萨的浇头,所以我们不能推断类 FourCheeseTopping 是
isToppingOf some American
因为并不是每一个 FourCheeseTopping 实例都必须是一些美国比萨的浇头。对于可能使逻辑结构更清晰一些的类似情况,请考虑类 Employer 和 Person,以及对象属性雇用及其逆向雇用。我们可能会说每个雇主都必须有一个人作为雇员(否则他们就不会成为雇主):
Employer ⊑ employs some Person
但是,由于一个人可能失业,因此
Person ⊑ employedBy some Employer
即使雇员和雇员是倒数。
但是,如果您想知道特定类型的浇头是否可以放在特定类型的比萨饼中,您可以做的是询问是否
PizzaType ⊓ ∃hasTopping.ToppingType
相当于 owl:Nothing 或它的子类。例如,由于美国比萨饼只有 TomatoTopping、MozzarellaTopping 和 PeperoniTopping [原文如此] 类型的浇头,类
American ⊓ ∃hasTopping.MixedSeafoodTopping
相当于 owl:Nothing:
另一方面,由于美式披萨必须有 Mozzarella Topping,因此类
American ⊓ ∃hasTopping.MozzarellaTopping
相当于美国:
关于owl - 使用逆属性推理 OWL 本体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18561529/