COMMONSRDF-2: refactorized api java packages
Project: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/commit/fa5321e4 Tree: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/tree/fa5321e4 Diff: http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/diff/fa5321e4 Branch: refs/heads/master Commit: fa5321e4589e4e6a49ddf15d8d0bdf173d84d803 Parents: 4076688 Author: Sergio Fernández <[email protected]> Authored: Fri Mar 27 19:40:21 2015 +0100 Committer: Sergio Fernández <[email protected]> Committed: Fri Mar 27 19:40:21 2015 +0100 ---------------------------------------------------------------------- .../com/github/commonsrdf/api/BlankNode.java | 148 ------- .../github/commonsrdf/api/BlankNodeOrIRI.java | 22 - .../java/com/github/commonsrdf/api/Graph.java | 179 --------- .../java/com/github/commonsrdf/api/IRI.java | 74 ---- .../java/com/github/commonsrdf/api/Literal.java | 108 ----- .../java/com/github/commonsrdf/api/RDFTerm.java | 36 -- .../github/commonsrdf/api/RDFTermFactory.java | 252 ------------ .../java/com/github/commonsrdf/api/Triple.java | 97 ----- .../org/apache/commons/rdf/api/BlankNode.java | 148 +++++++ .../apache/commons/rdf/api/BlankNodeOrIRI.java | 22 + .../java/org/apache/commons/rdf/api/Graph.java | 179 +++++++++ .../java/org/apache/commons/rdf/api/IRI.java | 74 ++++ .../org/apache/commons/rdf/api/Literal.java | 108 +++++ .../org/apache/commons/rdf/api/RDFTerm.java | 36 ++ .../apache/commons/rdf/api/RDFTermFactory.java | 252 ++++++++++++ .../java/org/apache/commons/rdf/api/Triple.java | 97 +++++ .../commonsrdf/api/AbstractBlankNodeTest.java | 222 ---------- .../commonsrdf/api/AbstractGraphTest.java | 275 ------------- .../api/AbstractRDFTermFactoryTest.java | 401 ------------------- .../api/DefaultRDFTermFactoryTest.java | 32 -- .../commons/rdf/api/AbstractBlankNodeTest.java | 222 ++++++++++ .../commons/rdf/api/AbstractGraphTest.java | 275 +++++++++++++ .../rdf/api/AbstractRDFTermFactoryTest.java | 401 +++++++++++++++++++ .../rdf/api/DefaultRDFTermFactoryTest.java | 30 ++ 24 files changed, 1844 insertions(+), 1846 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/fa5321e4/api/src/main/java/com/github/commonsrdf/api/BlankNode.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/com/github/commonsrdf/api/BlankNode.java b/api/src/main/java/com/github/commonsrdf/api/BlankNode.java deleted file mode 100644 index 6ab326e..0000000 --- a/api/src/main/java/com/github/commonsrdf/api/BlankNode.java +++ /dev/null @@ -1,148 +0,0 @@ -/** - * Licensed 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 com.github.commonsrdf.api; - -/** - * A <a href= "http://www.w3.org/TR/rdf11-concepts/#dfn-blank-node" >RDF-1.1 - * Blank Node</a>, as defined by <a href= - * "http://www.w3.org/TR/rdf11-concepts/#section-blank-nodes" >RDF-1.1 Concepts - * and Abstract Syntax</a>, a W3C Recommendation published on 25 February 2014.<br> - * <p> - * Note: - * <blockquote> - * <a href="http://www.w3.org/TR/rdf11-concepts/#dfn-blank-node">Blank nodes</a> - * are disjoint from IRIs and literals. Otherwise, the - * set of possible blank nodes is arbitrary. RDF makes no reference to any - * internal structure of blank nodes. - * </blockquote> - * <p> - * Also note that: - * <blockquote> - * <a href="http://www.w3.org/TR/rdf11-concepts/#dfn-blank-node-identifier">Blank node identifiers</a> - * are local identifiers that are used in - * some concrete RDF syntaxes or RDF store implementations. They are always - * <em>locally scoped</em> to the file or RDF store, and are <em>not</em> persistent - * or portable - * identifiers for blank nodes. Blank node identifiers are <em>not</em> - * part of the RDF - * abstract syntax, but are entirely dependent on the concrete syntax or - * implementation. - * The syntactic restrictions on blank node identifiers, if any, - * therefore also depend on the concrete RDF syntax or implementation. - * <p> - * Implementations that handle blank node identifiers in concrete syntaxes need - * to be careful not to create the same blank node from multiple occurrences of - * the same blank node identifier except in situations where this is supported - * by the syntax. - * </blockquote> - * - * @see <a href="http://www.w3.org/TR/rdf11-concepts/#dfn-blank-node">RDF-1.1 - * Blank Node</a> - */ -public interface BlankNode extends BlankNodeOrIRI { - - /** - * Return a <a href= - * "http://www.w3.org/TR/rdf11-concepts/#dfn-blank-node-identifier" - * >label</a> for the blank node. This is not a serialization/syntax label. - * It should be uniquely identifying within the local scope it is created in - * but has no uniqueness guarantees other than that. - * <p> - * In particular, the existence of two objects of type {@link BlankNode} - * with the same value returned from {@link #internalIdentifier()} are not - * equivalent unless they are known to have been created in the same local - * scope (see {@link #equals(Object)}) - * <p> - * An example of a local scope may be an instance of a Java Virtual Machine - * (JVM). In the context of a JVM instance, an implementor may support - * insertion and removal of {@link Triple} objects containing Blank Nodes - * without modifying the blank node labels. - * <p> - * Another example of a local scope may be a <a - * href="http://www.w3.org/TR/rdf11-concepts/#section-rdf-graph">Graph</a> - * or <a - * href="http://www.w3.org/TR/rdf11-concepts/#section-dataset">Dataset</a> - * created from a single document. In this context, an implementor should - * reasonably guarantee that the label returned by getLabel only maps to - * equivalent blank nodes in the same Graph or Dataset, but they may not - * guarantee that it is unique for the JVM instance. In this case, the - * implementor may support a mechanism to provide a mapping for blank nodes - * between Graph or Dataset instances to guarantee their uniqueness. - * <p> - * If implementors support <a - * href="http://www.w3.org/TR/rdf11-concepts/#section-skolemization" - * >Skolemisation</a>, they may map instances of {@link BlankNode} objects - * to {@link IRI} objects to reduce scoping issues. - * <p> - * It is not a requirement for the internal identifier to be a part of the - * {@link #ntriplesString()}, except that two BlankNode instances with the - * same internalIdentifier() and same local scope should have the same - * {@link #ntriplesString()}. - * - * @return An internal, system identifier for the {@link BlankNode}. - */ - String internalIdentifier(); - - /** - * Check it this BlankNode is equal to another BlankNode. <blockquote> <a - * href - * ="http://www.w3.org/TR/rdf11-concepts/#dfn-blank-node-identifier">Blank - * node identifiers</a> are local identifiers that are used in some concrete - * RDF syntaxes or RDF store implementations. They are always locally scoped - * to the file or RDF store, and are <em>not</em> persistent or portable - * identifiers for blank nodes. Blank node identifiers are <em>not</em> part - * of the RDF abstract syntax, but are entirely dependent on the concrete - * syntax or implementation. The syntactic restrictions on blank node - * identifiers, if any, therefore also depend on the concrete RDF syntax or - * implementation. - * <p>Implementations that handle blank node identifiers in - * concrete syntaxes need to be careful not to create the same blank node - * from multiple occurrences of the same blank node identifier except in - * situations where this is supported by the syntax. - * </blockquote> - * <p> - * Implementations MUST check the local scope, as two BlankNode in different - * Graphs MUST differ. On the other hand, two BlankNodes found in triples of - * the same Graph instance MUST equal if and only if they have the same - * {@link #internalIdentifier()}. - * </p> - * <p> - * Implementations MUST also override {@link #hashCode()} so that two equal - * Literals produce the same hash code. - * </p> - * - * @see Object#equals(Object) - * - * @param other - * Another object - * @return true if other is a BlankNode, is in the same local scope and is - * equal to this BlankNode - */ - @Override - public boolean equals(Object other); - - /** - * Calculate a hash code for this BlankNode. - * <p> - * This method MUST be implemented when implementing {@link #equals(Object)} - * so that two equal BlankNodes produce the same hash code. - * - * @see Object#hashCode() - * - * @return a hash code value for this BlankNode. - */ - @Override - public int hashCode(); - -} http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/fa5321e4/api/src/main/java/com/github/commonsrdf/api/BlankNodeOrIRI.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/com/github/commonsrdf/api/BlankNodeOrIRI.java b/api/src/main/java/com/github/commonsrdf/api/BlankNodeOrIRI.java deleted file mode 100644 index 38d5ef6..0000000 --- a/api/src/main/java/com/github/commonsrdf/api/BlankNodeOrIRI.java +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Licensed 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 com.github.commonsrdf.api; - -/** - * This interface represents the {@link RDFTerm}s that may be used in the - * subject position of an RDF-1.1 {@link Triple}, including {@link BlankNode} - * and {@link IRI}. - */ -public interface BlankNodeOrIRI extends RDFTerm { -} http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/fa5321e4/api/src/main/java/com/github/commonsrdf/api/Graph.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/com/github/commonsrdf/api/Graph.java b/api/src/main/java/com/github/commonsrdf/api/Graph.java deleted file mode 100644 index 40f4808..0000000 --- a/api/src/main/java/com/github/commonsrdf/api/Graph.java +++ /dev/null @@ -1,179 +0,0 @@ -/** - * Licensed 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 com.github.commonsrdf.api; - -import java.util.function.Predicate; -import java.util.stream.Stream; - -/** - * An <a href="http://www.w3.org/TR/rdf11-concepts/#section-rdf-graph"> RDF 1.1 - * Graph</a>, a set of RDF triples, as defined by <a - * href="http://www.w3.org/TR/rdf11-concepts/" >RDF-1.1 Concepts and Abstract - * Syntax</a>, a W3C Recommendation published on 25 February 2014. - */ -public interface Graph extends AutoCloseable { - - /** - * Add a triple to the graph. - * - * @param triple - * The triple to add - */ - void add(Triple triple); - - /** - * Add a triple to the graph. - * - * @param subject - * The triple subject - * @param predicate - * The triple predicate - * @param object - * The triple object - */ - void add(BlankNodeOrIRI subject, IRI predicate, RDFTerm object); - - /** - * Check if graph contains triple. - * - * @param triple - * The triple to check. - * @return True if the Graph contains the given Triple. - */ - boolean contains(Triple triple); - - /** - * Check if graph contains a pattern of triples. - * - * @param subject - * The triple subject (null is a wildcard) - * @param predicate - * The triple predicate (null is a wildcard) - * @param object - * The triple object (null is a wildcard) - * @return True if the Graph contains any Triples that match the given - * pattern. - */ - boolean contains(BlankNodeOrIRI subject, IRI predicate, RDFTerm object); - - /** - * Close the graph, relinquishing any underlying resources. - * <p> - * For example, this would close any open file and network streams and free - * database locks held by the Graph implementation. - * <p> - * The behaviour of the other Graph methods are undefined after closing the - * graph. - * <p> - * Implementations might not need {@link #close()}, hence the default - * implementation does nothing. - */ - @Override - default void close() throws Exception { - } - - /** - * Remove a concrete triple from the graph. - * - * @param triple - * triple to remove - */ - void remove(Triple triple); - - /** - * Remove a concrete pattern of triples from the graph. - * - * @param subject - * The triple subject (null is a wildcard) - * @param predicate - * The triple predicate (null is a wildcard) - * @param object - * The triple object (null is a wildcard) - */ - void remove(BlankNodeOrIRI subject, IRI predicate, RDFTerm object); - - /** - * Clear the graph, removing all triples. - * - */ - void clear(); - - /** - * Number of triples contained by the graph. - * <p> - * The count of a set does not include duplicates, as determined by the - * equals method for each {@link Triple}. - * - * @return The number of triples in the graph - */ - long size(); - - /** - * Get all triples contained by the graph.<br> - * <p> - * The iteration does not contain any duplicate triples, as determined by - * the equals method for each {@link Triple}. - * <p> - * The behaviour of the Stream is not specified if add, remove, or clear, - * are called on the Stream before it terminates.<br> - * <p> - * Implementations may throw ConcurrentModificationException from Stream - * methods if they detect a conflict while the Stream is active. - * - * @return A {@link Stream} over all of the triples in the graph - */ - Stream<? extends Triple> getTriples(); - - /** - * Get all triples contained by the graph matched with the pattern. - * <p> - * The iteration does not contain any duplicate triples, as determined by - * the equals method for each {@link Triple}. - * <p> - * The behaviour of the Stream is not specified if add, remove, or clear, - * are called on the Stream before it terminates.<br> - * <p> - * Implementations may throw ConcurrentModificationException from Stream - * methods if they detect a conflict while the Stream is active. - * - * @param subject - * The triple subject (null is a wildcard) - * @param predicate - * The triple predicate (null is a wildcard) - * @param object - * The triple object (null is a wildcard) - * @return A {@link Stream} over the matched triples. - */ - Stream<? extends Triple> getTriples(BlankNodeOrIRI subject, IRI predicate, - RDFTerm object); - - /** - * Get all triples contained by the graph matched with the pattern. - * <p> - * The iteration does not contain any duplicate triples, as determined by - * the equals method for each {@link Triple}. - * <p> - * The behaviour of the Stream is not specified if add, remove, or clear, - * are called on the Stream before it terminates.<br> - * <p> - * Implementations may throw ConcurrentModificationException from Stream - * methods if they detect a conflict while the Stream is active. - * - * @param filter - * A filter to match against each triple in the graph. - * @return A {@link Stream} over the matched triples. - */ - Stream<? extends Triple> getTriples(Predicate<Triple> filter); - -} http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/fa5321e4/api/src/main/java/com/github/commonsrdf/api/IRI.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/com/github/commonsrdf/api/IRI.java b/api/src/main/java/com/github/commonsrdf/api/IRI.java deleted file mode 100644 index 421d2a9..0000000 --- a/api/src/main/java/com/github/commonsrdf/api/IRI.java +++ /dev/null @@ -1,74 +0,0 @@ -/** - * Licensed 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 com.github.commonsrdf.api; - -/** - * An <a href= "http://www.w3.org/TR/rdf11-concepts/#dfn-iri" >RDF-1.1 IRI</a>, - * as defined by <a href= "http://www.w3.org/TR/rdf11-concepts/" >RDF-1.1 - * Concepts and Abstract Syntax</a>, a W3C Recommendation published on 25 - * February 2014.<br> - */ -public interface IRI extends BlankNodeOrIRI { - - /** - * Return the IRI encoded as a native Unicode String.<br> - * - * The returned string must not include URL-encoding to escape non-ASCII - * characters. - * - * @return The IRI encoded as a native Unicode String. - */ - String getIRIString(); - - /** - * Check it this IRI is equal to another IRI. <blockquote> <a - * href="http://www.w3.org/TR/rdf11-concepts/#section-IRIs">IRI - * equality</a>: Two IRIs are equal if and only if they are equivalent under - * Simple String Comparison according to section 5.1 of [RFC3987]. Further - * normalization MUST NOT be performed when comparing IRIs for equality. - * </blockquote> - * <p> - * Two IRIs are equal are in the same local scope and their - * {@link #getIRIString()} are equal. - * </p> - * <p> - * Implementations MAY check the local scope for IRI comparison. - * </p> - * <p> - * Implementations MUST also override {@link #hashCode()} so that two equal - * IRIs produce the same hash code. - * </p> - * - * @see Object#equals(Object) - * - * @param other - * Another object - * @return true if other is an IRI and is equal to this - */ - @Override - public boolean equals(Object other); - - /** - * Calculate a hash code for this IRI. - * <p> - * This method MUST be implemented when implementing {@link #equals(Object)} - * so that two equal IRIs produce the same hash code. - * - * @see Object#hashCode() - * - * @return a hash code value for this IRI. - */ - @Override - public int hashCode(); -} http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/fa5321e4/api/src/main/java/com/github/commonsrdf/api/Literal.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/com/github/commonsrdf/api/Literal.java b/api/src/main/java/com/github/commonsrdf/api/Literal.java deleted file mode 100644 index 4982327..0000000 --- a/api/src/main/java/com/github/commonsrdf/api/Literal.java +++ /dev/null @@ -1,108 +0,0 @@ -/** - * Licensed 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 com.github.commonsrdf.api; - -import java.util.Optional; - -/** - * A RDF-1.1 Literal, as defined by <a href= - * "http://www.w3.org/TR/rdf11-concepts/#section-Graph-Literal" >RDF-1.1 - * Concepts and Abstract Syntax</a>, a W3C Recommendation published on 25 - * February 2014 - */ -public interface Literal extends RDFTerm { - - /** - * The lexical form of this literal, represented by a <a - * href="http://www.unicode.org/versions/latest/">Unicode string</a>. - * - * @return The lexical form of this literal. - * @see <a - * href="http://www.w3.org/TR/rdf11-concepts/#dfn-lexical-form">RDF-1.1 - * Literal lexical form</a> - */ - String getLexicalForm(); - - /** - * The IRI identifying the datatype that determines how the lexical form - * maps to a literal value. - * - * @return The datatype IRI for this literal. - * @see <a - * href="http://www.w3.org/TR/rdf11-concepts/#dfn-datatype-iri">RDF-1.1 - * Literal datatype IRI</a> - */ - IRI getDatatype(); - - /** - * If and only if the datatype IRI is <a - * href="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString" - * >http://www.w3.org/1999/02/22-rdf-syntax-ns#langString</a>, the language - * tag for this Literal is a non-empty language tag as defined by <a - * href="http://tools.ietf.org/html/bcp47">BCP47</a>.<br> - * If the datatype IRI is not <a - * href="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString" - * >http://www.w3.org/1999/02/22-rdf-syntax-ns#langString</a>, this method - * must return {@link Optional#empty()}. - * - * @return The {@link Optional} language tag for this literal. If - * {@link Optional#isPresent()} returns true, the value returned by - * {@link Optional#get()} must be a non-empty string conforming to - * BCP47. - * @see <a - * href="http://www.w3.org/TR/rdf11-concepts/#dfn-language-tag">RDF-1.1 - * Literal language tag</a> - */ - Optional<String> getLanguageTag(); - - /** - * Check it this Literal is equal to another Literal. <blockquote> <a - * href="http://www.w3.org/TR/rdf11-concepts/#dfn-literal-term">Literal term - * equality</a>: Two literals are term-equal (the same RDF literal) if and - * only if the two lexical forms, the two datatype IRIs, and the two - * language tags (if any) compare equal, character by character. Thus, two - * literals can have the same value without being the same RDF term. - * </blockquote> - * <p> - * Implementations MAY check the local scope for Literal comparison. - * </p> - * <p> - * Implementations MUST also override {@link #hashCode()} so that two equal - * Literals produce the same hash code. - * </p> - * - * @see Object#equals(Object) - * - * @param other - * Another object - * @return true if other is a Literal and is equal to this - */ - @Override - public boolean equals(Object other); - - /** - * Calculate a hash code for this Literal. - * <p> - * This method MUST be implemented when implementing {@link #equals(Object)} - * so that two equal Literals produce the same hash code. - * </p> - * - * @see Object#hashCode() - * - * @return a hash code value for this Literal. - */ - @Override - public int hashCode(); - -} http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/fa5321e4/api/src/main/java/com/github/commonsrdf/api/RDFTerm.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/com/github/commonsrdf/api/RDFTerm.java b/api/src/main/java/com/github/commonsrdf/api/RDFTerm.java deleted file mode 100644 index 5530e67..0000000 --- a/api/src/main/java/com/github/commonsrdf/api/RDFTerm.java +++ /dev/null @@ -1,36 +0,0 @@ -/** - * Licensed 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 com.github.commonsrdf.api; - -/** - * An <a href= "http://www.w3.org/TR/rdf11-concepts/#dfn-rdf-term" >RDF-1.1 - * Term</a>, as defined by <a href= "http://www.w3.org/TR/rdf11-concepts/" - * >RDF-1.1 Concepts and Abstract Syntax</a>, a W3C Recommendation published on - * 25 February 2014.<br> - * - * @see <a href= "http://www.w3.org/TR/rdf11-concepts/#dfn-rdf-term" >RDF-1.1 - * Term</a> - */ -public interface RDFTerm { - - /** - * Return the term serialised as specified by the RDF-1.1 N-Triples Canonical form. - * - * @return The term serialised as RDF-1.1 N-Triples. - * @see <a href="http://www.w3.org/TR/n-triples/#canonical-ntriples"> - * RDF-1.1 N-Triples Canonical form</a> - */ - String ntriplesString(); - -} http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/fa5321e4/api/src/main/java/com/github/commonsrdf/api/RDFTermFactory.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/com/github/commonsrdf/api/RDFTermFactory.java b/api/src/main/java/com/github/commonsrdf/api/RDFTermFactory.java deleted file mode 100644 index 90592c6..0000000 --- a/api/src/main/java/com/github/commonsrdf/api/RDFTermFactory.java +++ /dev/null @@ -1,252 +0,0 @@ -/** - * Licensed 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 com.github.commonsrdf.api; - -import java.util.Locale; - -/** - * Factory for creating RDFTerm and Graph instances. - * <p> - * It is not specified how an implementation should provide a RDFTermFactory. - * <p> - * If an implementation does not support a particular method (e.g. it requires - * additional parameters or can't create graphs), then it MAY throw - * UnsupportedOperationException, as provided by the default implementations - * here. - * <p> - * If a factory method does not allow or support a provided parameter, e.g. - * because an IRI is considered invalid, then it SHOULD throw - * IllegalArgumentException. - * - * - * @see RDFTerm - * @see Graph - * - */ -public interface RDFTermFactory { - - /** - * Create a new blank node. - * <p> - * Two BlankNodes created with this method MUST NOT be equal. - * <p> - * If supported, the {@link BlankNode#internalIdentifier()} of the returned - * blank node MUST be an auto-generated value. - * - * @return A new BlankNode - * @throws UnsupportedOperationException - * If the operation is not supported. - */ - default BlankNode createBlankNode() throws UnsupportedOperationException { - throw new UnsupportedOperationException( - "createBlankNode() not supported"); - } - - /** - * Create a blank node for the given internal identifier. - * <p> - * Two BlankNodes created with the same identifier using this method MUST be - * equal if they are in the same local scope (e.g. in the same Graph). See - * the equals contract for {@link BlankNode} for more information. - * <p> - * If supported, the {@link BlankNode#internalIdentifier()} of the returned - * blank node MAY be equal to the provided identifier. - * - * @param identifier - * A non-empty String that is unique to this blank node in this - * scope, and which may be used as the internal identifier for - * the blank node. - * @return A BlankNode for the given identifier - * @throws IllegalArgumentException - * if the identifier is not acceptable, e.g. was empty or - * contained unsupported characters. - * @throws UnsupportedOperationException - * If the operation is not supported. - */ - default BlankNode createBlankNode(String identifier) - throws IllegalArgumentException, UnsupportedOperationException { - throw new UnsupportedOperationException( - "createBlankNode(String) not supported"); - } - - /** - * Create a new graph. - * <p> - * It is undefined if the graph will be persisted by any underlying storage - * mechanism. - * - * @return A new Graph - * @throws UnsupportedOperationException - * If the operation is not supported. - */ - default Graph createGraph() throws UnsupportedOperationException { - throw new UnsupportedOperationException("createGraph() not supported"); - } - - /** - * Create an IRI from a (possibly escaped) String. - * <p> - * The provided iri string MUST be valid according to the <a - * href="http://www.w3.org/TR/rdf11-concepts/#dfn-iri">W3C RDF-1.1 IRI</a> - * definition. - * - * @param iri - * Internationalized Resource Identifier - * @return A new IRI - * @throws IllegalArgumentException - * If the provided string is not acceptable, e.g. does not - * conform to the RFC3987 syntax. - * @throws UnsupportedOperationException - * If the operation is not supported. - */ - default IRI createIRI(String iri) throws IllegalArgumentException, - UnsupportedOperationException { - throw new UnsupportedOperationException( - "createIRI(String) not supported"); - } - - /** - * Create a simple literal. - * <p> - * The provided lexical form should not be escaped in any sense, e.g. should - * not include "quotes" unless those are part of the literal value. - * <p> - * The returned Literal MUST have a {@link Literal#getLexicalForm()} that is - * equal to the provided lexical form, MUST NOT have a - * {@link Literal#getLanguageTag()} present, and SHOULD return a - * {@link Literal#getDatatype()} that is equal to the IRI - * <code>http://www.w3.org/2001/XMLSchema#string</code>. - * - * - * @param lexicalForm - * The literal value in plain text - * @return The created Literal - * @throws IllegalArgumentException - * If the provided lexicalForm is not acceptable, e.g. because - * it is too large for an underlying storage. - * @throws UnsupportedOperationException - * If the operation is not supported. - */ - default Literal createLiteral(String lexicalForm) - throws IllegalArgumentException, UnsupportedOperationException { - throw new UnsupportedOperationException( - "createLiteral(String) not supported"); - } - - /** - * Create a literal with the specified data type. - * <p> - * The provided lexical form should not be escaped in any sense, e.g. should - * not include "quotes" unless those are part of the literal value. - * <p> - * It is RECOMMENDED that the provided dataType is one of the <a - * href="http://www.w3.org/TR/rdf11-concepts/#xsd-datatypes">RDF-compatible - * XSD types</a>. - * <p> - * The provided lexical form SHOULD be in the <a - * href="http://www.w3.org/TR/rdf11-concepts/#dfn-lexical-space">lexical - * space</a> of the provided dataType. - * <p> - * The returned Literal SHOULD have a {@link Literal#getLexicalForm()} that - * is equal to the provided lexicalForm, MUST NOT have a - * {@link Literal#getLanguageTag()} present, and SHOULD return a - * {@link Literal#getDatatype()} that is equal to the provided dataType IRI. - * - * @param lexicalForm - * The literal value - * @param dataType - * The data type IRI for the literal value, e.g. - * <code>http://www.w3.org/2001/XMLSchema#integer</code> - * @return The created Literal - * @throws IllegalArgumentException - * If any of the provided arguments are not acceptable, e.g. - * because the provided dataType is not permitted. - * @throws UnsupportedOperationException - * If the operation is not supported. - */ - default Literal createLiteral(String lexicalForm, IRI dataType) - throws IllegalArgumentException, UnsupportedOperationException { - throw new UnsupportedOperationException( - "createLiteral(String) not supported"); - } - - /** - * Create a language-tagged literal. - * <p> - * The provided lexical form should not be escaped in any sense, e.g. should - * not include "quotes" unless those are part of the literal value. - * <p> - * The provided language tag MUST be valid according to <a - * href="http://tools.ietf.org/html/bcp47">BCP47</a>, e.g. <code>en</code>. - * <p> - * The provided language tag <a - * href="http://www.w3.org/TR/rdf11-concepts/#dfn-language-tagged-string" - * >MAY be converted to lower case</a>. - * <p> - * The returned Literal SHOULD have a {@link Literal#getLexicalForm()} which - * is equal to the provided lexicalForm, MUST return a - * {@link Literal#getDatatype()} that is equal to the IRI - * <code>http://www.w3.org/1999/02/22-rdf-syntax-ns#langString</code>, and - * MUST have a {@link Literal#getLanguageTag()} present which SHOULD be - * equal to the provided language tag (compared as - * {@link String#toLowerCase(Locale)} in {@link Locale#ENGLISH}). - * - * @param lexicalForm - * The literal value - * @param languageTag - * The non-empty language tag as defined by <a - * href="http://tools.ietf.org/html/bcp47">BCP47</a> - * @return The created Literal - * @throws IllegalArgumentException - * If the provided values are not acceptable, e.g. because the - * languageTag was syntactically invalid. - * @throws UnsupportedOperationException - * If the operation is not supported. - */ - default Literal createLiteral(String lexicalForm, String languageTag) - throws IllegalArgumentException, UnsupportedOperationException { - throw new UnsupportedOperationException( - "createLiteral(String,String) not supported"); - } - - /** - * Create a triple. - * <p> - * The returned Triple SHOULD have a {@link Triple#getSubject()} that is - * equal to the provided subject, a {@link Triple#getPredicate()} that is - * equal to the provided predicate, and a {@link Triple#getObject()} that is - * equal to the provided object. - * - * @param subject - * The IRI or BlankNode that is the subject of the triple - * @param predicate - * The IRI that is the predicate of the triple - * @param object - * The IRI, BlankNode or Literal that is the object of the triple - * @return The created Triple - * @throws IllegalArgumentException - * If any of the provided arguments are not acceptable, e.g. - * because a Literal has a lexicalForm that is too large for an - * underlying storage. - * @throws UnsupportedOperationException - * If the operation is not supported. - */ - default Triple createTriple(BlankNodeOrIRI subject, IRI predicate, - RDFTerm object) throws IllegalArgumentException, - UnsupportedOperationException { - throw new UnsupportedOperationException( - "createTriple(BlankNodeOrIRI,IRI,RDFTerm) not supported"); - } - -} http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/fa5321e4/api/src/main/java/com/github/commonsrdf/api/Triple.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/com/github/commonsrdf/api/Triple.java b/api/src/main/java/com/github/commonsrdf/api/Triple.java deleted file mode 100644 index 1cc8ec8..0000000 --- a/api/src/main/java/com/github/commonsrdf/api/Triple.java +++ /dev/null @@ -1,97 +0,0 @@ -/** - * Licensed 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 com.github.commonsrdf.api; - -/** - * An <a href= "http://www.w3.org/TR/rdf11-concepts/#dfn-rdf-triple" >RDF-1.1 - * Triple</a>, as defined by <a href= "http://www.w3.org/TR/rdf11-concepts/" - * >RDF-1.1 Concepts and Abstract Syntax</a>, a W3C Recommendation published on - * 25 February 2014.<br> - * - * @see <a href= "http://www.w3.org/TR/rdf11-concepts/#dfn-rdf-triple" >RDF-1.1 - * Triple</a> - */ -public interface Triple { - - /** - * The subject of this triple, which may be either a {@link BlankNode} or an - * {@link IRI}, which are represented in Commons RDF by the interface - * {@link BlankNodeOrIRI}. - * - * @return The subject {@link BlankNodeOrIRI} of this triple. - * @see <a href="http://www.w3.org/TR/rdf11-concepts/#dfn-subject">RDF-1.1 - * Triple subject</a> - */ - BlankNodeOrIRI getSubject(); - - /** - * The predicate {@link IRI} of this triple. - * - * @return The predicate {@link IRI} of this triple. - * @see <a href="http://www.w3.org/TR/rdf11-concepts/#dfn-predicate">RDF-1.1 - * Triple predicate</a> - */ - IRI getPredicate(); - - /** - * The object of this triple, which may be either a {@link BlankNode}, an - * {@link IRI}, or a {@link Literal}, which are represented in Commons RDF - * by the interface {@link RDFTerm}. - * - * @return The object {@link RDFTerm} of this triple. - * @see <a href="http://www.w3.org/TR/rdf11-concepts/#dfn-object">RDF-1.1 - * Triple object</a> - */ - RDFTerm getObject(); - - /** - * Check it this Triple is equal to another Triple. - * <p> - * Two Triples are equal if and only if their {@link #getSubject()}, - * {@link #getPredicate()} and {@link #getObject()} are equal. - * </p> - * <p> - * Implementations MUST check the local scope for Triple comparison if - * either the subject or object is a BlankNode, and MAY check the local - * scope in other cases. - * </p> - * <p> - * Implementations MUST also override {@link #hashCode()} so that two equal - * Triples produce the same hash code. - * </p> - * - * @see Object#equals(Object) - * - * @param other - * Another object - * @return true if other is a Triple and is equal to this - */ - @Override - public boolean equals(Object other); - - /** - * Calculate a hash code for this Triple. - * <p> - * This method MUST be implemented when implementing {@link #equals(Object)} - * so that two equal IRIs produce the same hash code. - * </p> - * - * @see Object#hashCode() - * - * @return a hash code value for this Triple. - */ - @Override - public int hashCode(); - -} http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/fa5321e4/api/src/main/java/org/apache/commons/rdf/api/BlankNode.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/commons/rdf/api/BlankNode.java b/api/src/main/java/org/apache/commons/rdf/api/BlankNode.java new file mode 100644 index 0000000..9a81002 --- /dev/null +++ b/api/src/main/java/org/apache/commons/rdf/api/BlankNode.java @@ -0,0 +1,148 @@ +/** + * Licensed 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.api; + +/** + * A <a href= "http://www.w3.org/TR/rdf11-concepts/#dfn-blank-node" >RDF-1.1 + * Blank Node</a>, as defined by <a href= + * "http://www.w3.org/TR/rdf11-concepts/#section-blank-nodes" >RDF-1.1 Concepts + * and Abstract Syntax</a>, a W3C Recommendation published on 25 February 2014.<br> + * <p> + * Note: + * <blockquote> + * <a href="http://www.w3.org/TR/rdf11-concepts/#dfn-blank-node">Blank nodes</a> + * are disjoint from IRIs and literals. Otherwise, the + * set of possible blank nodes is arbitrary. RDF makes no reference to any + * internal structure of blank nodes. + * </blockquote> + * <p> + * Also note that: + * <blockquote> + * <a href="http://www.w3.org/TR/rdf11-concepts/#dfn-blank-node-identifier">Blank node identifiers</a> + * are local identifiers that are used in + * some concrete RDF syntaxes or RDF store implementations. They are always + * <em>locally scoped</em> to the file or RDF store, and are <em>not</em> persistent + * or portable + * identifiers for blank nodes. Blank node identifiers are <em>not</em> + * part of the RDF + * abstract syntax, but are entirely dependent on the concrete syntax or + * implementation. + * The syntactic restrictions on blank node identifiers, if any, + * therefore also depend on the concrete RDF syntax or implementation. + * <p> + * Implementations that handle blank node identifiers in concrete syntaxes need + * to be careful not to create the same blank node from multiple occurrences of + * the same blank node identifier except in situations where this is supported + * by the syntax. + * </blockquote> + * + * @see <a href="http://www.w3.org/TR/rdf11-concepts/#dfn-blank-node">RDF-1.1 + * Blank Node</a> + */ +public interface BlankNode extends BlankNodeOrIRI { + + /** + * Return a <a href= + * "http://www.w3.org/TR/rdf11-concepts/#dfn-blank-node-identifier" + * >label</a> for the blank node. This is not a serialization/syntax label. + * It should be uniquely identifying within the local scope it is created in + * but has no uniqueness guarantees other than that. + * <p> + * In particular, the existence of two objects of type {@link BlankNode} + * with the same value returned from {@link #internalIdentifier()} are not + * equivalent unless they are known to have been created in the same local + * scope (see {@link #equals(Object)}) + * <p> + * An example of a local scope may be an instance of a Java Virtual Machine + * (JVM). In the context of a JVM instance, an implementor may support + * insertion and removal of {@link Triple} objects containing Blank Nodes + * without modifying the blank node labels. + * <p> + * Another example of a local scope may be a <a + * href="http://www.w3.org/TR/rdf11-concepts/#section-rdf-graph">Graph</a> + * or <a + * href="http://www.w3.org/TR/rdf11-concepts/#section-dataset">Dataset</a> + * created from a single document. In this context, an implementor should + * reasonably guarantee that the label returned by getLabel only maps to + * equivalent blank nodes in the same Graph or Dataset, but they may not + * guarantee that it is unique for the JVM instance. In this case, the + * implementor may support a mechanism to provide a mapping for blank nodes + * between Graph or Dataset instances to guarantee their uniqueness. + * <p> + * If implementors support <a + * href="http://www.w3.org/TR/rdf11-concepts/#section-skolemization" + * >Skolemisation</a>, they may map instances of {@link BlankNode} objects + * to {@link IRI} objects to reduce scoping issues. + * <p> + * It is not a requirement for the internal identifier to be a part of the + * {@link #ntriplesString()}, except that two BlankNode instances with the + * same internalIdentifier() and same local scope should have the same + * {@link #ntriplesString()}. + * + * @return An internal, system identifier for the {@link BlankNode}. + */ + String internalIdentifier(); + + /** + * Check it this BlankNode is equal to another BlankNode. <blockquote> <a + * href + * ="http://www.w3.org/TR/rdf11-concepts/#dfn-blank-node-identifier">Blank + * node identifiers</a> are local identifiers that are used in some concrete + * RDF syntaxes or RDF store implementations. They are always locally scoped + * to the file or RDF store, and are <em>not</em> persistent or portable + * identifiers for blank nodes. Blank node identifiers are <em>not</em> part + * of the RDF abstract syntax, but are entirely dependent on the concrete + * syntax or implementation. The syntactic restrictions on blank node + * identifiers, if any, therefore also depend on the concrete RDF syntax or + * implementation. + * <p>Implementations that handle blank node identifiers in + * concrete syntaxes need to be careful not to create the same blank node + * from multiple occurrences of the same blank node identifier except in + * situations where this is supported by the syntax. + * </blockquote> + * <p> + * Implementations MUST check the local scope, as two BlankNode in different + * Graphs MUST differ. On the other hand, two BlankNodes found in triples of + * the same Graph instance MUST equal if and only if they have the same + * {@link #internalIdentifier()}. + * </p> + * <p> + * Implementations MUST also override {@link #hashCode()} so that two equal + * Literals produce the same hash code. + * </p> + * + * @see Object#equals(Object) + * + * @param other + * Another object + * @return true if other is a BlankNode, is in the same local scope and is + * equal to this BlankNode + */ + @Override + public boolean equals(Object other); + + /** + * Calculate a hash code for this BlankNode. + * <p> + * This method MUST be implemented when implementing {@link #equals(Object)} + * so that two equal BlankNodes produce the same hash code. + * + * @see Object#hashCode() + * + * @return a hash code value for this BlankNode. + */ + @Override + public int hashCode(); + +} http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/fa5321e4/api/src/main/java/org/apache/commons/rdf/api/BlankNodeOrIRI.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/commons/rdf/api/BlankNodeOrIRI.java b/api/src/main/java/org/apache/commons/rdf/api/BlankNodeOrIRI.java new file mode 100644 index 0000000..85a2e7b --- /dev/null +++ b/api/src/main/java/org/apache/commons/rdf/api/BlankNodeOrIRI.java @@ -0,0 +1,22 @@ +/** + * Licensed 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.api; + +/** + * This interface represents the {@link RDFTerm}s that may be used in the + * subject position of an RDF-1.1 {@link Triple}, including {@link BlankNode} + * and {@link IRI}. + */ +public interface BlankNodeOrIRI extends RDFTerm { +} http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/fa5321e4/api/src/main/java/org/apache/commons/rdf/api/Graph.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/commons/rdf/api/Graph.java b/api/src/main/java/org/apache/commons/rdf/api/Graph.java new file mode 100644 index 0000000..d12797a --- /dev/null +++ b/api/src/main/java/org/apache/commons/rdf/api/Graph.java @@ -0,0 +1,179 @@ +/** + * Licensed 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.api; + +import java.util.function.Predicate; +import java.util.stream.Stream; + +/** + * An <a href="http://www.w3.org/TR/rdf11-concepts/#section-rdf-graph"> RDF 1.1 + * Graph</a>, a set of RDF triples, as defined by <a + * href="http://www.w3.org/TR/rdf11-concepts/" >RDF-1.1 Concepts and Abstract + * Syntax</a>, a W3C Recommendation published on 25 February 2014. + */ +public interface Graph extends AutoCloseable { + + /** + * Add a triple to the graph. + * + * @param triple + * The triple to add + */ + void add(Triple triple); + + /** + * Add a triple to the graph. + * + * @param subject + * The triple subject + * @param predicate + * The triple predicate + * @param object + * The triple object + */ + void add(BlankNodeOrIRI subject, IRI predicate, RDFTerm object); + + /** + * Check if graph contains triple. + * + * @param triple + * The triple to check. + * @return True if the Graph contains the given Triple. + */ + boolean contains(Triple triple); + + /** + * Check if graph contains a pattern of triples. + * + * @param subject + * The triple subject (null is a wildcard) + * @param predicate + * The triple predicate (null is a wildcard) + * @param object + * The triple object (null is a wildcard) + * @return True if the Graph contains any Triples that match the given + * pattern. + */ + boolean contains(BlankNodeOrIRI subject, IRI predicate, RDFTerm object); + + /** + * Close the graph, relinquishing any underlying resources. + * <p> + * For example, this would close any open file and network streams and free + * database locks held by the Graph implementation. + * <p> + * The behaviour of the other Graph methods are undefined after closing the + * graph. + * <p> + * Implementations might not need {@link #close()}, hence the default + * implementation does nothing. + */ + @Override + default void close() throws Exception { + } + + /** + * Remove a concrete triple from the graph. + * + * @param triple + * triple to remove + */ + void remove(Triple triple); + + /** + * Remove a concrete pattern of triples from the graph. + * + * @param subject + * The triple subject (null is a wildcard) + * @param predicate + * The triple predicate (null is a wildcard) + * @param object + * The triple object (null is a wildcard) + */ + void remove(BlankNodeOrIRI subject, IRI predicate, RDFTerm object); + + /** + * Clear the graph, removing all triples. + * + */ + void clear(); + + /** + * Number of triples contained by the graph. + * <p> + * The count of a set does not include duplicates, as determined by the + * equals method for each {@link Triple}. + * + * @return The number of triples in the graph + */ + long size(); + + /** + * Get all triples contained by the graph.<br> + * <p> + * The iteration does not contain any duplicate triples, as determined by + * the equals method for each {@link Triple}. + * <p> + * The behaviour of the Stream is not specified if add, remove, or clear, + * are called on the Stream before it terminates.<br> + * <p> + * Implementations may throw ConcurrentModificationException from Stream + * methods if they detect a conflict while the Stream is active. + * + * @return A {@link Stream} over all of the triples in the graph + */ + Stream<? extends Triple> getTriples(); + + /** + * Get all triples contained by the graph matched with the pattern. + * <p> + * The iteration does not contain any duplicate triples, as determined by + * the equals method for each {@link Triple}. + * <p> + * The behaviour of the Stream is not specified if add, remove, or clear, + * are called on the Stream before it terminates.<br> + * <p> + * Implementations may throw ConcurrentModificationException from Stream + * methods if they detect a conflict while the Stream is active. + * + * @param subject + * The triple subject (null is a wildcard) + * @param predicate + * The triple predicate (null is a wildcard) + * @param object + * The triple object (null is a wildcard) + * @return A {@link Stream} over the matched triples. + */ + Stream<? extends Triple> getTriples(BlankNodeOrIRI subject, IRI predicate, + RDFTerm object); + + /** + * Get all triples contained by the graph matched with the pattern. + * <p> + * The iteration does not contain any duplicate triples, as determined by + * the equals method for each {@link Triple}. + * <p> + * The behaviour of the Stream is not specified if add, remove, or clear, + * are called on the Stream before it terminates.<br> + * <p> + * Implementations may throw ConcurrentModificationException from Stream + * methods if they detect a conflict while the Stream is active. + * + * @param filter + * A filter to match against each triple in the graph. + * @return A {@link Stream} over the matched triples. + */ + Stream<? extends Triple> getTriples(Predicate<Triple> filter); + +} http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/fa5321e4/api/src/main/java/org/apache/commons/rdf/api/IRI.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/commons/rdf/api/IRI.java b/api/src/main/java/org/apache/commons/rdf/api/IRI.java new file mode 100644 index 0000000..041a7da --- /dev/null +++ b/api/src/main/java/org/apache/commons/rdf/api/IRI.java @@ -0,0 +1,74 @@ +/** + * Licensed 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.api; + +/** + * An <a href= "http://www.w3.org/TR/rdf11-concepts/#dfn-iri" >RDF-1.1 IRI</a>, + * as defined by <a href= "http://www.w3.org/TR/rdf11-concepts/" >RDF-1.1 + * Concepts and Abstract Syntax</a>, a W3C Recommendation published on 25 + * February 2014.<br> + */ +public interface IRI extends BlankNodeOrIRI { + + /** + * Return the IRI encoded as a native Unicode String.<br> + * + * The returned string must not include URL-encoding to escape non-ASCII + * characters. + * + * @return The IRI encoded as a native Unicode String. + */ + String getIRIString(); + + /** + * Check it this IRI is equal to another IRI. <blockquote> <a + * href="http://www.w3.org/TR/rdf11-concepts/#section-IRIs">IRI + * equality</a>: Two IRIs are equal if and only if they are equivalent under + * Simple String Comparison according to section 5.1 of [RFC3987]. Further + * normalization MUST NOT be performed when comparing IRIs for equality. + * </blockquote> + * <p> + * Two IRIs are equal are in the same local scope and their + * {@link #getIRIString()} are equal. + * </p> + * <p> + * Implementations MAY check the local scope for IRI comparison. + * </p> + * <p> + * Implementations MUST also override {@link #hashCode()} so that two equal + * IRIs produce the same hash code. + * </p> + * + * @see Object#equals(Object) + * + * @param other + * Another object + * @return true if other is an IRI and is equal to this + */ + @Override + public boolean equals(Object other); + + /** + * Calculate a hash code for this IRI. + * <p> + * This method MUST be implemented when implementing {@link #equals(Object)} + * so that two equal IRIs produce the same hash code. + * + * @see Object#hashCode() + * + * @return a hash code value for this IRI. + */ + @Override + public int hashCode(); +} http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/fa5321e4/api/src/main/java/org/apache/commons/rdf/api/Literal.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/commons/rdf/api/Literal.java b/api/src/main/java/org/apache/commons/rdf/api/Literal.java new file mode 100644 index 0000000..5c40ac4 --- /dev/null +++ b/api/src/main/java/org/apache/commons/rdf/api/Literal.java @@ -0,0 +1,108 @@ +/** + * Licensed 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.api; + +import java.util.Optional; + +/** + * A RDF-1.1 Literal, as defined by <a href= + * "http://www.w3.org/TR/rdf11-concepts/#section-Graph-Literal" >RDF-1.1 + * Concepts and Abstract Syntax</a>, a W3C Recommendation published on 25 + * February 2014 + */ +public interface Literal extends RDFTerm { + + /** + * The lexical form of this literal, represented by a <a + * href="http://www.unicode.org/versions/latest/">Unicode string</a>. + * + * @return The lexical form of this literal. + * @see <a + * href="http://www.w3.org/TR/rdf11-concepts/#dfn-lexical-form">RDF-1.1 + * Literal lexical form</a> + */ + String getLexicalForm(); + + /** + * The IRI identifying the datatype that determines how the lexical form + * maps to a literal value. + * + * @return The datatype IRI for this literal. + * @see <a + * href="http://www.w3.org/TR/rdf11-concepts/#dfn-datatype-iri">RDF-1.1 + * Literal datatype IRI</a> + */ + IRI getDatatype(); + + /** + * If and only if the datatype IRI is <a + * href="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString" + * >http://www.w3.org/1999/02/22-rdf-syntax-ns#langString</a>, the language + * tag for this Literal is a non-empty language tag as defined by <a + * href="http://tools.ietf.org/html/bcp47">BCP47</a>.<br> + * If the datatype IRI is not <a + * href="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString" + * >http://www.w3.org/1999/02/22-rdf-syntax-ns#langString</a>, this method + * must return {@link Optional#empty()}. + * + * @return The {@link Optional} language tag for this literal. If + * {@link Optional#isPresent()} returns true, the value returned by + * {@link Optional#get()} must be a non-empty string conforming to + * BCP47. + * @see <a + * href="http://www.w3.org/TR/rdf11-concepts/#dfn-language-tag">RDF-1.1 + * Literal language tag</a> + */ + Optional<String> getLanguageTag(); + + /** + * Check it this Literal is equal to another Literal. <blockquote> <a + * href="http://www.w3.org/TR/rdf11-concepts/#dfn-literal-term">Literal term + * equality</a>: Two literals are term-equal (the same RDF literal) if and + * only if the two lexical forms, the two datatype IRIs, and the two + * language tags (if any) compare equal, character by character. Thus, two + * literals can have the same value without being the same RDF term. + * </blockquote> + * <p> + * Implementations MAY check the local scope for Literal comparison. + * </p> + * <p> + * Implementations MUST also override {@link #hashCode()} so that two equal + * Literals produce the same hash code. + * </p> + * + * @see Object#equals(Object) + * + * @param other + * Another object + * @return true if other is a Literal and is equal to this + */ + @Override + public boolean equals(Object other); + + /** + * Calculate a hash code for this Literal. + * <p> + * This method MUST be implemented when implementing {@link #equals(Object)} + * so that two equal Literals produce the same hash code. + * </p> + * + * @see Object#hashCode() + * + * @return a hash code value for this Literal. + */ + @Override + public int hashCode(); + +} http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/fa5321e4/api/src/main/java/org/apache/commons/rdf/api/RDFTerm.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/commons/rdf/api/RDFTerm.java b/api/src/main/java/org/apache/commons/rdf/api/RDFTerm.java new file mode 100644 index 0000000..0540bdd --- /dev/null +++ b/api/src/main/java/org/apache/commons/rdf/api/RDFTerm.java @@ -0,0 +1,36 @@ +/** + * Licensed 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.api; + +/** + * An <a href= "http://www.w3.org/TR/rdf11-concepts/#dfn-rdf-term" >RDF-1.1 + * Term</a>, as defined by <a href= "http://www.w3.org/TR/rdf11-concepts/" + * >RDF-1.1 Concepts and Abstract Syntax</a>, a W3C Recommendation published on + * 25 February 2014.<br> + * + * @see <a href= "http://www.w3.org/TR/rdf11-concepts/#dfn-rdf-term" >RDF-1.1 + * Term</a> + */ +public interface RDFTerm { + + /** + * Return the term serialised as specified by the RDF-1.1 N-Triples Canonical form. + * + * @return The term serialised as RDF-1.1 N-Triples. + * @see <a href="http://www.w3.org/TR/n-triples/#canonical-ntriples"> + * RDF-1.1 N-Triples Canonical form</a> + */ + String ntriplesString(); + +} http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/fa5321e4/api/src/main/java/org/apache/commons/rdf/api/RDFTermFactory.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/commons/rdf/api/RDFTermFactory.java b/api/src/main/java/org/apache/commons/rdf/api/RDFTermFactory.java new file mode 100644 index 0000000..7d0cef6 --- /dev/null +++ b/api/src/main/java/org/apache/commons/rdf/api/RDFTermFactory.java @@ -0,0 +1,252 @@ +/** + * Licensed 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.api; + +import java.util.Locale; + +/** + * Factory for creating RDFTerm and Graph instances. + * <p> + * It is not specified how an implementation should provide a RDFTermFactory. + * <p> + * If an implementation does not support a particular method (e.g. it requires + * additional parameters or can't create graphs), then it MAY throw + * UnsupportedOperationException, as provided by the default implementations + * here. + * <p> + * If a factory method does not allow or support a provided parameter, e.g. + * because an IRI is considered invalid, then it SHOULD throw + * IllegalArgumentException. + * + * + * @see RDFTerm + * @see Graph + * + */ +public interface RDFTermFactory { + + /** + * Create a new blank node. + * <p> + * Two BlankNodes created with this method MUST NOT be equal. + * <p> + * If supported, the {@link BlankNode#internalIdentifier()} of the returned + * blank node MUST be an auto-generated value. + * + * @return A new BlankNode + * @throws UnsupportedOperationException + * If the operation is not supported. + */ + default BlankNode createBlankNode() throws UnsupportedOperationException { + throw new UnsupportedOperationException( + "createBlankNode() not supported"); + } + + /** + * Create a blank node for the given internal identifier. + * <p> + * Two BlankNodes created with the same identifier using this method MUST be + * equal if they are in the same local scope (e.g. in the same Graph). See + * the equals contract for {@link BlankNode} for more information. + * <p> + * If supported, the {@link BlankNode#internalIdentifier()} of the returned + * blank node MAY be equal to the provided identifier. + * + * @param identifier + * A non-empty String that is unique to this blank node in this + * scope, and which may be used as the internal identifier for + * the blank node. + * @return A BlankNode for the given identifier + * @throws IllegalArgumentException + * if the identifier is not acceptable, e.g. was empty or + * contained unsupported characters. + * @throws UnsupportedOperationException + * If the operation is not supported. + */ + default BlankNode createBlankNode(String identifier) + throws IllegalArgumentException, UnsupportedOperationException { + throw new UnsupportedOperationException( + "createBlankNode(String) not supported"); + } + + /** + * Create a new graph. + * <p> + * It is undefined if the graph will be persisted by any underlying storage + * mechanism. + * + * @return A new Graph + * @throws UnsupportedOperationException + * If the operation is not supported. + */ + default Graph createGraph() throws UnsupportedOperationException { + throw new UnsupportedOperationException("createGraph() not supported"); + } + + /** + * Create an IRI from a (possibly escaped) String. + * <p> + * The provided iri string MUST be valid according to the <a + * href="http://www.w3.org/TR/rdf11-concepts/#dfn-iri">W3C RDF-1.1 IRI</a> + * definition. + * + * @param iri + * Internationalized Resource Identifier + * @return A new IRI + * @throws IllegalArgumentException + * If the provided string is not acceptable, e.g. does not + * conform to the RFC3987 syntax. + * @throws UnsupportedOperationException + * If the operation is not supported. + */ + default IRI createIRI(String iri) throws IllegalArgumentException, + UnsupportedOperationException { + throw new UnsupportedOperationException( + "createIRI(String) not supported"); + } + + /** + * Create a simple literal. + * <p> + * The provided lexical form should not be escaped in any sense, e.g. should + * not include "quotes" unless those are part of the literal value. + * <p> + * The returned Literal MUST have a {@link Literal#getLexicalForm()} that is + * equal to the provided lexical form, MUST NOT have a + * {@link Literal#getLanguageTag()} present, and SHOULD return a + * {@link Literal#getDatatype()} that is equal to the IRI + * <code>http://www.w3.org/2001/XMLSchema#string</code>. + * + * + * @param lexicalForm + * The literal value in plain text + * @return The created Literal + * @throws IllegalArgumentException + * If the provided lexicalForm is not acceptable, e.g. because + * it is too large for an underlying storage. + * @throws UnsupportedOperationException + * If the operation is not supported. + */ + default Literal createLiteral(String lexicalForm) + throws IllegalArgumentException, UnsupportedOperationException { + throw new UnsupportedOperationException( + "createLiteral(String) not supported"); + } + + /** + * Create a literal with the specified data type. + * <p> + * The provided lexical form should not be escaped in any sense, e.g. should + * not include "quotes" unless those are part of the literal value. + * <p> + * It is RECOMMENDED that the provided dataType is one of the <a + * href="http://www.w3.org/TR/rdf11-concepts/#xsd-datatypes">RDF-compatible + * XSD types</a>. + * <p> + * The provided lexical form SHOULD be in the <a + * href="http://www.w3.org/TR/rdf11-concepts/#dfn-lexical-space">lexical + * space</a> of the provided dataType. + * <p> + * The returned Literal SHOULD have a {@link Literal#getLexicalForm()} that + * is equal to the provided lexicalForm, MUST NOT have a + * {@link Literal#getLanguageTag()} present, and SHOULD return a + * {@link Literal#getDatatype()} that is equal to the provided dataType IRI. + * + * @param lexicalForm + * The literal value + * @param dataType + * The data type IRI for the literal value, e.g. + * <code>http://www.w3.org/2001/XMLSchema#integer</code> + * @return The created Literal + * @throws IllegalArgumentException + * If any of the provided arguments are not acceptable, e.g. + * because the provided dataType is not permitted. + * @throws UnsupportedOperationException + * If the operation is not supported. + */ + default Literal createLiteral(String lexicalForm, IRI dataType) + throws IllegalArgumentException, UnsupportedOperationException { + throw new UnsupportedOperationException( + "createLiteral(String) not supported"); + } + + /** + * Create a language-tagged literal. + * <p> + * The provided lexical form should not be escaped in any sense, e.g. should + * not include "quotes" unless those are part of the literal value. + * <p> + * The provided language tag MUST be valid according to <a + * href="http://tools.ietf.org/html/bcp47">BCP47</a>, e.g. <code>en</code>. + * <p> + * The provided language tag <a + * href="http://www.w3.org/TR/rdf11-concepts/#dfn-language-tagged-string" + * >MAY be converted to lower case</a>. + * <p> + * The returned Literal SHOULD have a {@link Literal#getLexicalForm()} which + * is equal to the provided lexicalForm, MUST return a + * {@link Literal#getDatatype()} that is equal to the IRI + * <code>http://www.w3.org/1999/02/22-rdf-syntax-ns#langString</code>, and + * MUST have a {@link Literal#getLanguageTag()} present which SHOULD be + * equal to the provided language tag (compared as + * {@link String#toLowerCase(Locale)} in {@link Locale#ENGLISH}). + * + * @param lexicalForm + * The literal value + * @param languageTag + * The non-empty language tag as defined by <a + * href="http://tools.ietf.org/html/bcp47">BCP47</a> + * @return The created Literal + * @throws IllegalArgumentException + * If the provided values are not acceptable, e.g. because the + * languageTag was syntactically invalid. + * @throws UnsupportedOperationException + * If the operation is not supported. + */ + default Literal createLiteral(String lexicalForm, String languageTag) + throws IllegalArgumentException, UnsupportedOperationException { + throw new UnsupportedOperationException( + "createLiteral(String,String) not supported"); + } + + /** + * Create a triple. + * <p> + * The returned Triple SHOULD have a {@link Triple#getSubject()} that is + * equal to the provided subject, a {@link Triple#getPredicate()} that is + * equal to the provided predicate, and a {@link Triple#getObject()} that is + * equal to the provided object. + * + * @param subject + * The IRI or BlankNode that is the subject of the triple + * @param predicate + * The IRI that is the predicate of the triple + * @param object + * The IRI, BlankNode or Literal that is the object of the triple + * @return The created Triple + * @throws IllegalArgumentException + * If any of the provided arguments are not acceptable, e.g. + * because a Literal has a lexicalForm that is too large for an + * underlying storage. + * @throws UnsupportedOperationException + * If the operation is not supported. + */ + default Triple createTriple(BlankNodeOrIRI subject, IRI predicate, + RDFTerm object) throws IllegalArgumentException, + UnsupportedOperationException { + throw new UnsupportedOperationException( + "createTriple(BlankNodeOrIRI,IRI,RDFTerm) not supported"); + } + +} http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/fa5321e4/api/src/main/java/org/apache/commons/rdf/api/Triple.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/commons/rdf/api/Triple.java b/api/src/main/java/org/apache/commons/rdf/api/Triple.java new file mode 100644 index 0000000..5981cdd --- /dev/null +++ b/api/src/main/java/org/apache/commons/rdf/api/Triple.java @@ -0,0 +1,97 @@ +/** + * Licensed 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.api; + +/** + * An <a href= "http://www.w3.org/TR/rdf11-concepts/#dfn-rdf-triple" >RDF-1.1 + * Triple</a>, as defined by <a href= "http://www.w3.org/TR/rdf11-concepts/" + * >RDF-1.1 Concepts and Abstract Syntax</a>, a W3C Recommendation published on + * 25 February 2014.<br> + * + * @see <a href= "http://www.w3.org/TR/rdf11-concepts/#dfn-rdf-triple" >RDF-1.1 + * Triple</a> + */ +public interface Triple { + + /** + * The subject of this triple, which may be either a {@link BlankNode} or an + * {@link IRI}, which are represented in Commons RDF by the interface + * {@link BlankNodeOrIRI}. + * + * @return The subject {@link BlankNodeOrIRI} of this triple. + * @see <a href="http://www.w3.org/TR/rdf11-concepts/#dfn-subject">RDF-1.1 + * Triple subject</a> + */ + BlankNodeOrIRI getSubject(); + + /** + * The predicate {@link IRI} of this triple. + * + * @return The predicate {@link IRI} of this triple. + * @see <a href="http://www.w3.org/TR/rdf11-concepts/#dfn-predicate">RDF-1.1 + * Triple predicate</a> + */ + IRI getPredicate(); + + /** + * The object of this triple, which may be either a {@link BlankNode}, an + * {@link IRI}, or a {@link Literal}, which are represented in Commons RDF + * by the interface {@link RDFTerm}. + * + * @return The object {@link RDFTerm} of this triple. + * @see <a href="http://www.w3.org/TR/rdf11-concepts/#dfn-object">RDF-1.1 + * Triple object</a> + */ + RDFTerm getObject(); + + /** + * Check it this Triple is equal to another Triple. + * <p> + * Two Triples are equal if and only if their {@link #getSubject()}, + * {@link #getPredicate()} and {@link #getObject()} are equal. + * </p> + * <p> + * Implementations MUST check the local scope for Triple comparison if + * either the subject or object is a BlankNode, and MAY check the local + * scope in other cases. + * </p> + * <p> + * Implementations MUST also override {@link #hashCode()} so that two equal + * Triples produce the same hash code. + * </p> + * + * @see Object#equals(Object) + * + * @param other + * Another object + * @return true if other is a Triple and is equal to this + */ + @Override + public boolean equals(Object other); + + /** + * Calculate a hash code for this Triple. + * <p> + * This method MUST be implemented when implementing {@link #equals(Object)} + * so that two equal IRIs produce the same hash code. + * </p> + * + * @see Object#hashCode() + * + * @return a hash code value for this Triple. + */ + @Override + public int hashCode(); + +} http://git-wip-us.apache.org/repos/asf/incubator-commonsrdf/blob/fa5321e4/api/src/test/java/com/github/commonsrdf/api/AbstractBlankNodeTest.java ---------------------------------------------------------------------- diff --git a/api/src/test/java/com/github/commonsrdf/api/AbstractBlankNodeTest.java b/api/src/test/java/com/github/commonsrdf/api/AbstractBlankNodeTest.java deleted file mode 100644 index 6a8e6f3..0000000 --- a/api/src/test/java/com/github/commonsrdf/api/AbstractBlankNodeTest.java +++ /dev/null @@ -1,222 +0,0 @@ -/** - * Licensed 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 com.github.commonsrdf.api; - -import static org.junit.Assert.*; - -import org.junit.Test; - -/** - * Abstract test class for the BlankNode interface. - * - * @author Peter Ansell [email protected] - */ -public abstract class AbstractBlankNodeTest { - - protected abstract BlankNode getBlankNode(); - - /** - * Gets a new blank node object based on the given identifier. - * <p> - * Subsequent calls to this method during a single test with the same - * identifier must return BlankNode objects that are equals and have the - * same hashCode. The objects returned from successive calls during a single - * test may be the same object, or they may be different objects. - * </p> - * - * @param identifier - * The identifier to use as the reference for creating the blank - * node that is returned. - * @return A new blank node based on the - */ - protected abstract BlankNode getBlankNode(String identifier); - - /** - * Test method for - * {@link com.github.commonsrdf.api.BlankNode#internalIdentifier()}. - */ - @Test - public final void testInternalIdentifier() { - BlankNode testNull = new BlankNode() { - @Override - public String ntriplesString() { - return null; - } - - @Override - public String internalIdentifier() { - return null; - } - }; - BlankNode testAutomatic1 = getBlankNode(); - BlankNode testAutomatic2 = getBlankNode(); - BlankNode testManual3a = getBlankNode("3"); - BlankNode testManual3b = getBlankNode("3"); - BlankNode testManual4 = getBlankNode("4"); - - // Test against our fake stub - assertNotEquals(testNull.internalIdentifier(), - testAutomatic1.internalIdentifier()); - assertNotEquals(testAutomatic1.internalIdentifier(), - testNull.internalIdentifier()); - assertNotEquals(testNull.internalIdentifier(), - testManual3a.internalIdentifier()); - assertNotEquals(testManual3a.internalIdentifier(), - testNull.internalIdentifier()); - - // Test the two imported instances against each other - assertEquals(testAutomatic1.internalIdentifier(), - testAutomatic1.internalIdentifier()); - assertEquals(testAutomatic2.internalIdentifier(), - testAutomatic2.internalIdentifier()); - assertNotEquals(testAutomatic1.internalIdentifier(), - testAutomatic2.internalIdentifier()); - assertNotEquals(testAutomatic2.internalIdentifier(), - testAutomatic1.internalIdentifier()); - assertNotEquals(testAutomatic1.internalIdentifier(), - testManual3a.internalIdentifier()); - assertEquals(testManual3b.internalIdentifier(), - testManual3a.internalIdentifier()); - assertNotEquals(testManual3a.internalIdentifier(), - testManual4.internalIdentifier()); - } - - /** - * Test method for - * {@link com.github.commonsrdf.api.BlankNode#equals(java.lang.Object)}. - */ - @Test - public final void testEquals() { - BlankNode testNull = new BlankNode() { - @Override - public String ntriplesString() { - return null; - } - - @Override - public String internalIdentifier() { - return null; - } - }; - BlankNode testAutomatic1 = getBlankNode(); - BlankNode testAutomatic2 = getBlankNode(); - BlankNode testManual3a = getBlankNode("3"); - BlankNode testManual3b = getBlankNode("3"); - BlankNode testManual4 = getBlankNode("4"); - - // Test against our fake stub - assertNotEquals(testNull, testAutomatic1); - assertNotEquals(testAutomatic1, testNull); - assertNotEquals(testNull, testManual3a); - assertNotEquals(testManual3a, testNull); - - // Test the two imported instances against each other - assertEquals(testAutomatic1, testAutomatic1); - assertEquals(testAutomatic2, testAutomatic2); - assertNotEquals(testAutomatic1, testAutomatic2); - assertNotEquals(testAutomatic2, testAutomatic1); - assertNotEquals(testAutomatic1, testManual3a); - assertEquals(testManual3b, testManual3a); - assertNotEquals(testManual3a, testManual4); - } - - /** - * Test method for {@link com.github.commonsrdf.api.BlankNode#hashCode()}. - */ - @Test - public final void testHashCode() { - BlankNode testNull = new BlankNode() { - @Override - public String ntriplesString() { - return null; - } - - @Override - public String internalIdentifier() { - return null; - } - }; - BlankNode testAutomatic1 = getBlankNode(); - BlankNode testAutomatic2 = getBlankNode(); - BlankNode testManual3a = getBlankNode("3"); - BlankNode testManual3b = getBlankNode("3"); - BlankNode testManual4 = getBlankNode("4"); - - // Test against our fake stub - assertNotEquals(testNull.hashCode(), testAutomatic1.hashCode()); - assertNotEquals(testAutomatic1.hashCode(), testNull.hashCode()); - assertNotEquals(testNull.hashCode(), testManual3a.hashCode()); - assertNotEquals(testManual3a.hashCode(), testNull.hashCode()); - - // Test the two imported instances against each other - assertEquals(testAutomatic1.hashCode(), testAutomatic1.hashCode()); - assertEquals(testAutomatic2.hashCode(), testAutomatic2.hashCode()); - assertNotEquals(testAutomatic1.hashCode(), testAutomatic2.hashCode()); - assertNotEquals(testAutomatic2.hashCode(), testAutomatic1.hashCode()); - assertNotEquals(testAutomatic1.hashCode(), testManual3a.hashCode()); - assertEquals(testManual3b.hashCode(), testManual3a.hashCode()); - assertNotEquals(testManual3a.hashCode(), testManual4.hashCode()); - } - - /** - * Test method for - * {@link com.github.commonsrdf.api.RDFTerm#ntriplesString()}. - */ - @Test - public final void testNtriplesString() { - BlankNode testNull = new BlankNode() { - @Override - public String ntriplesString() { - return null; - } - - @Override - public String internalIdentifier() { - return null; - } - }; - BlankNode testAutomatic1 = getBlankNode(); - BlankNode testAutomatic2 = getBlankNode(); - BlankNode testManual3a = getBlankNode("3"); - BlankNode testManual3b = getBlankNode("3"); - BlankNode testManual4 = getBlankNode("4"); - - // Test against our fake stub - assertNotEquals(testNull.ntriplesString(), - testAutomatic1.ntriplesString()); - assertNotEquals(testAutomatic1.ntriplesString(), - testNull.ntriplesString()); - assertNotEquals(testNull.ntriplesString(), - testManual3a.ntriplesString()); - assertNotEquals(testManual3a.ntriplesString(), - testNull.ntriplesString()); - - // Test the two imported instances against each other - assertEquals(testAutomatic1.ntriplesString(), - testAutomatic1.ntriplesString()); - assertEquals(testAutomatic2.ntriplesString(), - testAutomatic2.ntriplesString()); - assertNotEquals(testAutomatic1.ntriplesString(), - testAutomatic2.ntriplesString()); - assertNotEquals(testAutomatic2.ntriplesString(), - testAutomatic1.ntriplesString()); - assertNotEquals(testAutomatic1.ntriplesString(), - testManual3a.ntriplesString()); - assertEquals(testManual3b.ntriplesString(), - testManual3a.ntriplesString()); - assertNotEquals(testManual3a.ntriplesString(), - testManual4.ntriplesString()); - } - -}
