Skip to content

Commit bbca7ea

Browse files
committed
ontapi: [#55] add containsEntityInSignature(OWLEntity, Imports) & containsEntitiesOfTypeInSignature(EntityType, Imports) impls
1 parent a4ce39a commit bbca7ea

File tree

2 files changed

+140
-70
lines changed

2 files changed

+140
-70
lines changed

src/main/java/com/github/owlcs/ontapi/BaseOntologyModelImpl.java

Lines changed: 118 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -226,9 +226,9 @@ public Stream<OWLAnnotation> annotations() {
226226
}
227227

228228
/*
229-
* =============================
230-
* Methods to work with imports:
231-
* =============================
229+
* =================================
230+
* Methods for working with imports:
231+
* =================================
232232
*/
233233

234234
@Override
@@ -257,9 +257,9 @@ public Stream<OWLOntology> importsClosure() {
257257
}
258258

259259
/*
260-
* ==========================
261-
* To work with OWL-entities:
262-
* ==========================
260+
* ======================================
261+
* Methods for working with OWL-entities:
262+
* ======================================
263263
*/
264264

265265
@Override
@@ -400,6 +400,9 @@ public Stream<OWLEntity> entitiesInSignature(IRI iri, Imports imports) {
400400

401401
@Override
402402
public Set<IRI> getPunnedIRIs(Imports imports) {
403+
if (imports == Imports.INCLUDED && !config.useComponentCache()) {
404+
return getFullGraphModel().listPunningIRIs(false).collect(Collectors.toSet());
405+
}
403406
return base.listPunningIRIs(Imports.INCLUDED == imports).collect(Collectors.toSet());
404407
}
405408

@@ -418,31 +421,79 @@ public boolean containsClassInSignature(IRI iri) {
418421
return base.containsOWLEntity(getDataFactory().getOWLClass(iri));
419422
}
420423

424+
@Override
425+
public boolean containsClassInSignature(IRI iri, Imports imports) {
426+
if (imports == Imports.INCLUDED && !config.useComponentCache()) {
427+
return getFullGraphModel().containsOWLEntity(getDataFactory().getOWLClass(iri));
428+
}
429+
return imports.stream(this).anyMatch(o -> o.containsClassInSignature(iri));
430+
}
431+
421432
@Override
422433
public boolean containsObjectPropertyInSignature(IRI iri) {
423434
return base.containsOWLEntity(getDataFactory().getOWLObjectProperty(iri));
424435
}
425436

437+
@Override
438+
public boolean containsObjectPropertyInSignature(IRI iri, Imports imports) {
439+
if (imports == Imports.INCLUDED && !config.useComponentCache()) {
440+
return getFullGraphModel().containsOWLEntity(getDataFactory().getOWLObjectProperty(iri));
441+
}
442+
return imports.stream(this).anyMatch(o -> o.containsObjectPropertyInSignature(iri));
443+
}
444+
426445
@Override
427446
public boolean containsDataPropertyInSignature(IRI iri) {
428447
return base.containsOWLEntity(getDataFactory().getOWLDataProperty(iri));
429448
}
430449

450+
@Override
451+
public boolean containsDataPropertyInSignature(IRI iri, Imports imports) {
452+
if (imports == Imports.INCLUDED && !config.useComponentCache()) {
453+
return getFullGraphModel().containsOWLEntity(getDataFactory().getOWLDataProperty(iri));
454+
}
455+
return imports.stream(this).anyMatch(o -> o.containsDataPropertyInSignature(iri));
456+
}
457+
431458
@Override
432459
public boolean containsAnnotationPropertyInSignature(IRI iri) {
433460
return base.containsOWLEntity(getDataFactory().getOWLAnnotationProperty(iri));
434461
}
435462

463+
@Override
464+
public boolean containsAnnotationPropertyInSignature(IRI iri, Imports imports) {
465+
if (imports == Imports.INCLUDED && !config.useComponentCache()) {
466+
return getFullGraphModel().containsOWLEntity(getDataFactory().getOWLAnnotationProperty(iri));
467+
}
468+
return imports.stream(this).anyMatch(o -> o.containsAnnotationPropertyInSignature(iri));
469+
}
470+
436471
@Override
437472
public boolean containsDatatypeInSignature(IRI iri) {
438473
return base.containsOWLEntity(getDataFactory().getOWLDatatype(iri));
439474
}
440475

476+
@Override
477+
public boolean containsDatatypeInSignature(IRI iri, Imports imports) {
478+
if (imports == Imports.INCLUDED && !config.useComponentCache()) {
479+
return getFullGraphModel().containsOWLEntity(getDataFactory().getOWLDatatype(iri));
480+
}
481+
return imports.stream(this).anyMatch(o -> o.containsDatatypeInSignature(iri));
482+
}
483+
441484
@Override
442485
public boolean containsIndividualInSignature(IRI iri) {
443486
return base.containsOWLEntity(getDataFactory().getOWLNamedIndividual(iri));
444487
}
445488

489+
@Override
490+
public boolean containsIndividualInSignature(IRI iri, Imports imports) {
491+
if (imports == Imports.INCLUDED && !config.useComponentCache()) {
492+
return getFullGraphModel().containsOWLEntity(getDataFactory().getOWLNamedIndividual(iri));
493+
}
494+
return imports.stream(this).anyMatch(o -> o.containsIndividualInSignature(iri));
495+
}
496+
446497
@Override
447498
public boolean containsEntityInSignature(IRI iri) {
448499
return containsClassInSignature(iri)
@@ -453,6 +504,16 @@ public boolean containsEntityInSignature(IRI iri) {
453504
|| containsAnnotationPropertyInSignature(iri);
454505
}
455506

507+
@Override
508+
public boolean containsEntityInSignature(IRI entityIRI, Imports imports) {
509+
return containsClassInSignature(entityIRI, imports)
510+
|| containsObjectPropertyInSignature(entityIRI, imports)
511+
|| containsDataPropertyInSignature(entityIRI, imports)
512+
|| containsIndividualInSignature(entityIRI, imports)
513+
|| containsDatatypeInSignature(entityIRI, imports)
514+
|| containsAnnotationPropertyInSignature(entityIRI, imports);
515+
}
516+
456517
@Override
457518
public boolean containsEntityInSignature(OWLEntity entity) {
458519
if (entity.isOWLClass()) {
@@ -476,6 +537,29 @@ public boolean containsEntityInSignature(OWLEntity entity) {
476537
throw new OntApiException.IllegalArgument("Unsupported entity: " + entity);
477538
}
478539

540+
@Override
541+
public boolean containsEntityInSignature(OWLEntity entity, Imports imports) {
542+
if (entity.isOWLClass()) {
543+
return containsClassInSignature(entity.getIRI(), imports);
544+
}
545+
if (entity.isOWLDatatype()) {
546+
return containsDatatypeInSignature(entity.getIRI(), imports);
547+
}
548+
if (entity.isOWLNamedIndividual()) {
549+
return containsIndividualInSignature(entity.getIRI(), imports);
550+
}
551+
if (entity.isOWLAnnotationProperty()) {
552+
return containsAnnotationPropertyInSignature(entity.getIRI(), imports);
553+
}
554+
if (entity.isOWLObjectProperty()) {
555+
return containsObjectPropertyInSignature(entity.getIRI(), imports);
556+
}
557+
if (entity.isOWLDataProperty()) {
558+
return containsDataPropertyInSignature(entity.getIRI(), imports);
559+
}
560+
throw new OntApiException.IllegalArgument("Unsupported entity: " + entity);
561+
}
562+
479563
@Override
480564
public boolean containsEntitiesOfTypeInSignature(EntityType<?> type) {
481565
if (EntityType.CLASS.equals(type)) {
@@ -499,10 +583,33 @@ public boolean containsEntitiesOfTypeInSignature(EntityType<?> type) {
499583
throw new IllegalArgumentException("Entity type " + type + " is not valid for entity presence check");
500584
}
501585

586+
@Override
587+
public boolean containsEntitiesOfTypeInSignature(EntityType<?> type, Imports imports) {
588+
if (EntityType.CLASS.equals(type)) {
589+
return classesInSignature(imports).findFirst().isPresent();
590+
}
591+
if (EntityType.DATA_PROPERTY.equals(type)) {
592+
return dataPropertiesInSignature(imports).findFirst().isPresent();
593+
}
594+
if (EntityType.OBJECT_PROPERTY.equals(type)) {
595+
return objectPropertiesInSignature(imports).findFirst().isPresent();
596+
}
597+
if (EntityType.ANNOTATION_PROPERTY.equals(type)) {
598+
return annotationPropertiesInSignature(imports).findFirst().isPresent();
599+
}
600+
if (EntityType.DATATYPE.equals(type)) {
601+
return datatypesInSignature(imports).findFirst().isPresent();
602+
}
603+
if (EntityType.NAMED_INDIVIDUAL.equals(type)) {
604+
return individualsInSignature(imports).findFirst().isPresent();
605+
}
606+
throw new IllegalArgumentException("Entity type " + type + " is not valid for entity presence check");
607+
}
608+
502609
/*
503-
* =======================
504-
* To work with OWL-Axioms
505-
* =======================
610+
* ===================================
611+
* Methods for working with OWL-Axioms
612+
* ===================================
506613
*/
507614

508615
@Override
@@ -1050,64 +1157,6 @@ public boolean contains(OWLAxiomSearchFilter filter, Object key) {
10501157
return base.listOWLAxioms(filter.getAxiomTypes()).anyMatch(a -> filter.pass(a, key));
10511158
}
10521159

1053-
@Override
1054-
public boolean containsClassInSignature(IRI iri, Imports imports) {
1055-
if (imports == Imports.INCLUDED && !config.useComponentCache()) {
1056-
return getFullGraphModel().containsOWLEntity(getDataFactory().getOWLClass(iri));
1057-
}
1058-
return imports.stream(this).anyMatch(o -> o.containsClassInSignature(iri));
1059-
}
1060-
1061-
@Override
1062-
public boolean containsObjectPropertyInSignature(IRI iri, Imports imports) {
1063-
if (imports == Imports.INCLUDED && !config.useComponentCache()) {
1064-
return getFullGraphModel().containsOWLEntity(getDataFactory().getOWLObjectProperty(iri));
1065-
}
1066-
return imports.stream(this).anyMatch(o -> o.containsObjectPropertyInSignature(iri));
1067-
}
1068-
1069-
@Override
1070-
public boolean containsDataPropertyInSignature(IRI iri, Imports imports) {
1071-
if (imports == Imports.INCLUDED && !config.useComponentCache()) {
1072-
return getFullGraphModel().containsOWLEntity(getDataFactory().getOWLDataProperty(iri));
1073-
}
1074-
return imports.stream(this).anyMatch(o -> o.containsDataPropertyInSignature(iri));
1075-
}
1076-
1077-
@Override
1078-
public boolean containsAnnotationPropertyInSignature(IRI iri, Imports imports) {
1079-
if (imports == Imports.INCLUDED && !config.useComponentCache()) {
1080-
return getFullGraphModel().containsOWLEntity(getDataFactory().getOWLAnnotationProperty(iri));
1081-
}
1082-
return imports.stream(this).anyMatch(o -> o.containsAnnotationPropertyInSignature(iri));
1083-
}
1084-
1085-
@Override
1086-
public boolean containsDatatypeInSignature(IRI iri, Imports imports) {
1087-
if (imports == Imports.INCLUDED && !config.useComponentCache()) {
1088-
return getFullGraphModel().containsOWLEntity(getDataFactory().getOWLDatatype(iri));
1089-
}
1090-
return imports.stream(this).anyMatch(o -> o.containsDatatypeInSignature(iri));
1091-
}
1092-
1093-
@Override
1094-
public boolean containsIndividualInSignature(IRI iri, Imports imports) {
1095-
if (imports == Imports.INCLUDED && !config.useComponentCache()) {
1096-
return getFullGraphModel().containsOWLEntity(getDataFactory().getOWLNamedIndividual(iri));
1097-
}
1098-
return imports.stream(this).anyMatch(o -> o.containsIndividualInSignature(iri));
1099-
}
1100-
1101-
@Override
1102-
public boolean containsEntityInSignature(IRI entityIRI, Imports imports) {
1103-
return containsClassInSignature(entityIRI, imports)
1104-
|| containsObjectPropertyInSignature(entityIRI, imports)
1105-
|| containsDataPropertyInSignature(entityIRI, imports)
1106-
|| containsIndividualInSignature(entityIRI, imports)
1107-
|| containsDatatypeInSignature(entityIRI, imports)
1108-
|| containsAnnotationPropertyInSignature(entityIRI, imports);
1109-
}
1110-
11111160
@Override
11121161
public boolean containsAxiom(OWLAxiom axiom, Imports imports, AxiomAnnotations ignoreAnnotations) {
11131162
return imports.stream(this).anyMatch(o -> ignoreAnnotations.contains(o, axiom));
@@ -1347,8 +1396,8 @@ private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundE
13471396
/**
13481397
* Writes the object while serialization.
13491398
* Note: only the base graph is serialized,
1350-
* so if you serialize and then de-serialize standalone ontology it will lose all its references,
1351-
* please use managers serialization, it will restore any links.
1399+
* so if you serialize and then deserialize standalone ontology, it will lose all its references,
1400+
* please use manager's serialization, it will restore any links.
13521401
* Also, please note: an exception is expected if the encapsulated graph is not {@code GraphMem}.
13531402
*
13541403
* @param out {@link ObjectOutputStream}
@@ -1368,7 +1417,6 @@ private void writeObject(ObjectOutputStream out) throws IOException, OntApiExcep
13681417

13691418
/**
13701419
* Overridden {@link OWLObjectImpl#toString()} in order not to force the axioms loading.
1371-
* For brief information there should be a separate method and the original implementation of toString is not very good idea in our case.
13721420
*
13731421
* @return String
13741422
*/

src/test/java/com/github/owlcs/ontapi/tests/model/InfOntModelTest.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.junit.jupiter.api.Assertions;
1313
import org.junit.jupiter.api.Test;
1414
import org.semanticweb.owlapi.model.AxiomType;
15+
import org.semanticweb.owlapi.model.EntityType;
1516
import org.semanticweb.owlapi.model.IRI;
1617
import org.semanticweb.owlapi.model.OWLAnnotationProperty;
1718
import org.semanticweb.owlapi.model.OWLAnnotationPropertyRangeAxiom;
@@ -141,6 +142,14 @@ void testListSignature1() {
141142
Assertions.assertEquals(2, o1.entitiesInSignature(IRI.create("http://b#p1"), Imports.INCLUDED).count());
142143
// annotation property + named individual
143144
Assertions.assertEquals(2, o1.entitiesInSignature(IRI.create("http://a#p2"), Imports.INCLUDED).count());
145+
146+
Assertions.assertEquals(68, o1.getPunnedIRIs(Imports.INCLUDED).size());
147+
Assertions.assertTrue(o1.getPunnedIRIs(Imports.INCLUDED).contains(IRI.create("http://b#C2")));
148+
Assertions.assertTrue(o1.getPunnedIRIs(Imports.INCLUDED).contains(IRI.create(XSD.xstring.getURI())));
149+
Assertions.assertFalse(o1.getPunnedIRIs(Imports.INCLUDED).contains(IRI.create("http://b#i2")));
150+
Assertions.assertTrue(o1.getPunnedIRIs(Imports.INCLUDED).contains(IRI.create(OWL.disjointWith.getURI())));
151+
Assertions.assertTrue(o1.getPunnedIRIs(Imports.INCLUDED).contains(IRI.create("http://b#p1")));
152+
Assertions.assertTrue(o1.getPunnedIRIs(Imports.INCLUDED).contains(IRI.create("http://a#p2")));
144153
}
145154

146155
@Test
@@ -208,11 +217,13 @@ void testContainsInSignature() {
208217
Assertions.assertTrue(o1.containsClassInSignature(IRI.create("http://b#C1"), Imports.INCLUDED));
209218
Assertions.assertTrue(o1.containsClassInSignature(df.getOWLThing().getIRI(), Imports.INCLUDED));
210219
Assertions.assertTrue(o1.containsEntityInSignature(df.getOWLThing().getIRI(), Imports.INCLUDED));
220+
Assertions.assertTrue(o1.containsEntityInSignature(df.getOWLThing(), Imports.INCLUDED));
211221
Assertions.assertFalse(o1.containsClassInSignature(IRI.create("http://a#C3"), Imports.INCLUDED));
212222
Assertions.assertFalse(o1.containsEntityInSignature(IRI.create("http://a#C3"), Imports.INCLUDED));
213223

214224
Assertions.assertTrue(o1.containsDatatypeInSignature(IRI.create(XSD.unsignedInt.getURI()), Imports.INCLUDED));
215225
Assertions.assertTrue(o1.containsEntityInSignature(IRI.create(XSD.unsignedInt.getURI()), Imports.INCLUDED));
226+
Assertions.assertTrue(o1.containsEntityInSignature(df.getOWLDatatype(XSD.unsignedInt.getURI()), Imports.INCLUDED));
216227
Assertions.assertFalse(o1.containsDatatypeInSignature(IRI.create(OWL.Nothing.getURI()), Imports.INCLUDED));
217228
Assertions.assertTrue(o1.containsEntityInSignature(IRI.create(OWL.Nothing.getURI()), Imports.INCLUDED));
218229

@@ -221,23 +232,34 @@ void testContainsInSignature() {
221232
Assertions.assertTrue(o1.containsIndividualInSignature(IRI.create(OWL.NamedIndividual.getURI()), Imports.INCLUDED));
222233
Assertions.assertTrue(o1.containsIndividualInSignature(IRI.create(OWL.Thing.getURI()), Imports.INCLUDED));
223234
Assertions.assertTrue(o1.containsEntityInSignature(IRI.create("http://b#i1"), Imports.INCLUDED));
235+
Assertions.assertTrue(o1.containsEntityInSignature(df.getOWLNamedIndividual("http://b#i1"), Imports.INCLUDED));
224236
Assertions.assertTrue(o1.containsEntityInSignature(IRI.create("http://a#i2"), Imports.INCLUDED));
225237
Assertions.assertTrue(o1.containsEntityInSignature(IRI.create(OWL.NamedIndividual.getURI()), Imports.INCLUDED));
226238
Assertions.assertTrue(o1.containsEntityInSignature(IRI.create(OWL.Thing.getURI()), Imports.INCLUDED));
227239

228240
Assertions.assertTrue(o1.containsDataPropertyInSignature(IRI.create("http://b#p1"), Imports.INCLUDED));
229241
Assertions.assertTrue(o1.containsEntityInSignature(IRI.create("http://b#p1"), Imports.INCLUDED));
242+
Assertions.assertTrue(o1.containsEntityInSignature(df.getOWLDataProperty("http://b#p1"), Imports.INCLUDED));
230243
Assertions.assertFalse(o1.containsDatatypeInSignature(IRI.create(OWL.bottomDataProperty.getURI()), Imports.INCLUDED));
231244
Assertions.assertFalse(o1.containsEntityInSignature(IRI.create(OWL.bottomDataProperty.getURI()), Imports.INCLUDED));
232245

233246
Assertions.assertTrue(o1.containsObjectPropertyInSignature(IRI.create(OWL.disjointWith.getURI()), Imports.INCLUDED));
234247
Assertions.assertTrue(o1.containsEntityInSignature(IRI.create(OWL.disjointWith.getURI()), Imports.INCLUDED));
248+
Assertions.assertTrue(o1.containsEntityInSignature(df.getOWLObjectProperty(OWL.disjointWith.getURI()), Imports.INCLUDED));
235249
Assertions.assertFalse(o1.containsObjectPropertyInSignature(IRI.create(OWL.topObjectProperty.getURI()), Imports.INCLUDED));
236250
Assertions.assertFalse(o1.containsEntityInSignature(IRI.create(OWL.topObjectProperty.getURI()), Imports.INCLUDED));
237251

238252
Assertions.assertTrue(o1.containsAnnotationPropertyInSignature(IRI.create(RDFS.isDefinedBy.getURI()), Imports.INCLUDED));
239253
Assertions.assertTrue(o1.containsEntityInSignature(IRI.create(RDFS.isDefinedBy.getURI()), Imports.INCLUDED));
254+
Assertions.assertTrue(o1.containsEntityInSignature(df.getOWLAnnotationProperty(RDFS.isDefinedBy.getURI()), Imports.INCLUDED));
240255
Assertions.assertFalse(o1.containsAnnotationPropertyInSignature(IRI.create(OWL.topObjectProperty.getURI()), Imports.INCLUDED));
241256
Assertions.assertFalse(o1.containsEntityInSignature(IRI.create(OWL.topObjectProperty.getURI()), Imports.INCLUDED));
257+
258+
Assertions.assertTrue(o1.containsEntitiesOfTypeInSignature(EntityType.CLASS, Imports.INCLUDED));
259+
Assertions.assertTrue(o1.containsEntitiesOfTypeInSignature(EntityType.DATATYPE, Imports.INCLUDED));
260+
Assertions.assertTrue(o1.containsEntitiesOfTypeInSignature(EntityType.NAMED_INDIVIDUAL, Imports.INCLUDED));
261+
Assertions.assertTrue(o1.containsEntitiesOfTypeInSignature(EntityType.OBJECT_PROPERTY, Imports.INCLUDED));
262+
Assertions.assertTrue(o1.containsEntitiesOfTypeInSignature(EntityType.DATA_PROPERTY, Imports.INCLUDED));
263+
Assertions.assertTrue(o1.containsEntitiesOfTypeInSignature(EntityType.ANNOTATION_PROPERTY, Imports.INCLUDED));
242264
}
243265
}

0 commit comments

Comments
 (0)