[ https://issues.apache.org/jira/browse/JENA-1391?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Adam Jacobs updated JENA-1391: ------------------------------ Description: 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} was: 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 !listNames().hasNext() && getDefaultModel().isEmpty(); } {code} > 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 > 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)