A canonical model is a design pattern used to communicate between different data formats. Essentially: create a data model which is a superset of all the others, and create a “translator” module or layer to/from which all existing modules exchange data with other modules