This is an automated email from the ASF dual-hosted git repository. sszuev pushed a commit to branch i3322 in repository https://gitbox.apache.org/repos/asf/jena.git
commit 45ee699ae99e217f31d97f5955c89aff5f7b5c78 Author: sszuev <[email protected]> AuthorDate: Sat Jul 19 17:24:24 2025 +0300 jena-ontapi: extend OntUnionGraphRepository to allow access to an ontology by its id, when it is different from mapping key --- .../java/org/apache/jena/ontapi/OntModelFactory.java | 2 +- .../impl/repositories/DocumentGraphRepository.java | 3 +-- .../impl/repositories/OntUnionGraphRepository.java | 16 ++++++++++++++-- .../apache/jena/ontapi/DocumentGraphRepositoryTest.java | 4 ++-- .../apache/jena/ontapi/OntUnionGraphRepositoryTest.java | 14 ++++++++++++++ 5 files changed, 32 insertions(+), 7 deletions(-) diff --git a/jena-ontapi/src/main/java/org/apache/jena/ontapi/OntModelFactory.java b/jena-ontapi/src/main/java/org/apache/jena/ontapi/OntModelFactory.java index 73001f7c00..b15c8b25cb 100644 --- a/jena-ontapi/src/main/java/org/apache/jena/ontapi/OntModelFactory.java +++ b/jena-ontapi/src/main/java/org/apache/jena/ontapi/OntModelFactory.java @@ -342,7 +342,7 @@ public class OntModelFactory { OntModelFactory::createUnionGraph, n -> createOntGraph(n, repository), /*ignoreUnresolvedImports*/ true); - if (!ontUnionGraphRepository.contains(name)) { + if (!ontUnionGraphRepository.hasGraph(name)) { return null; } UnionGraph union = ontUnionGraphRepository.get(name); diff --git a/jena-ontapi/src/main/java/org/apache/jena/ontapi/impl/repositories/DocumentGraphRepository.java b/jena-ontapi/src/main/java/org/apache/jena/ontapi/impl/repositories/DocumentGraphRepository.java index 0c307e4efc..bb87992760 100644 --- a/jena-ontapi/src/main/java/org/apache/jena/ontapi/impl/repositories/DocumentGraphRepository.java +++ b/jena-ontapi/src/main/java/org/apache/jena/ontapi/impl/repositories/DocumentGraphRepository.java @@ -210,8 +210,7 @@ public class DocumentGraphRepository implements GraphRepository { * * @return distinct {@code Stream} of {@link Graph}s */ - @Override - public Stream<Graph> graphs() { + public Stream<Graph> loadedGraphs() { return sourceToGraph.values().stream(); } diff --git a/jena-ontapi/src/main/java/org/apache/jena/ontapi/impl/repositories/OntUnionGraphRepository.java b/jena-ontapi/src/main/java/org/apache/jena/ontapi/impl/repositories/OntUnionGraphRepository.java index ecdf126c60..b5e82171c4 100644 --- a/jena-ontapi/src/main/java/org/apache/jena/ontapi/impl/repositories/OntUnionGraphRepository.java +++ b/jena-ontapi/src/main/java/org/apache/jena/ontapi/impl/repositories/OntUnionGraphRepository.java @@ -135,8 +135,20 @@ public class OntUnionGraphRepository { * @param node {@link Node} graph's ontology name ({@code owl:Ontology} or {@code owl:versionIRI}). * @return boolean */ - public boolean contains(Node node) { - return repository.contains(node.toString()); + public boolean hasGraph(Node node) { + Objects.requireNonNull(node); + if (repository.contains(node.toString())) { + return true; + } + return repository.ids().toList().stream().anyMatch(id -> { + var g = repository.get(id); + var header = Graphs.findOntologyNameNode(g).orElse(null); + if (Objects.equals(header, node)) { + repository.put(header.toString(), g); + return true; + } + return false; + }); } /** diff --git a/jena-ontapi/src/test/java/org/apache/jena/ontapi/DocumentGraphRepositoryTest.java b/jena-ontapi/src/test/java/org/apache/jena/ontapi/DocumentGraphRepositoryTest.java index 5f8f1ceada..c1b039fac3 100644 --- a/jena-ontapi/src/test/java/org/apache/jena/ontapi/DocumentGraphRepositoryTest.java +++ b/jena-ontapi/src/test/java/org/apache/jena/ontapi/DocumentGraphRepositoryTest.java @@ -52,7 +52,7 @@ public class DocumentGraphRepositoryTest { Assertions.assertFalse(((UnionGraph) g1).hasSubGraph()); Graph g2 = repository.get("builtins-owl.rdf"); Assertions.assertSame(g1, g2); - Assertions.assertEquals(List.of(g1), repository.graphs().toList()); + Assertions.assertEquals(List.of(g1), repository.loadedGraphs().toList()); Graph g3 = repository.get("X"); Assertions.assertEquals(163, g3.size()); @@ -60,7 +60,7 @@ public class DocumentGraphRepositoryTest { Assertions.assertFalse(((UnionGraph) g3).hasSubGraph()); Graph g4 = repository.get("builtins-rdfs.rdf"); Assertions.assertSame(g3, g4); - Assertions.assertEquals(Set.of(g1, g3), repository.graphs().collect(Collectors.toSet())); + Assertions.assertEquals(Set.of(g1, g3), repository.loadedGraphs().collect(Collectors.toSet())); Assertions.assertEquals( List.of("X", "Y", "builtins-owl.rdf", "builtins-rdfs.rdf", "http://www.w3.org/2002/07/owl#"), diff --git a/jena-ontapi/src/test/java/org/apache/jena/ontapi/OntUnionGraphRepositoryTest.java b/jena-ontapi/src/test/java/org/apache/jena/ontapi/OntUnionGraphRepositoryTest.java index 8df9aa5bdd..a3871f1715 100644 --- a/jena-ontapi/src/test/java/org/apache/jena/ontapi/OntUnionGraphRepositoryTest.java +++ b/jena-ontapi/src/test/java/org/apache/jena/ontapi/OntUnionGraphRepositoryTest.java @@ -674,4 +674,18 @@ public class OntUnionGraphRepositoryTest { repo2.graphs().collect(Collectors.toSet())); } + @Test + public void testLoadRealModelWithMappingDifferentFromIri() { + var documentPath = "pizza.ttl"; + var repository = GraphRepository.createGraphDocumentRepositoryMem(); + repository.addMapping( + "XXXX", + documentPath); + var m = OntModelFactory.getModelOrNull( + "http://www.co-ode.org/ontologies/pizza/pizza.owl", + OntSpecification.OWL2_DL_MEM_BUILTIN_RDFS_INF, + repository); + Assertions.assertNotNull(m.getOntClass("http://www.co-ode.org/ontologies/pizza/pizza.owl#VegetarianTopping")); + } + }
