
edu.stanford.protege.webprotege.owlapi.StringFormatterLiteralRendererImpl Maven / Gradle / Ivy
The newest version!
package edu.stanford.protege.webprotege.owlapi;
import edu.stanford.protege.webprotege.renderer.LiteralLexicalFormTransformer;
import edu.stanford.protege.webprotege.renderer.LiteralRenderer;
import org.apache.commons.lang.StringUtils;
import org.semanticweb.owlapi.model.OWLLiteral;
import org.semanticweb.owlapi.util.ShortFormProvider;
import org.semanticweb.owlapi.vocab.OWL2Datatype;
import javax.annotation.Nonnull;
import javax.inject.Inject;
import static com.google.common.base.Preconditions.checkNotNull;
/**
* Matthew Horridge
* Stanford Center for Biomedical Informatics Research
* 2018-12-02
*/
public class StringFormatterLiteralRendererImpl implements LiteralRenderer {
public static final int MAX_LITERAL_LENGTH = 50;
@Nonnull
private final ShortFormProvider shortFormProvider;
@Nonnull
private final LiteralLexicalFormTransformer literalLexicalFormTransformer;
@Inject
public StringFormatterLiteralRendererImpl(@Nonnull ShortFormProvider shortFormProvider,
@Nonnull LiteralLexicalFormTransformer literalLexicalFormTransformer) {
this.shortFormProvider = checkNotNull(shortFormProvider);
this.literalLexicalFormTransformer = checkNotNull(literalLexicalFormTransformer);
}
@Nonnull
@Override
public String getLiteralRendering(@Nonnull OWLLiteral literal) {
String rendering;
if(isRenderableAsQuotedString(literal)) {
rendering = "\"" + getLexicalForm(literal) + "\"";
}
else if(isRenderableAsNumber(literal)) {
rendering = getLexicalForm(literal);
}
else if(isRendererableAsDateTime(literal)) {
rendering = getLexicalForm(literal);
}
else {
rendering = getLexicalForm(literal) + "^^" + shortFormProvider.getShortForm(literal.getDatatype());
}
int startIndex = rendering.indexOf("\"" );
int endIndex = rendering.lastIndexOf("\"" );
if (startIndex == -1 || endIndex == -1) {
return rendering;
}
if(endIndex - startIndex < 10) {
return rendering;
}
if (rendering.length() < MAX_LITERAL_LENGTH) {
return rendering;
}
String withoutQuotes = rendering.substring(startIndex + 1, endIndex);
String abbreviatedLexicalValue = StringUtils.abbreviate(withoutQuotes,
MAX_LITERAL_LENGTH);
String prefix = rendering.substring(0, startIndex + 1);
String suffix = rendering.substring(endIndex);
return prefix + abbreviatedLexicalValue + suffix;
}
@Nonnull
private String getLexicalForm(OWLLiteral literal) {
return literalLexicalFormTransformer.transformLexicalForm(literal.getLiteral());
}
private static boolean isRenderableAsQuotedString(@Nonnull OWLLiteral literal) {
return literal.isRDFPlainLiteral() || literal.getDatatype().isString();
}
private static boolean isRenderableAsNumber(@Nonnull OWLLiteral literal) {
var datatypeIRI = literal.getDatatype().getIRI();
if(OWL2Datatype.isBuiltIn(datatypeIRI)) {
var datatype = OWL2Datatype.getDatatype(datatypeIRI);
return datatype.isNumeric();
}
return false;
}
private static boolean isRendererableAsDateTime(@Nonnull OWLLiteral literal) {
var datatypeIri = literal.getDatatype().getIRI();
return datatypeIri.equals(OWL2Datatype.XSD_DATE_TIME.getIRI())
|| datatypeIri.equals(OWL2Datatype.XSD_DATE_TIME_STAMP.getIRI());
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy