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)