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);

Reply via email to