Skip to content

Commit 29e4d96

Browse files
committed
ontapi: [#55] support raw signature*,containsInSignature*,referencedAnonymousIndividuals with imports
1 parent 5b19b6b commit 29e4d96

File tree

6 files changed

+271
-109
lines changed

6 files changed

+271
-109
lines changed

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

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -282,23 +282,31 @@ public Stream<OWLClassExpression> nestedClassExpressions() {
282282

283283
@Override
284284
public Stream<OWLAnonymousIndividual> anonymousIndividuals() {
285-
return base.listOWLAnonymousIndividuals();
285+
return base.listComponentOWLAnonymousIndividuals();
286286
}
287287

288288
@Override
289289
public Stream<OWLAnonymousIndividual> referencedAnonymousIndividuals() {
290290
return anonymousIndividuals();
291291
}
292292

293+
@Override
294+
public Stream<OWLAnonymousIndividual> referencedAnonymousIndividuals(Imports imports) {
295+
if (imports == Imports.INCLUDED && !config.useComponentCache()) {
296+
return getFullGraphModel().listGraphOWLAnonymousIndividuals();
297+
}
298+
return imports.stream(this).flatMap(OWLOntology::referencedAnonymousIndividuals).distinct().sorted();
299+
}
300+
293301
@Override
294302
public Stream<OWLNamedIndividual> individualsInSignature() {
295-
return base.listOWLNamedIndividuals();
303+
return base.listComponentOWLNamedIndividuals();
296304
}
297305

298306
@Override
299307
public Stream<OWLNamedIndividual> individualsInSignature(Imports imports) {
300308
if (imports == Imports.INCLUDED && !config.useComponentCache()) {
301-
return getFullGraphModel().listOWLNamedIndividuals();
309+
return getFullGraphModel().listGraphOWLNamedIndividuals();
302310
}
303311
return imports.stream(this).flatMap(OWLOntology::individualsInSignature).distinct().sorted();
304312
}
@@ -996,31 +1004,49 @@ public boolean contains(OWLAxiomSearchFilter filter, Object key) {
9961004

9971005
@Override
9981006
public boolean containsClassInSignature(IRI iri, Imports imports) {
1007+
if (imports == Imports.INCLUDED && !config.useComponentCache()) {
1008+
return getFullGraphModel().containsOWLEntity(getDataFactory().getOWLClass(iri));
1009+
}
9991010
return imports.stream(this).anyMatch(o -> o.containsClassInSignature(iri));
10001011
}
10011012

10021013
@Override
10031014
public boolean containsObjectPropertyInSignature(IRI iri, Imports imports) {
1015+
if (imports == Imports.INCLUDED && !config.useComponentCache()) {
1016+
return getFullGraphModel().containsOWLEntity(getDataFactory().getOWLObjectProperty(iri));
1017+
}
10041018
return imports.stream(this).anyMatch(o -> o.containsObjectPropertyInSignature(iri));
10051019
}
10061020

10071021
@Override
10081022
public boolean containsDataPropertyInSignature(IRI iri, Imports imports) {
1023+
if (imports == Imports.INCLUDED && !config.useComponentCache()) {
1024+
return getFullGraphModel().containsOWLEntity(getDataFactory().getOWLDataProperty(iri));
1025+
}
10091026
return imports.stream(this).anyMatch(o -> o.containsDataPropertyInSignature(iri));
10101027
}
10111028

10121029
@Override
10131030
public boolean containsAnnotationPropertyInSignature(IRI iri, Imports imports) {
1031+
if (imports == Imports.INCLUDED && !config.useComponentCache()) {
1032+
return getFullGraphModel().containsOWLEntity(getDataFactory().getOWLAnnotationProperty(iri));
1033+
}
10141034
return imports.stream(this).anyMatch(o -> o.containsAnnotationPropertyInSignature(iri));
10151035
}
10161036

10171037
@Override
10181038
public boolean containsDatatypeInSignature(IRI iri, Imports imports) {
1039+
if (imports == Imports.INCLUDED && !config.useComponentCache()) {
1040+
return getFullGraphModel().containsOWLEntity(getDataFactory().getOWLDatatype(iri));
1041+
}
10191042
return imports.stream(this).anyMatch(o -> o.containsDatatypeInSignature(iri));
10201043
}
10211044

10221045
@Override
10231046
public boolean containsIndividualInSignature(IRI iri, Imports imports) {
1047+
if (imports == Imports.INCLUDED && !config.useComponentCache()) {
1048+
return getFullGraphModel().containsOWLEntity(getDataFactory().getOWLNamedIndividual(iri));
1049+
}
10241050
return imports.stream(this).anyMatch(o -> o.containsIndividualInSignature(iri));
10251051
}
10261052

src/main/java/com/github/owlcs/ontapi/internal/InternalGraphModel.java

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,18 +99,44 @@ public interface InternalGraphModel extends OntModel, OntEnhGraph, HasOntologyID
9999
Stream<OWLClassExpression> listOWLClassExpressions();
100100

101101
/**
102-
* Lists all anonymous individuals in the form of OWL-API objects.
102+
* Lists all (component) anonymous individuals in the form of OWL-API objects.
103+
* The difference with the method {@link #listGraphOWLAnonymousIndividuals()} is that
104+
* this method retrieves individuals from components' cache collected from base graph,
105+
* while the method {@link #listGraphOWLAnonymousIndividuals()} uses {@link OntModel#individuals()}.
103106
*
104107
* @return a {@code Stream} of {@link OWLAnonymousIndividual}s
105108
*/
106-
Stream<OWLAnonymousIndividual> listOWLAnonymousIndividuals();
109+
Stream<OWLAnonymousIndividual> listComponentOWLAnonymousIndividuals();
107110

108111
/**
109-
* Lists all named individuals in the form of OWL-API objects.
112+
* Lists all (graph) anonymous individuals in the form of OWL-API objects.
113+
* This method uses {@link OntModel#individuals()} method,
114+
* while the method {@link #listComponentOWLAnonymousIndividuals()} parses individuals from components'
115+
* cache collected from base graph.
110116
*
111117
* @return a {@code Stream} of {@link OWLNamedIndividual}s
112118
*/
113-
Stream<OWLNamedIndividual> listOWLNamedIndividuals();
119+
Stream<OWLAnonymousIndividual> listGraphOWLAnonymousIndividuals();
120+
121+
/**
122+
* Lists all (component) named individuals in the form of OWL-API objects.
123+
* The difference with the method {@link #listGraphOWLNamedIndividuals()} is that
124+
* this method retrieves individuals from components' cache collected from base graph,
125+
* while the method {@link #listGraphOWLNamedIndividuals()} uses {@link OntModel#individuals()}.
126+
*
127+
* @return a {@code Stream} of {@link OWLNamedIndividual}s
128+
*/
129+
Stream<OWLNamedIndividual> listComponentOWLNamedIndividuals();
130+
131+
/**
132+
* Lists all (graph) named individuals in the form of OWL-API objects.
133+
* This method uses {@link OntModel#individuals()} method,
134+
* while the method {@link #listComponentOWLNamedIndividuals()} parses individuals from components'
135+
* cache collected from base graph.
136+
*
137+
* @return a {@code Stream} of {@link OWLNamedIndividual}s
138+
*/
139+
Stream<OWLNamedIndividual> listGraphOWLNamedIndividuals();
114140

115141
/**
116142
* Lists all OWL classes in the form of OWL-API objects.

src/main/java/com/github/owlcs/ontapi/internal/InternalReadGraphModel.java

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -462,19 +462,37 @@ public boolean containsOWLDeclaration(OWLEntity e) {
462462
return listOWLAxioms(OWLDeclarationAxiom.class).anyMatch(x -> x.getEntity().equals(e));
463463
}
464464

465-
public Stream<OWLAnonymousIndividual> listOWLAnonymousIndividuals() {
465+
public Stream<OWLAnonymousIndividual> listComponentOWLAnonymousIndividuals() {
466466
return listComponents(OWLComponentType.ANONYMOUS_INDIVIDUAL);
467467
}
468468

469+
public Stream<OWLAnonymousIndividual> listGraphOWLAnonymousIndividuals() {
470+
ModelObjectFactory factory = getObjectFactory();
471+
InternalConfig config = getConfig();
472+
return individuals()
473+
.filter(RDFNode::isAnon)
474+
.map(it -> (OWLAnonymousIndividual) (factory.getIndividual(it).getOWLObject()))
475+
.map(it -> strip(it, config));
476+
}
477+
469478
public Stream<OWLClassExpression> listOWLClassExpressions() {
470479
return ModelIterators.reduceDistinct(selectContentObjects(OWLComponentType.CLASS_EXPRESSION)
471480
.flatMap(OWLObject::nestedClassExpressions), getConfig());
472481
}
473482

474-
public Stream<OWLNamedIndividual> listOWLNamedIndividuals() {
483+
public Stream<OWLNamedIndividual> listComponentOWLNamedIndividuals() {
475484
return listComponents(OWLComponentType.NAMED_INDIVIDUAL);
476485
}
477486

487+
public Stream<OWLNamedIndividual> listGraphOWLNamedIndividuals() {
488+
ModelObjectFactory factory = getObjectFactory();
489+
InternalConfig config = getConfig();
490+
return individuals()
491+
.filter(RDFNode::isURIResource)
492+
.map(it -> (OWLNamedIndividual) (factory.getIndividual(it).getOWLObject()))
493+
.map(it -> strip(it, config));
494+
}
495+
478496
public Stream<OWLClass> listOWLClasses() {
479497
return listComponents(OWLComponentType.CLASS);
480498
}

src/test/java/com/github/owlcs/ontapi/tests/internal/InternalGraphModelTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -167,8 +167,8 @@ public void testFoafEntities() {
167167

168168
test(OWLClass.class, jena.listOWLClasses(), owl.classesInSignature());
169169
test(OWLDatatype.class, jena.listOWLDatatypes(), owl.datatypesInSignature());
170-
test(OWLNamedIndividual.class, jena.listOWLNamedIndividuals(), owl.individualsInSignature());
171-
test(OWLAnonymousIndividual.class, jena.listOWLAnonymousIndividuals(), owl.anonymousIndividuals());
170+
test(OWLNamedIndividual.class, jena.listComponentOWLNamedIndividuals(), owl.individualsInSignature());
171+
test(OWLAnonymousIndividual.class, jena.listComponentOWLAnonymousIndividuals(), owl.anonymousIndividuals());
172172
Set<OWLAnnotationProperty> expectedAnnotationProperties = owl.annotationPropertiesInSignature()
173173
.collect(Collectors.toSet());
174174
Set<OWLDataProperty> expectedDataProperties = owl.dataPropertiesInSignature().collect(Collectors.toSet());
@@ -228,8 +228,8 @@ private void testEntities(String file, OntFormat format) {
228228
debugPrint(jena, owl);
229229
test(OWLClass.class, jena.listOWLClasses(), owl.classesInSignature());
230230
test(OWLDatatype.class, jena.listOWLDatatypes(), owl.datatypesInSignature());
231-
test(OWLNamedIndividual.class, jena.listOWLNamedIndividuals(), owl.individualsInSignature());
232-
test(OWLAnonymousIndividual.class, jena.listOWLAnonymousIndividuals(), owl.anonymousIndividuals());
231+
test(OWLNamedIndividual.class, jena.listComponentOWLNamedIndividuals(), owl.individualsInSignature());
232+
test(OWLAnonymousIndividual.class, jena.listComponentOWLAnonymousIndividuals(), owl.anonymousIndividuals());
233233
test(OWLAnnotationProperty.class, jena.listOWLAnnotationProperties(), owl.annotationPropertiesInSignature());
234234
test(OWLObjectProperty.class, jena.listOWLObjectProperties(), owl.objectPropertiesInSignature());
235235
test(OWLDataProperty.class, jena.listOWLDataProperties(), owl.dataPropertiesInSignature());

0 commit comments

Comments
 (0)