[
https://issues.apache.org/jira/browse/JENA-2051?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Andy Seaborne closed JENA-2051.
-------------------------------
Resolution: Information Provided
> 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
> Priority: Trivial
>
> 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)