Skip to content
Snippets Groups Projects
Commit c538904d authored by Daniel Berthereau's avatar Daniel Berthereau
Browse files

Filtered values in the default formats.

parent 3712cd61
No related branches found
No related tags found
No related merge requests found
......@@ -162,13 +162,20 @@ by harvesters or other tools and because the RRCHNM itself removed the [schema]
from the last site.
**NOTE**: Because of its limited support by harvesters, the format is not
implemented.
implemented in Omeka S.
### Other formats
Other formats can be added or replace an existing one via a key in the config
`['oaipmhrepository']['metadata_formats']`.
### Customization
The output can be customized via the filter `oaipmhrepository.values`, that is
triggered for each term. So it is possible to remove, to update or to append
some values, or to convert some properties from other vocabularies into the
standard formats.
Warning
-------
......
......@@ -16,7 +16,6 @@ use Omeka\Api\Representation\AbstractResourceEntityRepresentation;
use Omeka\Api\Representation\ItemRepresentation;
use Omeka\Api\Representation\ValueRepresentation;
use Omeka\Settings\SettingsInterface;
use Zend\EventManager\Event;
use Zend\EventManager\EventManagerAwareInterface;
use Zend\EventManager\EventManagerAwareTrait;
......@@ -159,18 +158,16 @@ abstract class AbstractMetadata
$term,
$values
) {
/** @var \Zend\EventManager\EventManager $eventManager */
$eventManager = $this->getEventManager();
/** @var \ArrayObject $args */
$args = $eventManager->prepareArgs([]);
$args['repository'] = self::class;
$args['resource'] = $resource;
$args = [];
$args['prefix'] = $this->getMetadataPrefix();
$args['term'] = $term;
$args['resource'] = $resource;
$args['values'] = $values;
$event = new Event('oaipmhrepository.values', $this, $args);
$eventManager->triggerEvent($event);
/** @var \ArrayObject $args */
$eventManager = $this->getEventManager();
$args = $eventManager->prepareArgs($args);
$eventManager->trigger('oaipmhrepository.values', $this, $args);
return $args['values'];
}
......
......@@ -61,6 +61,7 @@ class CdwaLite extends AbstractMetadata
* Required. Fill with 'Unknown' if omitted.
*/
$types = $item->value('dcterms:type', ['all' => true, 'default' => []]);
$types = $this->filterValues($item, 'dcterms:type', $types);
$objectWorkTypeWrap = $this->appendNewElement($descriptive, 'cdwalite:objectWorkTypeWrap');
if (empty($types)) {
$types[] = 'Unknown';
......@@ -74,6 +75,7 @@ class CdwaLite extends AbstractMetadata
* Required. Fill with 'Unknown' if omitted.
*/
$titles = $item->value('dcterms:title', ['all' => true, 'default' => []]);
$titles = $this->filterValues($item, 'dcterms:title', $titles);
$titleWrap = $this->appendNewElement($descriptive, 'cdwalite:titleWrap');
foreach ($titles as $title) {
......@@ -86,6 +88,7 @@ class CdwaLite extends AbstractMetadata
* Non-repeatable, implode for inclusion of many creators.
*/
$creators = $item->value('dcterms:creator', ['all' => true, 'default' => []]);
$creators = $this->filterValues($item, 'dcterms:creator', $creators);
$creatorTexts = [];
foreach ($creators as $creator) {
......@@ -121,6 +124,7 @@ class CdwaLite extends AbstractMetadata
* Non-repeatable, include only first date.
*/
$date = $item->value('dcterms:date');
$date = $this->filterValues($item, 'dcterms:date', $date);
$dateText = $date ? (string) $date : 'Unknown';
$this->appendNewElement($descriptive, 'cdwalite:displayCreationDate', $dateText);
......@@ -130,6 +134,7 @@ class CdwaLite extends AbstractMetadata
*/
$indexingDatesWrap = $this->appendNewElement($descriptive, 'cdwalite:indexingDatesWrap');
$dates = $item->value('dcterms:date', ['all' => true, 'default' => []]);
$dates = $this->filterValues($item, 'dcterms:date', $dates);
foreach ($dates as $date) {
$indexingDatesSet = $this->appendNewElement($indexingDatesWrap, 'cdwalite:indexingDatesSet');
$this->appendNewElement($indexingDatesSet, 'cdwalite:earliestDate', (string) $date);
......@@ -147,6 +152,7 @@ class CdwaLite extends AbstractMetadata
* Not required.
*/
$subjects = $item->value('dcterms:subject', ['all' => true, 'default' => []]);
$subjects = $this->filterValues($item, 'dcterms:subject', $subjects);
$classWrap = $this->appendNewElement($descriptive, 'cdwalite:classWrap');
foreach ($subjects as $subject) {
$this->appendNewElement($classWrap, 'cdwalite:classification', (string) $subject);
......@@ -156,6 +162,7 @@ class CdwaLite extends AbstractMetadata
* Not required.
*/
$descriptions = $item->value('dcterms:description', ['all' => true, 'default' => []]);
$descriptions = $this->filterValues($item, 'dcterms:description', $descriptions);
if (!empty($descriptions)) {
$descriptiveNoteWrap = $this->appendNewElement($descriptive, 'cdwalite:descriptiveNoteWrap');
foreach ($descriptions as $description) {
......@@ -175,6 +182,7 @@ class CdwaLite extends AbstractMetadata
* Not required.
*/
$rights = $item->value('dcterms:rights', ['all' => true, 'default' => []]);
$rights = $this->filterValues($item, 'dcterms:rights', $rights);
foreach ($rights as $right) {
$this->appendNewElement($administrative, 'cdwalite:rightsWork', (string) $right);
}
......
......@@ -66,7 +66,9 @@ class Mets extends AbstractMetadata
];
foreach ($dcElementNames as $elementName) {
$values = $item->value("dcterms:$elementName", ['all' => true, 'default' => []]);
$term = 'dcterms:' . $elementName;
$values = $item->value($term, ['all' => true, 'default' => []]);
$values = $this->filterValues($item, $term, $values);
foreach ($values as $value) {
$this->appendNewElement($dcXml, "dc:$elementName", (string) $value);
}
......@@ -111,9 +113,11 @@ class Mets extends AbstractMetadata
$fileIds[] = $fileId;
foreach ($dcElementNames as $elementName) {
$dcElements = $media->value("dcterms:$elementName", ['all' => true, 'default' => []]);
foreach ($dcElements as $value) {
$this->appendNewElement($fileDcXml, "dc:$elementName", (string) $value);
$term = 'dcterms:' . $elementName;
$values = $media->value($term, ['all' => true, 'default' => []]);
$values = $this->filterValues($media, $term, $values);
foreach ($values as $value) {
$this->appendNewElement($fileDcXml, 'dc:' . $elementName, (string) $value);
}
}
}
......
......@@ -49,12 +49,14 @@ class Mods extends AbstractMetadata
. ' ' . self::METADATA_SCHEMA);
$titles = $item->value('dcterms:title', ['all' => true, 'default' => []]);
$titles = $this->filterValues($item, 'dcterms:title', $titles);
foreach ($titles as $title) {
$titleInfo = $this->appendNewElement($mods, 'titleInfo');
$this->appendNewElement($titleInfo, 'title', (string) $title);
}
$creators = $item->value('dcterms:creator', ['all' => true, 'default' => []]);
$creators = $this->filterValues($item, 'dcterms:creator', $creators);
foreach ($creators as $creator) {
$name = $this->appendNewElement($mods, 'name');
$this->appendNewElement($name, 'namePart', (string) $creator);
......@@ -64,6 +66,7 @@ class Mods extends AbstractMetadata
}
$contributors = $item->value('dcterms:contributor', ['all' => true, 'default' => []]);
$contributors = $this->filterValues($item, 'dcterms:contributor', $contributors);
foreach ($contributors as $contributor) {
$name = $this->appendNewElement($mods, 'name');
$this->appendNewElement($name, 'namePart', (string) $contributor);
......@@ -73,23 +76,27 @@ class Mods extends AbstractMetadata
}
$subjects = $item->value('dcterms:subject', ['all' => true, 'default' => []]);
$subjects = $this->filterValues($item, 'dcterms:subject', $subjects);
foreach ($subjects as $subject) {
$subjectTag = $this->appendNewElement($mods, 'subject');
$this->appendNewElement($subjectTag, 'topic', (string) $subject);
}
$descriptions = $item->value('dcterms:description', ['all' => true, 'default' => []]);
$descriptions = $this->filterValues($item, 'dcterms:description', $descriptions);
foreach ($descriptions as $description) {
$this->appendNewElement($mods, 'note', (string) $description);
}
$formats = $item->value('dcterms:format', ['all' => true, 'default' => []]);
$formats = $this->filterValues($item, 'dcterms:format', $formats);
foreach ($formats as $format) {
$physicalDescription = $this->appendNewElement($mods, 'physicalDescription');
$this->appendNewElement($physicalDescription, 'form', (string) $format);
}
$languages = $item->value('dcterms:language', ['all' => true, 'default' => []]);
$languages = $this->filterValues($item, 'dcterms:language', $languages);
foreach ($languages as $language) {
$languageElement = $this->appendNewElement($mods, 'language');
$languageTerm = $this->appendNewElement($languageElement, 'languageTerm', (string) $language);
......@@ -97,16 +104,19 @@ class Mods extends AbstractMetadata
}
$rights = $item->value('dcterms:rights', ['all' => true, 'default' => []]);
$rights = $this->filterValues($item, 'dcterms:rights', $rights);
foreach ($rights as $right) {
$this->appendNewElement($mods, 'accessCondition', (string) $right);
}
$types = $item->value('dcterms:type', ['all' => true, 'default' => []]);
$types = $this->filterValues($item, 'dcterms:type', $types);
foreach ($types as $type) {
$this->appendNewElement($mods, 'genre', (string) $type);
}
$identifiers = $item->value('dcterms:identifier', ['all' => true, 'default' => []]);
$identifiers = $this->filterValues($item, 'dcterms:identifier', $identifiers);
foreach ($identifiers as $identifier) {
$text = (string) $identifier;
$idElement = $this->appendNewElement($mods, 'identifier', $text);
......@@ -118,11 +128,13 @@ class Mods extends AbstractMetadata
}
$sources = $item->value('dcterms:source', ['all' => true, 'default' => []]);
$sources = $this->filterValues($item, 'dcterms:source', $sources);
foreach ($sources as $source) {
$this->_addRelatedItem($mods, (string) $source, true);
}
$relations = $item->value('dcterms:relation', ['all' => true, 'default' => []]);
$relations = $this->filterValues($item, 'dcterms:relation', $relations);
foreach ($relations as $relation) {
$this->_addRelatedItem($mods, (string) $relation);
}
......@@ -146,7 +158,9 @@ class Mods extends AbstractMetadata
$url->setAttribute('usage', 'primary display');
$publishers = $item->value('dcterms:publisher', ['all' => true, 'default' => []]);
$publishers = $this->filterValues($item, 'dcterms:publishers', $publishers);
$dates = $item->value('dcterms:date', ['all' => true, 'default' => []]);
$dates = $this->filterValues($item, 'dcterms:date', $dates);
// Empty originInfo sections are illegal
if (count($publishers) + count($dates) > 0) {
......
......@@ -63,7 +63,9 @@ class OaiDc extends AbstractMetadata
* compliant per-node declarations.
*/
foreach ($dcElementNames as $elementName) {
$values = $item->value("dcterms:$elementName", ['all' => true, 'default' => []]);
$term = 'dcterms:' . $elementName;
$values = $item->value($term, ['all' => true, 'default' => []]);
$values = $this->filterValues($item, $term, $values);
foreach ($values as $value) {
$this->appendNewElement($oai_dc, "dc:$elementName", (string) $value);
}
......
......@@ -19,6 +19,7 @@ class CdwaLiteFactory implements FactoryInterface
$oaiSetManager = $services->get('OaiPmhRepository\OaiPmh\OaiSetManager');
$oaiSet = $oaiSetManager->get($settings->get('oaipmhrepository_oai_set_format', 'base'));
$metadataFormat = new CdwaLite();
$metadataFormat->setEventManager($services->get('EventManager'));
$metadataFormat->setSettings($settings);
$metadataFormat->setOaiSet($oaiSet);
$isGlobalRepository = !$services->get('ControllerPluginManager')
......
......@@ -19,6 +19,7 @@ class MetsFactory implements FactoryInterface
$oaiSetManager = $services->get('OaiPmhRepository\OaiPmh\OaiSetManager');
$oaiSet = $oaiSetManager->get($settings->get('oaipmhrepository_oai_set_format', 'base'));
$metadataFormat = new Mets();
$metadataFormat->setEventManager($services->get('EventManager'));
$metadataFormat->setSettings($settings);
$metadataFormat->setOaiSet($oaiSet);
$isGlobalRepository = !$services->get('ControllerPluginManager')
......
......@@ -19,6 +19,7 @@ class ModsFactory implements FactoryInterface
$oaiSetManager = $services->get('OaiPmhRepository\OaiPmh\OaiSetManager');
$oaiSet = $oaiSetManager->get($settings->get('oaipmhrepository_oai_set_format', 'base'));
$metadataFormat = new Mods();
$metadataFormat->setEventManager($services->get('EventManager'));
$metadataFormat->setSettings($settings);
$metadataFormat->setOaiSet($oaiSet);
$isGlobalRepository = !$services->get('ControllerPluginManager')
......
......@@ -19,6 +19,7 @@ class OaiDcFactory implements FactoryInterface
$oaiSetManager = $services->get('OaiPmhRepository\OaiPmh\OaiSetManager');
$oaiSet = $oaiSetManager->get($settings->get('oaipmhrepository_oai_set_format', 'base'));
$metadataFormat = new OaiDc();
$metadataFormat->setEventManager($services->get('EventManager'));
$metadataFormat->setSettings($settings);
$metadataFormat->setOaiSet($oaiSet);
$isGlobalRepository = !$services->get('ControllerPluginManager')
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment