7

我正在使用 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 等的结果。但它没有。

有没有这样的自动推理方法?

4

2 回答 2

5

类表达式

hasTopping some CheeseTopping

是一组个体,每个个体都通过 hasTopping 属性与某个 CheeseTopping 相关联。在没有个体的 Pizza 本体中,您仍然可以获得此查询的类子类结果,因为某些类型的 Pizzas(例如 American)的定义是这样的,即任何美国人的 Pizza 都必须具有这样的浇头。

现在,类似结构的查询

isToppingOf some American

是一组个体,每个个体都通过 isToppingOf 属性与某个美国披萨相关联。但是,Pizza 本体没有定义特定的个体,因此没有任何个体作为候选者。但是那些可能是这个表达式的子类的类呢?例如,您提到了 FourCheeseTopping。现在, FourCheeseTopping 的一些特定实例,例如,fourCheeseTopping23可能是一些美国披萨的浇头,例如:

四CheeseTopping23 is ToppingOf AmericanPizza72

然而,fourCheeseTopping 可能还没有放在任何特定的比萨饼上。当我们选择 FourCheeseTopping 类型的任意个体时,我们不能推断它是某个美国披萨的浇头,因此我们不能推断 FourCheeseTopping 类是

isToppingOf some American

因为并非FourCheeseTopping 的每个实例都必须是某些美国披萨的浇头。对于可能使逻辑结构更清晰的类似情况,请考虑类 Employer 和 Person,以及对象属性雇员及其逆雇员。我们可以说每个 Employer 都必须有一些 Person 作为 Employee(否则他们就不会是雇主):

雇主 ⊑ 雇用了一些

但是,由于一个人可以失业,因此这不是真的

人 ⊑ 受雇于某个雇主

即使employees 和employedBy 是相反的。

但是,如果您想知道特定类型的浇头是否可以放置在特定类型的比萨饼中,您可以做的询问是否

PizzaType ⊓ ∃hasTopping.ToppingType

等价于 owl:Nothing 或其子类。例如,由于美国披萨只有 TomatoTopping、MozzarellaTopping 和 PeperoniTopping [sic] 类型的配料,因此该类

美国⊓∃hasTopping.MixedSeafoodTopping

相当于 owl:Nothing:

美国披萨没有混合海鲜配料

另一方面,由于美式披萨必须有 MozzarellaTopping,所以类

美式⊓∃hasTopping.MozzarellaTopping

相当于美式:

美国比萨饼确实有马苏里拉奶酪配料

于 2013-09-03T15:41:04.517 回答
1

当你问什么是子类时:

isToppingOf some American

您在问哪些类包含必须在美国比萨饼上使用的浇头。但在披萨本体中,不存在这样的类。考虑奶酪浇头:所有奶酪浇头都放在一些美国比萨饼上吗?不,一些奶酪配料是在意大利比萨饼上。所有一流的课程都是如此。

于 2013-09-02T08:19:58.730 回答