[ https://issues.apache.org/jira/browse/JENA-1391?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16187483#comment-16187483 ]
A. Soroka commented on JENA-1391: --------------------------------- I am totally cool to use non-dynamic or dynamic-- maybe I will leave that as a parameter. The "how to pick when there are values from both sides" is the thing that stopped me. It sounds like at least two people think "left-over-right" is reasonable, so that's where I'll go, and we'll see it if causes any probs. :grin: I'd be happy to pull out the {{Callback}} stuff as part of this. Do you think we should deprecate it for a release first? > 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)