JenaJLdRDFTermFactory -> JsonLdFactory
Project: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/commit/0bb93696 Tree: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/tree/0bb93696 Diff: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/diff/0bb93696 Branch: refs/heads/master Commit: 0bb936968b865c1499d8af1cf3ae4ef46ab9b5bc Parents: ec8a4ac Author: Stian Soiland-Reyes <st...@apache.org> Authored: Wed Oct 19 09:51:30 2016 +0100 Committer: Stian Soiland-Reyes <st...@apache.org> Committed: Wed Oct 19 09:51:30 2016 +0100 ---------------------------------------------------------------------- .../commons/rdf/jsonldjava/JsonLdFactory.java | 306 +++++++++++++++++++ .../commons/rdf/jsonldjava/JsonLdGraphLike.java | 8 +- .../commons/rdf/jsonldjava/JsonLdQuadLike.java | 2 +- .../rdf/jsonldjava/JsonLdRDFTermFactory.java | 306 ------------------- .../jsonldjava/experimental/JsonLdParser.java | 18 +- .../commons/rdf/jsonldjava/package-info.java | 2 +- .../org.apache.commons.rdf.api.RDFTermFactory | 2 +- .../rdf/jsonldjava/JsonLdFactoryTest.java | 54 ++++ .../commons/rdf/jsonldjava/JsonLdGraphTest.java | 2 +- .../rdf/jsonldjava/JsonLdParserBuilderTest.java | 2 +- .../jsonldjava/JsonLdRDFTermFactoryTest.java | 54 ---- src/site/markdown/implementations.md | 4 +- 12 files changed, 380 insertions(+), 380 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/0bb93696/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdFactory.java ---------------------------------------------------------------------- diff --git a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdFactory.java b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdFactory.java new file mode 100644 index 0000000..a66fd3d --- /dev/null +++ b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdFactory.java @@ -0,0 +1,306 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.commons.rdf.jsonldjava; + +import java.nio.charset.StandardCharsets; +import java.util.Objects; +import java.util.UUID; + +import org.apache.commons.rdf.api.BlankNode; +import org.apache.commons.rdf.api.BlankNodeOrIRI; +import org.apache.commons.rdf.api.Dataset; +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.RDFTermFactory; +import org.apache.commons.rdf.api.Triple; +import org.apache.commons.rdf.simple.Types; + +import com.github.jsonldjava.core.RDFDataset; +import com.github.jsonldjava.core.RDFDataset.Node; + +public final class JsonLdFactory implements RDFTermFactory { + + final String bnodePrefix; + + public JsonLdFactory() { + // An "outside Graph" bnodePrefix + this("urn:uuid:" + UUID.randomUUID() + "#b"); + } + + JsonLdFactory(String bnodePrefix) { + this.bnodePrefix = Objects.requireNonNull(bnodePrefix); + } + + /** + * Adapt a JsonLd {@link RDFDataset} as a Commons RDF {@link Dataset}. + * <p> + * Changes to the Commons RDF {@link Dataset} are reflected in the JsonLd + * {@link RDFDataset} and vice versa. + * + * @see #asGraph(RDFDataset) + * @param rdfDataSet JsonLd {@link RDFDataset} to adapt + * @return Adapted {@link Dataset} + */ + public JsonLdDataset asDataset(RDFDataset rdfDataSet) { + return new JsonLdDatasetImpl(rdfDataSet); + } + + /** + * Adapt a JsonLd {@link RDFDataset} as a Commons RDF {@link Graph}. + * <p> + * Only triples in the <em>default graph</em> are included. To retrieve + * any other graph, {@link #asDataset(RDFDataset)} together with + * {@link Dataset#getGraph(BlankNodeOrIRI)}. + * <p> + * Changes to the Commons RDF {@link Graph} are reflected in the JsonLd + * {@link RDFDataset} and vice versa. + * + * @see #asDataset(RDFDataset) + * @see #asUnionGraph(RDFDataset) + * @param rdfDataSet JsonLd {@link RDFDataset} to adapt + * @return Adapted {@link Graph} covering the <em>default graph</em> + */ + public JsonLdGraph asGraph(RDFDataset rdfDataSet) { + return new JsonLdGraphImpl(rdfDataSet); + } + + public Node asJsonLdNode(RDFTerm term) { + if (term instanceof JsonLdBlankNode) { + JsonLdBlankNode jsonLdBlankNode = (JsonLdBlankNode) term; + if (jsonLdBlankNode.uniqueReference().startsWith(bnodePrefix)) { + // Only return blank nodes 'as is' if they have the same prefix + return jsonLdBlankNode.asJsonLdNode(); + } + } else if (term instanceof JsonLdTerm) { + // non-Bnodes can always be return as-is + return ((JsonLdTerm) term).asJsonLdNode(); + } + if (term instanceof IRI) { + return new RDFDataset.IRI(((IRI) term).getIRIString()); + } + if (term instanceof BlankNode) { + String ref = ((BlankNode) term).uniqueReference(); + if (ref.startsWith(bnodePrefix)) { + // one of our own (but no longer a JsonLdBlankNode), + // we can recover the label after our unique prefix + return new RDFDataset.BlankNode(ref.replace(bnodePrefix, "")); + } + // The "foreign" unique reference might not be a valid bnode string, + // we'll convert to a UUID + UUID uuid = UUID.nameUUIDFromBytes(ref.getBytes(StandardCharsets.UTF_8)); + return new RDFDataset.BlankNode("_:" + uuid); + } + 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); + } + + /** + * Adapt a Commons RDF {@link org.apache.commons.rdf.api.Quad} as a JsonLd {@link com.github.jsonldjava.core.RDFDataset.Quad}. + * + * @param quad Commons RDF {@link org.apache.commons.rdf.api.Quad} to adapt + * @return Adapted JsonLd {@link com.github.jsonldjava.core.RDFDataset.Quad} + */ + public RDFDataset.Quad asJsonLdQuad(org.apache.commons.rdf.api.Quad quad) { + BlankNodeOrIRI g = quad.getGraphName().orElse(null); + return createJsonLdQuad(g, quad.getSubject(), quad.getPredicate(), quad.getObject()); + } + + /** + * Adapt a Commons RDF {@link Triple} as a JsonLd {@link com.github.jsonldjava.core.RDFDataset.Quad}. + * + * @param triple Commons RDF {@link Triple} to adapt + * @return Adapted JsonLd {@link com.github.jsonldjava.core.RDFDataset.Quad} + */ + public RDFDataset.Quad asJsonLdQuad(Triple triple) { + return createJsonLdQuad(null, triple.getSubject(), triple.getPredicate(), triple.getObject()); + } + + /** + * Adapt a JsonLd {@link com.github.jsonldjava.core.RDFDataset.Quad} as a Commons RDF + * {@link org.apache.commons.rdf.api.Quad}. + * <p> + * The underlying JsonLd quad can be retrieved with + * {@link JsonLdQuad#asJsonLdQuad()}. + * + * @param quad + * A JsonLd {@link com.github.jsonldjava.core.RDFDataset.Quad} to adapt + * @return Adapted {@link JsonLdQuad} + */ + public JsonLdQuad asQuad(final RDFDataset.Quad quad) { + return new JsonLdQuadImpl(quad, bnodePrefix); + } + + /** + * Adapt a JsonLd {@link Node} as a Commons RDF {@link RDFTerm}. + * <p> + * The underlying node can be retrieved with + * {@link JsonLdTerm#asJsonLdNode()}. + * + * @param node + * A JsonLd {@link Node} to adapt + * @return Adapted {@link JsonLdTerm} + */ + public JsonLdTerm asRDFTerm(final Node node) { + return asRDFTerm(node, bnodePrefix); + } + + /** + * Adapt a JsonLd {@link com.github.jsonldjava.core.RDFDataset.Quad} as a Commons RDF + * {@link org.apache.commons.rdf.api.Triple}. + * <p> + * The underlying JsonLd quad can be retrieved with + * {@link JsonLdTriple#asJsonLdQuad()}. + * + * @param quad + * A JsonLd {@link com.github.jsonldjava.core.RDFDataset.Quad} to adapt + * @return Adapted {@link JsonLdTriple} + */ + public JsonLdTriple asTriple(final RDFDataset.Quad quad) { + return new JsonLdTripleImpl(quad, bnodePrefix); + } + + /** + * Adapt a JsonLd {@link RDFDataset} as a Commons RDF {@link Graph}. + * <p> + * The graph can be seen as a <em>union graph</em> as it will contains all the + * triples across all the graphs of the underlying {@link RDFDataset}. + * <p> + * Note that some triple operations on a union graph + * can be inefficient as they need to remove any duplicate + * triples across the graphs. + * <p> + * Changes to the Commons RDF {@link Graph} are reflected in the JsonLd + * {@link RDFDataset} and vice versa. Triples removed from the graph are + * removed from <strong>all</strong> graphs, while triples added + * are added to the <em>default graph</em>. + * + * @param rdfDataSet JsonLd {@link RDFDataset} to adapt + * @return Adapted {@link Dataset} + */ + public JsonLdUnionGraph asUnionGraph(RDFDataset rdfDataSet) { + return new JsonLdUnionGraphImpl(rdfDataSet); + } + + @Override + public JsonLdBlankNode createBlankNode() { + String id = "_:" + UUID.randomUUID().toString(); + return new JsonLdBlankNodeImpl(new RDFDataset.BlankNode(id), bnodePrefix); + } + + @Override + public JsonLdBlankNode createBlankNode(String name) { + String id = "_:" + name; + // TODO: Check if name is valid JSON-LD BlankNode identifier + return new JsonLdBlankNodeImpl(new RDFDataset.BlankNode(id), bnodePrefix); + } + + @Override + public JsonLdDataset createDataset() { + return new JsonLdDatasetImpl(bnodePrefix); + } + + @Override + public JsonLdGraph createGraph() { + return new JsonLdGraphImpl(bnodePrefix); + } + + @Override + public JsonLdIRI createIRI(String iri) { + return new JsonLdIRIImpl(iri); + } + + @Override + public JsonLdLiteral createLiteral(String literal) { + return new JsonLdLiteralImpl(new RDFDataset.Literal(literal, null, null)); + } + + @Override + public JsonLdLiteral createLiteral(String literal, IRI dataType) { + return new JsonLdLiteralImpl(new RDFDataset.Literal(literal, dataType.getIRIString(), null)); + } + + @Override + public JsonLdLiteral createLiteral(String literal, String language) { + return new JsonLdLiteralImpl(new RDFDataset.Literal(literal, Types.RDF_LANGSTRING.getIRIString(), language)); + } + + @Override + public JsonLdQuad createQuad(BlankNodeOrIRI graphName, BlankNodeOrIRI subject, IRI predicate, RDFTerm object) + throws IllegalArgumentException, UnsupportedOperationException { + return new JsonLdQuadImpl(createJsonLdQuad(graphName, subject, predicate, object), bnodePrefix); + } + + @Override + public JsonLdTriple createTriple(BlankNodeOrIRI subject, IRI predicate, RDFTerm object) { + return new JsonLdTripleImpl(createJsonLdQuad(null, subject, predicate, object), bnodePrefix); + } + + String asJsonLdString(BlankNodeOrIRI blankNodeOrIRI) { + if (blankNodeOrIRI == null) { + return null; + } + if (blankNodeOrIRI instanceof IRI) { + return ((IRI)blankNodeOrIRI).getIRIString(); + } else if (blankNodeOrIRI instanceof BlankNode) { + BlankNode blankNode = (BlankNode) blankNodeOrIRI; + String ref = blankNode.uniqueReference(); + if (ref.startsWith(bnodePrefix)) { + // One of ours (but possibly not a JsonLdBlankNode) - + // we can use the suffix directly + return ref.replace(bnodePrefix, "_:"); + } else { + // Map to unique bnode identifier, e.g. _:0dbd92ee-ab1a-45e7-bba2-7ade54f87ec5 + UUID uuid = UUID.nameUUIDFromBytes(ref.getBytes(StandardCharsets.UTF_8)); + return "_:"+ uuid; + } + } else { + throw new IllegalArgumentException("Expected a BlankNode or IRI, not: " + blankNodeOrIRI); + } + } + + JsonLdTerm asRDFTerm(final Node node, String blankNodePrefix) { + if (node == null) { + return null; // e.g. default graph + } + if (node.isIRI()) { + return new JsonLdIRIImpl(node); + } else if (node.isBlankNode()) { + return new JsonLdBlankNodeImpl(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); + } + } + + RDFDataset.Quad createJsonLdQuad(BlankNodeOrIRI graphName, BlankNodeOrIRI subject, IRI predicate, RDFTerm object) { + return new RDFDataset.Quad(asJsonLdNode(subject), asJsonLdNode(predicate), asJsonLdNode(object), asJsonLdString(graphName)); + } + +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/0bb93696/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraphLike.java ---------------------------------------------------------------------- diff --git a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraphLike.java b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraphLike.java index 579a03a..401de1f 100644 --- a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraphLike.java +++ b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraphLike.java @@ -72,7 +72,7 @@ abstract class AbstractJsonLdGraphLike<T extends TripleLike> */ final String bnodePrefix; - final JsonLdRDFTermFactory factory; + final JsonLdFactory factory; /** * The underlying JSON-LD {@link RDFDataset}. @@ -89,7 +89,7 @@ abstract class AbstractJsonLdGraphLike<T extends TripleLike> AbstractJsonLdGraphLike(RDFDataset rdfDataSet, String bnodePrefix) { this.rdfDataSet = Objects.requireNonNull(rdfDataSet); this.bnodePrefix = Objects.requireNonNull(bnodePrefix); - this.factory = new JsonLdRDFTermFactory(bnodePrefix); + this.factory = new JsonLdFactory(bnodePrefix); } AbstractJsonLdGraphLike(String bnodePrefix) { @@ -161,8 +161,8 @@ abstract class AbstractJsonLdGraphLike<T extends TripleLike> * Convert JsonLd Quad to a Commons RDF {@link Triple} or {@link org.apache.commons.rdf.api.Quad} * * - * @see JsonLdRDFTermFactory#asTriple(Quad) - * @see JsonLdRDFTermFactory#asQuad(Quad) + * @see JsonLdFactory#asTriple(Quad) + * @see JsonLdFactory#asQuad(Quad) * @param jsonldQuad jsonld quad to convert * @return converted {@link TripleLike} */ http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/0bb93696/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdQuadLike.java ---------------------------------------------------------------------- diff --git a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdQuadLike.java b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdQuadLike.java index bd9d472..acb429a 100644 --- a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdQuadLike.java +++ b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdQuadLike.java @@ -32,7 +32,7 @@ public interface JsonLdQuadLike<G extends RDFTerm> extends QuadLike<G>, JsonLdTr // Note: We always pass the blankNodePrefix and don't rely on the internal // blankNodePrefix in this static factory - private static JsonLdRDFTermFactory rdfTermFactory = new JsonLdRDFTermFactory(); + private static JsonLdFactory rdfTermFactory = new JsonLdFactory(); private final Quad quad; private String blankNodePrefix; http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/0bb93696/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 deleted file mode 100644 index 2e586f9..0000000 --- a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdRDFTermFactory.java +++ /dev/null @@ -1,306 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.commons.rdf.jsonldjava; - -import java.nio.charset.StandardCharsets; -import java.util.Objects; -import java.util.UUID; - -import org.apache.commons.rdf.api.BlankNode; -import org.apache.commons.rdf.api.BlankNodeOrIRI; -import org.apache.commons.rdf.api.Dataset; -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.RDFTermFactory; -import org.apache.commons.rdf.api.Triple; -import org.apache.commons.rdf.simple.Types; - -import com.github.jsonldjava.core.RDFDataset; -import com.github.jsonldjava.core.RDFDataset.Node; - -public final class JsonLdRDFTermFactory implements RDFTermFactory { - - final String bnodePrefix; - - public JsonLdRDFTermFactory() { - // An "outside Graph" bnodePrefix - this("urn:uuid:" + UUID.randomUUID() + "#b"); - } - - JsonLdRDFTermFactory(String bnodePrefix) { - this.bnodePrefix = Objects.requireNonNull(bnodePrefix); - } - - /** - * Adapt a JsonLd {@link RDFDataset} as a Commons RDF {@link Dataset}. - * <p> - * Changes to the Commons RDF {@link Dataset} are reflected in the JsonLd - * {@link RDFDataset} and vice versa. - * - * @see #asGraph(RDFDataset) - * @param rdfDataSet JsonLd {@link RDFDataset} to adapt - * @return Adapted {@link Dataset} - */ - public JsonLdDataset asDataset(RDFDataset rdfDataSet) { - return new JsonLdDatasetImpl(rdfDataSet); - } - - /** - * Adapt a JsonLd {@link RDFDataset} as a Commons RDF {@link Graph}. - * <p> - * Only triples in the <em>default graph</em> are included. To retrieve - * any other graph, {@link #asDataset(RDFDataset)} together with - * {@link Dataset#getGraph(BlankNodeOrIRI)}. - * <p> - * Changes to the Commons RDF {@link Graph} are reflected in the JsonLd - * {@link RDFDataset} and vice versa. - * - * @see #asDataset(RDFDataset) - * @see #asUnionGraph(RDFDataset) - * @param rdfDataSet JsonLd {@link RDFDataset} to adapt - * @return Adapted {@link Graph} covering the <em>default graph</em> - */ - public JsonLdGraph asGraph(RDFDataset rdfDataSet) { - return new JsonLdGraphImpl(rdfDataSet); - } - - public Node asJsonLdNode(RDFTerm term) { - if (term instanceof JsonLdBlankNode) { - JsonLdBlankNode jsonLdBlankNode = (JsonLdBlankNode) term; - if (jsonLdBlankNode.uniqueReference().startsWith(bnodePrefix)) { - // Only return blank nodes 'as is' if they have the same prefix - return jsonLdBlankNode.asJsonLdNode(); - } - } else if (term instanceof JsonLdTerm) { - // non-Bnodes can always be return as-is - return ((JsonLdTerm) term).asJsonLdNode(); - } - if (term instanceof IRI) { - return new RDFDataset.IRI(((IRI) term).getIRIString()); - } - if (term instanceof BlankNode) { - String ref = ((BlankNode) term).uniqueReference(); - if (ref.startsWith(bnodePrefix)) { - // one of our own (but no longer a JsonLdBlankNode), - // we can recover the label after our unique prefix - return new RDFDataset.BlankNode(ref.replace(bnodePrefix, "")); - } - // The "foreign" unique reference might not be a valid bnode string, - // we'll convert to a UUID - UUID uuid = UUID.nameUUIDFromBytes(ref.getBytes(StandardCharsets.UTF_8)); - return new RDFDataset.BlankNode("_:" + uuid); - } - 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); - } - - /** - * Adapt a Commons RDF {@link org.apache.commons.rdf.api.Quad} as a JsonLd {@link com.github.jsonldjava.core.RDFDataset.Quad}. - * - * @param quad Commons RDF {@link org.apache.commons.rdf.api.Quad} to adapt - * @return Adapted JsonLd {@link com.github.jsonldjava.core.RDFDataset.Quad} - */ - public RDFDataset.Quad asJsonLdQuad(org.apache.commons.rdf.api.Quad quad) { - BlankNodeOrIRI g = quad.getGraphName().orElse(null); - return createJsonLdQuad(g, quad.getSubject(), quad.getPredicate(), quad.getObject()); - } - - /** - * Adapt a Commons RDF {@link Triple} as a JsonLd {@link com.github.jsonldjava.core.RDFDataset.Quad}. - * - * @param triple Commons RDF {@link Triple} to adapt - * @return Adapted JsonLd {@link com.github.jsonldjava.core.RDFDataset.Quad} - */ - public RDFDataset.Quad asJsonLdQuad(Triple triple) { - return createJsonLdQuad(null, triple.getSubject(), triple.getPredicate(), triple.getObject()); - } - - /** - * Adapt a JsonLd {@link com.github.jsonldjava.core.RDFDataset.Quad} as a Commons RDF - * {@link org.apache.commons.rdf.api.Quad}. - * <p> - * The underlying JsonLd quad can be retrieved with - * {@link JsonLdQuad#asJsonLdQuad()}. - * - * @param quad - * A JsonLd {@link com.github.jsonldjava.core.RDFDataset.Quad} to adapt - * @return Adapted {@link JsonLdQuad} - */ - public JsonLdQuad asQuad(final RDFDataset.Quad quad) { - return new JsonLdQuadImpl(quad, bnodePrefix); - } - - /** - * Adapt a JsonLd {@link Node} as a Commons RDF {@link RDFTerm}. - * <p> - * The underlying node can be retrieved with - * {@link JsonLdTerm#asJsonLdNode()}. - * - * @param node - * A JsonLd {@link Node} to adapt - * @return Adapted {@link JsonLdTerm} - */ - public JsonLdTerm asRDFTerm(final Node node) { - return asRDFTerm(node, bnodePrefix); - } - - /** - * Adapt a JsonLd {@link com.github.jsonldjava.core.RDFDataset.Quad} as a Commons RDF - * {@link org.apache.commons.rdf.api.Triple}. - * <p> - * The underlying JsonLd quad can be retrieved with - * {@link JsonLdTriple#asJsonLdQuad()}. - * - * @param quad - * A JsonLd {@link com.github.jsonldjava.core.RDFDataset.Quad} to adapt - * @return Adapted {@link JsonLdTriple} - */ - public JsonLdTriple asTriple(final RDFDataset.Quad quad) { - return new JsonLdTripleImpl(quad, bnodePrefix); - } - - /** - * Adapt a JsonLd {@link RDFDataset} as a Commons RDF {@link Graph}. - * <p> - * The graph can be seen as a <em>union graph</em> as it will contains all the - * triples across all the graphs of the underlying {@link RDFDataset}. - * <p> - * Note that some triple operations on a union graph - * can be inefficient as they need to remove any duplicate - * triples across the graphs. - * <p> - * Changes to the Commons RDF {@link Graph} are reflected in the JsonLd - * {@link RDFDataset} and vice versa. Triples removed from the graph are - * removed from <strong>all</strong> graphs, while triples added - * are added to the <em>default graph</em>. - * - * @param rdfDataSet JsonLd {@link RDFDataset} to adapt - * @return Adapted {@link Dataset} - */ - public JsonLdUnionGraph asUnionGraph(RDFDataset rdfDataSet) { - return new JsonLdUnionGraphImpl(rdfDataSet); - } - - @Override - public JsonLdBlankNode createBlankNode() { - String id = "_:" + UUID.randomUUID().toString(); - return new JsonLdBlankNodeImpl(new RDFDataset.BlankNode(id), bnodePrefix); - } - - @Override - public JsonLdBlankNode createBlankNode(String name) { - String id = "_:" + name; - // TODO: Check if name is valid JSON-LD BlankNode identifier - return new JsonLdBlankNodeImpl(new RDFDataset.BlankNode(id), bnodePrefix); - } - - @Override - public JsonLdDataset createDataset() { - return new JsonLdDatasetImpl(bnodePrefix); - } - - @Override - public JsonLdGraph createGraph() { - return new JsonLdGraphImpl(bnodePrefix); - } - - @Override - public JsonLdIRI createIRI(String iri) { - return new JsonLdIRIImpl(iri); - } - - @Override - public JsonLdLiteral createLiteral(String literal) { - return new JsonLdLiteralImpl(new RDFDataset.Literal(literal, null, null)); - } - - @Override - public JsonLdLiteral createLiteral(String literal, IRI dataType) { - return new JsonLdLiteralImpl(new RDFDataset.Literal(literal, dataType.getIRIString(), null)); - } - - @Override - public JsonLdLiteral createLiteral(String literal, String language) { - return new JsonLdLiteralImpl(new RDFDataset.Literal(literal, Types.RDF_LANGSTRING.getIRIString(), language)); - } - - @Override - public JsonLdQuad createQuad(BlankNodeOrIRI graphName, BlankNodeOrIRI subject, IRI predicate, RDFTerm object) - throws IllegalArgumentException, UnsupportedOperationException { - return new JsonLdQuadImpl(createJsonLdQuad(graphName, subject, predicate, object), bnodePrefix); - } - - @Override - public JsonLdTriple createTriple(BlankNodeOrIRI subject, IRI predicate, RDFTerm object) { - return new JsonLdTripleImpl(createJsonLdQuad(null, subject, predicate, object), bnodePrefix); - } - - String asJsonLdString(BlankNodeOrIRI blankNodeOrIRI) { - if (blankNodeOrIRI == null) { - return null; - } - if (blankNodeOrIRI instanceof IRI) { - return ((IRI)blankNodeOrIRI).getIRIString(); - } else if (blankNodeOrIRI instanceof BlankNode) { - BlankNode blankNode = (BlankNode) blankNodeOrIRI; - String ref = blankNode.uniqueReference(); - if (ref.startsWith(bnodePrefix)) { - // One of ours (but possibly not a JsonLdBlankNode) - - // we can use the suffix directly - return ref.replace(bnodePrefix, "_:"); - } else { - // Map to unique bnode identifier, e.g. _:0dbd92ee-ab1a-45e7-bba2-7ade54f87ec5 - UUID uuid = UUID.nameUUIDFromBytes(ref.getBytes(StandardCharsets.UTF_8)); - return "_:"+ uuid; - } - } else { - throw new IllegalArgumentException("Expected a BlankNode or IRI, not: " + blankNodeOrIRI); - } - } - - JsonLdTerm asRDFTerm(final Node node, String blankNodePrefix) { - if (node == null) { - return null; // e.g. default graph - } - if (node.isIRI()) { - return new JsonLdIRIImpl(node); - } else if (node.isBlankNode()) { - return new JsonLdBlankNodeImpl(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); - } - } - - RDFDataset.Quad createJsonLdQuad(BlankNodeOrIRI graphName, BlankNodeOrIRI subject, IRI predicate, RDFTerm object) { - return new RDFDataset.Quad(asJsonLdNode(subject), asJsonLdNode(predicate), asJsonLdNode(object), asJsonLdString(graphName)); - } - -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/0bb93696/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/experimental/JsonLdParser.java ---------------------------------------------------------------------- diff --git a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/experimental/JsonLdParser.java b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/experimental/JsonLdParser.java index 102b2d4..464015f 100644 --- a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/experimental/JsonLdParser.java +++ b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/experimental/JsonLdParser.java @@ -32,7 +32,7 @@ import org.apache.commons.rdf.api.IRI; import org.apache.commons.rdf.api.RDFSyntax; import org.apache.commons.rdf.jsonldjava.JsonLdDataset; import org.apache.commons.rdf.jsonldjava.JsonLdGraph; -import org.apache.commons.rdf.jsonldjava.JsonLdRDFTermFactory; +import org.apache.commons.rdf.jsonldjava.JsonLdFactory; import org.apache.commons.rdf.simple.experimental.AbstractRDFParser; import com.github.jsonldjava.core.JsonLdError; @@ -44,8 +44,8 @@ import com.github.jsonldjava.utils.JsonUtils; public class JsonLdParser extends AbstractRDFParser<JsonLdParser> { @Override - protected JsonLdRDFTermFactory createRDFTermFactory() { - return new JsonLdRDFTermFactory(); + protected JsonLdFactory createRDFTermFactory() { + return new JsonLdFactory(); } @Override @@ -105,7 +105,7 @@ public class JsonLdParser extends AbstractRDFParser<JsonLdParser> { // otherwise we have to merge as normal } // TODO: Modify JsonLdProcessor to have an actual triple callback - Graph parsedGraph = getJsonLdRDFTermFactory().asGraph(rdfDataset); + Graph parsedGraph = getJsonLdFactory().asGraph(rdfDataset); // sequential() as we don't know if destination is thread safe :-/ parsedGraph.stream().sequential().forEach(intoGraph::add); } else if (getTargetDataset().isPresent()) { @@ -119,19 +119,19 @@ public class JsonLdParser extends AbstractRDFParser<JsonLdParser> { // otherwise we have to merge.. but also avoid duplicate triples, // map blank nodes etc, so we'll fall back to normal Dataset appending. } - Dataset fromDataset = getJsonLdRDFTermFactory().asDataset(rdfDataset); + Dataset fromDataset = getJsonLdFactory().asDataset(rdfDataset); // .sequential() as we don't know if destination is thread-safe :-/ fromDataset.stream().sequential().forEach(intoDataset::add); } else { - Dataset fromDataset = getJsonLdRDFTermFactory().asDataset(rdfDataset); + Dataset fromDataset = getJsonLdFactory().asDataset(rdfDataset); // No need for .sequential() here fromDataset.stream().forEach(getTarget()); } } - private JsonLdRDFTermFactory getJsonLdRDFTermFactory() { - if (getRdfTermFactory().isPresent() && getRdfTermFactory().get() instanceof JsonLdRDFTermFactory) { - return (JsonLdRDFTermFactory) getRdfTermFactory().get(); + private JsonLdFactory getJsonLdFactory() { + if (getRdfTermFactory().isPresent() && getRdfTermFactory().get() instanceof JsonLdFactory) { + return (JsonLdFactory) getRdfTermFactory().get(); } return createRDFTermFactory(); } http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/0bb93696/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/package-info.java ---------------------------------------------------------------------- diff --git a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/package-info.java b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/package-info.java index b9b4acb..1cb5c77 100644 --- a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/package-info.java +++ b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/package-info.java @@ -18,7 +18,7 @@ /** * Integration with jsonld-java * - * @see org.apache.commons.rdf.jsonldjava.JsonLdRDFTermFactory + * @see org.apache.commons.rdf.jsonldjava.JsonLdFactory * @see org.apache.commons.rdf.jsonldjava.JsonLdGraph * @see org.apache.commons.rdf.jsonldjava.JsonLdUnionGraph * @see org.apache.commons.rdf.jsonldjava.JsonLdDataset http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/0bb93696/jsonld-java/src/main/resources/META-INF/services/org.apache.commons.rdf.api.RDFTermFactory ---------------------------------------------------------------------- diff --git a/jsonld-java/src/main/resources/META-INF/services/org.apache.commons.rdf.api.RDFTermFactory b/jsonld-java/src/main/resources/META-INF/services/org.apache.commons.rdf.api.RDFTermFactory index 690fba4..9bf95f8 100644 --- a/jsonld-java/src/main/resources/META-INF/services/org.apache.commons.rdf.api.RDFTermFactory +++ b/jsonld-java/src/main/resources/META-INF/services/org.apache.commons.rdf.api.RDFTermFactory @@ -1 +1 @@ -org.apache.commons.rdf.jsonldjava.JsonLdRDFTermFactory \ No newline at end of file +org.apache.commons.rdf.jsonldjava.JsonLdFactory \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/0bb93696/jsonld-java/src/test/java/org/apache/commons/rdf/jsonldjava/JsonLdFactoryTest.java ---------------------------------------------------------------------- diff --git a/jsonld-java/src/test/java/org/apache/commons/rdf/jsonldjava/JsonLdFactoryTest.java b/jsonld-java/src/test/java/org/apache/commons/rdf/jsonldjava/JsonLdFactoryTest.java new file mode 100644 index 0000000..e7c68ea --- /dev/null +++ b/jsonld-java/src/test/java/org/apache/commons/rdf/jsonldjava/JsonLdFactoryTest.java @@ -0,0 +1,54 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.commons.rdf.jsonldjava; + +import org.apache.commons.rdf.api.AbstractRDFTermFactoryTest; +import org.apache.commons.rdf.api.RDFTermFactory; +import org.junit.Ignore; +import org.junit.Test; + +public class JsonLdFactoryTest extends AbstractRDFTermFactoryTest { + + @Override + public RDFTermFactory createFactory() { + return new JsonLdFactory(); + } + + // TODO: Add support for checking for invalid lang/iri/blanknode IDs + + @Ignore + @Test + @Override + public void testInvalidLiteralLang() throws Exception { + super.testInvalidLiteralLang(); + } + + @Ignore + @Test + @Override + public void testInvalidIRI() throws Exception { + super.testInvalidIRI(); + } + + @Ignore + @Test + @Override + public void testPossiblyInvalidBlankNode() throws Exception { + super.testPossiblyInvalidBlankNode(); + } +} http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/0bb93696/jsonld-java/src/test/java/org/apache/commons/rdf/jsonldjava/JsonLdGraphTest.java ---------------------------------------------------------------------- diff --git a/jsonld-java/src/test/java/org/apache/commons/rdf/jsonldjava/JsonLdGraphTest.java b/jsonld-java/src/test/java/org/apache/commons/rdf/jsonldjava/JsonLdGraphTest.java index 5b8d28c..46bc73e 100644 --- a/jsonld-java/src/test/java/org/apache/commons/rdf/jsonldjava/JsonLdGraphTest.java +++ b/jsonld-java/src/test/java/org/apache/commons/rdf/jsonldjava/JsonLdGraphTest.java @@ -24,7 +24,7 @@ public class JsonLdGraphTest extends AbstractGraphTest { @Override public RDFTermFactory createFactory() { - return new JsonLdRDFTermFactory(); + return new JsonLdFactory(); } http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/0bb93696/jsonld-java/src/test/java/org/apache/commons/rdf/jsonldjava/JsonLdParserBuilderTest.java ---------------------------------------------------------------------- diff --git a/jsonld-java/src/test/java/org/apache/commons/rdf/jsonldjava/JsonLdParserBuilderTest.java b/jsonld-java/src/test/java/org/apache/commons/rdf/jsonldjava/JsonLdParserBuilderTest.java index 4d846ee..bd3c6bb 100644 --- a/jsonld-java/src/test/java/org/apache/commons/rdf/jsonldjava/JsonLdParserBuilderTest.java +++ b/jsonld-java/src/test/java/org/apache/commons/rdf/jsonldjava/JsonLdParserBuilderTest.java @@ -39,7 +39,7 @@ import org.junit.Test; public class JsonLdParserBuilderTest { private static final String TEST_JSONLD = "/test.jsonld"; - static JsonLdRDFTermFactory factory = new JsonLdRDFTermFactory(); + static JsonLdFactory factory = new JsonLdFactory(); IRI test = factory.createIRI("http://example.com/test"); IRI Type = factory.createIRI("http://example.com/Type"); IRI type = factory.createIRI("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"); http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/0bb93696/jsonld-java/src/test/java/org/apache/commons/rdf/jsonldjava/JsonLdRDFTermFactoryTest.java ---------------------------------------------------------------------- diff --git a/jsonld-java/src/test/java/org/apache/commons/rdf/jsonldjava/JsonLdRDFTermFactoryTest.java b/jsonld-java/src/test/java/org/apache/commons/rdf/jsonldjava/JsonLdRDFTermFactoryTest.java deleted file mode 100644 index 0e86b33..0000000 --- a/jsonld-java/src/test/java/org/apache/commons/rdf/jsonldjava/JsonLdRDFTermFactoryTest.java +++ /dev/null @@ -1,54 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.commons.rdf.jsonldjava; - -import org.apache.commons.rdf.api.AbstractRDFTermFactoryTest; -import org.apache.commons.rdf.api.RDFTermFactory; -import org.junit.Ignore; -import org.junit.Test; - -public class JsonLdRDFTermFactoryTest extends AbstractRDFTermFactoryTest { - - @Override - public RDFTermFactory createFactory() { - return new JsonLdRDFTermFactory(); - } - - // TODO: Add support for checking for invalid lang/iri/blanknode IDs - - @Ignore - @Test - @Override - public void testInvalidLiteralLang() throws Exception { - super.testInvalidLiteralLang(); - } - - @Ignore - @Test - @Override - public void testInvalidIRI() throws Exception { - super.testInvalidIRI(); - } - - @Ignore - @Test - @Override - public void testPossiblyInvalidBlankNode() throws Exception { - super.testPossiblyInvalidBlankNode(); - } -} http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/0bb93696/src/site/markdown/implementations.md ---------------------------------------------------------------------- diff --git a/src/site/markdown/implementations.md b/src/site/markdown/implementations.md index f518861..51679fd 100644 --- a/src/site/markdown/implementations.md +++ b/src/site/markdown/implementations.md @@ -194,9 +194,9 @@ This is primarily intended to support [JSON-LD](http://json-ld.org/) parsing and ```java import org.apache.commons.rdf.api.Graph; import org.apache.commons.rdf.api.RDFTermFactory; -import org.apache.commons.rdf.jsonld.JsonLdRDFTermFactory; +import org.apache.commons.rdf.jsonld.JsonLdFactory; -RDFTermFactory rdfTermFactory = new JsonLdRDFTermFactory(); +RDFTermFactory rdfTermFactory = new JsonLdFactory(); Graph graph = rdfTermFactory.createGraph(); ```