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)

Reply via email to