The Cogitant library is a set of C++ classes enabling to easily handle conceptual graphs as well as the other objects of the model (support, rules, etc.). To each object of the model matches a class in Cogitant, and the data structures used are a basic implementation of the objects of the model (for example, a graph is a set of vertices and a set of edges), by this way, it is easy for someone already knowing the model of conceptual graphs to understand the structure of Cogitant, and the extensions are eased.
The main functions offered by the library are the following ones:
- Handling in memory of conceptual graphs. It is possible to handle basic or nested conceptual graphs, not necessarily connexs, that may contain coreference links. The types of concept vertices can be conjunctive types.
- Handling in memory of a support (sets of types of concepts, types of relationships, types of nestings and individual markers). Several supports can coexist in memory, but a conceptual graph is defined on a single support. The support also includes a range of banned types. The headings of the support elements can be provided in different languages.
- Basic operations on graphs (vertex addition, vertex junction, separated sum, etc.)
- Projection operations between conceptual graphs.
- Input/output operations in BCGCT, CoGXML and CGIF formats. Graph output under linear form.
- Conceptual graph rules handling, and operations involving rules (searching for potential applications of a rule on a graph, application of a rule on a graph, graph closure by a set of rules, etc.)
- Handling of conceptual graph constraints, and graph checking operations being given a constraint.
- Access to Cogitant's functions from an application written in Java thanks to the presence of Java classes (partly) giving access to Cogitant's classes via JNI. It is also possible to access Cogitant's functions, remotely, by network, thanks to the presence of a client-server architecture based on the exchange of XML messages.
The main goals of the Cogitant library are the following ones:
- Usability. The class hierarchy provides an easy-to-use implementation of the objects of the model and enables to easily execute operations of the model. In addition, the main methods of the library check the arguments that are sent to them, what enables to correct quickly a wrong program. Finally, the use of sophisticated mechanisms such as generic classes, exceptions, namespaces or "iterators" (as in STL) eases the use of classes.
- Extensions possibilities. The class library was designed to be easily extensible, regarding the definition of new operations or the inclusion of new classes in order to represent objects of the model. The addition of new file formats has been particularly simplified.
- Performance. The operations of the model have been implemented so as to be quickly executed. In order to easily manage supports or large size graphs (or large quantities of small graphs) classes were written so as to fill a reasonable size.
- Portability. The library has been tested with all major operating systems (GNU/Linux, MS Windows 8/7/Vista, Solaris/OpenSolaris, FreeBSD, MacOS X) and compilers (GNU C++, Microsoft Visual C++, XCode, Intel C++, Cygwin G++, Mingw G++, Sun Studio Express, LLVM Clang) of the market.
- Sustainability. The current version of the library has been developed since 2000 and CoGITo date from 1994. Since 2000, numerous extensions have been included in the library, keeping the objective of providing a relatively stable API.
CoGITo (Conceptual Graphs Integrated Tools) was created by Ollivier Haemmerlé, who has defined and developed the general architecture of the library. The various PhDs who have succeeded one another in the team have corrected bugs, brought out extensions (usually corresponding to their PhD work), and managed relationships with users: Boris Carbonneill, Michel Leclère, Olivier Guinaldo.
In 1997, the library has changed its name to Cogitant v-4 (CoGITo allowing Nested Typed graphs) for the occasion of the consideration of rules (developed by Eric Salvat) and typed nested graphs with coreference links (developed by David Genest). Since then, the latter has maintained the library and carried out version 5, which is, since 2001, developed jointly by the LIRMM - GraphIK team and the LERIA - ICLN team.
Cogitant was partially financed by ANR (Saphir project, 2006-2009) and European Union (Logos project, 2006-2009).