[ https://issues.apache.org/jira/browse/JENA-1391?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16193011#comment-16193011 ]
A. Soroka commented on JENA-1391: --------------------------------- Okay, back with a new one! What does the {{Context}} look like for intersections? If I understand the purpose of {{Context}} correctly, ARQ sometimes uses it to make decisions about query behavior/operation. So for an intersection of {{Dataset}} s, a mix of {{Context}} mappings seems a bit hard to understand. (Actually, that's true of union as well, but the consequences seem less confusing.) Should we just require people building up unions and intersections and differences to set up a new independent {{Context}} for their resulting construction? That might be the least confusing thing, and with {{Context::copy}} it wouldn't be much of a burden. > Add Convenience Methods to Dataset > ---------------------------------- > > Key: JENA-1391 > URL: https://issues.apache.org/jira/browse/JENA-1391 > Project: Apache Jena > Issue Type: Improvement > Components: ARQ > Affects Versions: Jena 3.4.0 > Reporter: Adam Jacobs > Assignee: A. Soroka > Priority: Trivial > > The Dataset interface could provide several convenience methods similar to > the Model interface, allowing usability of RDF quads on par with RDF triples. > Specific examples include, > # add(Dataset) > # remove(Dataset) > # union(Dataset) > # intersection(Dataset) > # difference(Dataset) > # isEmpty() > Following is a possible implementation of these methods. > {code:java} > default Dataset add(Dataset d) { > this.getDefaultModel().add(d.getDefaultModel()); > d.listNames().forEachRemaining(name -> > this.getNamedModel(name).add(d.getNamedModel(name))); > return this; > } > default Dataset remove(Dataset d) { > this.getDefaultModel().remove(d.getDefaultModel()); > d.listNames().forEachRemaining(name -> > this.getNamedModel(name).remove(d.getNamedModel(name))); > return this; > } > default Dataset union(Dataset d) { > return DatasetFactory.create().add(this).add(d); > } > default Dataset difference(Dataset d) { > Dataset output = DatasetFactory.create(); > > output.setDefaultModel(this.getDefaultModel().difference(d.getDefaultModel())); > this.listNames().forEachRemaining(name -> { > Model difference = > this.getNamedModel(name).difference(d.getNamedModel(name)); > if (!difference.isEmpty()) output.addNamedModel(name, difference); > }); > return output; > } > default Dataset intersection(Dataset d) { > Dataset output = DatasetFactory.create(); > > output.setDefaultModel(this.getDefaultModel().intersection(d.getDefaultModel())); > Set<String> names = this.names(); > names.retainAll(d.names()); > names.forEach(name -> { > Model intersection = > this.getNamedModel(name).intersection(d.getNamedModel(name)); > if (!intersection.isEmpty()) output.addNamedModel(name, > intersection); > }); > return output; > } > default Set<String> names() { > Set<String> names = new HashSet<>(); > this.listNames().forEachRemaining(names::add); > return names; > } > default boolean isEmpty() { > return this.asDatasetGraph().isEmpty(); > } > {code} -- This message was sent by Atlassian JIRA (v6.4.14#64029)