Facets are annotations on slots. Facets have values, which, like slot values, may be any Lisp data structure. Since slots are identified by a slot name and a frame, facets are identified by a facet name, a slot name, and a frame. Some facets pertain to the values of a slot; for example, a facet can be used to specify a slot constraint or a method for computing the value of a slot. Other facets are about the slot itself, such as documentation. The Generic Frame Protocol provides a set of a standard names for a few facets (see Section 2.12), and applications may assert other facets as well. For example, to assert the value-type restriction on favorite-food, one could assert that the facet :value-type has value edible-food on the template slot favorite-food of class frame human.
FRSs have a variety of ways of specifying facets. Some systems allow for uniform nesting of facets (i.e., facets on slots, facets on those facets, etc). Systems that represent slots as reified binary relations (slot frames) may represent slot constraints using slots on global slot frames. The Generic Frame Protocol only provides a notation for a single level of facets on slots, and makes no requirement that a facet on a slot has any relationship to a slot on a frame that represents a binary relation. In fact, only those facets that describe slot constraints have any semantics in the protocol. All other facets are simply annotations for applications to use as needed.
We make no uniform distinction between facets on template slots and facets on own slots.