This is an automated email from the ASF dual-hosted git repository. andy 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 554837afb5 GH-2674: changes in OntModelControls + change some profile checking - remove OntModelControls#ALLOW_ANONYMOUS_INDIVIDUALS & USE_OWL_INVERSE_OBJECT_PROPERTY_FEATURE (now control via OntPersonality) - rename USE_OWL_PROPERTY_INVERSE_OF_FEATURE -> USE_OWL_INVERSE_OBJECT_PROPERTIES_FEATURE - QL OntPersonality - remove OntIndividual.Anonymous - fix tests accordingly 554837afb5 is described below commit 554837afb5ac303cddb7141177d39440ba795fc1 Author: sszuev <sss.z...@gmail.com> AuthorDate: Sun Sep 1 14:33:20 2024 +0300 GH-2674: changes in OntModelControls + change some profile checking - remove OntModelControls#ALLOW_ANONYMOUS_INDIVIDUALS & USE_OWL_INVERSE_OBJECT_PROPERTY_FEATURE (now control via OntPersonality) - rename USE_OWL_PROPERTY_INVERSE_OF_FEATURE -> USE_OWL_INVERSE_OBJECT_PROPERTIES_FEATURE - QL OntPersonality - remove OntIndividual.Anonymous - fix tests accordingly --- .../org/apache/jena/ontapi/OntModelControls.java | 28 +++++-------- .../org/apache/jena/ontapi/common/OntConfigs.java | 28 ++++--------- .../jena/ontapi/common/OntPersonalities.java | 3 +- .../apache/jena/ontapi/impl/OntGraphModelImpl.java | 2 +- .../ontapi/impl/factories/OWL1ObjectFactories.java | 2 +- .../ontapi/impl/factories/OWL2ObjectFactories.java | 3 +- .../jena/ontapi/impl/factories/OntProperties.java | 4 +- .../jena/ontapi/impl/objects/OntClassImpl.java | 2 +- .../ontapi/impl/objects/OntObjectPropertyImpl.java | 11 ++--- .../apache/jena/ontapi/OntModelOWL2ELSpecTest.java | 9 +++-- .../apache/jena/ontapi/OntModelOWLSpecsTest.java | 47 ++++++++++++++++------ .../org/apache/jena/ontapi/OntPropertyTest.java | 2 +- 12 files changed, 68 insertions(+), 73 deletions(-) diff --git a/jena-ontapi/src/main/java/org/apache/jena/ontapi/OntModelControls.java b/jena-ontapi/src/main/java/org/apache/jena/ontapi/OntModelControls.java index 6f41894258..eef8b0befa 100644 --- a/jena-ontapi/src/main/java/org/apache/jena/ontapi/OntModelControls.java +++ b/jena-ontapi/src/main/java/org/apache/jena/ontapi/OntModelControls.java @@ -89,11 +89,6 @@ public enum OntModelControls { * This option is for compatibility with legacy {@code org.apache.jena.ontology.OntModel}. */ ALLOW_GENERIC_CLASS_EXPRESSIONS, - /** - * Controls anonymous individuals. - * Some specifications (e.g., OWL2 EL) do not allow anonymous individuals. - */ - ALLOW_ANONYMOUS_INDIVIDUALS, /** * Used while {@link OntModel#individuals()}. * If {@code true}, the class type is checked only by declaration @@ -122,7 +117,7 @@ public enum OntModelControls { /** * Controls {@link OWL2#hasKey owl:hasKey} functionality. * If disabled, - * {@link OntClass#hasKeys() OntClass#hasKeys()} will return empty {@code Stream}, + * {@link OntClass#hasKeys() OntClass#hasKeys()} will return an empty {@code Stream}, * modification operations, such as * {@link OntClass#addHasKey(OntRelationalProperty...) OntClass#addHasKey(OntRelationalProperty...)}, * will throw {@link OntJenaException.Unsupported OntJenaException.Unsupported} exception. @@ -132,7 +127,7 @@ public enum OntModelControls { * Controls {@link OWL2#disjointUnionOf owl:disjointUnionOf} functionality. * If disabled, * {@link OntClass.Named#disjointUnions() OntClass.Named#disjointUnions()} - * will return empty {@code Stream}, modification operations, such as + * will return an empty {@code Stream}, modification operations, such as * {@link OntClass.Named#addDisjointUnion(OntClass...) OntClass.Named#addDisjointUnion(OntClass...)}, * will throw {@link OntJenaException.Unsupported OntJenaException.Unsupported} exception. */ @@ -142,7 +137,7 @@ public enum OntModelControls { * Controls {@link OWL2#disjointWith owl:disjointWith} functionality. * If disabled, * {@link OntClass#disjoints() OntClass#disjoints()} - * will return empty {@code Stream}, modification operations, such as + * will return an empty {@code Stream}, modification operations, such as * {@link OntClass#addDisjointClass(OntClass) OntClass#addDisjointClass(OntClass)}, * will throw {@link OntJenaException.Unsupported OntJenaException.Unsupported} exception. */ @@ -151,7 +146,7 @@ public enum OntModelControls { * Controls {@link OWL2#equivalentClass owl:equivalentClass} functionality. * If disabled, * {@link OntClass#equivalentClasses() OntClass#equivalentClasses()} - * will return empty {@code Stream}, modification operations, such as + * will return an empty {@code Stream}, modification operations, such as * {@link OntClass#addEquivalentClass(OntClass) OntClass#addEquivalentClass(OntClass)}, * will throw {@link OntJenaException.Unsupported OntJenaException.Unsupported} exception. */ @@ -160,7 +155,7 @@ public enum OntModelControls { * Controls {@link OWL2#propertyDisjointWith owl:propertyDisjointWith} functionality. * If disabled, * {@link OntRelationalProperty#disjointProperties() OntRelationalProperty#disjointProperties()} - * will return empty {@code Stream}, modification operations, such as + * will return an empty {@code Stream}, modification operations, such as * {@link OntObjectProperty#addDisjointProperty(OntObjectProperty) OntObjectProperty#addDisjointProperty(OntObjectProperty)}, * will throw {@link OntJenaException.Unsupported OntJenaException.Unsupported} exception. */ @@ -169,7 +164,7 @@ public enum OntModelControls { * Controls {@link OWL2#equivalentProperty owl:equivalentProperty} functionality. * If disabled, * {@link OntRelationalProperty#equivalentProperties() OntRelationalProperty#equivalentProperties()} - * will return empty {@code Stream}, modification operations, such as + * will return an empty {@code Stream}, modification operations, such as * {@link OntObjectProperty#addEquivalentProperty(OntObjectProperty) OntObjectProperty#addEquivalentProperty(OntObjectProperty)}, * will throw {@link OntJenaException.Unsupported OntJenaException.Unsupported} exception. */ @@ -247,19 +242,14 @@ public enum OntModelControls { */ USE_OWL_PROPERTY_IRREFLEXIVE_FEATURE, /** - * Controls {@link OWL2#inverseOf owl:inverseOf} functionality. + * Controls {@link OWL2#inverseOf owl:inverseOf} functionality (InverseObjectProperty axiom). * If disabled, * {@link OntObjectProperty#inverseProperties() OntObjectProperty#inverseProperties()} - * will return {@code false}, modification operations, such as + * will return an empty {@code Stream}, modification operations, such as * {@link OntObjectProperty#addInverseProperty(OntObjectProperty) OntObjectProperty#addInverseProperty(OntObjectProperty)}, * will throw {@link OntJenaException.Unsupported OntJenaException.Unsupported} exception. */ - USE_OWL_PROPERTY_INVERSE_OF_FEATURE, - /** - * If this key is set to {@code true}, an anonymous inverse object property type is enabled (OWL2 feature). - * That is {@code _:x owl:inverseOf PN}, where {@code _:x} is a b-node and {@code PN} is a named object property. - */ - USE_OWL_INVERSE_OBJECT_PROPERTY_FEATURE, + USE_OWL_INVERSE_OBJECT_PROPERTIES_FEATURE, /** * Controls {@link OWL2#propertyChainAxiom owl:propertyChainAxiom} functionality. * If disabled, diff --git a/jena-ontapi/src/main/java/org/apache/jena/ontapi/common/OntConfigs.java b/jena-ontapi/src/main/java/org/apache/jena/ontapi/common/OntConfigs.java index adb4244c1d..fe9951a0dd 100644 --- a/jena-ontapi/src/main/java/org/apache/jena/ontapi/common/OntConfigs.java +++ b/jena-ontapi/src/main/java/org/apache/jena/ontapi/common/OntConfigs.java @@ -35,7 +35,6 @@ public class OntConfigs { .setFalse(OntModelControls.USE_OWL1_DISTINCT_MEMBERS_PREDICATE_FEATURE) .setFalse(OntModelControls.ALLOW_NAMED_CLASS_EXPRESSIONS) .setFalse(OntModelControls.ALLOW_GENERIC_CLASS_EXPRESSIONS) - .setTrue(OntModelControls.ALLOW_ANONYMOUS_INDIVIDUALS) .setFalse(OntModelControls.USE_LEGACY_COMPATIBLE_NAMED_CLASS_FACTORY) .setTrue(OntModelControls.USE_OWL2_NAMED_INDIVIDUAL_DECLARATION_FEATURE) .setTrue(OntModelControls.USE_OWL2_CLASS_HAS_KEY_FEATURE) @@ -52,8 +51,7 @@ public class OntConfigs { .setTrue(OntModelControls.USE_OWL_PROPERTY_TRANSITIVE_FEATURE) .setTrue(OntModelControls.USE_OWL_PROPERTY_REFLEXIVE_FEATURE) .setTrue(OntModelControls.USE_OWL_PROPERTY_IRREFLEXIVE_FEATURE) - .setTrue(OntModelControls.USE_OWL_PROPERTY_INVERSE_OF_FEATURE) - .setTrue(OntModelControls.USE_OWL_INVERSE_OBJECT_PROPERTY_FEATURE) + .setTrue(OntModelControls.USE_OWL_INVERSE_OBJECT_PROPERTIES_FEATURE) .setTrue(OntModelControls.USE_OWL_PROPERTY_CHAIN_AXIOM_FEATURE) .setTrue(OntModelControls.USE_OWL_INDIVIDUAL_SAME_AS_FEATURE) .setTrue(OntModelControls.USE_OWL_INDIVIDUAL_DIFFERENT_FROM_FEATURE) @@ -69,7 +67,6 @@ public class OntConfigs { .setFalse(OntModelControls.USE_OWL1_DISTINCT_MEMBERS_PREDICATE_FEATURE) .setFalse(OntModelControls.ALLOW_NAMED_CLASS_EXPRESSIONS) .setFalse(OntModelControls.ALLOW_GENERIC_CLASS_EXPRESSIONS) - .setFalse(OntModelControls.ALLOW_ANONYMOUS_INDIVIDUALS) .setFalse(OntModelControls.USE_LEGACY_COMPATIBLE_NAMED_CLASS_FACTORY) .setTrue(OntModelControls.USE_OWL2_NAMED_INDIVIDUAL_DECLARATION_FEATURE) .setTrue(OntModelControls.USE_OWL2_CLASS_HAS_KEY_FEATURE) @@ -86,8 +83,7 @@ public class OntConfigs { .setTrue(OntModelControls.USE_OWL_PROPERTY_TRANSITIVE_FEATURE) .setTrue(OntModelControls.USE_OWL_PROPERTY_REFLEXIVE_FEATURE) .setFalse(OntModelControls.USE_OWL_PROPERTY_IRREFLEXIVE_FEATURE) - .setTrue(OntModelControls.USE_OWL_PROPERTY_INVERSE_OF_FEATURE) - .setFalse(OntModelControls.USE_OWL_INVERSE_OBJECT_PROPERTY_FEATURE) + .setFalse(OntModelControls.USE_OWL_INVERSE_OBJECT_PROPERTIES_FEATURE) .setTrue(OntModelControls.USE_OWL_PROPERTY_CHAIN_AXIOM_FEATURE) .setTrue(OntModelControls.USE_OWL_INDIVIDUAL_SAME_AS_FEATURE) .setTrue(OntModelControls.USE_OWL_INDIVIDUAL_DIFFERENT_FROM_FEATURE) @@ -103,7 +99,6 @@ public class OntConfigs { .setFalse(OntModelControls.USE_OWL1_DISTINCT_MEMBERS_PREDICATE_FEATURE) .setFalse(OntModelControls.ALLOW_NAMED_CLASS_EXPRESSIONS) .setFalse(OntModelControls.ALLOW_GENERIC_CLASS_EXPRESSIONS) - .setFalse(OntModelControls.ALLOW_ANONYMOUS_INDIVIDUALS) .setFalse(OntModelControls.USE_LEGACY_COMPATIBLE_NAMED_CLASS_FACTORY) .setTrue(OntModelControls.USE_OWL2_NAMED_INDIVIDUAL_DECLARATION_FEATURE) .setFalse(OntModelControls.USE_OWL2_CLASS_HAS_KEY_FEATURE) @@ -120,8 +115,7 @@ public class OntConfigs { .setFalse(OntModelControls.USE_OWL_PROPERTY_TRANSITIVE_FEATURE) .setTrue(OntModelControls.USE_OWL_PROPERTY_REFLEXIVE_FEATURE) .setTrue(OntModelControls.USE_OWL_PROPERTY_IRREFLEXIVE_FEATURE) - .setTrue(OntModelControls.USE_OWL_PROPERTY_INVERSE_OF_FEATURE) - .setTrue(OntModelControls.USE_OWL_INVERSE_OBJECT_PROPERTY_FEATURE) + .setTrue(OntModelControls.USE_OWL_INVERSE_OBJECT_PROPERTIES_FEATURE) .setFalse(OntModelControls.USE_OWL_PROPERTY_CHAIN_AXIOM_FEATURE) .setFalse(OntModelControls.USE_OWL_INDIVIDUAL_SAME_AS_FEATURE) .setTrue(OntModelControls.USE_OWL_INDIVIDUAL_DIFFERENT_FROM_FEATURE) @@ -137,7 +131,6 @@ public class OntConfigs { .setFalse(OntModelControls.USE_OWL1_DISTINCT_MEMBERS_PREDICATE_FEATURE) .setFalse(OntModelControls.ALLOW_NAMED_CLASS_EXPRESSIONS) .setFalse(OntModelControls.ALLOW_GENERIC_CLASS_EXPRESSIONS) - .setTrue(OntModelControls.ALLOW_ANONYMOUS_INDIVIDUALS) .setFalse(OntModelControls.USE_LEGACY_COMPATIBLE_NAMED_CLASS_FACTORY) .setTrue(OntModelControls.USE_OWL2_NAMED_INDIVIDUAL_DECLARATION_FEATURE) .setTrue(OntModelControls.USE_OWL2_CLASS_HAS_KEY_FEATURE) @@ -154,8 +147,7 @@ public class OntConfigs { .setTrue(OntModelControls.USE_OWL_PROPERTY_TRANSITIVE_FEATURE) .setTrue(OntModelControls.USE_OWL_PROPERTY_REFLEXIVE_FEATURE) .setTrue(OntModelControls.USE_OWL_PROPERTY_IRREFLEXIVE_FEATURE) - .setTrue(OntModelControls.USE_OWL_PROPERTY_INVERSE_OF_FEATURE) - .setTrue(OntModelControls.USE_OWL_INVERSE_OBJECT_PROPERTY_FEATURE) + .setTrue(OntModelControls.USE_OWL_INVERSE_OBJECT_PROPERTIES_FEATURE) .setTrue(OntModelControls.USE_OWL_PROPERTY_CHAIN_AXIOM_FEATURE) .setTrue(OntModelControls.USE_OWL_INDIVIDUAL_SAME_AS_FEATURE) .setTrue(OntModelControls.USE_OWL_INDIVIDUAL_DIFFERENT_FROM_FEATURE) @@ -171,7 +163,6 @@ public class OntConfigs { .setTrue(OntModelControls.USE_OWL1_DISTINCT_MEMBERS_PREDICATE_FEATURE) .setTrue(OntModelControls.ALLOW_NAMED_CLASS_EXPRESSIONS) .setTrue(OntModelControls.ALLOW_GENERIC_CLASS_EXPRESSIONS) - .setTrue(OntModelControls.ALLOW_ANONYMOUS_INDIVIDUALS) .setTrue(OntModelControls.USE_LEGACY_COMPATIBLE_NAMED_CLASS_FACTORY) .setFalse(OntModelControls.USE_OWL2_NAMED_INDIVIDUAL_DECLARATION_FEATURE) .setFalse(OntModelControls.USE_OWL2_CLASS_HAS_KEY_FEATURE) @@ -188,8 +179,7 @@ public class OntConfigs { .setTrue(OntModelControls.USE_OWL_PROPERTY_TRANSITIVE_FEATURE) .setFalse(OntModelControls.USE_OWL_PROPERTY_REFLEXIVE_FEATURE) .setFalse(OntModelControls.USE_OWL_PROPERTY_IRREFLEXIVE_FEATURE) - .setTrue(OntModelControls.USE_OWL_PROPERTY_INVERSE_OF_FEATURE) - .setFalse(OntModelControls.USE_OWL_INVERSE_OBJECT_PROPERTY_FEATURE) + .setTrue(OntModelControls.USE_OWL_INVERSE_OBJECT_PROPERTIES_FEATURE) .setFalse(OntModelControls.USE_OWL_PROPERTY_CHAIN_AXIOM_FEATURE) .setTrue(OntModelControls.USE_OWL_INDIVIDUAL_SAME_AS_FEATURE) .setTrue(OntModelControls.USE_OWL_INDIVIDUAL_DIFFERENT_FROM_FEATURE) @@ -207,7 +197,6 @@ public class OntConfigs { .setTrue(OntModelControls.USE_OWL1_DISTINCT_MEMBERS_PREDICATE_FEATURE) .setTrue(OntModelControls.ALLOW_NAMED_CLASS_EXPRESSIONS) .setTrue(OntModelControls.ALLOW_GENERIC_CLASS_EXPRESSIONS) - .setTrue(OntModelControls.ALLOW_ANONYMOUS_INDIVIDUALS) .setTrue(OntModelControls.USE_LEGACY_COMPATIBLE_NAMED_CLASS_FACTORY) .setFalse(OntModelControls.USE_OWL2_NAMED_INDIVIDUAL_DECLARATION_FEATURE) .setFalse(OntModelControls.USE_OWL2_CLASS_HAS_KEY_FEATURE) @@ -224,8 +213,7 @@ public class OntConfigs { .setTrue(OntModelControls.USE_OWL_PROPERTY_TRANSITIVE_FEATURE) .setFalse(OntModelControls.USE_OWL_PROPERTY_REFLEXIVE_FEATURE) .setFalse(OntModelControls.USE_OWL_PROPERTY_IRREFLEXIVE_FEATURE) - .setTrue(OntModelControls.USE_OWL_PROPERTY_INVERSE_OF_FEATURE) - .setFalse(OntModelControls.USE_OWL_INVERSE_OBJECT_PROPERTY_FEATURE) + .setTrue(OntModelControls.USE_OWL_INVERSE_OBJECT_PROPERTIES_FEATURE) .setFalse(OntModelControls.USE_OWL_PROPERTY_CHAIN_AXIOM_FEATURE) .setFalse(OntModelControls.USE_OWL_INDIVIDUAL_SAME_AS_FEATURE) .setTrue(OntModelControls.USE_OWL_INDIVIDUAL_DIFFERENT_FROM_FEATURE) @@ -241,7 +229,6 @@ public class OntConfigs { .setFalse(OntModelControls.USE_OWL1_DISTINCT_MEMBERS_PREDICATE_FEATURE) .setFalse(OntModelControls.ALLOW_NAMED_CLASS_EXPRESSIONS) .setFalse(OntModelControls.ALLOW_GENERIC_CLASS_EXPRESSIONS) - .setTrue(OntModelControls.ALLOW_ANONYMOUS_INDIVIDUALS) .setTrue(OntModelControls.USE_LEGACY_COMPATIBLE_NAMED_CLASS_FACTORY) .setFalse(OntModelControls.USE_OWL2_NAMED_INDIVIDUAL_DECLARATION_FEATURE) .setFalse(OntModelControls.USE_OWL2_CLASS_HAS_KEY_FEATURE) @@ -258,8 +245,7 @@ public class OntConfigs { .setFalse(OntModelControls.USE_OWL_PROPERTY_TRANSITIVE_FEATURE) .setFalse(OntModelControls.USE_OWL_PROPERTY_REFLEXIVE_FEATURE) .setFalse(OntModelControls.USE_OWL_PROPERTY_IRREFLEXIVE_FEATURE) - .setFalse(OntModelControls.USE_OWL_PROPERTY_INVERSE_OF_FEATURE) - .setFalse(OntModelControls.USE_OWL_INVERSE_OBJECT_PROPERTY_FEATURE) + .setFalse(OntModelControls.USE_OWL_INVERSE_OBJECT_PROPERTIES_FEATURE) .setFalse(OntModelControls.USE_OWL_PROPERTY_CHAIN_AXIOM_FEATURE) .setFalse(OntModelControls.USE_OWL_INDIVIDUAL_SAME_AS_FEATURE) .setFalse(OntModelControls.USE_OWL_INDIVIDUAL_DIFFERENT_FROM_FEATURE) diff --git a/jena-ontapi/src/main/java/org/apache/jena/ontapi/common/OntPersonalities.java b/jena-ontapi/src/main/java/org/apache/jena/ontapi/common/OntPersonalities.java index d175c1f949..59ca66d6ad 100644 --- a/jena-ontapi/src/main/java/org/apache/jena/ontapi/common/OntPersonalities.java +++ b/jena-ontapi/src/main/java/org/apache/jena/ontapi/common/OntPersonalities.java @@ -281,7 +281,7 @@ public class OntPersonalities { .add(OntObjectProperty.class, OWL2ObjectFactories.EL_OBJECT_PROPERTY) .add(OntRelationalProperty.class, OWL2ObjectFactories.EL_ANY_DATA_OR_OBJECT_PROPERTY) .add(OntNamedProperty.class, OWL2ObjectFactories.ANY_NAMED_PROPERTY) - .add(OntProperty.class, OWL2ObjectFactories.ANY_PROPERTY) + .add(OntProperty.class, OWL2ObjectFactories.EL_ANY_PROPERTY) // class expressions: .add(OntClass.ObjectSomeValuesFrom.class, OWL2ObjectFactories.OBJECT_SOME_VALUES_FROM_CLASS) @@ -340,7 +340,6 @@ public class OntPersonalities { .add(OntEntity.class, OWL2ObjectFactories.ANY_ENTITY) // individuals: - .add(OntIndividual.Anonymous.class, OWL2ObjectFactories.ANONYMOUS_INDIVIDUAL) .add(OntIndividual.class, OWL2ObjectFactories.QL_ANY_INDIVIDUAL) // property expressions: 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 8228f6e1d9..59da29167c 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 @@ -368,7 +368,7 @@ public class OntGraphModelImpl extends ModelCom implements OntModel, OntEnhGraph @Override public OntIndividual createIndividual(String uri, OntClass type) { if (uri == null) { - checkFeature(this, OntModelControls.ALLOW_ANONYMOUS_INDIVIDUALS, "anonymous-individuals"); + checkType(OntIndividual.Anonymous.class); } return OntModel.super.createIndividual(uri, type); } diff --git a/jena-ontapi/src/main/java/org/apache/jena/ontapi/impl/factories/OWL1ObjectFactories.java b/jena-ontapi/src/main/java/org/apache/jena/ontapi/impl/factories/OWL1ObjectFactories.java index 1e2a527a00..39d874cf9c 100644 --- a/jena-ontapi/src/main/java/org/apache/jena/ontapi/impl/factories/OWL1ObjectFactories.java +++ b/jena-ontapi/src/main/java/org/apache/jena/ontapi/impl/factories/OWL1ObjectFactories.java @@ -99,7 +99,7 @@ public class OWL1ObjectFactories { NAMED_OBJECT_PROPERTY.apply(config), DATATYPE_PROPERTY ); - public static final Function<OntConfig, EnhNodeFactory> ANY_PROPERTY = OntProperties::createFactory; + public static final Function<OntConfig, EnhNodeFactory> ANY_PROPERTY = config -> OntProperties.createFactory(config, false); // Class Expressions (Boolean Connectives and Enumeration of Individuals): public static final Function<OntConfig, EnhNodeFactory> UNION_OF_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 16b248a8bc..150b9f09bb 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 @@ -131,7 +131,8 @@ public final class OWL2ObjectFactories { DATATYPE_PROPERTY, EL_OBJECT_PROPERTY.apply(config) ); - public static final Function<OntConfig, EnhNodeFactory> ANY_PROPERTY = OntProperties::createFactory; + public static final Function<OntConfig, EnhNodeFactory> ANY_PROPERTY = config -> OntProperties.createFactory(config, true); + public static final Function<OntConfig, EnhNodeFactory> EL_ANY_PROPERTY = config -> OntProperties.createFactory(config, false); // Class Expressions public static final Function<OntConfig, EnhNodeFactory> UNION_OF_CLASS = diff --git a/jena-ontapi/src/main/java/org/apache/jena/ontapi/impl/factories/OntProperties.java b/jena-ontapi/src/main/java/org/apache/jena/ontapi/impl/factories/OntProperties.java index 46f25cfb47..76b2111d3b 100644 --- a/jena-ontapi/src/main/java/org/apache/jena/ontapi/impl/factories/OntProperties.java +++ b/jena-ontapi/src/main/java/org/apache/jena/ontapi/impl/factories/OntProperties.java @@ -51,7 +51,7 @@ final class OntProperties { private static final EnhNodeFactory NAMED_OBJECT_PROPERTY_FACTORY_REFERENCE = WrappedEnhNodeFactory.of(OntObjectProperty.Named.class); private static final EnhNodeFactory ANONYMOUS_OBJECT_PROPERTY_FACTORY_REFERENCE = WrappedEnhNodeFactory.of(OntObjectProperty.Inverse.class); - public static Factory createFactory(OntConfig config) { + public static Factory createFactory(OntConfig config, boolean withInverseObjectProperty) { List<Node> objectPropertyTypes = new ArrayList<>(); List<Node> allPropertyTypes = new ArrayList<>(); objectPropertyTypes.add(OWL2.ObjectProperty.asNode()); @@ -81,7 +81,7 @@ final class OntProperties { return new Factory( allPropertyTypes.stream().toList(), objectPropertyTypes.stream().toList(), - config.getBoolean(OntModelControls.USE_OWL_INVERSE_OBJECT_PROPERTY_FEATURE) + withInverseObjectProperty ); } diff --git a/jena-ontapi/src/main/java/org/apache/jena/ontapi/impl/objects/OntClassImpl.java b/jena-ontapi/src/main/java/org/apache/jena/ontapi/impl/objects/OntClassImpl.java index 7bd3b28932..e8d10e7a80 100644 --- a/jena-ontapi/src/main/java/org/apache/jena/ontapi/impl/objects/OntClassImpl.java +++ b/jena-ontapi/src/main/java/org/apache/jena/ontapi/impl/objects/OntClassImpl.java @@ -175,7 +175,7 @@ public abstract class OntClassImpl extends OntObjectImpl implements OntClass { } public static OntIndividual.Anonymous createAnonymousIndividual(OntGraphModelImpl model, OntClass source) { - OntGraphModelImpl.checkFeature(model, OntModelControls.ALLOW_ANONYMOUS_INDIVIDUALS, "anonymous-individuals"); + model.checkType(OntIndividual.Anonymous.class); OntJenaException.checkSupported(source.canAsAssertionClass(), "Class " + OntEnhNodeFactories.viewAsString(source.getClass()) + " cannot have individuals. " + "Profile: " + model.getOntPersonality().getName()); diff --git a/jena-ontapi/src/main/java/org/apache/jena/ontapi/impl/objects/OntObjectPropertyImpl.java b/jena-ontapi/src/main/java/org/apache/jena/ontapi/impl/objects/OntObjectPropertyImpl.java index b446cb181a..7197f5ec3a 100644 --- a/jena-ontapi/src/main/java/org/apache/jena/ontapi/impl/objects/OntObjectPropertyImpl.java +++ b/jena-ontapi/src/main/java/org/apache/jena/ontapi/impl/objects/OntObjectPropertyImpl.java @@ -264,7 +264,7 @@ public abstract class OntObjectPropertyImpl extends OntPropertyImpl implements O @Override public Stream<OntObjectProperty> inverseProperties() { - if (!OntGraphModelImpl.configValue(getModel(), OntModelControls.USE_OWL_PROPERTY_INVERSE_OF_FEATURE)) { + if (!OntGraphModelImpl.configValue(getModel(), OntModelControls.USE_OWL_INVERSE_OBJECT_PROPERTIES_FEATURE)) { return Stream.empty(); } return objects(OWL2.inverseOf, OntObjectProperty.class); @@ -272,16 +272,13 @@ public abstract class OntObjectPropertyImpl extends OntPropertyImpl implements O @Override public OntStatement addInverseOfStatement(OntObjectProperty other) { - OntGraphModelImpl.checkFeature(getModel(), OntModelControls.USE_OWL_PROPERTY_INVERSE_OF_FEATURE, "owl:inverseOf"); - if (this.isURIResource() && other.isAnon()) { - OntGraphModelImpl.checkFeature(getModel(), OntModelControls.USE_OWL_INVERSE_OBJECT_PROPERTY_FEATURE, "owl:inverseOf"); - } + OntGraphModelImpl.checkFeature(getModel(), OntModelControls.USE_OWL_INVERSE_OBJECT_PROPERTIES_FEATURE, "owl:inverseOf"); return addStatement(OWL2.inverseOf, other); } @Override public OntObjectProperty removeInverseProperty(Resource other) { - OntGraphModelImpl.checkFeature(getModel(), OntModelControls.USE_OWL_PROPERTY_INVERSE_OF_FEATURE, "owl:inverseOf"); + OntGraphModelImpl.checkFeature(getModel(), OntModelControls.USE_OWL_INVERSE_OBJECT_PROPERTIES_FEATURE, "owl:inverseOf"); remove(OWL2.inverseOf, other); return this; } @@ -300,8 +297,6 @@ public abstract class OntObjectPropertyImpl extends OntPropertyImpl implements O @Override public Inverse createInverse() { - OntGraphModelImpl.checkFeature(getModel(), OntModelControls.USE_OWL_PROPERTY_INVERSE_OF_FEATURE, "owl:inverseOf"); - OntGraphModelImpl.checkFeature(getModel(), OntModelControls.USE_OWL_INVERSE_OBJECT_PROPERTY_FEATURE, "owl:inverseOf"); OntGraphModelImpl m = getModel(); m.checkType(OntObjectProperty.Inverse.class); List<Node> nodes = m.localStatements(null, OWL2.inverseOf, this) 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 31ae4c96d8..08b56e2b49 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 @@ -136,10 +136,13 @@ public class OntModelOWL2ELSpecTest { Assertions.assertFalse(p1.isFunctional()); Assertions.assertThrows(OntJenaException.Unsupported.class, () -> p1.setAsymmetric(true)); - p1.addInverseProperty(p2); - if (spec == TestSpec.OWL2_EL_MEM_RDFS_INF) { - Assertions.assertEquals(17, m.properties().count()); + if (spec.isOWL2EL()) { + Assertions.assertThrows(OntJenaException.Unsupported.class, () -> p1.addInverseProperty(p2)); + if (spec == TestSpec.OWL2_EL_MEM_RDFS_INF) { + Assertions.assertEquals(17, m.properties().count()); + } } else { + p1.addInverseProperty(p2); Assertions.assertEquals(3, m.properties().count()); } } diff --git a/jena-ontapi/src/test/java/org/apache/jena/ontapi/OntModelOWLSpecsTest.java b/jena-ontapi/src/test/java/org/apache/jena/ontapi/OntModelOWLSpecsTest.java index 7d4c179186..d3fa231eee 100644 --- a/jena-ontapi/src/test/java/org/apache/jena/ontapi/OntModelOWLSpecsTest.java +++ b/jena-ontapi/src/test/java/org/apache/jena/ontapi/OntModelOWLSpecsTest.java @@ -100,7 +100,7 @@ public class OntModelOWLSpecsTest { } @SuppressWarnings("rawtypes") - static void simplePropertiesValidation(OntModel ont) { + static void simplePropertiesValidation(OntModel ont, TestSpec spec) { Model jena = ModelFactory.createModelForGraph(ont.getGraph()); Set<Resource> annotationProperties = jena.listStatements(null, RDF.type, OWL2.AnnotationProperty) .mapWith(Statement::getSubject).toSet(); @@ -126,7 +126,13 @@ public class OntModelOWLSpecsTest { Set<Resource> expectedDOs = MiscUtils.toFlatSet(datatypeProperties, namedObjectProperties, inverseObjectProperties); Assertions.assertEquals(expectedDOs.size(), actualDOs.size()); - Assertions.assertEquals(inverseStatements.size(), ont.objectProperties() + long inverseStatementsCount; + if (spec.isOWL2EL()) { + inverseStatementsCount = 0; + } else { + inverseStatementsCount = inverseStatements.size(); + } + Assertions.assertEquals(inverseStatementsCount, ont.objectProperties() .flatMap(OntObjectProperty::inverseProperties).count()); } @@ -252,8 +258,12 @@ public class OntModelOWLSpecsTest { "OWL1_LITE_MEM", }) public void testPizzaLoadProperties(TestSpec spec) { - simplePropertiesValidation(OntModelFactory.createModel( - RDFIOTestUtils.loadResourceAsModel("/pizza.ttl", Lang.TURTLE).getGraph(), spec.inst)); + simplePropertiesValidation( + OntModelFactory.createModel( + RDFIOTestUtils.loadResourceAsModel("/pizza.ttl", Lang.TURTLE).getGraph(), spec.inst + ), + spec + ); } @ParameterizedTest @@ -272,8 +282,12 @@ public class OntModelOWLSpecsTest { "OWL1_LITE_MEM", }) public void testFamilyLoadProperties(TestSpec spec) { - simplePropertiesValidation(OntModelFactory.createModel( - RDFIOTestUtils.loadResourceAsModel("/family.ttl", Lang.TURTLE).getGraph(), spec.inst)); + simplePropertiesValidation( + OntModelFactory.createModel( + RDFIOTestUtils.loadResourceAsModel("/family.ttl", Lang.TURTLE).getGraph(), spec.inst + ), + spec + ); } @ParameterizedTest @@ -404,15 +418,22 @@ public class OntModelOWLSpecsTest { try (InputStream in = OntModelOWLSpecsTest.class.getResourceAsStream("/koala.owl")) { m.read(in, null, Lang.RDFXML.getName()); } - simplePropertiesValidation(m); + simplePropertiesValidation(m, spec); OntObjectProperty p1 = m.objectProperties().findFirst().orElseThrow(AssertionError::new); Assertions.assertFalse(p1.inverseProperty().isPresent()); - OntObjectProperty p2 = m.createResource().addProperty(OWL2.inverseOf, p1).as(OntObjectProperty.class); - Assertions.assertTrue(p2.inverseProperty().isPresent()); - Assertions.assertEquals(1, p2.inverseProperties().count()); - Assertions.assertEquals(p1.asProperty(), p2.asProperty()); - Assertions.assertEquals(p1, p2.inverseProperty().orElseThrow(AssertionError::new)); - Assertions.assertEquals(1, m.ontObjects(OntObjectProperty.Inverse.class).count()); + if (spec.isOWL2EL()) { + Assertions.assertThrows(OntJenaException.Unsupported.class, () -> + m.createResource().addProperty(OWL2.inverseOf, p1).as(OntObjectProperty.class) + ); + Assertions.assertEquals(0, m.ontObjects(OntObjectProperty.Inverse.class).count()); + } else { + OntObjectProperty p2 = m.createResource().addProperty(OWL2.inverseOf, p1).as(OntObjectProperty.class); + Assertions.assertTrue(p2.inverseProperty().isPresent()); + Assertions.assertEquals(1, p2.inverseProperties().count()); + Assertions.assertEquals(p1.asProperty(), p2.asProperty()); + Assertions.assertEquals(p1, p2.inverseProperty().orElseThrow(AssertionError::new)); + Assertions.assertEquals(1, m.ontObjects(OntObjectProperty.Inverse.class).count()); + } } @ParameterizedTest diff --git a/jena-ontapi/src/test/java/org/apache/jena/ontapi/OntPropertyTest.java b/jena-ontapi/src/test/java/org/apache/jena/ontapi/OntPropertyTest.java index df360dabfa..e4d7eb6e19 100644 --- a/jena-ontapi/src/test/java/org/apache/jena/ontapi/OntPropertyTest.java +++ b/jena-ontapi/src/test/java/org/apache/jena/ontapi/OntPropertyTest.java @@ -70,7 +70,7 @@ public class OntPropertyTest { m.createDataProperty(ns + "d-p-2").addAnnotation(a2, m.createLiteral("data-property")); - OntModelOWLSpecsTest.simplePropertiesValidation(m); + OntModelOWLSpecsTest.simplePropertiesValidation(m, TestSpec.OWL1_DL_MEM); Assertions.assertEquals(9, m.ontObjects(OntNamedProperty.class).count()); Assertions.assertEquals(11, m.ontObjects(OntProperty.class).count()); Assertions.assertEquals(9, m.ontObjects(OntRelationalProperty.class).count());