Adam Jacobs created JENA-1391: --------------------------------- Summary: 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 !listNames().hasNext() && getDefaultModel().isEmpty(); } {code} -- This message was sent by Atlassian JIRA (v6.4.14#64029)