You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commonsrdf.apache.org by st...@apache.org on 2016/10/03 16:39:58 UTC
[02/50] incubator-commonsrdf git commit: Move some converters to
JsonLdRDFTermFactory
Move some converters to JsonLdRDFTermFactory
Project: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/commit/e98a9635
Tree: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/tree/e98a9635
Diff: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/diff/e98a9635
Branch: refs/heads/master
Commit: e98a9635f7f95c55eef48f98cf6ae7050c8235f3
Parents: 4da1bae
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Mon Apr 4 16:32:31 2016 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Mon Apr 4 16:32:31 2016 +0100
----------------------------------------------------------------------
.../commons/rdf/jsonldjava/JsonLdGraph.java | 69 +++++++------
.../rdf/jsonldjava/JsonLdRDFTermFactory.java | 102 +++++++++++++++++++
.../commons/rdf/jsonldjava/JsonLdTriple.java | 8 +-
3 files changed, 141 insertions(+), 38 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/e98a9635/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 730191c..14990d3 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
@@ -32,7 +32,6 @@ import org.apache.commons.rdf.api.Literal;
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.simple.SimpleRDFTermFactory;
import com.github.jsonldjava.core.RDFDataset;
import com.github.jsonldjava.core.RDFDataset.Node;
@@ -40,9 +39,40 @@ import com.github.jsonldjava.core.RDFDataset.Quad;
public class JsonLdGraph implements Graph {
- private static UUID SALT = UUID.randomUUID();
+ /**
+ * Used by {@link #bnodePrefix()} to get a unique UUID per JVM run
+ */
+ private static UUID SALT = UUID.randomUUID();
- private RDFDataset rdfDataSet = new RDFDataset();
+ private JsonLdRDFTermFactory rdfTermFactory;
+
+ public JsonLdGraph() {
+ this(new RDFDataset(), false);
+ }
+
+ public JsonLdGraph(RDFDataset rdfDataset) {
+ this(rdfDataset, false);
+ }
+
+ public JsonLdGraph(RDFDataset rdfDataset, boolean unionGraph) {
+ this.rdfDataSet = rdfDataset;
+ this.unionGraph = unionGraph;
+ }
+
+ 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;
+ }
+
+ /**
+ * The underlying JSON-LD {@link RDFDataset}.
+ */
+ private RDFDataset rdfDataSet;
/**
* If true, include all Quad statements as Triples. If false,
@@ -53,6 +83,7 @@ public class JsonLdGraph implements Graph {
@Override
public void close() throws Exception {
+ // Drop the memory reference, but don't clear it
rdfDataSet = null;
}
@@ -63,8 +94,6 @@ public class JsonLdGraph implements Graph {
add(triple.getSubject(), triple.getPredicate(), triple.getObject());
}
- private static RDFTermFactory rdfTermFactory = new SimpleRDFTermFactory();
-
private Triple asTriple(final RDFDataset.Quad quad) {
return new JsonLdTriple(quad, bnodePrefix());
}
@@ -72,36 +101,6 @@ public class JsonLdGraph implements Graph {
private String bnodePrefix() {
return "urn:uuid:" + SALT + "#" + "g"+ System.identityHashCode(rdfDataSet);
}
-
- static RDFTerm asTerm(final Node node, String blankNodePrefix) {
- if (node.isIRI()) {
- return new JsonLdIRI(node);
- } else if (node.isBlankNode()) {
- return new JsonLdBlankNode(node, blankNodePrefix);
- } else if (node.isLiteral()) {
- // TODO: Our own JsonLdLiteral
- if (node.getLanguage() != null) {
- return rdfTermFactory.createLiteral(node.getValue(), node.getLanguage());
- } else {
- return rdfTermFactory.createLiteral(node.getValue(), rdfTermFactory.createIRI(node.getDatatype()));
- }
- } else {
- throw new IllegalArgumentException("Node is neither IRI, BlankNode nor Literal: " + node);
- }
- }
-
- private RDFDataset.Quad asJsonLdQuad(Triple triple) {
- Node subject = asJsonLdNode(triple.getSubject());
- Node predicate = asJsonLdNode(triple.getPredicate());
- Node object = asJsonLdNode(triple.getObject());
- String graph = null;
- // TODO: Add Quad to commons-rdf
-// if (triple instanceof Quad) {
-// String graph = triple.getGraph().getIRIString();
-// }
- return new RDFDataset.Quad(subject, predicate, object, graph);
-
- }
private Node asJsonLdNode(RDFTerm term) {
if (term instanceof IRI) {
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/e98a9635/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 e2ee429..99927ad 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
@@ -17,12 +17,114 @@
*/
package org.apache.commons.rdf.jsonldjava;
+import java.util.UUID;
+
+import org.apache.commons.rdf.api.BlankNode;
+import org.apache.commons.rdf.api.BlankNodeOrIRI;
import org.apache.commons.rdf.api.Graph;
+import org.apache.commons.rdf.api.IRI;
+import org.apache.commons.rdf.api.Literal;
+import org.apache.commons.rdf.api.RDFTerm;
+import org.apache.commons.rdf.api.Triple;
import org.apache.commons.rdf.simple.SimpleRDFTermFactory;
+import com.github.jsonldjava.core.RDFDataset;
+import com.github.jsonldjava.core.RDFDataset.Node;
+
final class JsonLdRDFTermFactory extends SimpleRDFTermFactory {
+
+ public JsonLdRDFTermFactory() {
+ // An "outside Graph" bnodePrefix
+ this("urn:uuid:" + UUID.randomUUID() + "#b");
+ }
+
+ JsonLdRDFTermFactory(String bnodePrefix) {
+ this.bnodePrefix = bnodePrefix;
+ }
+
+ String bnodePrefix;
+
@Override
public Graph createGraph() throws UnsupportedOperationException {
return new JsonLdGraph();
}
+
+ @Override
+ public IRI createIRI(String iri) {
+ return new JsonLdIRI(new RDFDataset.IRI(iri));
+ }
+
+ @Override
+ public BlankNode createBlankNode() {
+ String id = "_:" + UUID.randomUUID().toString();
+ return new JsonLdBlankNode(new RDFDataset.BlankNode(id), bnodePrefix);
+ }
+
+ @Override
+ public BlankNode createBlankNode(String name) {
+ String id = "_:" + name;
+ // TODO: Check if name is valid JSON-LD BlankNode identifier
+ return new JsonLdBlankNode(new RDFDataset.BlankNode(id), bnodePrefix);
+ }
+
+ @Override
+ public Triple createTriple(BlankNodeOrIRI subject, IRI predicate, RDFTerm object) {
+ return super.createTriple(subject, predicate, object);
+ }
+
+
+ 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);
+ }
+
+
+ public RDFDataset.Quad asJsonLdQuad(Triple triple) {
+ Node subject = asJsonLdNode(triple.getSubject());
+ Node predicate = asJsonLdNode(triple.getPredicate());
+ Node object = asJsonLdNode(triple.getObject());
+ String graph = null;
+ // TODO: Add Quad to commons-rdf
+// if (triple instanceof Quad) {
+// String graph = triple.getGraph().getIRIString();
+// }
+ return new RDFDataset.Quad(subject, predicate, object, graph);
+
+ }
+
+ RDFTerm asTerm(final Node node, String blankNodePrefix) {
+ if (node.isIRI()) {
+ return new JsonLdIRI(node);
+ } else if (node.isBlankNode()) {
+ return new JsonLdBlankNode(node, blankNodePrefix);
+ } else if (node.isLiteral()) {
+ // TODO: Our own JsonLdLiteral
+ if (node.getLanguage() != null) {
+ return createLiteral(node.getValue(), node.getLanguage());
+ } else {
+ return createLiteral(node.getValue(), createIRI(node.getDatatype()));
+ }
+ } else {
+ throw new IllegalArgumentException("Node is neither IRI, BlankNode nor Literal: " + node);
+ }
+ }
+
+
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/e98a9635/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdTriple.java
----------------------------------------------------------------------
diff --git a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdTriple.java b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdTriple.java
index 1a2dd91..49e95e3 100644
--- a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdTriple.java
+++ b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdTriple.java
@@ -30,6 +30,8 @@ final class JsonLdTriple implements Triple {
private final Quad quad;
private String blankNodePrefix;
+ private static JsonLdRDFTermFactory rdfTermFactory = new JsonLdRDFTermFactory();
+
JsonLdTriple(Quad quad, String blankNodePrefix) {
this.quad = quad;
this.blankNodePrefix = blankNodePrefix;
@@ -37,17 +39,17 @@ final class JsonLdTriple implements Triple {
@Override
public BlankNodeOrIRI getSubject() {
- return (BlankNodeOrIRI) JsonLdGraph.asTerm(quad.getSubject(), blankNodePrefix);
+ return (BlankNodeOrIRI) rdfTermFactory.asTerm(quad.getSubject(), blankNodePrefix);
}
@Override
public IRI getPredicate() {
- return (IRI) JsonLdGraph.asTerm(quad.getPredicate(), blankNodePrefix);
+ return (IRI) rdfTermFactory.asTerm(quad.getPredicate(), blankNodePrefix);
}
@Override
public RDFTerm getObject() {
- return JsonLdGraph.asTerm(quad.getObject(), blankNodePrefix);
+ return rdfTermFactory.asTerm(quad.getObject(), blankNodePrefix);
}
@Override