Showing with 67 additions and 26 deletions.
  1. +67 −26 components-core/src/main/java/org/dllearner/utilities/owl/OWL2SPARULConverter.java
@@ -18,7 +18,7 @@
*/
package org.dllearner.utilities.owl;

import com.google.common.collect.Lists;
import com.google.common.collect.ComparisonChain;
import org.semanticweb.owlapi.io.*;
import org.semanticweb.owlapi.model.*;
import org.semanticweb.owlapi.rdf.model.AbstractTranslator;
@@ -27,9 +27,15 @@

import javax.annotation.Nonnull;
import java.util.Collection;
import java.util.HashSet;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
* A converter of OWL axioms or OWL ontology changes into SPARQL 1.1 Update commands.
*
* @author Lorenz Buehmann
*/
public class OWL2SPARULConverter
extends
AbstractTranslator<RDFNode, RDFResource, RDFResourceIRI, RDFLiteral> {
@@ -43,24 +49,29 @@ public OWL2SPARULConverter(OWLOntologyManager manager,
public OWL2SPARULConverter(OWLOntology ontology, boolean useStrongTyping) {
this(ontology.getOWLOntologyManager(), ontology, useStrongTyping, new OWLAnonymousIndividualsWithMultipleOccurrences());
}

public String convert(OWLOntology ontology) {
return convert(ontology, true);
}

public String convert(OWLOntology ontology, boolean add) {
return convert(ontology.getAxioms());
}

public String convert(Collection<OWLAxiom> axioms) {
return convert(axioms, true);

/**
* Converts an OWL axioms to a SPARQL 1.1 Update command.
*
* @param axiom the OWL axiom
* @param add whether the axiom has to be added('ADD') or removed('DELETE')
* @return the SPARQL 1.1 Update command
*/
public String convert(OWLAxiom axiom, boolean add) {
return convert(Collections.singleton(axiom), add);
}


/**
* Converts a set of OWL axioms to a SPARQL 1.1 Update command.
*
* @param axioms the OWL axioms
* @param add whether those axioms have to be added('ADD') or removed('DELETE')
* @return the SPARQL 1.1 Update command
*/
public String convert(Collection<OWLAxiom> axioms, boolean add) {
sb = new StringBuilder();
for (OWLAxiom ax : axioms) {
sb.append(add ? "INSERT DATA"
: "DELETE DATA");
sb.append(add ? "INSERT DATA" : "DELETE DATA");
sb.append("{");
ax.accept(this);
sb.append("}");
@@ -69,8 +80,37 @@ public String convert(Collection<OWLAxiom> axioms, boolean add) {
return sb.toString();
}

/**
* Converts an OWL ontology change to a SPARQL 1.1 Update command.
*
* @param change the OWL ontology change
* @return the SPARQL 1.1 Update command
*/
public String translate(OWLOntologyChange change) {
return translate(Collections.singletonList(change));
}

/**
* Converts a set of OWL ontology changes to a SPARQL 1.1 Update command.
*
* @param changes the ontology changes
* @return the SPARQL 1.1 Update command
*/
public String translate(List<OWLOntologyChange> changes) {
sb = new StringBuilder();

// sort by type of change
Collections.sort(changes, new Comparator<OWLOntologyChange>() {
@Override
public int compare(OWLOntologyChange o1, OWLOntologyChange o2) {
return ComparisonChain.start()
.compareTrueFirst(o1.isAddAxiom(), o2.isAddAxiom())
.compare(o1.getAxiom(), o2.getAxiom())
.result();
}
});

// convert to SPARQL 1.1 Update
for (OWLOntologyChange change : changes) {
sb.append(change instanceof RemoveAxiom ? "DELETE DATA"
: "INSERT DATA");
@@ -82,39 +122,40 @@ public String translate(List<OWLOntologyChange> changes) {
return sb.toString();
}

public String translate(OWLOntologyChange change) {
return translate(Lists.newArrayList(change));
}

@Override
protected void addTriple(RDFResource subject, RDFResourceIRI pred,
RDFNode object) {
protected void addTriple(@Nonnull RDFResource subject, @Nonnull RDFResourceIRI pred,
@Nonnull RDFNode object) {
sb.append(subject).append(" ").append(pred).append(" ").append(object);

}

@Nonnull
@Override
protected RDFResourceBlankNode getAnonymousNode(Object key) {
protected RDFResourceBlankNode getAnonymousNode(@Nonnull Object key) {
return new RDFResourceBlankNode(System.identityHashCode(key), false, false);
}

@Nonnull
@Override
protected RDFResource getAnonymousNodeForExpressions(@Nonnull Object o) {
return new RDFResourceBlankNode(false, false);
}

@Nonnull
@Override
protected RDFResourceIRI getPredicateNode(IRI iri) {
protected RDFResourceIRI getPredicateNode(@Nonnull IRI iri) {
return new RDFResourceIRI(iri);
}

@Nonnull
@Override
protected RDFResource getResourceNode(IRI iri) {
protected RDFResource getResourceNode(@Nonnull IRI iri) {
return new RDFResourceIRI(iri);
}

@Nonnull
@Override
protected RDFLiteral getLiteralNode(OWLLiteral literal) {
protected RDFLiteral getLiteralNode(@Nonnull OWLLiteral literal) {
return new RDFLiteral(literal);
}
}