# Mapping Standards
Mapping Standards are declarations of standards of metadata. Once they are available and activated in your repository, you can map the metadata of your collections to them.
## Structure
A Mapping Standard has the following attributes.
### Name
String $name
The name of the Mapping Standard.
### Metadata
Array or false $metadata
A list of metadata, terms or attributes that this mapping have. These are the element you will be able to map your Collection's Metadata.
Each metadatum has the following attributes:
* slug - The metadatum name, that refers to the name of the attribute in the origin vocabulary or ontology (e.g. title)
* label - The human readable name
* URI - The URI of this term/attribute in the origin Ontoloy/Vocabulary
* metadata_type - The prefered type for the metadatum
Array of:
```
['slug'] => [
'URI' => 'http://...',
'label' => 'Label',
'metadata_type' => 'date',
]
```
### Allow additional custom metadata
Boolean $allow_extra_metadata
Boolen indicating wether this mapping allows additional custom metadata to be added.
### Context URL / Vocab URL
String $context_url
The URL of the Ontology or vocabulary. For example `http://schema.org` or `http://dublincore.org/documents/dcmi-terms/`
### Type
String $type
The Class of the ontology that this mapping refers to. For example `CreativeWork`, which is a class of Schema.org, if applied
### Header
String $header
The header to be append to API answer, like for Dublin Core, if we need to add RDF to xml header when using Dublin Core as mapper, so:
```
public $header = '';
```
### Prefix
String $prefix
The optional prefix for the key labels, like ```dc:``` for Dublin Core in XML exposing.
### Registering a new mapper
For register a new mapper, the action need to be added to `tainacan-register-exposer-mappers` hook, like:
```
function myNewMapper($exposers) {
$exposers->register_exposer_mapper('Tainacan\Exposers\Mappers\NewMapper');
}
add_action('tainacan-register-exposer-mappers', 'myNewMapper');
```
## Examples
```
namespace Tainacan\Exposers\Mappers;
/**
* Support Dublin Core Mapping
* http://purl.org/dc/elements/1.1/
*
*/
class Dublin_Core extends Mapper {
public $slug = 'dublin-core';
public $name = 'Dublin Core';
public $allow_extra_metadata = true;
public $context_url = 'http://dublincore.org/documents/dcmi-terms/';
public $header = '';
public $prefix = 'dc:';
public $metadata = [
'contributor' => [
'URI' => 'http://purl.org/dc/elements/1.1/contributor',
'label' => 'Contributor'
],
'coverage' => [
'URI' => 'http://purl.org/dc/elements/1.1/coverage',
'label' => 'Coverage'
],
'creator' => [
'URI' => 'http://purl.org/dc/elements/1.1/creator',
'label' => 'Creator'
],
...
```
```
namespace Tainacan\Exposers\Mappers;
class CreativeWorks extends Mapper {
public $name = 'Schema.org Creative Works';
public $slug = 'creative-works';
public $metadata = [
'name' => [
'label': 'Name',
'URI': 'http://schema.org/name'
],
'alternativeHeadline' => [
'label': 'Alternative Headline',
'URI': 'http://schema.org/alternativeHeadline'
],
... And so on...
],
public $allow_extra_fields = false;
public $context_url = 'http://schema.org';
public $type = 'CreativeWork';
}
```