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/07/08 11:53:51 UTC

[7/9] incubator-commonsrdf git commit: Added JenaAny/JenaVariable and fromJenaGeneralized(Triple)

Added JenaAny/JenaVariable and fromJenaGeneralized(Triple)


Project: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/commit/c38aae23
Tree: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/tree/c38aae23
Diff: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/diff/c38aae23

Branch: refs/heads/jena
Commit: c38aae23447e1eaafff80c3036b643e8bda65a17
Parents: 35c3261
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Fri Jul 8 12:40:18 2016 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Fri Jul 8 12:40:18 2016 +0100

----------------------------------------------------------------------
 .../org/apache/commons/rdf/jena/JenaAny.java    |  5 +
 .../apache/commons/rdf/jena/JenaVariable.java   |  6 ++
 .../commons/rdf/jena/RDFTermFactoryJena.java    | 98 +++++++++++++++++++-
 .../apache/commons/rdf/jena/impl/AnyImpl.java   | 31 +++++++
 .../commons/rdf/jena/impl/BlankNodeImpl.java    |  3 +
 .../apache/commons/rdf/jena/impl/IRIImpl.java   |  4 +
 .../commons/rdf/jena/impl/JenaFactory.java      | 40 +++++---
 .../commons/rdf/jena/impl/LiteralImpl.java      |  3 +
 .../commons/rdf/jena/impl/VariableImpl.java     | 33 +++++++
 9 files changed, 207 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/c38aae23/jena/src/main/java/org/apache/commons/rdf/jena/JenaAny.java
----------------------------------------------------------------------
diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/JenaAny.java b/jena/src/main/java/org/apache/commons/rdf/jena/JenaAny.java
new file mode 100644
index 0000000..90599a4
--- /dev/null
+++ b/jena/src/main/java/org/apache/commons/rdf/jena/JenaAny.java
@@ -0,0 +1,5 @@
+package org.apache.commons.rdf.jena;
+
+public interface JenaAny extends JenaRDFTerm {
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/c38aae23/jena/src/main/java/org/apache/commons/rdf/jena/JenaVariable.java
----------------------------------------------------------------------
diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/JenaVariable.java b/jena/src/main/java/org/apache/commons/rdf/jena/JenaVariable.java
new file mode 100644
index 0000000..55791d4
--- /dev/null
+++ b/jena/src/main/java/org/apache/commons/rdf/jena/JenaVariable.java
@@ -0,0 +1,6 @@
+package org.apache.commons.rdf.jena;
+
+public interface JenaVariable extends JenaRDFTerm {
+	public String getVariableName();
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/c38aae23/jena/src/main/java/org/apache/commons/rdf/jena/RDFTermFactoryJena.java
----------------------------------------------------------------------
diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/RDFTermFactoryJena.java b/jena/src/main/java/org/apache/commons/rdf/jena/RDFTermFactoryJena.java
index 2ffabfb..760d911 100644
--- a/jena/src/main/java/org/apache/commons/rdf/jena/RDFTermFactoryJena.java
+++ b/jena/src/main/java/org/apache/commons/rdf/jena/RDFTermFactoryJena.java
@@ -32,6 +32,7 @@ import org.apache.commons.rdf.api.RDFSyntax;
 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.jena.impl.JenaFactory;
 import org.apache.jena.datatypes.RDFDatatype;
 import org.apache.jena.datatypes.xsd.XSDDatatype;
@@ -104,6 +105,34 @@ public final class RDFTermFactoryJena implements RDFTermFactory {
 	public JenaTriple createTriple(BlankNodeOrIRI subject, IRI predicate, RDFTerm object) {
 		return JenaFactory.createTriple(subject, predicate, object);
 	}
+	
+	/**
+	 * Adapt a generalized Jena Triple to a CommonsRDF {@link TripleLike} statement.
+	 * <p>
+	 * The generalized triple supports any {@link RDFTerm} as its {@link TripleLike#getSubject()}
+	 * {@link TripleLike#getPredicate()} or {@link TripleLike#getObject()}. 
+	 * <p>
+	 * If the Jena triple contains any {@link Node#isBlank()}, then any corresponding
+	 * {@link BlankNode} will use a {@link UUID} salt from this
+	 * {@link RDFTermFactoryJena} instance in combination with
+	 * {@link Node#getBlankNodeId()} for the purpose of its
+	 * {@link BlankNode#uniqueReference()}.
+	 *
+	 * @see #fromJena(org.apache.jena.graph.Triple, UUID)
+	 * @see #fromJena(RDFTermFactory, org.apache.jena.graph.Triple)
+	 * 
+	 * @param subject The subject of the statement
+	 *            
+	 * @return Adapted {@link TripleLike}. Note that the generalized triple does
+	 *         <strong>not</strong> implement {@link Triple#equals(Object)} or
+	 *         {@link Triple#hashCode()}.
+	 * @throws ConversionException
+	 *             if any of the triple's nodes are not concrete
+	 */
+	public JenaTripleLike<RDFTerm, RDFTerm, RDFTerm> createGeneralizedTriple(
+			RDFTerm subject, RDFTerm predicate, RDFTerm object) {
+		return JenaFactory.createGeneralizedTriple(subject, predicate, object);
+	}
 
 	/**
 	 * Adapt an existing Jena Node to CommonsRDF {@link RDFTerm}.
@@ -219,6 +248,65 @@ public final class RDFTermFactoryJena implements RDFTermFactory {
 		return JenaFactory.fromJena(triple, salt);
 	}
 
+
+	/**
+	 * Adapt a generalized Jena Triple to a CommonsRDF {@link TripleLike}.
+	 * <p>
+	 * The generalized triple supports any {@link RDFTerm} as its {@link TripleLike#getSubject()}
+	 * {@link TripleLike#getPredicate()} or {@link TripleLike#getObject()}. 
+	 * <p>
+	 * If the Jena triple contains any {@link Node#isBlank()}, then any corresponding
+	 * {@link BlankNode} will use the provided {@link UUID} salt 
+	 * in combination with
+	 * {@link Node#getBlankNodeId()} for the purpose of its
+	 * {@link BlankNode#uniqueReference()}.
+	 *
+	 * @see #fromJena(org.apache.jena.graph.Triple, UUID)
+	 * @see #fromJena(RDFTermFactory, org.apache.jena.graph.Triple)
+	 * 
+	 * @param triple
+	 *            Jena triple
+	 * @param salt
+	 *            UUID salt for the purpose of
+	 *            {@link BlankNode#uniqueReference()}
+	 * @return Adapted {@link TripleLike}. Note that the generalized triple does
+	 *         <strong>not</strong> implement {@link Triple#equals(Object)} or
+	 *         {@link Triple#hashCode()}.
+	 * @throws ConversionException
+	 *             if any of the triple's nodes are not concrete
+	 */
+	public JenaTripleLike<RDFTerm, RDFTerm, RDFTerm> fromJenaGeneralized(org.apache.jena.graph.Triple triple, UUID salt) throws ConversionException {
+		return JenaFactory.fromJenaGeneralized(triple, salt);
+	}
+	
+	/**
+	 * Adapt a generalized Jena Triple to a CommonsRDF {@link TripleLike}.
+	 * <p>
+	 * The generalized triple supports any {@link RDFTerm} as its {@link TripleLike#getSubject()}
+	 * {@link TripleLike#getPredicate()} or {@link TripleLike#getObject()}. 
+	 * <p>
+	 * If the Jena triple contains any {@link Node#isBlank()}, then any corresponding
+	 * {@link BlankNode} will use a {@link UUID} salt from this
+	 * {@link RDFTermFactoryJena} instance in combination with
+	 * {@link Node#getBlankNodeId()} for the purpose of its
+	 * {@link BlankNode#uniqueReference()}.
+	 *
+	 * @see #fromJena(org.apache.jena.graph.Triple, UUID)
+	 * @see #fromJena(RDFTermFactory, org.apache.jena.graph.Triple)
+	 * 
+	 * @param triple
+	 *            Jena triple
+	 * @return Adapted {@link TripleLike}. Note that the generalized triple does
+	 *         <strong>not</strong> implement {@link Triple#equals(Object)} or
+	 *         {@link Triple#hashCode()}.
+	 * @throws ConversionException
+	 *             if any of the triple's nodes are not concrete
+	 */
+	public JenaTripleLike<RDFTerm, RDFTerm, RDFTerm> fromJenaGeneralized(org.apache.jena.graph.Triple triple) throws ConversionException {
+		return JenaFactory.fromJenaGeneralized(triple, salt);
+	}
+	
+	
 	/**
 	 * Adapt an existing Jena Triple to CommonsRDF {@link Triple}.
 	 * <p>
@@ -270,9 +358,9 @@ public final class RDFTermFactoryJena implements RDFTermFactory {
 		BlankNodeOrIRI subject;
 		IRI predicate;
 		try {
-			subject = (BlankNodeOrIRI) (fromJena(factory, triple.getSubject()));
-			predicate = (IRI) (fromJena(factory, triple.getPredicate()));
-		} (catch ClassCastException ex) {
+			subject = (BlankNodeOrIRI) fromJena(factory, triple.getSubject());
+			predicate = (IRI) fromJena(factory, triple.getPredicate());
+		} catch (ClassCastException ex) {
 			throw new ConversionException("Can't convert generalized triple: " + triple, ex);
 		}
 		RDFTerm object = fromJena(factory, triple.getObject());
@@ -400,11 +488,11 @@ public final class RDFTermFactoryJena implements RDFTermFactory {
 		if (term == null) {
 			return null;
 		}
-		if (term instanceof JenaNode)
+		if (term instanceof JenaRDFTerm)
 			// TODO: What if it's a BlankNodeImpl with
 			// a different salt? Do we need to rewrite the
 			// jena blanknode identifier?
-			return ((JenaNode) term).asJenaNode();
+			return ((JenaRDFTerm) term).asJenaNode();
 
 		if (term instanceof IRI)
 			return NodeFactory.createURI(((IRI) term).getIRIString());

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/c38aae23/jena/src/main/java/org/apache/commons/rdf/jena/impl/AnyImpl.java
----------------------------------------------------------------------
diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/impl/AnyImpl.java b/jena/src/main/java/org/apache/commons/rdf/jena/impl/AnyImpl.java
new file mode 100644
index 0000000..956851b
--- /dev/null
+++ b/jena/src/main/java/org/apache/commons/rdf/jena/impl/AnyImpl.java
@@ -0,0 +1,31 @@
+package org.apache.commons.rdf.jena.impl;
+
+import org.apache.commons.rdf.jena.JenaAny;
+import org.apache.commons.rdf.jena.JenaRDFTerm;
+import org.apache.jena.graph.Node;
+
+public class AnyImpl implements JenaRDFTerm, JenaAny {
+
+	static class Singleton {
+		static AnyImpl instance = new AnyImpl();
+	}
+	
+	/**
+	 * Private constructor
+	 * 
+	 * @see {@link Singleton#instance}
+	 */
+	private AnyImpl() {
+	}
+	
+	@Override
+	public String ntriplesString() {
+		return "[]";
+	}
+
+	@Override
+	public Node asJenaNode() {
+		return Node.ANY;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/c38aae23/jena/src/main/java/org/apache/commons/rdf/jena/impl/BlankNodeImpl.java
----------------------------------------------------------------------
diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/impl/BlankNodeImpl.java b/jena/src/main/java/org/apache/commons/rdf/jena/impl/BlankNodeImpl.java
index 928da61..2acb635 100644
--- a/jena/src/main/java/org/apache/commons/rdf/jena/impl/BlankNodeImpl.java
+++ b/jena/src/main/java/org/apache/commons/rdf/jena/impl/BlankNodeImpl.java
@@ -30,6 +30,9 @@ public class BlankNodeImpl extends AbstractRDFTerm implements JenaBlankNode {
 
 	/* package */ BlankNodeImpl(Node node, UUID salt) {
 		super(node);
+		if (! node.isBlank()) {
+			throw new IllegalArgumentException("Node is not a blank node: " + node);
+		}				
 		this.salt = salt;
 	}
 

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/c38aae23/jena/src/main/java/org/apache/commons/rdf/jena/impl/IRIImpl.java
----------------------------------------------------------------------
diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/impl/IRIImpl.java b/jena/src/main/java/org/apache/commons/rdf/jena/impl/IRIImpl.java
index 9ad20d0..e85c80f 100644
--- a/jena/src/main/java/org/apache/commons/rdf/jena/impl/IRIImpl.java
+++ b/jena/src/main/java/org/apache/commons/rdf/jena/impl/IRIImpl.java
@@ -27,6 +27,10 @@ public class IRIImpl extends AbstractRDFTerm implements JenaIRI {
 
 	/* package */ IRIImpl(Node node) {
 		super(node);
+		if (! node.isURI()) {
+			throw new IllegalArgumentException("Node is not a blank node: " + node);
+		}				
+		
 	}
 
 	/* package */ IRIImpl(String iriStr) {

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/c38aae23/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaFactory.java
----------------------------------------------------------------------
diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaFactory.java b/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaFactory.java
index 797557c..4a6d44b 100644
--- a/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaFactory.java
+++ b/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaFactory.java
@@ -26,6 +26,7 @@ import org.apache.commons.rdf.api.IRI;
 import org.apache.commons.rdf.api.Quad;
 import org.apache.commons.rdf.api.RDFTerm;
 import org.apache.commons.rdf.jena.ConversionException;
+import org.apache.commons.rdf.jena.JenaAny;
 import org.apache.commons.rdf.jena.JenaBlankNode;
 import org.apache.commons.rdf.jena.JenaGraph;
 import org.apache.commons.rdf.jena.JenaIRI;
@@ -33,6 +34,7 @@ import org.apache.commons.rdf.jena.JenaLiteral;
 import org.apache.commons.rdf.jena.JenaRDFTerm;
 import org.apache.commons.rdf.jena.JenaTriple;
 import org.apache.commons.rdf.jena.JenaTripleLike;
+import org.apache.commons.rdf.jena.JenaVariable;
 import org.apache.jena.graph.Node;
 import org.apache.jena.graph.NodeFactory;
 import org.apache.jena.sparql.graph.GraphFactory;
@@ -58,7 +60,6 @@ public class JenaFactory {
 		return new GraphImpl(GraphFactory.createDefaultGraph(), salt);
 	}
 
-	// basic components to commonsrdf backed by Jena.
 	public static JenaIRI createIRI(String iriStr) {
 		return new IRIImpl(iriStr);
 	}
@@ -78,28 +79,45 @@ public class JenaFactory {
 	public static JenaTriple createTriple(BlankNodeOrIRI subject, IRI predicate, RDFTerm object) {
 		return new TripleImpl(subject, predicate, object);
 	}
+	
+	public static JenaVariable createVariable(String name) {
+		return new VariableImpl(NodeFactory.createVariable(name));
+	}
+	
+	public static JenaAny createVariable() {
+		return AnyImpl.Singleton.instance;
+	}
 
 	public static JenaTripleLike<RDFTerm, RDFTerm, RDFTerm> createGeneralizedTriple(RDFTerm subject, RDFTerm predicate, RDFTerm object) {
 		return new GeneralizedTripleImpl(subject, predicate, object);
 	}
 	
 	public static JenaRDFTerm fromJena(Node node, UUID salt) throws ConversionException {
-		if (node.isURI())
+		if (! node.isConcrete()) {
+			throw new ConversionException("Node is not a concrete RDF Term: " + node); 
+		}
+		return fromJenaGeneralized(node, salt);		
+	}
+
+	public static JenaRDFTerm fromJenaGeneralized(Node node, UUID salt) {
+		if (node.isURI()) {
 			return new IRIImpl(node);
+		}
 		if (node.isLiteral()) {
 			return new LiteralImpl(node);
-//			String lang = node.getLiteralLanguage();
-//			if (lang != null && lang.isEmpty())
-//				return createLiteralLang(node.getLiteralLexicalForm(), lang);
-//			if (node.getLiteralDatatype().equals(XSDDatatype.XSDstring))
-//				return createLiteral(node.getLiteralLexicalForm());
-//			return createLiteralDT(node.getLiteralLexicalForm(), node.getLiteralDatatype().getURI());
 		}
-		if (node.isBlank())
+		if (node.isBlank()) {
 			return new BlankNodeImpl(node, salt);
-		throw new ConversionException("Node is not a concrete RDF Term: " + node);
+		}
+		if (node.equals(Node.ANY)) {
+			return AnyImpl.Singleton.instance;
+		}
+		if (node.isVariable()) {
+			return new VariableImpl(node);
+		}
+		throw new IllegalArgumentException("Unrecognized node type: " + node);
 	}
-
+	
 	public static JenaGraph fromJena(org.apache.jena.graph.Graph graph) {
 		return new GraphImpl(graph, UUID.randomUUID());
 	}

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/c38aae23/jena/src/main/java/org/apache/commons/rdf/jena/impl/LiteralImpl.java
----------------------------------------------------------------------
diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/impl/LiteralImpl.java b/jena/src/main/java/org/apache/commons/rdf/jena/impl/LiteralImpl.java
index 0530d08..2750198 100644
--- a/jena/src/main/java/org/apache/commons/rdf/jena/impl/LiteralImpl.java
+++ b/jena/src/main/java/org/apache/commons/rdf/jena/impl/LiteralImpl.java
@@ -30,6 +30,9 @@ public class LiteralImpl extends AbstractRDFTerm implements JenaLiteral {
 
 	/* package */ LiteralImpl(Node node) {
 		super(node);
+		if (! node.isLiteral()) {
+			throw new IllegalArgumentException("Node is not a literal: " + node);
+		}		
 	}
 
 	@Override

http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/c38aae23/jena/src/main/java/org/apache/commons/rdf/jena/impl/VariableImpl.java
----------------------------------------------------------------------
diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/impl/VariableImpl.java b/jena/src/main/java/org/apache/commons/rdf/jena/impl/VariableImpl.java
new file mode 100644
index 0000000..13f62e9
--- /dev/null
+++ b/jena/src/main/java/org/apache/commons/rdf/jena/impl/VariableImpl.java
@@ -0,0 +1,33 @@
+package org.apache.commons.rdf.jena.impl;
+
+import org.apache.commons.rdf.jena.JenaRDFTerm;
+import org.apache.commons.rdf.jena.JenaVariable;
+import org.apache.jena.graph.Node;
+
+public class VariableImpl implements JenaRDFTerm, JenaVariable {
+
+	private Node node;
+
+	VariableImpl(Node node) {	
+		if (! node.isVariable()) {
+			throw new IllegalArgumentException("Node is not a variable: " + node);
+		}
+		this.node = node;
+	}
+
+	@Override
+	public String ntriplesString() {
+		return "?" + getVariableName();
+	}
+
+	@Override
+	public String getVariableName() {
+		return node.getName();
+	}
+
+	@Override
+	public Node asJenaNode() {
+		return node;
+	}
+
+}