Graph uses factory
Project: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/commit/dde5abac Tree: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/tree/dde5abac Diff: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/diff/dde5abac Branch: refs/heads/jena Commit: dde5abac27983ace5ebbdc1b37c35d65a0df3dc0 Parents: 80ad999 Author: Stian Soiland-Reyes <[email protected]> Authored: Thu Sep 8 17:10:31 2016 +0100 Committer: Stian Soiland-Reyes <[email protected]> Committed: Thu Sep 8 17:10:31 2016 +0100 ---------------------------------------------------------------------- .../commons/rdf/jsonldjava/JsonLdGraph.java | 79 ++++++-------------- .../rdf/jsonldjava/JsonLdRDFTermFactory.java | 7 +- 2 files changed, 30 insertions(+), 56 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/dde5abac/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraph.java ---------------------------------------------------------------------- diff --git a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraph.java b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraph.java index c31ad71..30c13a8 100644 --- a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraph.java +++ b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraph.java @@ -49,21 +49,22 @@ public class JsonLdGraph implements Graph { */ private RDFDataset rdfDataSet; - public RDFDataset getRdfDataSet() { - return rdfDataSet; - } - - private JsonLdRDFTermFactory rdfTermFactory; - /** * If true, include all Quad statements as Triples. If false, * only Quads in the default graph (<code>null</code>) are * included. */ - private boolean unionGraph = false; + private final boolean unionGraph; + + /** + * Prefix to use in blank node identifiers + */ + private final String bnodePrefix; + private JsonLdRDFTermFactory factory; + public JsonLdGraph() { - this(new RDFDataset(), false); + this(new RDFDataset(), false); } public JsonLdGraph(RDFDataset rdfDataset) { @@ -73,8 +74,16 @@ public class JsonLdGraph implements Graph { public JsonLdGraph(RDFDataset rdfDataset, boolean unionGraph) { this.rdfDataSet = rdfDataset; this.unionGraph = unionGraph; + this.bnodePrefix = "urn:uuid:" + SALT + "#" + "g"+ System.identityHashCode(rdfDataSet); + this.factory = new JsonLdRDFTermFactory(bnodePrefix); } + + public RDFDataset getRdfDataSet() { + return rdfDataSet; + } + + @Override public void add(BlankNodeOrIRI subject, IRI predicate, RDFTerm object) { String subjectStr; @@ -121,7 +130,7 @@ public class JsonLdGraph implements Graph { @Override public void close() { // Drop the memory reference, but don't clear it - rdfDataSet = null; + rdfDataSet = null; } @Override @@ -134,22 +143,12 @@ public class JsonLdGraph implements Graph { return stream().anyMatch(Predicate.isEqual(triple)); } - public RDFTermFactory getContext() { - // Note: This does not need to be synchronized, it's OK - // if you get a few accidental copies as the - // same bnodePrefix() is passed to each - if (rdfTermFactory == null) { - rdfTermFactory = new JsonLdRDFTermFactory(bnodePrefix()); - } - return rdfTermFactory; - } - @Override public Stream<? extends Triple> stream() { if (! unionGraph) { - return rdfDataSet.getQuads("@default").parallelStream().map(this::asTriple); + return rdfDataSet.getQuads("@default").parallelStream().map(factory::asTriple); } - return rdfDataSet.graphNames().parallelStream().map(rdfDataSet::getQuads).flatMap(List<Quad>::parallelStream).map(this::asTriple); + return rdfDataSet.graphNames().parallelStream().map(rdfDataSet::getQuads).flatMap(List<Quad>::parallelStream).map(factory::asTriple); } @Override @@ -193,41 +192,11 @@ public class JsonLdGraph implements Graph { return rdfDataSet.graphNames().parallelStream().map(rdfDataSet::getQuads).collect(Collectors.summingLong(List::size)); } } - - private Node asJsonLdNode(RDFTerm term) { - if (term instanceof IRI) { - return new RDFDataset.IRI( ((IRI)term).getIRIString() ); - } - if (term instanceof BlankNode) { - - String uniqueReference = ((BlankNode)term).uniqueReference(); - if (uniqueReference.startsWith(bnodePrefix())) { - // one of our own - // TODO: Retrieve the original BlankNode - return new RDFDataset.BlankNode(term.ntriplesString()); - } - return new RDFDataset.BlankNode( "_:" + uniqueReference ); - } - if (term instanceof Literal) { - Literal literal = (Literal) term; - return new RDFDataset.Literal(literal.getLexicalForm(), literal.getDatatype().getIRIString(), - literal.getLanguageTag().orElse(null)); - } - throw new IllegalArgumentException("RDFTerm not instanceof IRI, BlankNode or Literal: " + term); - } - - private Triple asTriple(final RDFDataset.Quad quad) { - return new JsonLdTriple(quad, bnodePrefix()); - } - - public String bnodePrefix() { - return "urn:uuid:" + SALT + "#" + "g"+ System.identityHashCode(rdfDataSet); - } - + private Predicate<? super Quad> quadFilter(BlankNodeOrIRI subject, IRI predicate, RDFTerm object) { - Optional<Node> subjectNode = Optional.ofNullable(subject).map(this::asJsonLdNode); - Optional<Node> predicateNode = Optional.ofNullable(predicate).map(this::asJsonLdNode); - Optional<Node> objectNode = Optional.ofNullable(object).map(this::asJsonLdNode); + Optional<Node> subjectNode = Optional.ofNullable(subject).map(factory::asJsonLdNode); + Optional<Node> predicateNode = Optional.ofNullable(predicate).map(factory::asJsonLdNode); + Optional<Node> objectNode = Optional.ofNullable(object).map(factory::asJsonLdNode); return q -> { if (subjectNode.isPresent() && subjectNode.get().compareTo(q.getSubject()) != 0) { http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/dde5abac/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdRDFTermFactory.java ---------------------------------------------------------------------- diff --git a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdRDFTermFactory.java b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdRDFTermFactory.java index 5ac360a..12ab13d 100644 --- a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdRDFTermFactory.java +++ b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdRDFTermFactory.java @@ -27,6 +27,7 @@ import org.apache.commons.rdf.api.Literal; import org.apache.commons.rdf.api.QuadLike; import org.apache.commons.rdf.api.RDFTerm; import org.apache.commons.rdf.api.RDFTermFactory; +import org.apache.commons.rdf.api.Triple; import org.apache.commons.rdf.api.TripleLike; import org.apache.commons.rdf.simple.Types; @@ -74,6 +75,10 @@ final class JsonLdRDFTermFactory implements RDFTermFactory { return new JsonLdTriple.JsonLdTripleImpl(asJsonLdQuad(subject, predicate, object), bnodePrefix); } + public Triple asTriple(final RDFDataset.Quad quad) { + return new JsonLdTriple.JsonLdTripleImpl(quad, bnodePrefix); + } + @Override public JsonLdQuad createQuad(BlankNodeOrIRI graphName, BlankNodeOrIRI subject, IRI predicate, RDFTerm object) throws IllegalArgumentException, UnsupportedOperationException { @@ -93,7 +98,7 @@ final class JsonLdRDFTermFactory implements RDFTermFactory { } - private Node asJsonLdNode(RDFTerm term) { + public Node asJsonLdNode(RDFTerm term) { if (term instanceof JsonLdTerm) { // Return original Node return ((JsonLdTerm)term).asNode();
