2020-04-27 14:52:31 +02:00
|
|
|
|
2021-01-27 15:43:08 +01:00
|
|
|
package eu.dnetlib.dhp.transformation.xslt;
|
2019-10-10 11:33:51 +02:00
|
|
|
|
2021-02-25 12:28:56 +01:00
|
|
|
import static eu.dnetlib.dhp.transformation.xslt.XSLTTransformationFunction.QNAME_BASE_URI;
|
2021-02-24 15:07:59 +01:00
|
|
|
|
|
|
|
import java.io.Serializable;
|
|
|
|
|
2021-02-25 12:28:56 +01:00
|
|
|
import eu.dnetlib.dhp.common.vocabulary.VocabularyGroup;
|
|
|
|
import eu.dnetlib.dhp.schema.oaf.Qualifier;
|
|
|
|
import net.sf.saxon.s9api.*;
|
2019-10-24 11:36:59 +02:00
|
|
|
|
|
|
|
public class Cleaner implements ExtensionFunction, Serializable {
|
|
|
|
|
2021-01-27 15:43:08 +01:00
|
|
|
private final VocabularyGroup vocabularies;
|
2020-04-27 14:52:31 +02:00
|
|
|
|
2021-01-27 15:43:08 +01:00
|
|
|
public Cleaner(final VocabularyGroup vocabularies) {
|
2020-04-27 14:52:31 +02:00
|
|
|
this.vocabularies = vocabularies;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public QName getName() {
|
2021-02-24 15:07:59 +01:00
|
|
|
return new QName(QNAME_BASE_URI + "/clean", "clean");
|
2020-04-27 14:52:31 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public SequenceType getResultType() {
|
|
|
|
return SequenceType.makeSequenceType(ItemType.STRING, OccurrenceIndicator.ONE_OR_MORE);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public SequenceType[] getArgumentTypes() {
|
|
|
|
return new SequenceType[] {
|
2021-02-12 11:48:11 +01:00
|
|
|
SequenceType.makeSequenceType(ItemType.STRING, OccurrenceIndicator.ZERO_OR_MORE),
|
2020-04-27 14:52:31 +02:00
|
|
|
SequenceType.makeSequenceType(ItemType.STRING, OccurrenceIndicator.ONE)
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public XdmValue call(XdmValue[] xdmValues) throws SaxonApiException {
|
2021-02-12 11:48:11 +01:00
|
|
|
XdmValue r = xdmValues[0];
|
2021-02-12 16:34:52 +01:00
|
|
|
if (r.size() == 0) {
|
2021-02-12 11:48:11 +01:00
|
|
|
return new XdmAtomicValue("");
|
|
|
|
}
|
2020-04-27 14:52:31 +02:00
|
|
|
final String currentValue = xdmValues[0].itemAt(0).getStringValue();
|
|
|
|
final String vocabularyName = xdmValues[1].itemAt(0).getStringValue();
|
2021-01-27 15:43:08 +01:00
|
|
|
Qualifier cleanedValue = vocabularies.getSynonymAsQualifier(vocabularyName, currentValue);
|
2020-04-27 14:52:31 +02:00
|
|
|
|
|
|
|
return new XdmAtomicValue(
|
2021-01-28 09:51:17 +01:00
|
|
|
cleanedValue != null ? cleanedValue.getClassid() : currentValue);
|
2020-04-27 14:52:31 +02:00
|
|
|
}
|
2019-10-10 11:33:51 +02:00
|
|
|
}
|