BR created JENA-2051: ------------------------ Summary: Union Model Returns Empty Model Even When Default Model Contains Statements Key: JENA-2051 URL: https://issues.apache.org/jira/browse/JENA-2051 Project: Apache Jena Issue Type: Bug Reporter: BR
I'm using Jena 3.15.0. When I try to use Dataset#getUnionModel no statements are returned in the scenario below. The work around to provide your own union method seems to be reasonable. This is also shown in the test case below. {code} private String unionOfJsonLdGraphs(List<String> jsonLdGraphs) { return jsonLdGraphs.stream() .map(graph -> from(graph)) .flatMap(ContentProfileGraphExtractorImpl::modelsFromDataSet) // Why did this not work? //.map(Dataset::getUnionModel) .reduce(this::union) .map(ContentProfileGraphExtractorImpl::modelToString) .orElse("{}"); } private static Stream<Model> modelsFromDataSet(Dataset dataset) { Stream<Model> namedModels = stream(spliteratorUnknownSize(dataset.listNames(), ORDERED), false).map(graphName->dataset.getNamedModel(graphName)); Stream<Model> defaultModel = of(dataset.getDefaultModel()); return concat(defaultModel, namedModels); } private Model union(Model modelA, Model modelB) { if(null!=modelA && null!=modelB) { return modelA.union(modelB); } else if(null!=modelA) { return modelA; } else if(null!=modelB) { return modelB; } else { throw new RuntimeException(); } } /** * Creates a String containing the JSON-LD of the Model. * * @see https://github.com/apache/jena/blob/master/jena-arq/src-examples/arq/examples/riot/Ex_WriteJsonLD.java * @see https://json-ld.org/spec/latest/json-ld-framing/ * @see https://w3c.github.io/json-ld-framing/ */ private static String modelToString(Model model) { Map<String, Object> frame = new HashMap<>(); Map<String, Object> context = new HashMap<>(); context.put("@vocab", "https://data.elsevier.com/lifescience/entellect/patent/"); frame.put("@context", context); // Construct Frame Context serializationContext = new Context(); serializationContext.put(JSONLD_FRAME, frame); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); RDFWriter.create().format(JSONLD_FRAME_PRETTY).source(model).context(serializationContext) .output(outputStream); return new String(outputStream.toByteArray(), UTF_8); } {code} -- This message was sent by Atlassian Jira (v8.3.4#803005)