You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by st...@apache.org on 2017/02/10 16:55:42 UTC
[40/45] commons-rdf git commit: COMMONSRDF-56: Workaround for JSON-LD
Literal comparisons
COMMONSRDF-56: Workaround for JSON-LD Literal comparisons
Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/e351d55d
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/e351d55d
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/e351d55d
Branch: refs/heads/COMMONSRDF-47
Commit: e351d55d1a1e529f88398c6233d3a01dd799c87a
Parents: dc4af99
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Wed Feb 8 22:36:26 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Wed Feb 8 22:36:26 2017 +0000
----------------------------------------------------------------------
.../commons/rdf/jsonldjava/JsonLdGraphLike.java | 18 ++-
.../commons/rdf/jsonldjava/JsonLdLiteral.java | 12 +-
.../rdf/jsonldjava/JsonLdComparisonTest.java | 141 +++++++++++++++++++
3 files changed, 162 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/e351d55d/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraphLike.java
----------------------------------------------------------------------
diff --git a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraphLike.java b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraphLike.java
index 1549109..e5fc75e 100644
--- a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraphLike.java
+++ b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraphLike.java
@@ -204,9 +204,23 @@ abstract class AbstractJsonLdGraphLike<T extends TripleLike> implements JsonLdGr
if (predicateNode.isPresent() && predicateNode.get().compareTo(q.getPredicate()) != 0) {
return false;
}
- if (objectNode.isPresent() && objectNode.get().compareTo(q.getObject()) != 0) {
- return false;
+ if (objectNode.isPresent()) {
+ if (object instanceof Literal && q.getObject().isLiteral()) {
+ // Special handling for COMMONSRDF-56, COMMONSRDF-51:
+ // Less efficient wrapper to a Commons RDF Literal so
+ // we can use our RDF 1.1-compliant .equals()
+ RDFTerm otherObj = factory.asRDFTerm(q.getObject());
+ if (! (object.equals(otherObj))) {
+ return false;
+ }
+ } else {
+ // JSONLD-Java's .compareTo can handle IRI, BlankNode and type-mismatch
+ if (objectNode.get().compareTo(q.getObject()) != 0) {
+ return false;
+ }
+ }
}
+ // All patterns checked, must be good!
return true;
};
}
http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/e351d55d/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdLiteral.java
----------------------------------------------------------------------
diff --git a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdLiteral.java b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdLiteral.java
index 0d63c29..7b0aa45 100644
--- a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdLiteral.java
+++ b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdLiteral.java
@@ -87,17 +87,15 @@ class JsonLdLiteralImpl extends JsonLdTermImpl implements JsonLdLiteral {
@Override
public boolean equals(final Object obj) {
- if (obj instanceof JsonLdLiteral) {
- final JsonLdLiteral other = (JsonLdLiteral) obj;
- return asJsonLdNode().compareTo(other.asJsonLdNode()) == 0;
- }
+ // COMMONSRDF-56: Do **not** use
+ // asJsonLdNode().compareTo(other.asJsonLdNode())
if (obj instanceof Literal) {
final Literal other = (Literal) obj;
- return getLexicalForm().equals(other.getLexicalForm()) && getDatatype().equals(other.getDatatype())
+ return getLexicalForm().equals(other.getLexicalForm())
+ && getDatatype().equals(other.getDatatype())
&& getLanguageTag().map(JsonLdLiteralImpl::lowerCase)
- .equals(other.getLanguageTag().map(JsonLdLiteralImpl::lowerCase));
+ .equals(other.getLanguageTag().map(JsonLdLiteralImpl::lowerCase));
}
return false;
-
}
}
http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/e351d55d/jsonld-java/src/test/java/org/apache/commons/rdf/jsonldjava/JsonLdComparisonTest.java
----------------------------------------------------------------------
diff --git a/jsonld-java/src/test/java/org/apache/commons/rdf/jsonldjava/JsonLdComparisonTest.java b/jsonld-java/src/test/java/org/apache/commons/rdf/jsonldjava/JsonLdComparisonTest.java
new file mode 100644
index 0000000..f3981be
--- /dev/null
+++ b/jsonld-java/src/test/java/org/apache/commons/rdf/jsonldjava/JsonLdComparisonTest.java
@@ -0,0 +1,141 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.rdf.jsonldjava;
+
+import static org.junit.Assert.*;
+
+import java.util.Optional;
+
+import org.apache.commons.rdf.simple.Types;
+import org.junit.Test;
+
+/**
+ * COMMONSRDF-56: Test Literal comparisons with JSONLD-Java
+ */
+public class JsonLdComparisonTest {
+
+ JsonLdRDF rdf = new JsonLdRDF();
+
+ @Test
+ public void literalEqual() throws Exception {
+ JsonLdLiteral lit1 = rdf.createLiteral("Hello");
+ JsonLdLiteral lit2 = rdf.createLiteral("Hello");
+ JsonLdLiteral lit3 = rdf.createLiteral("Hello", Types.XSD_STRING);
+ assertEquals(lit1, lit2);
+ assertEquals(lit1, lit3);
+ }
+
+ @Test
+ public void literalNotEqual() throws Exception {
+ JsonLdLiteral lit1 = rdf.createLiteral("Hello");
+ JsonLdLiteral lit2 = rdf.createLiteral("Hello there");
+ assertNotEquals(lit1, lit2);
+ }
+
+ @Test
+ public void literalEqualLang() throws Exception {
+ JsonLdLiteral lit1 = rdf.createLiteral("Allo Allo", "fr");
+ JsonLdLiteral lit2 = rdf.createLiteral("Allo Allo", "fr");
+ assertEquals(lit1, lit2);
+ }
+
+ @Test
+ public void literalNotEqualLang() throws Exception {
+ JsonLdLiteral lit1 = rdf.createLiteral("Hello", "en");
+ JsonLdLiteral lit2 = rdf.createLiteral("Hello", "en-us");
+ assertNotEquals(lit1, lit2);
+ }
+
+ @Test
+ public void literalEqualType() throws Exception {
+ JsonLdLiteral lit1 = rdf.createLiteral("1", Types.XSD_INTEGER);
+ JsonLdLiteral lit2 = rdf.createLiteral("1", Types.XSD_INTEGER);
+ assertEquals(lit1, lit2);
+ }
+
+
+ @Test
+ public void literalNotEqualType() throws Exception {
+ JsonLdLiteral lit1 = rdf.createLiteral("1", Types.XSD_INTEGER);
+ JsonLdLiteral lit2 = rdf.createLiteral("2", Types.XSD_INTEGER);
+ JsonLdLiteral lit3 = rdf.createLiteral("1", Types.XSD_STRING);
+
+ assertNotEquals(lit1, lit2);
+ assertNotEquals(lit1, lit3);
+ }
+
+
+ @Test
+ public void grahContains() throws Exception {
+ JsonLdGraph graph = rdf.createGraph();
+ JsonLdIRI s = rdf.createIRI("http://example.com/s");
+ JsonLdIRI p = rdf.createIRI("http://example.com/p");
+ JsonLdLiteral lit1 = rdf.createLiteral("Hello");
+
+ graph.add(s, p, lit1);
+ assertTrue(graph.contains(s, p, rdf.createLiteral("Hello")));
+ assertTrue(graph.contains(s, p, rdf.createLiteral("Hello", Types.XSD_STRING)));
+ assertFalse(graph.contains(s, p, rdf.createLiteral("Hello", Types.XSD_NORMALIZEDSTRING)));
+ assertFalse(graph.contains(s, p, rdf.createLiteral("Hello", "en")));
+ assertFalse(graph.contains(s, p, rdf.createLiteral("Other")));
+ }
+
+ @Test
+ public void datasetContains() throws Exception {
+ JsonLdDataset dataset = rdf.createDataset();
+ JsonLdIRI s = rdf.createIRI("http://example.com/s");
+ JsonLdIRI p = rdf.createIRI("http://example.com/p");
+ JsonLdLiteral lit1 = rdf.createLiteral("Hello");
+
+ dataset.add(null, s, p, lit1);
+ assertTrue(dataset.contains(Optional.empty(), s, p, rdf.createLiteral("Hello")));
+ assertTrue(dataset.contains(Optional.empty(), s, p, rdf.createLiteral("Hello", Types.XSD_STRING)));
+ assertFalse(dataset.contains(Optional.empty(), s, p, rdf.createLiteral("Hello", Types.XSD_NORMALIZEDSTRING)));
+ assertFalse(dataset.contains(Optional.empty(), s, p, rdf.createLiteral("Hello", "en")));
+ assertFalse(dataset.contains(Optional.empty(), s, p, rdf.createLiteral("Other")));
+ }
+
+ @Test
+ public void datasetRemove() throws Exception {
+ JsonLdDataset dataset = rdf.createDataset();
+ JsonLdIRI s = rdf.createIRI("http://example.com/s");
+ JsonLdIRI p = rdf.createIRI("http://example.com/p");
+ JsonLdLiteral lit1 = rdf.createLiteral("Hello");
+
+ dataset.add(null, s, p, lit1);
+ assertTrue(dataset.contains(Optional.empty(), s, p, lit1));
+ dataset.remove(null, null, null, rdf.createLiteral("Other")); // should NOT match
+ assertTrue(dataset.contains(Optional.empty(), s, p, lit1));
+ dataset.remove(null, null, null, rdf.createLiteral("Hello", Types.XSD_STRING)); // SHOULD match
+ assertFalse(dataset.contains(Optional.empty(), s, p, lit1));
+ }
+
+ @Test
+ public void datasetStream() throws Exception {
+ JsonLdDataset dataset = rdf.createDataset();
+ JsonLdIRI s = rdf.createIRI("http://example.com/s");
+ JsonLdIRI p = rdf.createIRI("http://example.com/p");
+ JsonLdLiteral lit1 = rdf.createLiteral("Hello");
+ JsonLdLiteral lit2 = rdf.createLiteral("Other");
+
+ dataset.add(null, s, p, lit1);
+ assertTrue(dataset.stream(Optional.empty(), s, p, lit1).findAny().isPresent());
+ assertFalse(dataset.stream(Optional.empty(), s, p, lit2).findAny().isPresent());
+ }
+
+}