GOAL: To present SMEs a simple & intuitive interface to role representation. Specifically, we want to have the notion of hybrid instances. A hybrid instance is a set of instances that includes only one instance of entity and the rest of the instances in the set are instances of roles. These role instances are connected to the entity instance through the "plays"/"purpose" relation: Entity Container \ | \inst-of |inst-of \ | --------------------------- | plays | | entity01 - container02 | hybrid instance | | --------------------------- Hybrid instances are created through three methods: i> a SME uses an action that implies a role concept is involved, e.g. the base value of a Move-Into. ii> a SME explicitly specify that an entity plays a role/whose purpose is a role Hybrid instances should be transparent to SME. It is a simpler way of letting SME using the adjunct instances approach for roles. A hybrid instance acts as if it is an instance of all the classes involved, such as Entity, Container, etc.. All properties of container02 should be available to entity01, for example, if an SME queries about the content of entity01, and content is a property specific to Containers, then the content of container02 should be returned as the content of entity01, similarly, if an SME asserts that the content of entity01 is *book, and entity01 does not play any container role, then a new instance of container should be added to the hybrid instance, and the content of that instance is *book. If entity01 plays one containers already, then add *book as the content of the container. If entity01 plays multiple container, then ask user for more instruction on which container to insert. Although hybrid instances are similar to multiple inheritance, it has the additional features of * allowing multiple instances of the same type, e.g. a person with two jobs * dynamically acquire and relinquish role instances PROPOSAL: In order to achieve the above goal, we propose the following changes to KM: 1> Redefine isa operator to be newisa(x,y) = isa(x,y) v (role(y) ^ plays(x, z) ^ isa(z, y)) 2> Redefine the immediate-classes function in km.lisp such that: (immediate-classes x) = the classes of x + the classes of all the roles x plays 3> Redefine the "has" operator such that if the slot specified has roles as its domain, then insert the slot filler as described in the Goal section. By doing 1>, a hybrid instance will have a veneer of a single instance with multiple superclasses. By doing 2>, all the properties of a role will be attached to the entity that it plays in query mode. By doing 3>, all the insertions of role properties will be attached to the proper role that the entity plays. Issues: a> Are the changes sufficient to achieve our goal? b> Are these changes clear/specific enough, especially 3>? b> SMEs still need to explicitly say "(entity0 has (purpose ((a Container))))" to create a hybrid instance because superclasses relation has Classes as its domain.