De-projection is an operation of the concept-oriented model (COM) which is applied to a set of elements and returns its lesser elements. The target set of elements and the inverse dimension leading to it from the source set are normally specified as parameters of the operation.
In the concept-oriented query language (CoQL) de-projection is denoted by left arrow '<-' which connects the source set of elements, the inverse dimension name, and the target set of elements.
Source <- inv-dimension <– Target
The inverse dimension or the target set can be omitted. Dimensions are specified in the concept-oriented schema which is a partially ordered set of concepts specified using order relation. Note that de-projection is supposed to be applied to sets of elements and if it is applied to a single instance than it is interpreted as a shortcut for a set consisting of one element.
De-projection can be used sequentially and along with the operation of projection.
If each employee (collection
Employees) belongs to one department (collection
Departments) then we can project a selected set of departments to employees and get a set of employees which work there:
(Departments d | d.size > 10) <- department <– Employees
This query finds all employees for the departments larger than 10. We can omit either dimension name
department or target collection
Longer inverse dimension paths with more intermediate collections can be used where each collection may have its own restrictions. For example, if each department has one manager (collection
Managers) then we could find all employees for the selected managers using two-step de-projection:
(Managers m | m.salary > 1000) <- manager <– (Departments d | d.size > 10) <- department <– (Employees e | e.age > 30)
This query de-projects all managers with the salary higher than 1000 to departments larger than 10 which in turn are de-projected to employees older than 30.