001package org.dllearner.utilities.owl;
002
003import org.semanticweb.owlapi.apibinding.OWLManager;
004import org.semanticweb.owlapi.io.OWLObjectRenderer;
005import org.semanticweb.owlapi.model.IRI;
006import org.semanticweb.owlapi.model.OWLObject;
007import org.semanticweb.owlapi.model.OWLOntology;
008import org.semanticweb.owlapi.model.OWLOntologyCreationException;
009import org.semanticweb.owlapi.owlxml.renderer.OWLXMLObjectRenderer;
010import org.semanticweb.owlapi.owlxml.renderer.OWLXMLWriter;
011import org.semanticweb.owlapi.util.ShortFormProvider;
012
013import javax.annotation.Nonnull;
014import java.io.StringWriter;
015
016/**
017 * An OWL/XML syntax renderer that implements the interface {@link OWLObjectRenderer}, thus, can be used as
018 * syntax in {@link org.dllearner.core.StringRenderer} helper class. Note, a short form is not implemented yet, thus,
019 * full IRIs are used and the syntax is quite verbose.
020 *
021 * @author Lorenz Buehmann
022 */
023public class OWLXMLRenderer implements OWLObjectRenderer {
024
025    private OWLXMLObjectRenderer delegate;
026    private StringWriter sw;
027
028    public OWLXMLRenderer() {
029        try {
030            OWLOntology ont = OWLManager.createOWLOntologyManager().createOntology(IRI.create("http://dl-learner.org/ontology/"));
031            sw = new StringWriter();
032            OWLXMLWriter oxw = new OWLXMLWriter(sw, ont);
033            delegate = new OWLXMLObjectRenderer(oxw);
034        } catch (OWLOntologyCreationException e) {
035            e.printStackTrace();
036        }
037    }
038
039    @Override
040    public void setShortFormProvider(@Nonnull ShortFormProvider shortFormProvider) {
041    }
042
043    @Nonnull
044    @Override
045    public String render(@Nonnull OWLObject object) {
046        sw.getBuffer().setLength(0); // clear the StringWriter
047        object.accept(delegate);
048        return sw.toString();
049    }
050}