This is an automated email from the ASF dual-hosted git repository.
arnebdt pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git
The following commit(s) were added to refs/heads/main by this push:
new 04f377d8ae GH-2783: [ontapi] do not allow OntDisjoints with no items
04f377d8ae is described below
commit 04f377d8aefc0cb8faeb62022d402ef17a6e6e96
Author: sszuev <[email protected]>
AuthorDate: Sun Oct 20 13:39:54 2024 +0300
GH-2783: [ontapi] do not allow OntDisjoints with no items
---
.../apache/jena/ontapi/impl/OntGraphModelImpl.java | 13 ++++-
.../ontapi/impl/factories/OWL2ObjectFactories.java | 6 +--
.../jena/ontapi/impl/factories/OntDisjoints.java | 2 +-
.../org/apache/jena/ontapi/OntModelMiscTest.java | 55 ++++++++++++++++++++++
.../apache/jena/ontapi/OntModelOWL1SpecsTest.java | 16 ++++---
.../apache/jena/ontapi/OntModelOWL2ELSpecTest.java | 8 +++-
.../apache/jena/ontapi/OntModelOWL2QLSpecTest.java | 4 +-
.../apache/jena/ontapi/OntModelOWL2RLSpecTest.java | 4 +-
8 files changed, 93 insertions(+), 15 deletions(-)
diff --git
a/jena-ontapi/src/main/java/org/apache/jena/ontapi/impl/OntGraphModelImpl.java
b/jena-ontapi/src/main/java/org/apache/jena/ontapi/impl/OntGraphModelImpl.java
index 588fa3e26b..ad7bae3c94 100644
---
a/jena-ontapi/src/main/java/org/apache/jena/ontapi/impl/OntGraphModelImpl.java
+++
b/jena-ontapi/src/main/java/org/apache/jena/ontapi/impl/OntGraphModelImpl.java
@@ -965,8 +965,10 @@ public class OntGraphModelImpl extends ModelCom implements
OntModel, OntEnhGraph
@Override
public OntDisjoint.Classes createDisjointClasses(Collection<OntClass>
classes) {
+ if (classes.isEmpty()) {
+ throw new IllegalArgumentException("Empty list is specified");
+ }
checkType(OntDisjoint.Classes.class);
- checkType(OntClass.IntersectionOf.class);
return checkCreate(model ->
OntDisjointImpl.createDisjointClasses(model,
classes.stream()), OntDisjoint.Classes.class
);
@@ -974,6 +976,9 @@ public class OntGraphModelImpl extends ModelCom implements
OntModel, OntEnhGraph
@Override
public OntDisjoint.Individuals
createDifferentIndividuals(Collection<OntIndividual> individuals) {
+ if (individuals.isEmpty()) {
+ throw new IllegalArgumentException("Empty list is specified");
+ }
checkType(OntDisjoint.Individuals.class);
return checkCreate(model ->
OntDisjointImpl.createDifferentIndividuals(model,
individuals.stream()), OntDisjoint.Individuals.class
@@ -982,6 +987,9 @@ public class OntGraphModelImpl extends ModelCom implements
OntModel, OntEnhGraph
@Override
public OntDisjoint.ObjectProperties
createDisjointObjectProperties(Collection<OntObjectProperty> properties) {
+ if (properties.isEmpty()) {
+ throw new IllegalArgumentException("Empty list is specified");
+ }
checkType(OntDisjoint.ObjectProperties.class);
return checkCreate(model ->
OntDisjointImpl.createDisjointObjectProperties(model,
properties.stream()), OntDisjoint.ObjectProperties.class
@@ -990,6 +998,9 @@ public class OntGraphModelImpl extends ModelCom implements
OntModel, OntEnhGraph
@Override
public OntDisjoint.DataProperties
createDisjointDataProperties(Collection<OntDataProperty> properties) {
+ if (properties.isEmpty()) {
+ throw new IllegalArgumentException("Empty list is specified");
+ }
checkType(OntDisjoint.DataProperties.class);
return checkCreate(model ->
OntDisjointImpl.createDisjointDataProperties(model,
properties.stream()), OntDisjoint.DataProperties.class
diff --git
a/jena-ontapi/src/main/java/org/apache/jena/ontapi/impl/factories/OWL2ObjectFactories.java
b/jena-ontapi/src/main/java/org/apache/jena/ontapi/impl/factories/OWL2ObjectFactories.java
index d79b8ea209..fe4daf9772 100644
---
a/jena-ontapi/src/main/java/org/apache/jena/ontapi/impl/factories/OWL2ObjectFactories.java
+++
b/jena-ontapi/src/main/java/org/apache/jena/ontapi/impl/factories/OWL2ObjectFactories.java
@@ -785,16 +785,16 @@ public final class OWL2ObjectFactories {
OntFacetRestriction.LangRange.class
);
- public static final EnhNodeFactory CLASSES_DISJOINT =
OntDisjoints.createDisjointClassesFactory(0);
+ public static final EnhNodeFactory CLASSES_DISJOINT =
OntDisjoints.createDisjointClassesFactory(1);
public static final EnhNodeFactory EL_CLASSES_DISJOINT =
OntDisjoints.createDisjointClassesFactory(2);
public static final EnhNodeFactory QL_RL_CLASSES_DISJOINT =
OntDisjoints.createQLRLDisjointClassesFactory();
public static final Function<OntConfig, EnhNodeFactory>
DIFFERENT_INDIVIDUALS_DISJOINT =
OntDisjoints::createDLFullDifferentIndividualsFactory;
public static final EnhNodeFactory EL_QL_RL_DIFFERENT_INDIVIDUALS_DISJOINT
=
OntDisjoints.createELQLRLDifferentIndividualsFactory();
- public static final EnhNodeFactory OBJECT_PROPERTIES_DISJOINT =
OntDisjoints.createDisjointObjectPropertiesFactory(0);
+ public static final EnhNodeFactory OBJECT_PROPERTIES_DISJOINT =
OntDisjoints.createDisjointObjectPropertiesFactory(1);
public static final EnhNodeFactory QL_RL_OBJECT_PROPERTIES_DISJOINT =
OntDisjoints.createDisjointObjectPropertiesFactory(2);
- public static final EnhNodeFactory DATA_PROPERTIES_DISJOINT =
OntDisjoints.createDisjointDataPropertiesFactory(0);
+ public static final EnhNodeFactory DATA_PROPERTIES_DISJOINT =
OntDisjoints.createDisjointDataPropertiesFactory(1);
public static final EnhNodeFactory QL_RL_DATA_PROPERTIES_DISJOINT =
OntDisjoints.createDisjointDataPropertiesFactory(2);
public static final EnhNodeFactory ANY_PROPERTIES_DISJOINT =
OntEnhNodeFactories.createFrom(
diff --git
a/jena-ontapi/src/main/java/org/apache/jena/ontapi/impl/factories/OntDisjoints.java
b/jena-ontapi/src/main/java/org/apache/jena/ontapi/impl/factories/OntDisjoints.java
index 8b6561a3be..421c74541b 100644
---
a/jena-ontapi/src/main/java/org/apache/jena/ontapi/impl/factories/OntDisjoints.java
+++
b/jena-ontapi/src/main/java/org/apache/jena/ontapi/impl/factories/OntDisjoints.java
@@ -68,7 +68,7 @@ final class OntDisjoints {
OWL2.AllDifferent,
OntIndividual.class,
it -> true,
- 0,
+ 1,
predicates
);
}
diff --git
a/jena-ontapi/src/test/java/org/apache/jena/ontapi/OntModelMiscTest.java
b/jena-ontapi/src/test/java/org/apache/jena/ontapi/OntModelMiscTest.java
index fe11343c04..72cb0acf88 100644
--- a/jena-ontapi/src/test/java/org/apache/jena/ontapi/OntModelMiscTest.java
+++ b/jena-ontapi/src/test/java/org/apache/jena/ontapi/OntModelMiscTest.java
@@ -22,10 +22,14 @@ import org.apache.jena.graph.Graph;
import org.apache.jena.graph.Triple;
import org.apache.jena.ontapi.impl.GraphListenerBase;
import org.apache.jena.ontapi.model.OntClass;
+import org.apache.jena.ontapi.model.OntDisjoint;
import org.apache.jena.ontapi.model.OntModel;
+import org.apache.jena.ontapi.utils.OntModels;
import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.ModelFactory;
import org.apache.jena.rdf.model.Resource;
+import org.apache.jena.shared.PrefixMapping;
+import org.apache.jena.vocabulary.OWL;
import org.apache.jena.vocabulary.OWL2;
import org.apache.jena.vocabulary.RDF;
import org.junit.jupiter.api.Assertions;
@@ -99,4 +103,55 @@ public class OntModelMiscTest {
Assertions.assertTrue(d.contains(d.createResource("http://ex2/B"),
RDF.type, OWL2.Class));
}
+ @Test
+ public void testOntDisjointProperties() {
+ var m =
ModelFactory.createDefaultModel().setNsPrefixes(PrefixMapping.Standard);
+ var p1 = m.createResource("p1", OWL.DatatypeProperty);
+ var p2 = m.createResource("p2", OWL.DatatypeProperty);
+ var d = m.createResource().addProperty(RDF.type,
OWL.AllDisjointProperties);
+ var list = m.createList(p1, p2);
+ d.addProperty(OWL.members, list);
+
+ var ont = OntModelFactory.createModel(m.getGraph());
+ var actual1 =
ont.ontObjects(OntDisjoint.DataProperties.class).toList();
+ Assertions.assertEquals(1, actual1.size());
+
+ var actual2 =
ont.ontObjects(OntDisjoint.ObjectProperties.class).toList();
+ Assertions.assertEquals(0, actual2.size());
+
+ var actual3 = ont.ontObjects(OntDisjoint.class).toList();
+ Assertions.assertEquals(1, actual3.size());
+ Assertions.assertEquals(OntDisjoint.DataProperties.class,
OntModels.getOntType(actual3.get(0)));
+
+ Assertions.assertThrows(IllegalArgumentException.class,
ont::createDisjointObjectProperties);
+ Assertions.assertThrows(IllegalArgumentException.class,
ont::createDisjointDataProperties);
+ }
+
+ @Test
+ public void testOntDisjointClasses() {
+ var m =
ModelFactory.createDefaultModel().setNsPrefixes(PrefixMapping.Standard);
+ var d = m.createResource().addProperty(RDF.type,
OWL.AllDisjointClasses);
+ var list = m.createList();
+ d.addProperty(OWL.members, list);
+
+ var ont = OntModelFactory.createModel(m.getGraph());
+ var actual1 = ont.ontObjects(OntDisjoint.Classes.class).toList();
+ Assertions.assertEquals(0, actual1.size());
+
+ Assertions.assertThrows(IllegalArgumentException.class,
ont::createDisjointClasses);
+ }
+
+ @Test
+ public void testOntDisjointIndividuals() {
+ var m =
ModelFactory.createDefaultModel().setNsPrefixes(PrefixMapping.Standard);
+ var d = m.createResource().addProperty(RDF.type, OWL.AllDifferent);
+ var list = m.createList();
+ d.addProperty(OWL.members, list);
+
+ var ont = OntModelFactory.createModel(m.getGraph());
+ var actual1 = ont.ontObjects(OntDisjoint.Individuals.class).toList();
+ Assertions.assertEquals(0, actual1.size());
+
+ Assertions.assertThrows(IllegalArgumentException.class,
ont::createDifferentIndividuals);
+ }
}
diff --git
a/jena-ontapi/src/test/java/org/apache/jena/ontapi/OntModelOWL1SpecsTest.java
b/jena-ontapi/src/test/java/org/apache/jena/ontapi/OntModelOWL1SpecsTest.java
index c2ad938e31..eec304b72f 100644
---
a/jena-ontapi/src/test/java/org/apache/jena/ontapi/OntModelOWL1SpecsTest.java
+++
b/jena-ontapi/src/test/java/org/apache/jena/ontapi/OntModelOWL1SpecsTest.java
@@ -189,21 +189,24 @@ public class OntModelOWL1SpecsTest {
OntModel m = OntModelFactory.createModel(spec.inst);
OntIndividual i1 = m.getOWLThing().createIndividual("A");
OntIndividual i2 = m.getOWLThing().createIndividual("B");
+ OntClass c1 = m.createOntClass("C");
+ OntDataProperty p1 = m.createDataProperty("p1");
+ OntObjectProperty p2 = m.createObjectProperty("p2");
OntDisjoint.Individuals d = m.createDifferentIndividuals(i1, i2);
Assertions.assertEquals(
List.of("A", "B"),
d.members().map(Resource::getURI).sorted().collect(Collectors.toList())
);
- Assertions.assertEquals(8, m.statements().count());
+ Assertions.assertEquals(11, m.statements().count());
Assertions.assertEquals(1,
m.ontObjects(OntDisjoint.Individuals.class).count());
Assertions.assertEquals(1, m.ontObjects(OntDisjoint.class).count());
- Assertions.assertThrows(OntJenaException.Unsupported.class,
m::createDisjointClasses);
- Assertions.assertThrows(OntJenaException.Unsupported.class,
m::createDisjointDataProperties);
- Assertions.assertThrows(OntJenaException.Unsupported.class,
m::createDisjointObjectProperties);
+ Assertions.assertThrows(OntJenaException.Unsupported.class, () ->
m.createDisjointClasses(c1));
+ Assertions.assertThrows(OntJenaException.Unsupported.class, () ->
m.createDisjointDataProperties(p1));
+ Assertions.assertThrows(OntJenaException.Unsupported.class, () ->
m.createDisjointObjectProperties(p2));
- Assertions.assertEquals(8, m.statements().count());
+ Assertions.assertEquals(11, m.statements().count());
Assertions.assertEquals(1,
m.ontObjects(OntDisjoint.Individuals.class).count());
Assertions.assertEquals(1, m.ontObjects(OntDisjoint.class).count());
}
@@ -244,6 +247,7 @@ public class OntModelOWL1SpecsTest {
@ParameterizedTest
@EnumSource(names = {
"OWL1_MEM",
+ "OWL1_DL_MEM",
"OWL1_LITE_MEM",
})
public void testDisabledFeaturesOWL1(TestSpec spec) {
@@ -259,7 +263,7 @@ public class OntModelOWL1SpecsTest {
);
d.createDataProperty("dp1").addEquivalentProperty(d.createDataProperty("dp2"));
- OntModel m = OntModelFactory.createModel(d.getGraph(),
OntSpecification.OWL1_DL_MEM);
+ OntModel m = OntModelFactory.createModel(d.getGraph(), spec.inst);
OntClass.Named x = m.getOntClass("X");
OntClass.Named q = m.createOntClass("Q");
OntDataProperty dp1 = m.createDataProperty("dp1");
diff --git
a/jena-ontapi/src/test/java/org/apache/jena/ontapi/OntModelOWL2ELSpecTest.java
b/jena-ontapi/src/test/java/org/apache/jena/ontapi/OntModelOWL2ELSpecTest.java
index d7edeaa0a4..4948dc388b 100644
---
a/jena-ontapi/src/test/java/org/apache/jena/ontapi/OntModelOWL2ELSpecTest.java
+++
b/jena-ontapi/src/test/java/org/apache/jena/ontapi/OntModelOWL2ELSpecTest.java
@@ -316,7 +316,9 @@ public class OntModelOWL2ELSpecTest {
public void testDifferentIndividuals(TestSpec spec) {
OntModel data = OntModelFactory.createModel();
data.createDifferentIndividuals(data.createIndividual("a"));
- data.createDifferentIndividuals();
+ data.createResource()
+ .addProperty(RDF.type, OWL2.AllDifferent)
+ .addProperty(OWL2.members, data.createList());
data.createDifferentIndividuals(data.createIndividual("b"),
data.createIndividual("c"));
OntModel m = OntModelFactory.createModel(data.getGraph(), spec.inst);
@@ -348,7 +350,9 @@ public class OntModelOWL2ELSpecTest {
public void testDisjointClasses(TestSpec spec) {
OntModel data = OntModelFactory.createModel();
data.createDisjointClasses(data.createOntClass("a"));
- data.createDisjointClasses();
+ data.createResource()
+ .addProperty(RDF.type, OWL2.AllDisjointClasses)
+ .addProperty(OWL2.members, data.createList());
data.createDisjointClasses(data.createOntClass("b"),
data.createOntClass("c"));
OntModel m = OntModelFactory.createModel(data.getGraph(), spec.inst);
diff --git
a/jena-ontapi/src/test/java/org/apache/jena/ontapi/OntModelOWL2QLSpecTest.java
b/jena-ontapi/src/test/java/org/apache/jena/ontapi/OntModelOWL2QLSpecTest.java
index 5001096a61..e15b612634 100644
---
a/jena-ontapi/src/test/java/org/apache/jena/ontapi/OntModelOWL2QLSpecTest.java
+++
b/jena-ontapi/src/test/java/org/apache/jena/ontapi/OntModelOWL2QLSpecTest.java
@@ -441,7 +441,9 @@ public class OntModelOWL2QLSpecTest {
public void testDisjointDataProperties(TestSpec spec) {
OntModel data = OntModelFactory.createModel();
data.createDisjointDataProperties(data.createDataProperty("a"));
- data.createDisjointDataProperties();
+ data.createResource()
+ .addProperty(RDF.type, OWL2.AllDisjointProperties)
+ .addProperty(OWL2.members, data.createList());
data.createDisjointDataProperties(data.createDataProperty("b"),
data.createDataProperty("c"));
OntModel m = OntModelFactory.createModel(data.getGraph(), spec.inst);
diff --git
a/jena-ontapi/src/test/java/org/apache/jena/ontapi/OntModelOWL2RLSpecTest.java
b/jena-ontapi/src/test/java/org/apache/jena/ontapi/OntModelOWL2RLSpecTest.java
index 04ff59dcdb..1f9a1584df 100644
---
a/jena-ontapi/src/test/java/org/apache/jena/ontapi/OntModelOWL2RLSpecTest.java
+++
b/jena-ontapi/src/test/java/org/apache/jena/ontapi/OntModelOWL2RLSpecTest.java
@@ -644,7 +644,9 @@ public class OntModelOWL2RLSpecTest {
public void testDisjointObjectProperties(TestSpec spec) {
OntModel data = OntModelFactory.createModel();
data.createDisjointObjectProperties(data.createObjectProperty("a"));
- data.createDisjointObjectProperties();
+ data.createResource()
+ .addProperty(RDF.type, OWL2.AllDisjointProperties)
+ .addProperty(OWL2.members, data.createList());
data.createDisjointObjectProperties(data.createObjectProperty("b"),
data.createObjectProperty("c"));
OntModel m = OntModelFactory.createModel(data.getGraph(), spec.inst);