Author: hasan
Date: Wed Feb 23 03:29:48 2011
New Revision: 1073581
URL: http://svn.apache.org/viewvc?rev=1073581&view=rev
Log:
CLEREZZA-415: refactored parser code and fixed parser bug regarding bnodes as
objects which do not appear as subjects, added tests
Added:
incubator/clerezza/trunk/parent/rdf.rdfjson/src/test/resources/org/apache/clerezza/rdf/rdfjson/parser/test-object-bnode.json
incubator/clerezza/trunk/parent/rdf.rdfjson/src/test/resources/org/apache/clerezza/rdf/rdfjson/parser/test-subject-bnode.json
Modified:
incubator/clerezza/trunk/parent/rdf.rdfjson/src/main/java/org/apache/clerezza/rdf/rdfjson/parser/RdfJsonParsingProvider.java
incubator/clerezza/trunk/parent/rdf.rdfjson/src/test/java/org/apache/clerezza/rdf/rdfjson/parser/RdfJsonParserProviderTest.java
incubator/clerezza/trunk/parent/rdf.rdfjson/src/test/resources/org/apache/clerezza/rdf/rdfjson/parser/test.json
Modified:
incubator/clerezza/trunk/parent/rdf.rdfjson/src/main/java/org/apache/clerezza/rdf/rdfjson/parser/RdfJsonParsingProvider.java
URL:
http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/rdf.rdfjson/src/main/java/org/apache/clerezza/rdf/rdfjson/parser/RdfJsonParsingProvider.java?rev=1073581&r1=1073580&r2=1073581&view=diff
==============================================================================
---
incubator/clerezza/trunk/parent/rdf.rdfjson/src/main/java/org/apache/clerezza/rdf/rdfjson/parser/RdfJsonParsingProvider.java
(original)
+++
incubator/clerezza/trunk/parent/rdf.rdfjson/src/main/java/org/apache/clerezza/rdf/rdfjson/parser/RdfJsonParsingProvider.java
Wed Feb 23 03:29:48 2011
@@ -37,15 +37,17 @@ import org.apache.clerezza.rdf.core.impl
import org.apache.clerezza.rdf.core.impl.TripleImpl;
import org.apache.clerezza.rdf.core.serializedform.ParsingProvider;
import org.apache.clerezza.rdf.core.serializedform.SupportedFormat;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Service;
/**
* A {@link org.apache.clerezza.rdf.core.serializedform.ParsingProvider} for
rdf/json
*
- * @author tio *
- * @scr.component immediate="true"
- * @scr.service
interface="org.apache.clerezza.rdf.core.serializedform.ParsingProvider"
+ * @author tio, hasan
*
*/
+@Component(immediate=true)
+@Service(ParsingProvider.class)
@SupportedFormat(SupportedFormat.RDF_JSON)
public class RdfJsonParsingProvider implements ParsingProvider {
@@ -56,13 +58,22 @@ public class RdfJsonParsingProvider impl
JSONParser parser = new JSONParser();
InputStreamReader reader = new
InputStreamReader(serializedGraph);
+ Map<String, NonLiteral> bNodeMap = new HashMap<String,
NonLiteral>();
+
try {
JSONObject root = (JSONObject) parser.parse(reader);
- Map<String, NonLiteral> subjects =
createSubjectsFromJSONObjects(root);
- for (String keyString : subjects.keySet()) {
- NonLiteral key = subjects.get(keyString);
+
+ NonLiteral nonLiteral = null;
+ for (Object key : root.keySet()) {
+ String keyString = (String) key;
+ if (keyString.startsWith("_:")) {
+ nonLiteral = new BNode();
+ bNodeMap.put(keyString, nonLiteral);
+ } else {
+ nonLiteral = new UriRef(keyString);
+ }
JSONObject predicates = (JSONObject)
root.get(keyString);
- addValuesToGraph(key, subjects, predicates,
target);
+ addTriplesToGraph(nonLiteral, bNodeMap,
predicates, target);
}
} catch (IOException ioe) {
logger.error(ioe.getMessage());
@@ -73,23 +84,7 @@ public class RdfJsonParsingProvider impl
}
}
- private Map<String, NonLiteral>
createSubjectsFromJSONObjects(JSONObject root) {
- Map<String, NonLiteral> subjectsAsJSONObjects = new
HashMap<String, NonLiteral>();
-
- for (Object key : root.keySet()) {
- String keyString = (String) key;
- if (keyString.startsWith("_:")) {
- BNode bNode = new BNode();
- subjectsAsJSONObjects.put(keyString, bNode);
- } else {
- UriRef uri = new UriRef(keyString);
- subjectsAsJSONObjects.put(keyString, uri);
- }
- }
- return subjectsAsJSONObjects;
- }
-
- private void addValuesToGraph(NonLiteral key, Map<String, NonLiteral>
subjects, JSONObject predicates,
+ private void addTriplesToGraph(NonLiteral subject, Map<String,
NonLiteral> bNodeMap, JSONObject predicates,
MGraph mGraph) {
for (Object predicate : predicates.keySet()) {
JSONArray objects = (JSONArray)
predicates.get(predicate);
@@ -100,20 +95,25 @@ public class RdfJsonParsingProvider impl
if (values.containsKey("datatype")
&&
!values.get("datatype").equals("")
&&
values.get("datatype") != null) {
- mGraph.add(new TripleImpl(key,
new UriRef((String) predicate),
+ mGraph.add(new
TripleImpl(subject, new UriRef((String) predicate),
LiteralFactory.getInstance().createTypedLiteral(value)));
} else if (values.containsKey("lang")
&&
!values.get("lang").equals("")
&& values.get("lang")
!= null) {
- mGraph.add(new TripleImpl(key,
new UriRef((String) predicate),
+ mGraph.add(new
TripleImpl(subject, new UriRef((String) predicate),
new
PlainLiteralImpl(value, new Language((String) values.get("lang")))));
} else {
- mGraph.add(new TripleImpl(key,
new UriRef((String) predicate), new PlainLiteralImpl(value)));
+ mGraph.add(new
TripleImpl(subject, new UriRef((String) predicate), new
PlainLiteralImpl(value)));
}
} else if (values.get("type").equals("uri")) {
- mGraph.add(new TripleImpl(key, new
UriRef((String) predicate), new UriRef(value)));
+ mGraph.add(new TripleImpl(subject, new
UriRef((String) predicate), new UriRef(value)));
} else if (values.get("type").equals("bnode")) {
- mGraph.add(new TripleImpl(key, new
UriRef((String) predicate), subjects.get(value)));
+ NonLiteral bNode = bNodeMap.get(value);
+ if (bNode == null) {
+ bNode = new BNode();
+ bNodeMap.put(value, bNode);
+ }
+ mGraph.add(new TripleImpl(subject, new
UriRef((String) predicate), bNode));
}
}
}
Modified:
incubator/clerezza/trunk/parent/rdf.rdfjson/src/test/java/org/apache/clerezza/rdf/rdfjson/parser/RdfJsonParserProviderTest.java
URL:
http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/rdf.rdfjson/src/test/java/org/apache/clerezza/rdf/rdfjson/parser/RdfJsonParserProviderTest.java?rev=1073581&r1=1073580&r2=1073581&view=diff
==============================================================================
---
incubator/clerezza/trunk/parent/rdf.rdfjson/src/test/java/org/apache/clerezza/rdf/rdfjson/parser/RdfJsonParserProviderTest.java
(original)
+++
incubator/clerezza/trunk/parent/rdf.rdfjson/src/test/java/org/apache/clerezza/rdf/rdfjson/parser/RdfJsonParserProviderTest.java
Wed Feb 23 03:29:48 2011
@@ -18,21 +18,60 @@ package org.apache.clerezza.rdf.rdfjson.
import java.io.InputStream;
import java.util.Iterator;
+import org.apache.clerezza.rdf.core.BNode;
import org.junit.Assert;
import org.junit.Test;
import org.apache.clerezza.rdf.core.MGraph;
+import org.apache.clerezza.rdf.core.NonLiteral;
import org.apache.clerezza.rdf.core.Triple;
import org.apache.clerezza.rdf.core.UriRef;
import org.apache.clerezza.rdf.core.impl.SimpleMGraph;
import org.apache.clerezza.rdf.core.serializedform.ParsingProvider;
/**
- * @author tio
+ * @author tio, hasan
*/
public class RdfJsonParserProviderTest {
@Test
+ public void testParsingOfObjectBNode() {
+ ParsingProvider provider = new RdfJsonParsingProvider();
+ InputStream jsonIn =
getClass().getResourceAsStream("test-object-bnode.json");
+ MGraph parsedMGraph = new SimpleMGraph();
+ provider.parse(parsedMGraph, jsonIn, "application/rdf+json",
null);
+ Assert.assertEquals(parsedMGraph.size(), 1);
+ Iterator<Triple> triples = parsedMGraph.filter(new
UriRef("http://example.org/node1"),
+ new UriRef("http://example.org/prop1"), null);
+ Assert.assertTrue(triples.hasNext());
+ Assert.assertTrue(triples.next().getObject() instanceof BNode);
+ }
+
+ @Test
+ public void testParsingOfSubjectBNode() {
+ ParsingProvider provider = new RdfJsonParsingProvider();
+ InputStream jsonIn =
getClass().getResourceAsStream("test-subject-bnode.json");
+ MGraph parsedMGraph = new SimpleMGraph();
+ provider.parse(parsedMGraph, jsonIn, "application/rdf+json",
null);
+ Assert.assertEquals(3, parsedMGraph.size());
+ Iterator<Triple> triples = parsedMGraph.filter(null, new
UriRef("http://example.org/prop1"),
+ new UriRef("http://example.org/node1"));
+ Assert.assertTrue(triples.hasNext());
+ NonLiteral subject = triples.next().getSubject();
+ Assert.assertTrue(subject instanceof BNode);
+
+ triples = parsedMGraph.filter(null, new
UriRef("http://example.org/prop2"),
+ new UriRef("http://example.org/node2"));
+ Assert.assertTrue(triples.hasNext());
+ Assert.assertTrue(subject.equals(triples.next().getSubject()));
+
+ triples = parsedMGraph.filter(null, new
UriRef("http://example.org/prop3"),
+ new UriRef("http://example.org/node3"));
+ Assert.assertTrue(triples.hasNext());
+ Assert.assertFalse(subject.equals(triples.next().getSubject()));
+ }
+
+ @Test
public void testParser() {
ParsingProvider provider = new RdfJsonParsingProvider();
InputStream jsonIn =
getClass().getResourceAsStream("test.json");
Added:
incubator/clerezza/trunk/parent/rdf.rdfjson/src/test/resources/org/apache/clerezza/rdf/rdfjson/parser/test-object-bnode.json
URL:
http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/rdf.rdfjson/src/test/resources/org/apache/clerezza/rdf/rdfjson/parser/test-object-bnode.json?rev=1073581&view=auto
==============================================================================
---
incubator/clerezza/trunk/parent/rdf.rdfjson/src/test/resources/org/apache/clerezza/rdf/rdfjson/parser/test-object-bnode.json
(added)
+++
incubator/clerezza/trunk/parent/rdf.rdfjson/src/test/resources/org/apache/clerezza/rdf/rdfjson/parser/test-object-bnode.json
Wed Feb 23 03:29:48 2011
@@ -0,0 +1,5 @@
+{
+ "http://example.org/node1": {
+ "http://example.org/prop1":
[{"value":"_:bnode1","type":"bnode"}]
+ }
+}
Added:
incubator/clerezza/trunk/parent/rdf.rdfjson/src/test/resources/org/apache/clerezza/rdf/rdfjson/parser/test-subject-bnode.json
URL:
http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/rdf.rdfjson/src/test/resources/org/apache/clerezza/rdf/rdfjson/parser/test-subject-bnode.json?rev=1073581&view=auto
==============================================================================
---
incubator/clerezza/trunk/parent/rdf.rdfjson/src/test/resources/org/apache/clerezza/rdf/rdfjson/parser/test-subject-bnode.json
(added)
+++
incubator/clerezza/trunk/parent/rdf.rdfjson/src/test/resources/org/apache/clerezza/rdf/rdfjson/parser/test-subject-bnode.json
Wed Feb 23 03:29:48 2011
@@ -0,0 +1,10 @@
+{
+ "_:bnode1": {
+ "http://example.org/prop1":
[{"value":"http://example.org/node1","type":"uri"}],
+ "http://example.org/prop2":
[{"value":"http://example.org/node2","type":"uri"}]
+ },
+
+ "_:bnode2": {
+ "http://example.org/prop3":
[{"value":"http://example.org/node3","type":"uri"}]
+ }
+}
Modified:
incubator/clerezza/trunk/parent/rdf.rdfjson/src/test/resources/org/apache/clerezza/rdf/rdfjson/parser/test.json
URL:
http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/rdf.rdfjson/src/test/resources/org/apache/clerezza/rdf/rdfjson/parser/test.json?rev=1073581&r1=1073580&r2=1073581&view=diff
==============================================================================
---
incubator/clerezza/trunk/parent/rdf.rdfjson/src/test/resources/org/apache/clerezza/rdf/rdfjson/parser/test.json
(original)
+++
incubator/clerezza/trunk/parent/rdf.rdfjson/src/test/resources/org/apache/clerezza/rdf/rdfjson/parser/test.json
Wed Feb 23 03:29:48 2011
@@ -1,16 +1,16 @@
-{
- "http://base/child1": {
+{
+ "http://base/child1": {
"http://base/propertyB":[{"value":"B","type":"literal"}]
},
- "_1": {
-
"http://base/propertyC":[{"value":"C","type":"literal","lang":"en"}]
+ "_:b1": {
+
"http://base/propertyC":[{"value":"C","type":"literal","lang":"en"}],
"http://base/propertyE":[{"value":"E","type":"literal","datatype":"http://www.w3.org/2001/XMLSchema#string"}]
},
- "http://base/root": {
+ "http://base/root": {
"http://base/propertyA":[{"value":"A","type":"literal"}],
"http://base/resourcePropertyB":[{"value":"http://base/child1","type":"uri"}],
- "http://base/resourcePropertyD":[{"value":"_1","type":"bnode"}]
+
"http://base/resourcePropertyD":[{"value":"_:b1","type":"bnode"}]
}
-}
\ No newline at end of file
+}