Cardinality
We briefly mentioned cardinality (here) - the manyOne argument to the operation that created the hasDriver attribute. Now that we have introduced sanctioning and prototypes, we can describe cardinality properly.
The cardinality of an attribute specifies how many categories can be connected by a given attribute. For example, we have now sanctioned the hasOwner attribute to connect Vehicles and Persons. The cardinality we used was manyOne - meaning that any Vehicle has only one Owner, but that a Person could own many Vehicles. This mechanism allows us greater control on which composite categories are allowed; for example, evaluating the following expression will produce an error:
Car which <hasOwner Man hasOwner Woman>
because we are asking for a kind of Car that has two owners. We have disallowed this with our choice of cardinality for the hasOwner attribute.
The other possible values for cardinality are (with their effect):
oneMany
this would mean that Vehicles could have many kinds of Persons as drivers, but a Person could only drive one sort of Vehicle;
oneOne
this would mean that a Vehicle could only have one kind of Person as a driver, and that a Person can only drive one kind of Vehicle;
manyMany
this would mean that Vehicles could have many kinds of Persons as drivers, and that Persons could be drivers of many kinds of Vehicles.