Object property instance on class?

2019-07-24 13:58发布

Let's say for example:

-Food(class
 -Bread(instance of Food!
-Species(class
  -Animal(class
    - Horse(class
      -Unicorn(instance

Now I need to be able to set Bread -> eatableBy -> Horse. But I can't make a object property assertion to a class. So I could set it eatable by and add all the instances of Horse, but I have a lot of instances so that would be a bit redundant. Does anybody know a good efficient way to do achieve the same effect?

E.g. If I need to know what Horses can eat it needs to return Bread also. If I want to know all the food an Unicorn can eat, it needs to return Bread (because it's a horse and all horses eat bread). If I need to know what the subclasses of Animal eat, it also has to return Bread.

1条回答
Viruses.
2楼-- · 2019-07-24 14:45

If I understand you correctly, you have an instance Bread and want to ensure that it is eatable by every instance of the class Horse. OWL has value restrictions which let you describe the set of individuals that stand in some relation to some particular value. E.g., the expression

        likes value Pizza

is the class of all individuals that like pizza. OWL also lets you use the inverse of properties, so that the expression

        inverse(likes) value Joe

is the class of all things that Joe likes. These class expressions can be used in axioms, including subclass axioms. In particular, you could say that

        Horse SubClassOf canEat value Bread

to say that every individual of type Horse can eat the individual Bread. Rather than a canEat property, though, you've got an eatableBy property. That's just the inverse of canEat, though, so you can say that every individual of type Horse can eat the individual Bread with the axiom:

        Horse SubClassOf inverse(eatableBy) value Bread

In Protégé, that looks like:

protege screenshot

查看更多
登录 后发表回答