function &process(&$input)
{
$nullVar = null;
// Identify the genre of the target record and
// instantiate the target description.
$publicationType = $input->getStatement('[@publication-type]');
switch ($publicationType) {
case NLM30_PUBLICATION_TYPE_JOURNAL:
case NLM30_PUBLICATION_TYPE_CONFPROC:
$outputSchemaName = 'lib.pkp.plugins.metadata.openurl10.schema.Openurl10JournalSchema';
break;
case NLM30_PUBLICATION_TYPE_BOOK:
$outputSchemaName = 'lib.pkp.plugins.metadata.openurl10.schema.Openurl10BookSchema';
break;
case NLM30_PUBLICATION_TYPE_THESIS:
$outputSchemaName = 'lib.pkp.plugins.metadata.openurl10.schema.Openurl10DissertationSchema';
break;
default:
// Unsupported type
return $nullVar;
}
// Create the target description
$output = new MetadataDescription($outputSchemaName, $input->getAssocType());
// Transform authors
import('lib.pkp.plugins.metadata.nlm30.filter.Nlm30NameSchemaPersonStringFilter');
$personStringFilter = new Nlm30NameSchemaPersonStringFilter();
$authors =& $input->getStatement('person-group[@person-group-type="author"]');
if (is_array($authors) && count($authors)) {
$aulast = $authors[0]->hasStatement('prefix') ? $authors[0]->getStatement('prefix') . ' ' : '';
$aulast .= $authors[0]->getStatement('surname');
if (!empty($aulast)) {
$success = $output->addStatement('aulast', $aulast);
assert((bool) $success);
}
$givenNames = $authors[0]->getStatement('given-names');
if (is_array($givenNames) && count($givenNames)) {
$aufirst = implode(' ', $givenNames);
if (!empty($aufirst)) {
$success = $output->addStatement('aufirst', $aufirst);
assert((bool) $success);
}
$initials = array();
foreach ($givenNames as $givenName) {
$initials[] = substr($givenName, 0, 1);
}
$auinit1 = array_shift($initials);
if (!empty($auinit1)) {
$success = $output->addStatement('auinit1', $auinit1);
assert((bool) $success);
}
$auinitm = implode('', $initials);
if (!empty($auinitm)) {
$success = $output->addStatement('auinitm', $auinitm);
assert((bool) $success);
}
$auinit = $auinit1 . $auinitm;
if (!empty($auinit)) {
$success = $output->addStatement('auinit', $auinit);
assert((bool) $success);
}
}
$ausuffix = $authors[0]->getStatement('suffix');
if (!empty($ausuffix)) {
$success = $output->addStatement('ausuffix', $ausuffix);
assert((bool) $success);
}
foreach ($authors as $author) {
if ($author == PERSON_STRING_FILTER_ETAL) {
$au = $author;
} else {
$au = $personStringFilter->execute($author);
}
$success = $output->addStatement('au', $au);
assert((bool) $success);
unset($au);
}
}
// Genre: Guesswork
if (is_a($output->getMetadataSchema(), 'Openurl10JournalBookBaseSchema')) {
switch ($publicationType) {
case NLM30_PUBLICATION_TYPE_JOURNAL:
$genre = $input->hasProperty('article-title') ? OPENURL10_GENRE_ARTICLE : OPENURL10_GENRE_JOURNAL;
break;
case NLM30_PUBLICATION_TYPE_CONFPROC:
$genre = $input->hasProperty('article-title') ? OPENURL10_GENRE_PROCEEDING : OPENURL10_GENRE_CONFERENCE;
break;
case NLM30_PUBLICATION_TYPE_BOOK:
$genre = $input->hasProperty('article-title') ? OPENURL10_GENRE_BOOKITEM : OPENURL10_GENRE_BOOK;
break;
}
assert(!empty($genre));
$success = $output->addStatement('genre', $genre);
assert((bool) $success);
}
// Map remaining properties (NLM => OpenURL)
$propertyMap =& $this->nlmOpenurl10Mapping($publicationType, $output->getMetadataSchema());
// Transfer mapped properties with default locale
foreach ($propertyMap as $nlm30Property => $openurl10Property) {
if ($input->hasStatement($nlm30Property)) {
$success = $output->addStatement($openurl10Property, $input->getStatement($nlm30Property));
assert((bool) $success);
}
}
return $output;
}