Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id D0769200B38 for ; Fri, 8 Jul 2016 13:53:53 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id CF1EE160A58; Fri, 8 Jul 2016 11:53:53 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 582FE160A5A for ; Fri, 8 Jul 2016 13:53:52 +0200 (CEST) Received: (qmail 76461 invoked by uid 500); 8 Jul 2016 11:53:51 -0000 Mailing-List: contact commits-help@commonsrdf.incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@commonsrdf.incubator.apache.org Delivered-To: mailing list commits@commonsrdf.incubator.apache.org Received: (qmail 76452 invoked by uid 99); 8 Jul 2016 11:53:51 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd1-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 08 Jul 2016 11:53:51 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd1-us-west.apache.org (ASF Mail Server at spamd1-us-west.apache.org) with ESMTP id 22FEFC011D for ; Fri, 8 Jul 2016 11:53:51 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd1-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -4.507 X-Spam-Level: X-Spam-Status: No, score=-4.507 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, KAM_LAZY_DOMAIN_SECURITY=1, RCVD_IN_DNSWL_HI=-5, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RP_MATCHES_RCVD=-1.287] autolearn=disabled Received: from mx1-lw-eu.apache.org ([10.40.0.8]) by localhost (spamd1-us-west.apache.org [10.40.0.7]) (amavisd-new, port 10024) with ESMTP id v-rVl6gXumEM for ; Fri, 8 Jul 2016 11:53:48 +0000 (UTC) Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx1-lw-eu.apache.org (ASF Mail Server at mx1-lw-eu.apache.org) with SMTP id 3C1165FB6F for ; Fri, 8 Jul 2016 11:53:47 +0000 (UTC) Received: (qmail 76187 invoked by uid 99); 8 Jul 2016 11:53:46 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 08 Jul 2016 11:53:46 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 28FC3DFFF8; Fri, 8 Jul 2016 11:53:46 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: stain@apache.org To: commits@commonsrdf.incubator.apache.org Date: Fri, 08 Jul 2016 11:53:50 -0000 Message-Id: <7fceb488c3f64fcf96b9b729c1031b18@git.apache.org> In-Reply-To: <1e02012c62714fa082a213c5074909af@git.apache.org> References: <1e02012c62714fa082a213c5074909af@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [6/9] incubator-commonsrdf git commit: Added Jena* interfaces and GeneralizedTripleImpl archived-at: Fri, 08 Jul 2016 11:53:54 -0000 Added Jena* interfaces and GeneralizedTripleImpl e.g. JenaIRI, JenaBlankNode Project: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/commit/35c32616 Tree: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/tree/35c32616 Diff: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/diff/35c32616 Branch: refs/heads/jena Commit: 35c326166ef587adb460cfe36c23ea863b7cffba Parents: 8a7b3ad Author: Stian Soiland-Reyes Authored: Fri Jul 8 12:06:08 2016 +0100 Committer: Stian Soiland-Reyes Committed: Fri Jul 8 12:06:08 2016 +0100 ---------------------------------------------------------------------- .../apache/commons/rdf/jena/JenaBlankNode.java | 7 + .../org/apache/commons/rdf/jena/JenaIRI.java | 7 + .../apache/commons/rdf/jena/JenaLiteral.java | 7 + .../org/apache/commons/rdf/jena/JenaNode.java | 27 --- .../apache/commons/rdf/jena/JenaRDFTerm.java | 27 +++ .../org/apache/commons/rdf/jena/JenaTriple.java | 7 +- .../apache/commons/rdf/jena/JenaTripleLike.java | 34 +++ .../commons/rdf/jena/RDFTermFactoryJena.java | 241 ++++++++++++------- .../commons/rdf/jena/impl/AbstractRDFTerm.java | 4 +- .../commons/rdf/jena/impl/BlankNodeImpl.java | 4 +- .../rdf/jena/impl/GeneralizedTripleImpl.java | 74 ++++++ .../apache/commons/rdf/jena/impl/IRIImpl.java | 4 +- .../commons/rdf/jena/impl/JenaFactory.java | 44 ++-- .../commons/rdf/jena/impl/LiteralImpl.java | 3 +- .../apache/commons/rdf/jena/impl/QuadImpl.java | 2 +- .../commons/rdf/jena/impl/TripleImpl.java | 11 +- 16 files changed, 358 insertions(+), 145 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/35c32616/jena/src/main/java/org/apache/commons/rdf/jena/JenaBlankNode.java ---------------------------------------------------------------------- diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/JenaBlankNode.java b/jena/src/main/java/org/apache/commons/rdf/jena/JenaBlankNode.java new file mode 100644 index 0000000..3c7a912 --- /dev/null +++ b/jena/src/main/java/org/apache/commons/rdf/jena/JenaBlankNode.java @@ -0,0 +1,7 @@ +package org.apache.commons.rdf.jena; + +import org.apache.commons.rdf.api.BlankNode; + +public interface JenaBlankNode extends JenaRDFTerm, BlankNode { + +} http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/35c32616/jena/src/main/java/org/apache/commons/rdf/jena/JenaIRI.java ---------------------------------------------------------------------- diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/JenaIRI.java b/jena/src/main/java/org/apache/commons/rdf/jena/JenaIRI.java new file mode 100644 index 0000000..c001d74 --- /dev/null +++ b/jena/src/main/java/org/apache/commons/rdf/jena/JenaIRI.java @@ -0,0 +1,7 @@ +package org.apache.commons.rdf.jena; + +import org.apache.commons.rdf.api.IRI; + +public interface JenaIRI extends JenaRDFTerm, IRI { + +} http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/35c32616/jena/src/main/java/org/apache/commons/rdf/jena/JenaLiteral.java ---------------------------------------------------------------------- diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/JenaLiteral.java b/jena/src/main/java/org/apache/commons/rdf/jena/JenaLiteral.java new file mode 100644 index 0000000..a2906ff --- /dev/null +++ b/jena/src/main/java/org/apache/commons/rdf/jena/JenaLiteral.java @@ -0,0 +1,7 @@ +package org.apache.commons.rdf.jena; + +import org.apache.commons.rdf.api.Literal; + +public interface JenaLiteral extends JenaRDFTerm, Literal { + +} http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/35c32616/jena/src/main/java/org/apache/commons/rdf/jena/JenaNode.java ---------------------------------------------------------------------- diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/JenaNode.java b/jena/src/main/java/org/apache/commons/rdf/jena/JenaNode.java deleted file mode 100644 index 4be7940..0000000 --- a/jena/src/main/java/org/apache/commons/rdf/jena/JenaNode.java +++ /dev/null @@ -1,27 +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.jena; - -import org.apache.commons.rdf.api.RDFTerm; -import org.apache.jena.graph.Node; - -/** Access the Jena node backing this object */ -public interface JenaNode extends RDFTerm { - public Node asJenaNode(); -} http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/35c32616/jena/src/main/java/org/apache/commons/rdf/jena/JenaRDFTerm.java ---------------------------------------------------------------------- diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/JenaRDFTerm.java b/jena/src/main/java/org/apache/commons/rdf/jena/JenaRDFTerm.java new file mode 100644 index 0000000..623f8b4 --- /dev/null +++ b/jena/src/main/java/org/apache/commons/rdf/jena/JenaRDFTerm.java @@ -0,0 +1,27 @@ +/** + * 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.jena; + +import org.apache.commons.rdf.api.RDFTerm; +import org.apache.jena.graph.Node; + +/** Access the Jena node backing this object */ +public interface JenaRDFTerm extends RDFTerm { + public Node asJenaNode(); +} http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/35c32616/jena/src/main/java/org/apache/commons/rdf/jena/JenaTriple.java ---------------------------------------------------------------------- diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/JenaTriple.java b/jena/src/main/java/org/apache/commons/rdf/jena/JenaTriple.java index 3735bdd..b94cc08 100644 --- a/jena/src/main/java/org/apache/commons/rdf/jena/JenaTriple.java +++ b/jena/src/main/java/org/apache/commons/rdf/jena/JenaTriple.java @@ -18,9 +18,10 @@ package org.apache.commons.rdf.jena; -import org.apache.jena.graph.Triple; +import org.apache.commons.rdf.api.BlankNodeOrIRI; +import org.apache.commons.rdf.api.IRI; +import org.apache.commons.rdf.api.RDFTerm; /** Access the Jena triple backing this object */ -public interface JenaTriple extends org.apache.commons.rdf.api.Triple { - public Triple asJenaTriple(); +public interface JenaTriple extends org.apache.commons.rdf.api.Triple, JenaTripleLike { } http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/35c32616/jena/src/main/java/org/apache/commons/rdf/jena/JenaTripleLike.java ---------------------------------------------------------------------- diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/JenaTripleLike.java b/jena/src/main/java/org/apache/commons/rdf/jena/JenaTripleLike.java new file mode 100644 index 0000000..4f0deb8 --- /dev/null +++ b/jena/src/main/java/org/apache/commons/rdf/jena/JenaTripleLike.java @@ -0,0 +1,34 @@ +/** + * 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.jena; + +import org.apache.commons.rdf.api.RDFTerm; +import org.apache.jena.graph.Triple; + +/** Access the Jena triple backing this object */ +public interface JenaTripleLike + extends org.apache.commons.rdf.api.TripleLike { + + /** + * Return the adapted Jena triple + * + * @return Adapted Jena {@link Triple}. + */ + Triple asJenaTriple(); +} http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/35c32616/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 1515a78..2ffabfb 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 @@ -64,96 +64,158 @@ public final class RDFTermFactoryJena implements RDFTermFactory { } @Override - public BlankNode createBlankNode() { + public JenaBlankNode createBlankNode() { return JenaFactory.createBlankNode(salt); } @Override - public BlankNode createBlankNode(String name) { + public JenaBlankNode createBlankNode(String name) { return JenaFactory.createBlankNode(name, salt); } @Override - public Graph createGraph() { + public JenaGraph createGraph() { return JenaFactory.createGraph(salt); } @Override - public IRI createIRI(String iri) { + public JenaIRI createIRI(String iri) { validateIRI(iri); return JenaFactory.createIRI(iri); } @Override - public Literal createLiteral(String lexicalForm) { + public JenaLiteral createLiteral(String lexicalForm) { return JenaFactory.createLiteral(lexicalForm); } @Override - public Literal createLiteral(String lexicalForm, IRI dataType) { + public JenaLiteral createLiteral(String lexicalForm, IRI dataType) { return JenaFactory.createLiteralDT(lexicalForm, dataType.getIRIString()); } @Override - public Literal createLiteral(String lexicalForm, String languageTag) { + public JenaLiteral createLiteral(String lexicalForm, String languageTag) { validateLang(languageTag); return JenaFactory.createLiteralLang(lexicalForm, languageTag); } @Override - public Triple createTriple(BlankNodeOrIRI subject, IRI predicate, RDFTerm object) { + public JenaTriple createTriple(BlankNodeOrIRI subject, IRI predicate, RDFTerm object) { return JenaFactory.createTriple(subject, predicate, object); } /** * Adapt an existing Jena Node to CommonsRDF {@link RDFTerm}. *

- * If {@link Node#isLiteral()}, then the returned value is a - * {@link Literal}. If {@link Node#isURI(), the returned value is a - * IRI. If Node#isBlank(), the returned value is a {@link BlankNode}, - * which 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()}. + * If {@link Node#isLiteral()}, then the returned value is a {@link Literal}. + * If {@link Node#isURI(), the returned value is a IRI. If Node#isBlank(), + * the returned value is a {@link BlankNode}, which 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()}. * - * @param node The Jena Node to adapt. It's {@link Node#isConcrete()} must be true. - * @throws ConversionException if the node is not concrete. + * @see #fromJena(Node, UUID) + * @see #fromJena(RDFTermFactory, Node) + * + * @param node + * The Jena Node to adapt. It's {@link Node#isConcrete()} must be + * true. + * @throws ConversionException + * if the node is not concrete. */ - public RDFTerm fromJena(Node node) throws ConversionException { + public JenaRDFTerm fromJena(Node node) throws ConversionException { return JenaFactory.fromJena(node, salt); } /** * Adapt an existing Jena Node to CommonsRDF {@link RDFTerm}. *

- * If {@link Node#isLiteral()}, then the returned value is a - * {@link Literal}. If {@link Node#isURI(), the returned value is a - * IRI. If Node#isBlank(), the returned value is a {@link BlankNode}, - * which will use the provided {@link UUID} salt - * in combination with {@link Node#getBlankNodeId()} - * for the purpose of its {@link BlankNode#uniqueReference()}. + * If {@link Node#isLiteral()}, then the returned value is a {@link Literal} + * . If {@link Node#isURI(), the returned value is a IRI. If Node#isBlank(), + * the returned value is a {@link BlankNode}, which will use the provided + * {@link UUID} salt in combination with {@link Node#getBlankNodeId()} for + * the purpose of its {@link BlankNode#uniqueReference()}. + * + * @see #fromJena(Node) + * @see #fromJena(RDFTermFactory, Node) * - * @param node The Jena Node to adapt. It's {@link Node#isConcrete()} must be true. - * @param salt UUID salt for the purpose of {@link BlankNode#uniqueReference()} - * @throws ConversionException if the node is not concrete. + * @param node + * The Jena Node to adapt. It's {@link Node#isConcrete()} must be + * true. + * @param salt + * UUID salt for the purpose of + * {@link BlankNode#uniqueReference()} + * @throws ConversionException + * if the node is not concrete. */ - public static RDFTerm fromJena(Node node, UUID salt) { + public static JenaRDFTerm fromJena(Node node, UUID salt) { return JenaFactory.fromJena(node, salt); } /** + * Convert from Jena {@link Node} to any RDFCommons implementation. + *

+ * Note that if the {@link Node#isBlank()}, then the factory's + * {@link RDFTermFactory#createBlankNode(String)} will be used, meaning + * that care should be taken if reusing an {@link RDFTermFactory} instance + * for multiple conversion sessions. + * + * @see #fromJena(Node) + * @see #fromJena(Node, UUID) + * + * @param factory {@link RDFTermFactory} to use for creating {@link RDFTerm}. + * @param node + * The Jena Node to adapt. It's {@link Node#isConcrete()} must be + * true. + * @throws ConversionException + * if the node is not concrete. + */ + public static RDFTerm fromJena(RDFTermFactory factory, Node node) { + if (node == null) { + return null; + } + if (factory instanceof RDFTermFactoryJena) { + // No need to convert, just wrap + return ((RDFTermFactoryJena) factory).fromJena(node); + } + if (node.isURI()) + return factory.createIRI(node.getURI()); + if (node.isLiteral()) { + String lang = node.getLiteralLanguage(); + if (lang != null && !lang.isEmpty()) + return factory.createLiteral(node.getLiteralLexicalForm(), lang); + if (node.getLiteralDatatype().equals(XSDDatatype.XSDstring)) + return factory.createLiteral(node.getLiteralLexicalForm()); + IRI dt = factory.createIRI(node.getLiteralDatatype().getURI()); + return factory.createLiteral(node.getLiteralLexicalForm(), dt); + } + if (node.isBlank()) + // The factory + return factory.createBlankNode(node.getBlankNodeLabel()); + throw new ConversionException("Node is not a concrete RDF Term: " + node); + } + + /** * Adapt an existing Jena Triple to CommonsRDF {@link Triple}. *

* If the 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()}. + * {@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 triple + * @return Adapted triple + * @throws ConversionException + * if any of the triple's nodes are not concrete or the triple + * is a generalized triple */ - public Triple fromJena(org.apache.jena.graph.Triple triple) { + public JenaTriple fromJena(org.apache.jena.graph.Triple triple) throws ConversionException { return JenaFactory.fromJena(triple, salt); } @@ -161,31 +223,62 @@ public final class RDFTermFactoryJena implements RDFTermFactory { * Adapt an existing Jena Triple to CommonsRDF {@link Triple}. *

* If the triple contains any {@link Node#isBlank()}, then any corresponding - * {@link BlankNode} will use the provided a {@link UUID} salt - * in combination with {@link Node#getBlankNodeId()} - * for the purpose of its {@link BlankNode#uniqueReference()}. + * {@link BlankNode} will use the provided a {@link UUID} salt in + * combination with {@link Node#getBlankNodeId()} for the purpose of its + * {@link BlankNode#uniqueReference()}. * * @param triple * Jena triple * @param salt * A {@link UUID} salt for adapting any {@link BlankNode}s - * @return Adapted triple + * @return Adapted triple + * @throws ConversionException + * if any of the triple's nodes are not concrete or the triple + * is a generalized triple */ - public static Triple fromJena(org.apache.jena.graph.Triple triple, UUID salt) { + public static JenaTriple fromJena(org.apache.jena.graph.Triple triple, UUID salt) throws ConversionException { return JenaFactory.fromJena(triple, salt); } - /** - * Adapt an existring Jena Graph to CommonsRDF {@link Graph}. This does not - * take a copy. Changes to the CommonsRDF Graph are reflected in the jena - * graph. + * Convert from Jena {@link org.apache.jena.graph.Triple} to any RDFCommons + * implementation. + *

+ * Note that if any of the triple's nodes {@link Node#isBlank()}, then the factory's + * {@link RDFTermFactory#createBlankNode(String)} will be used, meaning + * that care should be taken if reusing an {@link RDFTermFactory} instance + * for multiple conversion sessions. + * + * @see #fromJena(org.apache.jena.graph.Triple) + * @see #fromJena(org.apache.jena.graph.Triple, UUID) + * + * @param factory {@link RDFTermFactory} to use for creating the {@link Triple} and its + * {@link RDFTerm}s. + * @param triple + * Jena triple + * @return Converted triple + * @throws ConversionException + * if any of the triple's nodes are not concrete or the triple + * is a generalized triple */ - public static Graph fromJena(org.apache.jena.graph.Graph graph) { - // NOTE: This generates a new UUID salt per graph - return JenaFactory.fromJena(graph); + public static Triple fromJena(RDFTermFactory factory, org.apache.jena.graph.Triple triple) + throws ConversionException{ + if (factory instanceof RDFTermFactoryJena) { + // No need to convert, just wrap + return ((RDFTermFactoryJena) factory).fromJena(triple); + } + BlankNodeOrIRI subject; + IRI predicate; + try { + 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()); + return factory.createTriple(subject, predicate, object); } - + /** * Adapt an existing Jena Quad to CommonsRDF {@link Quad}. *

@@ -207,13 +300,14 @@ public final class RDFTermFactoryJena implements RDFTermFactory { * Adapt an existing Jena Quad to CommonsRDF {@link Quad}. *

* If the quad contains any {@link Node#isBlank()}, then any corresponding - * {@link BlankNode} will use a {@link UUID} salt from this - * {@link RDFTermFactoryJena} instance + * {@link BlankNode} will use the provided {@link UUID} salt * in combination with {@link Node#getBlankNodeId()} * for the purpose of its {@link BlankNode#uniqueReference()}. * * @param quad * Jena quad + * @param salt + * A {@link UUID} salt for adapting any {@link BlankNode}s * @return Adapted quad */ public static Quad fromJena(org.apache.jena.sparql.core.Quad quad, UUID salt) { @@ -221,33 +315,16 @@ public final class RDFTermFactoryJena implements RDFTermFactory { } /** - * Convert from Jena {@link Node} to any RDFCommons implementation - * - * @param salt + * Adapt an existing Jena Graph to CommonsRDF {@link Graph}. This does not + * take a copy, changes to the CommonsRDF Graph are reflected in the jena + * graph. */ - public static RDFTerm fromJena(RDFTermFactory factory, Node node) { - if (node == null) { - return null; - } - if (factory instanceof RDFTermFactoryJena) { - // No need to convert, just wrap - return ((RDFTermFactoryJena) factory).fromJena(node); - } - if (node.isURI()) - return factory.createIRI(node.getURI()); - if (node.isLiteral()) { - String lang = node.getLiteralLanguage(); - if (lang != null && !lang.isEmpty()) - return factory.createLiteral(node.getLiteralLexicalForm(), lang); - if (node.getLiteralDatatype().equals(XSDDatatype.XSDstring)) - return factory.createLiteral(node.getLiteralLexicalForm()); - IRI dt = factory.createIRI(node.getLiteralDatatype().getURI()); - return factory.createLiteral(node.getLiteralLexicalForm(), dt); - } - if (node.isBlank()) - return factory.createBlankNode(node.getBlankNodeLabel()); - throw new ConversionException("Node is not a concrete RDF Term: " + node); + public static Graph fromJena(org.apache.jena.graph.Graph graph) { + // NOTE: This generates a new UUID salt per graph + return JenaFactory.fromJena(graph); } + + /** * Convert from Jena to any RDFCommons implementation. This is a copy, even @@ -267,20 +344,6 @@ public final class RDFTermFactoryJena implements RDFTermFactory { return g; } - /** - * Convert from Jena {@link org.apache.jena.graph.Triple} to any RDFCommons - * implementation - */ - public static Triple fromJena(RDFTermFactory factory, org.apache.jena.graph.Triple triple) { - if (factory instanceof RDFTermFactoryJena) { - // No need to convert, just wrap - return ((RDFTermFactoryJena) factory).fromJena(triple); - } - BlankNodeOrIRI subject = (BlankNodeOrIRI) (fromJena(factory, triple.getSubject())); - IRI predicate = (IRI) (fromJena(factory, triple.getPredicate())); - RDFTerm object = fromJena(factory, triple.getObject()); - return factory.createTriple(subject, predicate, object); - } public static Quad fromJena(RDFTermFactory factory, org.apache.jena.sparql.core.Quad quad) { if (factory instanceof RDFTermFactoryJena) { @@ -368,7 +431,9 @@ public final class RDFTermFactoryJena implements RDFTermFactory { public static org.apache.jena.graph.Triple toJena(Triple triple) { if (triple instanceof JenaTriple) return ((JenaTriple) triple).asJenaTriple(); - return new org.apache.jena.graph.Triple(toJena(triple.getSubject()), toJena(triple.getPredicate()), + return new org.apache.jena.graph.Triple( + toJena(triple.getSubject()), + toJena(triple.getPredicate()), toJena(triple.getObject())); } http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/35c32616/jena/src/main/java/org/apache/commons/rdf/jena/impl/AbstractRDFTerm.java ---------------------------------------------------------------------- diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/impl/AbstractRDFTerm.java b/jena/src/main/java/org/apache/commons/rdf/jena/impl/AbstractRDFTerm.java index e7bc125..5c828ef 100644 --- a/jena/src/main/java/org/apache/commons/rdf/jena/impl/AbstractRDFTerm.java +++ b/jena/src/main/java/org/apache/commons/rdf/jena/impl/AbstractRDFTerm.java @@ -19,11 +19,11 @@ package org.apache.commons.rdf.jena.impl; import org.apache.commons.rdf.api.RDFTerm; -import org.apache.commons.rdf.jena.JenaNode; +import org.apache.commons.rdf.jena.JenaRDFTerm; import org.apache.jena.graph.Node; import org.apache.jena.riot.out.NodeFmtLib; -class AbstractRDFTerm implements JenaNode, RDFTerm { +class AbstractRDFTerm implements JenaRDFTerm, RDFTerm { private Node node; // static private PrefixMapping empty = new PrefixMappingImpl() ; http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/35c32616/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 fc7d1c3..928da61 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 @@ -21,10 +21,10 @@ package org.apache.commons.rdf.jena.impl; import java.util.UUID; import org.apache.commons.rdf.api.BlankNode; -import org.apache.commons.rdf.jena.JenaNode; +import org.apache.commons.rdf.jena.JenaBlankNode; import org.apache.jena.graph.Node; -public class BlankNodeImpl extends AbstractRDFTerm implements BlankNode, JenaNode { +public class BlankNodeImpl extends AbstractRDFTerm implements JenaBlankNode { private UUID salt; http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/35c32616/jena/src/main/java/org/apache/commons/rdf/jena/impl/GeneralizedTripleImpl.java ---------------------------------------------------------------------- diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/impl/GeneralizedTripleImpl.java b/jena/src/main/java/org/apache/commons/rdf/jena/impl/GeneralizedTripleImpl.java new file mode 100644 index 0000000..c36c615 --- /dev/null +++ b/jena/src/main/java/org/apache/commons/rdf/jena/impl/GeneralizedTripleImpl.java @@ -0,0 +1,74 @@ +/** + * 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.jena.impl; + +import java.util.UUID; + +import org.apache.commons.rdf.api.RDFTerm; +import org.apache.commons.rdf.jena.ConversionException; +import org.apache.commons.rdf.jena.JenaTripleLike; +import org.apache.commons.rdf.jena.RDFTermFactoryJena; + +public class GeneralizedTripleImpl implements JenaTripleLike { + private final RDFTerm object; + private final RDFTerm predicate; + private final RDFTerm subject; + private org.apache.jena.graph.Triple triple = null; + + /* package */ GeneralizedTripleImpl(RDFTerm subject, RDFTerm predicate, RDFTerm object) { + this.subject = subject; + this.predicate = predicate; + this.object = object; + } + + /* package */ GeneralizedTripleImpl(org.apache.jena.graph.Triple triple, UUID salt) throws ConversionException { + this.subject = JenaFactory.fromJena(triple.getSubject(), salt); + this.predicate = JenaFactory.fromJena(triple.getPredicate(), salt); + this.object = JenaFactory.fromJena(triple.getObject(), salt); + this.triple = triple; + } + + @Override + public org.apache.jena.graph.Triple asJenaTriple() { + if (triple == null) + triple = org.apache.jena.graph.Triple.create(RDFTermFactoryJena.toJena(subject), + RDFTermFactoryJena.toJena(predicate), RDFTermFactoryJena.toJena(object)); + return triple; + } + @Override + public RDFTerm getObject() { + return object; + } + + @Override + public RDFTerm getPredicate() { + return predicate; + } + + @Override + public RDFTerm getSubject() { + return subject; + } + + @Override + public String toString() { + return getSubject() + " " + getPredicate() + " " + getObject() + " ."; + } + +} http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/35c32616/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 d5373b7..9ad20d0 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 @@ -19,11 +19,11 @@ package org.apache.commons.rdf.jena.impl; import org.apache.commons.rdf.api.IRI; -import org.apache.commons.rdf.jena.JenaNode; +import org.apache.commons.rdf.jena.JenaIRI; import org.apache.jena.graph.Node; import org.apache.jena.graph.NodeFactory; -public class IRIImpl extends AbstractRDFTerm implements IRI, JenaNode { +public class IRIImpl extends AbstractRDFTerm implements JenaIRI { /* package */ IRIImpl(Node node) { super(node); http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/35c32616/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 2b4eab9..797557c 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 @@ -22,13 +22,17 @@ 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.Quad; import org.apache.commons.rdf.api.RDFTerm; -import org.apache.commons.rdf.api.Triple; import org.apache.commons.rdf.jena.ConversionException; +import org.apache.commons.rdf.jena.JenaBlankNode; +import org.apache.commons.rdf.jena.JenaGraph; +import org.apache.commons.rdf.jena.JenaIRI; +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.jena.graph.Node; import org.apache.jena.graph.NodeFactory; import org.apache.jena.sparql.graph.GraphFactory; @@ -38,44 +42,48 @@ public class JenaFactory { return new BlankNodeImpl(NodeFactory.createBlankNode(), UUID.randomUUID()); } - public static BlankNode createBlankNode(String id, UUID salt) { + public static JenaBlankNode createBlankNode(String id, UUID salt) { return new BlankNodeImpl(NodeFactory.createBlankNode(id), salt); } - public static BlankNode createBlankNode(UUID salt) { + public static JenaBlankNode createBlankNode(UUID salt) { return new BlankNodeImpl(NodeFactory.createBlankNode(), salt); } - public static Graph createGraph() { + public static JenaGraph createGraph() { return createGraph(UUID.randomUUID()); } - public static Graph createGraph(UUID salt) { + public static JenaGraph createGraph(UUID salt) { return new GraphImpl(GraphFactory.createDefaultGraph(), salt); } // basic components to commonsrdf backed by Jena. - public static IRI createIRI(String iriStr) { + public static JenaIRI createIRI(String iriStr) { return new IRIImpl(iriStr); } - public static Literal createLiteral(String lexStr) { + public static JenaLiteral createLiteral(String lexStr) { return new LiteralImpl(NodeFactory.createLiteral(lexStr)); } - public static Literal createLiteralDT(String lexStr, String datatypeIRI) { + public static JenaLiteral createLiteralDT(String lexStr, String datatypeIRI) { return new LiteralImpl(NodeFactory.createLiteral(lexStr, NodeFactory.getType(datatypeIRI))); } - public static Literal createLiteralLang(String lexStr, String langTag) { + public static JenaLiteral createLiteralLang(String lexStr, String langTag) { return new LiteralImpl(NodeFactory.createLiteral(lexStr, langTag)); } - public static Triple createTriple(BlankNodeOrIRI subject, IRI predicate, RDFTerm object) { + public static JenaTriple createTriple(BlankNodeOrIRI subject, IRI predicate, RDFTerm object) { return new TripleImpl(subject, predicate, object); } - public static RDFTerm fromJena(Node node, UUID salt) throws ConversionException { + public static JenaTripleLike 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()) return new IRIImpl(node); if (node.isLiteral()) { @@ -92,18 +100,22 @@ public class JenaFactory { throw new ConversionException("Node is not a concrete RDF Term: " + node); } - public static Graph fromJena(org.apache.jena.graph.Graph graph) { + public static JenaGraph fromJena(org.apache.jena.graph.Graph graph) { return new GraphImpl(graph, UUID.randomUUID()); } - public static Graph fromJena(org.apache.jena.graph.Graph graph, UUID salt) { + public static JenaGraph fromJena(org.apache.jena.graph.Graph graph, UUID salt) { return new GraphImpl(graph, salt); } - public static Triple fromJena(org.apache.jena.graph.Triple triple, UUID salt) { + public static JenaTriple fromJena(org.apache.jena.graph.Triple triple, UUID salt) { return new TripleImpl(triple, salt); } + public static JenaTripleLike fromJenaGeneralized(org.apache.jena.graph.Triple triple, UUID salt) { + return new GeneralizedTripleImpl(triple, salt); + } + public static Quad fromJena(org.apache.jena.sparql.core.Quad quad, UUID salt) { return new QuadImpl(quad, salt); } http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/35c32616/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 efcf099..0530d08 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 @@ -23,9 +23,10 @@ import java.util.Optional; import org.apache.commons.rdf.api.IRI; import org.apache.commons.rdf.api.Literal; +import org.apache.commons.rdf.jena.JenaLiteral; import org.apache.jena.graph.Node; -public class LiteralImpl extends AbstractRDFTerm implements Literal { +public class LiteralImpl extends AbstractRDFTerm implements JenaLiteral { /* package */ LiteralImpl(Node node) { super(node); http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/35c32616/jena/src/main/java/org/apache/commons/rdf/jena/impl/QuadImpl.java ---------------------------------------------------------------------- diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/impl/QuadImpl.java b/jena/src/main/java/org/apache/commons/rdf/jena/impl/QuadImpl.java index 31c96b2..16deb02 100644 --- a/jena/src/main/java/org/apache/commons/rdf/jena/impl/QuadImpl.java +++ b/jena/src/main/java/org/apache/commons/rdf/jena/impl/QuadImpl.java @@ -30,7 +30,7 @@ import org.apache.commons.rdf.api.Triple; import org.apache.commons.rdf.jena.JenaQuad; import org.apache.commons.rdf.jena.RDFTermFactoryJena; -public class QuadImpl implements Quad, JenaQuad { +public class QuadImpl implements JenaQuad { private final Optional graphName; private final RDFTerm object; http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/35c32616/jena/src/main/java/org/apache/commons/rdf/jena/impl/TripleImpl.java ---------------------------------------------------------------------- diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/impl/TripleImpl.java b/jena/src/main/java/org/apache/commons/rdf/jena/impl/TripleImpl.java index 3a0f15b..f65fd6d 100644 --- a/jena/src/main/java/org/apache/commons/rdf/jena/impl/TripleImpl.java +++ b/jena/src/main/java/org/apache/commons/rdf/jena/impl/TripleImpl.java @@ -25,6 +25,7 @@ import org.apache.commons.rdf.api.BlankNodeOrIRI; import org.apache.commons.rdf.api.IRI; import org.apache.commons.rdf.api.RDFTerm; import org.apache.commons.rdf.api.Triple; +import org.apache.commons.rdf.jena.ConversionException; import org.apache.commons.rdf.jena.JenaTriple; import org.apache.commons.rdf.jena.RDFTermFactoryJena; @@ -40,9 +41,13 @@ public class TripleImpl implements Triple, JenaTriple { this.object = object; } - /* package */ TripleImpl(org.apache.jena.graph.Triple triple, UUID salt) { - this.subject = (BlankNodeOrIRI) JenaFactory.fromJena(triple.getSubject(), salt); - this.predicate = (IRI) JenaFactory.fromJena(triple.getPredicate(), salt); + /* package */ TripleImpl(org.apache.jena.graph.Triple triple, UUID salt) throws ConversionException { + try { + this.subject = (BlankNodeOrIRI) JenaFactory.fromJena(triple.getSubject(), salt); + this.predicate = (IRI) JenaFactory.fromJena(triple.getPredicate(), salt); + } catch (ClassCastException ex) { + throw new ConversionException("Can't adapt generalized triple: " + triple, ex); + } this.object = JenaFactory.fromJena(triple.getObject(), salt); this.triple = triple; }