diff --git a/pom.xml b/pom.xml
index 22721b9..01d6273 100644
--- a/pom.xml
+++ b/pom.xml
@@ -453,7 +453,7 @@
net.sourceforge.owlapi
owlapi-distribution
- 5.1.1
+ 5.5.1
diff --git a/src/main/java/de/uni_stuttgart/vis/vowl/owl2vowl/converter/AbstractConverter.java b/src/main/java/de/uni_stuttgart/vis/vowl/owl2vowl/converter/AbstractConverter.java
index 590e79b..999aa2c 100644
--- a/src/main/java/de/uni_stuttgart/vis/vowl/owl2vowl/converter/AbstractConverter.java
+++ b/src/main/java/de/uni_stuttgart/vis/vowl/owl2vowl/converter/AbstractConverter.java
@@ -343,6 +343,7 @@ private void setCorrectType(Collection entities) {
}
private void postParsing(OWLOntology loadedOntology, VowlData vowlData, OWLOntologyManager manager) {
+ vowlData.fixProperties();
setCorrectType(vowlData.getEntityMap().values());
parseAnnotations(vowlData, manager);
fillDomainRanges(vowlData);
diff --git a/src/main/java/de/uni_stuttgart/vis/vowl/owl2vowl/export/JsonGeneratorVisitorImpl.java b/src/main/java/de/uni_stuttgart/vis/vowl/owl2vowl/export/JsonGeneratorVisitorImpl.java
index 7695217..1118621 100644
--- a/src/main/java/de/uni_stuttgart/vis/vowl/owl2vowl/export/JsonGeneratorVisitorImpl.java
+++ b/src/main/java/de/uni_stuttgart/vis/vowl/owl2vowl/export/JsonGeneratorVisitorImpl.java
@@ -90,6 +90,7 @@ public void visit(VowlThing vowlThing) {
Map attributes = new HashMap<>();
addCommonFields(vowlThing, object, attributes);
+ attributes.remove("baseIri");
attributes.put("iri", VowlThing.GENERIC_THING_IRI.toString());
_class.add(object);
@@ -171,14 +172,17 @@ public void visit(VowlDatatype vowlDatatype) {
AbstractDatatype reference = vowlData.getDatatypeForIri(((DatatypeReference) vowlDatatype).getReferencedIri());
Map object = new HashMap<>();
Map attributes = new HashMap<>();
+ String iri = reference.getIri().toString();
object.put("id", vowlData.getIdForEntity(vowlDatatype));
object.put("type", reference.getType());
attributes.put("id", vowlData.getIdForEntity(vowlDatatype));
attributes.put("label", getLabelsFromAnnotations(reference.getAnnotations().getLabels()));
- attributes.put("iri", reference.getIri().toString());
- attributes.put("baseIri", reference.getBaseIri().toString());
+ attributes.put("iri", iri);
+
+ if(!iri.equals(VowlLiteral.LITERAL_IRI))
+ attributes.put("baseIri", reference.getBaseIri().toString());
_class.add(object);
classAttribute.add(attributes);
diff --git a/src/main/java/de/uni_stuttgart/vis/vowl/owl2vowl/export/types/JsonGenerator.java b/src/main/java/de/uni_stuttgart/vis/vowl/owl2vowl/export/types/JsonGenerator.java
index bc20202..804cb15 100644
--- a/src/main/java/de/uni_stuttgart/vis/vowl/owl2vowl/export/types/JsonGenerator.java
+++ b/src/main/java/de/uni_stuttgart/vis/vowl/owl2vowl/export/types/JsonGenerator.java
@@ -20,6 +20,7 @@
import java.util.*;
import java.util.stream.Collectors;
+import java.util.stream.Stream;
/**
*
@@ -72,6 +73,8 @@ public void export(Exporter exporter) throws Exception {
}
protected void processHeader(VowlData vowlData) {
+ Set ignoreOther = Stream.of("title", "versionInfo", "creator")
+ .collect(Collectors.toCollection(HashSet::new));
OntologyInformation ontologyInformation = vowlData.getOntologyInformation();
header.put("languages", vowlData.getLanguages());
header.put("baseIris", vowlData.getBaseIris().stream().map(IRI::toString).collect(Collectors.toSet()));
@@ -83,14 +86,17 @@ protected void processHeader(VowlData vowlData) {
header.put("description", JsonGeneratorVisitorImpl.getLabelsFromAnnotations(ontologyInformation.getAnnotations().getDescription()));
header.put("labels", JsonGeneratorVisitorImpl.getLabelsFromAnnotations(ontologyInformation.getAnnotations().getLabels()));
header.put("comments", JsonGeneratorVisitorImpl.getLabelsFromAnnotations(ontologyInformation.getAnnotations().getComments()));
- header.put("other", ontologyInformation.getAnnotations().getIdentifierToAnnotation());
+ header.put("other", ontologyInformation.getAnnotations().getIdentifierToAnnotation().entrySet().stream()
+ .filter(x -> !ignoreOther.contains(x.getKey()))
+ .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)));
Map map = vowlData.getPrefixMap();
// adding prefix list to that thing;
for (Map.Entry entry : map.entrySet()) {
- String pr=entry.getKey();
- pr= pr.substring(0, pr.length() - 1);
- prefixList.put(pr,entry.getValue());
+ String pr=entry.getKey();
+ pr= pr.substring(0, pr.length() - 1);
+ if(!pr.isEmpty())
+ prefixList.put(pr,entry.getValue());
}
}
diff --git a/src/main/java/de/uni_stuttgart/vis/vowl/owl2vowl/model/data/VowlData.java b/src/main/java/de/uni_stuttgart/vis/vowl/owl2vowl/model/data/VowlData.java
index b02e366..6413201 100644
--- a/src/main/java/de/uni_stuttgart/vis/vowl/owl2vowl/model/data/VowlData.java
+++ b/src/main/java/de/uni_stuttgart/vis/vowl/owl2vowl/model/data/VowlData.java
@@ -365,6 +365,37 @@ public IRI generate() {
return IRI.create(iriPrefix + generations++);
}
}
+
+ /**
+ * owlapi creates both ObjectProperty and DatatypeProperty from Properties
+ * with only type DatatypeProperty and InverseFunctionalProperty.
+ * The resulting file is different depending on the type that is
+ * created first (not deterministic).
+ * Check if an ObjectProperty has no range and if a DatatypeProperty with the same iri
+ * exists, reinsert it to force it into the EntityMap.
+ */
+ public void fixProperties() {
+ Iterator> it = objectPropertyMap.entrySet().iterator();
+ while (it.hasNext()) {
+ Entry pair = it.next();
+ VowlObjectProperty P = pair.getValue();
+ Set R = P.getRanges();
+ VowlDatatypeProperty D = null;
+ if(R.size() == 0) {
+ try {
+ D = getDatatypePropertyForIri(pair.getKey());
+ if(D != null) {
+ for(IRI domain : P.getDomains())
+ D.addDomain(domain);
+ addDatatypeProperty(D);
+ it.remove();
+ }
+ } catch (Exception e) {
+
+ }
+ }
+ }
+ }
}
class AllEntityMap extends HashMap {
diff --git a/src/main/java/de/uni_stuttgart/vis/vowl/owl2vowl/parser/vowl/AnnotationParser.java b/src/main/java/de/uni_stuttgart/vis/vowl/owl2vowl/parser/vowl/AnnotationParser.java
index 5f14be8..dc34660 100644
--- a/src/main/java/de/uni_stuttgart/vis/vowl/owl2vowl/parser/vowl/AnnotationParser.java
+++ b/src/main/java/de/uni_stuttgart/vis/vowl/owl2vowl/parser/vowl/AnnotationParser.java
@@ -4,6 +4,7 @@
import de.uni_stuttgart.vis.vowl.owl2vowl.model.AbstractVowlObject;
import de.uni_stuttgart.vis.vowl.owl2vowl.model.annotation.Annotation;
import de.uni_stuttgart.vis.vowl.owl2vowl.model.data.VowlData;
+import de.uni_stuttgart.vis.vowl.owl2vowl.model.entities.nodes.datatypes.VowlLiteral;
import de.uni_stuttgart.vis.vowl.owl2vowl.parser.helper.IriFormatText;
import org.semanticweb.owlapi.model.OWLOntologyManager;
@@ -30,9 +31,12 @@ public void parse(AbstractVowlObject vowlObject) {
protected void parseForEntity(AbstractVowlObject entity) {
entity.accept(new AnnotationVisitor(vowlData, manager));
- String iriLabel = IriFormatText.cutQuote(IriFormatText.extractNameFromIRI(entity.getIri().toString()));
- Annotation iriAnnotationLabel = new Annotation("label", iriLabel);
- iriAnnotationLabel.setLanguage(Vowl_Lang.LANG_DEFAULT);
- entity.getAnnotations().addLabel(iriAnnotationLabel);
+ String iri = entity.getIri().toString();
+ if(!iri.equals(VowlLiteral.LITERAL_IRI)) {
+ String iriLabel = IriFormatText.cutQuote(IriFormatText.extractNameFromIRI(iri));
+ Annotation iriAnnotationLabel = new Annotation("label", iriLabel);
+ iriAnnotationLabel.setLanguage(Vowl_Lang.LANG_DEFAULT);
+ entity.getAnnotations().addLabel(iriAnnotationLabel);
+ }
}
}
diff --git a/src/main/java/de/uni_stuttgart/vis/vowl/owl2vowl/parser/vowl/property/DomainRangeFiller.java b/src/main/java/de/uni_stuttgart/vis/vowl/owl2vowl/parser/vowl/property/DomainRangeFiller.java
index 2a3d58b..fe870e3 100644
--- a/src/main/java/de/uni_stuttgart/vis/vowl/owl2vowl/parser/vowl/property/DomainRangeFiller.java
+++ b/src/main/java/de/uni_stuttgart/vis/vowl/owl2vowl/parser/vowl/property/DomainRangeFiller.java
@@ -149,7 +149,7 @@ public void visit(TypeOfProperty typeOfProperty) {
private void classBehaviour(AbstractProperty property) {
if (property.getDomains().isEmpty() && property.getRanges().isEmpty()) {
- if (!property.getReferencedIris().isEmpty()) {
+ if (!property.getReferencedIris().isEmpty() && property.getInverse() == null) {
property.setExportToJson(false);
return;
}
diff --git a/src/main/java/de/uni_stuttgart/vis/vowl/owl2vowl/parser/vowl/property/ObjectPropertyVisitor.java b/src/main/java/de/uni_stuttgart/vis/vowl/owl2vowl/parser/vowl/property/ObjectPropertyVisitor.java
index 620ec09..3485f29 100644
--- a/src/main/java/de/uni_stuttgart/vis/vowl/owl2vowl/parser/vowl/property/ObjectPropertyVisitor.java
+++ b/src/main/java/de/uni_stuttgart/vis/vowl/owl2vowl/parser/vowl/property/ObjectPropertyVisitor.java
@@ -113,7 +113,9 @@ public void visit(OWLInverseObjectPropertiesAxiom axiom) {
OWLObjectProperty baseProperty = secondProperty.asOWLObjectProperty();
AbstractProperty inverseVowlProp = vowlData.getPropertyForIri(inverseProperty.getIRI());
+ AbstractProperty baseVowlProp = vowlData.getPropertyForIri(baseProperty.getIRI());
inverseVowlProp.addInverse(baseProperty.getIRI());
+ baseVowlProp.addInverse(inverseProperty.getIRI());
}
@Override