2012-04-28 15 views
5

se me ha pegado desde hace dos días tratando de entender por qué el siguiente escenario no está funcionando:búho - protegido no está infiriendo correctamente? cómo definir con precisión una clase "vegetariana"?

capturas de pantalla aquí: http://dl.dropbox.com/u/4677548/screenshots.html

tengo una clase VegetarianFood (subclase de Alimentos) que es equivalente a "Alimentos y (huevos o MilkAndDerivates o VeganFood)" como se puede ver en la pantalla el número 1

la clase VeganFood, por su parte, es equivalente a otras clases (NutsAndSeeds, cereales, fruta, etc ...) pantalla 2

como usted ca n ver hay dos individuos (queso cheddar y anacardo) creados como MilkAndDerivates y NutsAndSeeds pantalla 3 y que se infieren correctamente como miembro de VegetarianFood y VeganFood

Entonces creé dos individuos como recetas, uno sólo con el anacardo (PastaVega) y una con dos chese cheddar y anacardo (PastaVege), utilizando la propiedad del objeto hasIngredient pantalla 4 y 5

y ellos se han deducido que la receta ... pero ninguno cae en la categoría de VegatarianRecipe y VeganRecipe, que se define de la siguiente manera captura de pantalla 6 y 7

No tengo pistas, ¿Por qué no se deducen como VegetarianRecipe (o vegan)? ¿Qué me estoy perdiendo?

Editar:

Si cambio VegetarianRecipe (o vegana) de "Receta y (hasIngredient SOLO VegetarianFood)"

a "Receta y (hasIngredient ALGUNAS VegetarianFood)"

Imagen 8

las personas de las recetas se muestran, pero por supuesto esto no es lo que estoy tratando de hacer, ya que de esta manera incluirá recetas con carne mixta y comida vegetariana. Entonces, ¿cómo definir una receta vegetariana y una clase de receta vegetariana para permitir al razonador inferir correctamente cuando una receta es vegetariana o vegana?

+0

El "enlace" que proporcionó a las capturas de pantalla solo funcionará en su computadora. Primero debe subirlos a algo como imgur.com. – jwodder

Respuesta

6

Ha accedido a una consecuencia del hecho de que el razonamiento de OWL utiliza una suposición de mundo abierto.

La razón de su receta PastaVege no se infiere que una VegetarianRecipe es que, aunque los ingredientes que se recoge explícitamente en la receta son de hecho todos los VegeratianFood casos, bien podría ser que algún ingrediente actualmente desconocida de su receta no es una comida vegetariana.

Debido a que su restricción en VegetarianRecipees que todos los ingredientes deben estar VegetarianFoods (no sólo los que actualmente conocemos), no puede concluir definitivamente (en un mundo abierto) que su receta es de hecho un VegetarianRecipe.

Hay varias maneras de lidiar con esto, pero ninguna realmente hace exactamente lo que quiere, debe abordarlo desde un ángulo ligeramente diferente.

Sin entrar en los detalles de modelado exactos: aunque es bastante difícil inferir si una receta es vegetariana dado su modelo actual, es relativamente simple inferir si una receta no es vegetariana; cualquier receta que tenga al menos un ingrediente no vegetariano es una receta no vegetariana.

Un enfoque alternativo es crear un conjunto cerrado de ingredientes (vegetarianos) (usando una clase enumerada OWL mediante la restricción oneOf), pero eso es un cambio significativo en su modelo, y por supuesto es tedioso tener que enumere todos los ingredientes posibles de esta manera.

Cuestiones relacionadas