# Plugin naming convention

## Plugin identifier

Each extraction plugin has a unique identifier. The identifier consists of three fields. These three fields combined
form the plugin name.

The three fields of a plugin identifier are: *domain*, *category*, and *name*. The fields are described in more detail
below.

**domain**
The domain name of the organisation where the plugin is created. If an organisation has multiple domain names, the
shortest name is preferred over the longer domain names. Examples: `nfi.nl`, `politie.nl`, `fiod.nl`, `hansken.org`.

**category**
A type of action that the plugin performs. The category is a free text field, but the following table gives some
recommendations.

| Category     | Description                                                                                                                                     |
|--------------|-------------------------------------------------------------------------------------------------------------------------------------------------|
| ``extract``  | The plugin parses a clear data structure                                                                                                        |
| ``carve``    | The plugin parses data fragments to reassemble traces in the absence of filesystem metadata                                                     |
| ``classify`` | The plugin categorizes a plugin based on its content, e.g. detecting money on traces of type `picture`                                          |
| ``digest``   | The plugin digests data to compute a hash                                                                                                       |
| ``ocr``      | The plugin applies ocr (optical character recognition) to read text on `pictures` or scanned documents                                          |
| ``match``    | The plugin matches a trace against a database, and reports whether there was hit or miss, e.g. matching a trace to a well known files database  |

**name**
The name of the plugin, or in the classic sense, a description detailing what the plugin processes. Note that the name
can contain (forward) slashes.

## Examples

The following table shows a list of plugin identifiers. The last column of the table shows the derived full plugin name.
The derived full plugin name will be shown in Hansken.

| Domain          | Category     | Name            | Derived plugin name                | Explanation                                                                                                     |
|-----------------|--------------|-----------------|------------------------------------|-------------------------------------------------------------------------------------------------------------|
| ``hansken.org`` | ``extract``  | ``archive``     | ``hansken.org/extract/archive``    | A plugin created by the Hansken development team that extracts traces from an arbitrary ``archive`` format  |
| ``nfi.nl``      | ``extract``  | ``archive/zip`` | ``nfi.nl/extract/archive/zip``     | A plugin created by an NFI team that extracts traces from a specific ``archive`` format: ``zip``            |
| ``politie.nl``  | ``extract``  | ``archive/zip`` | ``politie.nl/extract/archive/zip`` | The same as the previous example, but now the plugin is created by a different organisation: ``politie.nl`` |
| ``hansken.org`` | ``carve``    | ``archive/zip`` | ``hansken.org/carve/archive/zip``  | A plugin that carves data to detect a specific ``archive`` format: ``zip``                                  |
| ``hansken.org`` | ``digest``   | ``sha256``      | ``hansken.org/digest/sha256``      | A plugin that digests data to compute a ``sha256`` hash                                                     |
| ``hansken.org`` | ``ocr``      | ``tesseract``   | ``hansken.org/ocr/tesseract``      | A plugin that performs ocr using ``tesseract``                                                              |
