You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@jena.apache.org by "Adam Jacobs (JIRA)" <ji...@apache.org> on 2017/09/06 02:26:00 UTC
[jira] [Created] (JENA-1391) Add Convenience Methods to Dataset
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)