Author: hasan
Date: Thu Feb 24 00:39:02 2011
New Revision: 1074000
URL: http://svn.apache.org/viewvc?rev=1074000&view=rev
Log:
CLEREZZA-437: added test and fixed bug in serializer and parser
Modified:
incubator/clerezza/trunk/parent/rdf.rdfjson/pom.xml
incubator/clerezza/trunk/parent/rdf.rdfjson/src/main/java/org/apache/clerezza/rdf/rdfjson/parser/RdfJsonParsingProvider.java
incubator/clerezza/trunk/parent/rdf.rdfjson/src/main/java/org/apache/clerezza/rdf/rdfjson/serializer/RdfJsonSerializingProvider.java
incubator/clerezza/trunk/parent/rdf.rdfjson/src/test/java/org/apache/clerezza/rdf/rdfjson/serializer/RdfJsonSerializerProviderTest.java
Modified: incubator/clerezza/trunk/parent/rdf.rdfjson/pom.xml
URL:
http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/rdf.rdfjson/pom.xml?rev=1074000&r1=1073999&r2=1074000&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/rdf.rdfjson/pom.xml (original)
+++ incubator/clerezza/trunk/parent/rdf.rdfjson/pom.xml Thu Feb 24 00:39:02 2011
@@ -19,6 +19,11 @@
</dependency>
<dependency>
<groupId>org.apache.clerezza</groupId>
+ <artifactId>rdf.ontologies</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.clerezza</groupId>
<artifactId>rdf.core</artifactId>
</dependency>
<dependency>
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=1074000&r1=1073999&r2=1074000&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
Thu Feb 24 00:39:02 2011
@@ -56,9 +56,10 @@ public class RdfJsonParsingProvider impl
@Override
public void parse(MGraph target, InputStream serializedGraph, String
formatIdentifier, UriRef baseUri) {
+ BNodeManager bNodeMgr = new BNodeManager();
+
JSONParser parser = new JSONParser();
InputStreamReader reader = new
InputStreamReader(serializedGraph);
- Map<String, NonLiteral> bNodeMap = new HashMap<String,
NonLiteral>();
try {
JSONObject root = (JSONObject) parser.parse(reader);
@@ -67,13 +68,12 @@ public class RdfJsonParsingProvider impl
for (Object key : root.keySet()) {
String keyString = (String) key;
if (keyString.startsWith("_:")) {
- nonLiteral = new BNode();
- bNodeMap.put(keyString, nonLiteral);
+ nonLiteral =
bNodeMgr.getBNode(keyString);
} else {
nonLiteral = new UriRef(keyString);
}
JSONObject predicates = (JSONObject)
root.get(keyString);
- addTriplesToGraph(nonLiteral, bNodeMap,
predicates, target);
+ addTriplesToGraph(nonLiteral, bNodeMgr,
predicates, target);
}
} catch (IOException ioe) {
logger.error(ioe.getMessage());
@@ -84,8 +84,20 @@ public class RdfJsonParsingProvider impl
}
}
- private void addTriplesToGraph(NonLiteral subject, Map<String,
NonLiteral> bNodeMap, JSONObject predicates,
- MGraph mGraph) {
+ private class BNodeManager {
+ private Map<String, BNode> bNodeMap = new HashMap<String,
BNode>();
+
+ public BNode getBNode(String id) {
+ BNode bNode = bNodeMap.get(id);
+ if (bNode == null) {
+ bNode = new BNode();
+ bNodeMap.put(id, bNode);
+ }
+ return bNode;
+ }
+ }
+
+ private void addTriplesToGraph(NonLiteral subject, BNodeManager
bNodeMgr, JSONObject predicates, MGraph mGraph) {
for (Object predicate : predicates.keySet()) {
JSONArray objects = (JSONArray)
predicates.get(predicate);
for (Object object : objects) {
@@ -108,11 +120,7 @@ public class RdfJsonParsingProvider impl
} else if (values.get("type").equals("uri")) {
mGraph.add(new TripleImpl(subject, new
UriRef((String) predicate), new UriRef(value)));
} else if (values.get("type").equals("bnode")) {
- NonLiteral bNode = bNodeMap.get(value);
- if (bNode == null) {
- bNode = new BNode();
- bNodeMap.put(value, bNode);
- }
+ NonLiteral bNode =
bNodeMgr.getBNode(value);
mGraph.add(new TripleImpl(subject, new
UriRef((String) predicate), bNode));
}
}
Modified:
incubator/clerezza/trunk/parent/rdf.rdfjson/src/main/java/org/apache/clerezza/rdf/rdfjson/serializer/RdfJsonSerializingProvider.java
URL:
http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/rdf.rdfjson/src/main/java/org/apache/clerezza/rdf/rdfjson/serializer/RdfJsonSerializingProvider.java?rev=1074000&r1=1073999&r2=1074000&view=diff
==============================================================================
---
incubator/clerezza/trunk/parent/rdf.rdfjson/src/main/java/org/apache/clerezza/rdf/rdfjson/serializer/RdfJsonSerializingProvider.java
(original)
+++
incubator/clerezza/trunk/parent/rdf.rdfjson/src/main/java/org/apache/clerezza/rdf/rdfjson/serializer/RdfJsonSerializingProvider.java
Thu Feb 24 00:39:02 2011
@@ -52,25 +52,20 @@ public class RdfJsonSerializingProvider
private final Logger logger = LoggerFactory.getLogger(getClass());
- private int bNodeCounter = 0;
-
@Override
public void serialize(OutputStream serializedGraph, TripleCollection
tc, String formatIdentifier) {
JSONObject root = new JSONObject();
Set<NonLiteral> processedSubject = new HashSet<NonLiteral>();
- Map<BNode, String> bNodeMap = new HashMap<BNode, String>();
-
+ BNodeManager bNodeMgr = new BNodeManager();
NonLiteral subject = null;
String subjectStr = null;
- bNodeCounter = 0;
Iterator<Triple> triples = tc.iterator();
while (triples.hasNext()) {
subject = triples.next().getSubject();
if (!processedSubject.contains(subject)) {
if (subject instanceof BNode) {
- subjectStr = getNextBNodeId();
- bNodeMap.put((BNode)subject,
subjectStr);
+ subjectStr =
bNodeMgr.getBNodeId((BNode)subject);
} else { // if (subject instanceof UriRef)
subjectStr =
((UriRef)subject).getUnicodeString();
}
@@ -78,7 +73,7 @@ public class RdfJsonSerializingProvider
Iterator<Triple> triplesOfSubject =
tc.filter(subject, null, null);
while (triplesOfSubject.hasNext()) {
UriRef predicate =
triplesOfSubject.next().getPredicate();
- JSONArray jsonValues =
addValuesToJSONArray(tc, subject, predicate, bNodeMap);
+ JSONArray jsonValues =
addValuesToJSONArray(tc, subject, predicate, bNodeMgr);
predicatesAsJSONObjects.put(predicate.getUnicodeString(), jsonValues);
}
root.put(subjectStr, predicatesAsJSONObjects);
@@ -94,12 +89,22 @@ public class RdfJsonSerializingProvider
}
}
- private String getNextBNodeId() {
- return "_:b" + ++bNodeCounter;
+ private class BNodeManager {
+ private Map<BNode, String> bNodeMap = new HashMap<BNode,
String>();
+ private int counter = 0;
+
+ public String getBNodeId(BNode node) {
+ String bNodeId = bNodeMap.get(node);
+ if (bNodeId == null) {
+ bNodeId = "_:b" + ++counter;
+ bNodeMap.put((BNode)node, bNodeId);
+ }
+ return bNodeId;
+ }
}
private JSONArray addValuesToJSONArray(TripleCollection tc, NonLiteral
subject, UriRef predicate,
- Map<BNode, String> bNodeMap) {
+ BNodeManager bNodeMgr) {
JSONArray jsonValues = new JSONArray();
@@ -124,11 +129,7 @@ public class RdfJsonSerializingProvider
objectAsJSONObject.put("value",
uriRef.getUnicodeString());
objectAsJSONObject.put("type", "uri");
} else if (object instanceof BNode) {
- String bNodeId = bNodeMap.get((BNode)object);
- if (bNodeId == null) {
- bNodeId = getNextBNodeId();
- bNodeMap.put((BNode)object, bNodeId);
- }
+ String bNodeId =
bNodeMgr.getBNodeId((BNode)object);
objectAsJSONObject.put("value", bNodeId);
objectAsJSONObject.put("type", "bnode");
}
Modified:
incubator/clerezza/trunk/parent/rdf.rdfjson/src/test/java/org/apache/clerezza/rdf/rdfjson/serializer/RdfJsonSerializerProviderTest.java
URL:
http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/rdf.rdfjson/src/test/java/org/apache/clerezza/rdf/rdfjson/serializer/RdfJsonSerializerProviderTest.java?rev=1074000&r1=1073999&r2=1074000&view=diff
==============================================================================
---
incubator/clerezza/trunk/parent/rdf.rdfjson/src/test/java/org/apache/clerezza/rdf/rdfjson/serializer/RdfJsonSerializerProviderTest.java
(original)
+++
incubator/clerezza/trunk/parent/rdf.rdfjson/src/test/java/org/apache/clerezza/rdf/rdfjson/serializer/RdfJsonSerializerProviderTest.java
Thu Feb 24 00:39:02 2011
@@ -24,12 +24,14 @@ import org.junit.Test;
import org.apache.clerezza.rdf.core.BNode;
import org.apache.clerezza.rdf.core.LiteralFactory;
import org.apache.clerezza.rdf.core.MGraph;
+import org.apache.clerezza.rdf.core.TypedLiteral;
import org.apache.clerezza.rdf.core.UriRef;
import org.apache.clerezza.rdf.core.impl.PlainLiteralImpl;
import org.apache.clerezza.rdf.core.impl.SimpleMGraph;
import org.apache.clerezza.rdf.core.impl.TripleImpl;
import org.apache.clerezza.rdf.core.serializedform.ParsingProvider;
import org.apache.clerezza.rdf.core.serializedform.SerializingProvider;
+import org.apache.clerezza.rdf.ontologies.RDF;
import org.apache.clerezza.rdf.rdfjson.parser.RdfJsonParsingProvider;
import org.junit.After;
import org.junit.AfterClass;
@@ -37,14 +39,27 @@ import org.junit.Before;
import org.junit.BeforeClass;
/**
- * serializes a Graph to rdf+json
- *
- * see http://n2.talis.com/wiki/RDF_JSON_Specification
*
* @author tio, hasan
*/
public class RdfJsonSerializerProviderTest {
+ private final static UriRef RDF_NIL = new
UriRef("http://www.w3.org/1999/02/22-rdf-syntax-ns#nil");
+ private final static UriRef node1 = new
UriRef("http://example.org/node1");
+ private final static UriRef node2 = new
UriRef("http://example.org/node2");
+ private final static UriRef prop1 = new
UriRef("http://example.org/prop1");
+ private final static UriRef prop2 = new
UriRef("http://example.org/prop2");
+ private final static UriRef prop3 = new
UriRef("http://example.org/prop3");
+ private final static UriRef prop4 = new
UriRef("http://example.org/prop4");
+ private final static UriRef prop5 = new
UriRef("http://example.org/prop5");
+ private final static UriRef prop6 = new
UriRef("http://example.org/prop6");
+ private final static BNode blank1 = new BNode();
+ private final static BNode blank2 = new BNode();
+ private final static PlainLiteralImpl plainLiteralA = new
PlainLiteralImpl("A");
+ private final static PlainLiteralImpl plainLiteralB = new
PlainLiteralImpl("B");
+ private final static PlainLiteralImpl plainLiteralC = new
PlainLiteralImpl("C");
+ private final static TypedLiteral typedLiteralA =
LiteralFactory.getInstance().createTypedLiteral("A");
+
private MGraph mGraph;
@BeforeClass
@@ -66,20 +81,47 @@ public class RdfJsonSerializerProviderTe
@Test
public void testSerializationOfBNode() {
- mGraph.add(new TripleImpl(new
UriRef("http://example.org/node1"),
- new UriRef("http://example.org/prop1"), new
BNode()));
+ mGraph.add(new TripleImpl(node1, prop1, blank1));
SerializingProvider provider = new RdfJsonSerializingProvider();
ByteArrayOutputStream serializedGraph = new
ByteArrayOutputStream();
provider.serialize(serializedGraph, mGraph,
"application/rdf+json");
Assert.assertTrue(serializedGraph.toString().contains("_:"));
}
+ @Test
+ public void testSerializationOfRdfList() {
+ mGraph.add(new TripleImpl(blank1, RDF.first, blank2));
+ mGraph.add(new TripleImpl(blank1, RDF.rest, RDF_NIL));
+ mGraph.add(new TripleImpl(blank2, prop1, node1));
+
+// System.out.println(mGraph);
+
+ SerializingProvider provider = new RdfJsonSerializingProvider();
+ ByteArrayOutputStream serializedGraph = new
ByteArrayOutputStream();
+ provider.serialize(serializedGraph, mGraph,
"application/rdf+json");
+
+// System.out.println(serializedGraph.toString());
+
+ ParsingProvider parsingProvider = new RdfJsonParsingProvider();
+ ByteArrayInputStream jsonIn = new
ByteArrayInputStream(serializedGraph.toByteArray());
+ MGraph parsedMGraph = new SimpleMGraph();
+ parsingProvider.parse(parsedMGraph, jsonIn,
"application/rdf+json", null);
+
+ Assert.assertEquals(mGraph.getGraph(), parsedMGraph.getGraph());
+ }
+
/*
* serializes a graph and parse it back.
*/
@Test
public void testSerializer() {
- initializeGraph();
+ mGraph.add(new TripleImpl(node1, prop1, plainLiteralA));
+ mGraph.add(new TripleImpl(node1, prop2, node2));
+ mGraph.add(new TripleImpl(node2, prop3, plainLiteralB));
+ mGraph.add(new TripleImpl(blank1, prop4, plainLiteralC));
+ mGraph.add(new TripleImpl(blank1, prop5, typedLiteralA));
+ mGraph.add(new TripleImpl(node1, prop6, blank1));
+
SerializingProvider provider = new RdfJsonSerializingProvider();
ByteArrayOutputStream serializedGraph = new
ByteArrayOutputStream();
provider.serialize(serializedGraph, mGraph,
"application/rdf+json");
@@ -91,19 +133,4 @@ public class RdfJsonSerializerProviderTe
Assert.assertEquals(6, parsedMGraph.size());
Assert.assertEquals(mGraph.getGraph(), parsedMGraph.getGraph());
}
-
- private void initializeGraph() {
- String baseUri = "http://base/";
- mGraph.add(new TripleImpl(new UriRef(baseUri + "root"), new
UriRef(baseUri + "propertyA"),
- new PlainLiteralImpl("A")));
- mGraph.add(new TripleImpl(new UriRef(baseUri + "root"), new
UriRef(baseUri + "resourcePropertyB"),
- new UriRef(baseUri + "child1")));
- mGraph.add(new TripleImpl(new UriRef(baseUri + "child1"), new
UriRef(baseUri + "propertyB"),
- new PlainLiteralImpl("B")));
- BNode bNode = new BNode();
- mGraph.add(new TripleImpl(bNode, new UriRef(baseUri +
"propertyC"), new PlainLiteralImpl("C")));
- mGraph.add(new TripleImpl(bNode, new UriRef(baseUri +
"propertyE"),
-
LiteralFactory.getInstance().createTypedLiteral("E")));
- mGraph.add(new TripleImpl(new UriRef(baseUri + "root"), new
UriRef(baseUri + "resourcePropertyD"), bNode));
- }
}