2012-04-28 19 views
5

Sono stato attaccato da due giorni a cercare di capire il motivo per cui lo scenario seguente non funziona:gufo - il protetto non si deduce correttamente? come definire precisamente una classe "vegetariana"?

screenshots qui: http://dl.dropbox.com/u/4677548/screenshots.html

Ho una classe VegetarianFood (sottoclasse di cibo), che equivale a "Food e (uova o MilkAndDerivates o VeganFood)" come si può vedere nel numero screenshot 1

la classe VeganFood, sulla sua volta, è equivalente ad altre classi (NutsAndSeeds, cereali, frutta, ecc ...) screenshot 2

come si ca n vedi ci sono due individui (formaggio cheddar e anacardio) creati come MilkAndDerivates e NutsAndSeeds Schermate 3 e vengono correttamente dedotte come VegetarianFood e VeganFood membro

Poi ho creato due individui come ricette, uno solo con anacardio (PastaVega) e uno con entrambi chese cheddar e anacardio (PastaVege), utilizzando la hasIngredient proprietà dell'oggetto Schermate 4 e 5

e sono stati dedurre come Ricetta ... ma nessuno rientra nella categoria di VegatarianRecipe e VeganRecipe, definito come segue screenshot 6 e 7

Non ho indizi, perché non sono dedotti come VegetarianRecipe (o vegan) ?? Che cosa mi manca?

Edit:

Se cambio VegetarianRecipe (o vegana) da "ricetta e (hasIngredient SOLO VegetarianFood)"

a "ricetta e (hasIngredient ALCUNI VegetarianFood)"

screenshot 8

vengono mostrati gli individui di ricezione, ma ovviamente questo non è quello che sto cercando di fare, in quanto in questo modo includerà ricette con carne mista e cibo vegetariano. Quindi, come definire una classe vegetarianrecipe e veganrecipe per consentire al ragionatore di dedurre correttamente quando una ricetta è vegetariana o vegana ????

+0

Il "link" che hai fornito agli screenshot funzionerà solo sul tuo computer. Devi prima caricarli su qualcosa come imgur.com. – jwodder

risposta

6

Hai subito una conseguenza del fatto che il ragionamento OWL utilizza un'ipotesi del mondo aperto.

La ragione per la vostra ricetta PastaVege non è dedotta per essere un VegetarianRecipe è che, anche se gli ingredienti che vi elenco in modo esplicito nella ricetta sono infatti tutti VegeratianFood casi, potrebbe darsi che qualche ingrediente attualmente sconosciuto della vostra ricetta non è una cibo vegetariano.

Dal momento che il vincolo è che VegetarianRecipetutto ingredienti dovrebbero essere VegetarianFoods (non solo quelli che attualmente conosciamo), ma non si può concludere in via definitiva (in un mondo aperto) che la ricetta è davvero un VegetarianRecipe.

Ci sono diversi modi per risolvere questo problema, ma nessuno fa esattamente quello che vuoi: devi affrontarlo da un'angolazione leggermente diversa.

Senza entrare nei dettagli di modellazione esatti: anche se è abbastanza difficile dedurre se una ricetta è vegetariana dato il modello attuale, è relativamente semplice dedurre se una ricetta non è vegetariana; qualsiasi ricetta che abbia almeno un ingrediente non vegetariano è una ricetta non vegetariana.

Un approccio alternativo consiste nel creare un insieme chiuso di ingredienti (vegetariani) (utilizzando una classe enumerata OWL tramite il vincolo oneOf), ma si tratta di una modifica significativa del modello e, naturalmente, è noioso dover elenca tutti gli ingredienti possibili in questo modo.