Author: hasan
Date: Wed Feb 23 13:36:42 2011
New Revision: 1073738
URL: http://svn.apache.org/viewvc?rev=1073738&view=rev
Log:
CLEREZZA-437: refactored code, added test, fixed bug in serialization of object
bnode, and corrected bnode id
Modified:
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/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=1073738&r1=1073737&r2=1073738&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
Wed Feb 23 13:36:42 2011
@@ -19,8 +19,10 @@ package org.apache.clerezza.rdf.rdfjson.
import java.io.IOException;
import java.io.OutputStream;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
+import java.util.Set;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.slf4j.Logger;
@@ -35,42 +37,54 @@ import org.apache.clerezza.rdf.core.Type
import org.apache.clerezza.rdf.core.UriRef;
import org.apache.clerezza.rdf.core.serializedform.SerializingProvider;
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.SerializingProvider}
for
- * rdf/json
- *
- * @author tio
- *
- * @scr.component immediate="true"
- * @scr.service
- *
interface="org.apache.clerezza.rdf.core.serializedform.SerializingProvider"
+ * A {@link org.apache.clerezza.rdf.core.serializedform.SerializingProvider}
for rdf/json
*
+ * @author tio, hasan
*/
+@Component(immediate=true)
+@Service(SerializingProvider.class)
@SupportedFormat(SupportedFormat.RDF_JSON)
public class RdfJsonSerializingProvider implements SerializingProvider {
private final Logger logger = LoggerFactory.getLogger(getClass());
+ private int bNodeCounter = 0;
+
@Override
- public void serialize(OutputStream serializedGraph, TripleCollection tc,
- String formatIdentifier) {
+ public void serialize(OutputStream serializedGraph, TripleCollection
tc, String formatIdentifier) {
JSONObject root = new JSONObject();
- Map<NonLiteral, String> subjectsAsJSONObjects =
createSubjectsAsJSONObjects(tc);
-
- for (NonLiteral subject : subjectsAsJSONObjects.keySet()) {
- String key = subjectsAsJSONObjects.get(subject);
+ Set<NonLiteral> processedSubject = new HashSet<NonLiteral>();
+ Map<BNode, String> bNodeMap = new HashMap<BNode, String>();
- JSONObject predicatesAsJSONObjects = new JSONObject();
+ 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);
+ } else { // if (subject instanceof UriRef)
+ subjectStr =
((UriRef)subject).getUnicodeString();
+ }
+ JSONObject predicatesAsJSONObjects = new
JSONObject();
+ Iterator<Triple> triplesOfSubject =
tc.filter(subject, null, null);
+ while (triplesOfSubject.hasNext()) {
+ UriRef predicate =
triplesOfSubject.next().getPredicate();
+ JSONArray jsonValues =
addValuesToJSONArray(tc, subject, predicate, bNodeMap);
+
predicatesAsJSONObjects.put(predicate.getUnicodeString(), jsonValues);
+ }
+ root.put(subjectStr, predicatesAsJSONObjects);
- Iterator<Triple> triplesFromSubject =
tc.filter(subject, null, null);
- while (triplesFromSubject.hasNext()) {
- UriRef predicate =
triplesFromSubject.next().getPredicate();
- JSONArray jsonValues = addValuesToJSONArray(tc,
subject, predicate, subjectsAsJSONObjects);
-
predicatesAsJSONObjects.put(predicate.getUnicodeString(), jsonValues);
+ processedSubject.add(subject);
}
- root.put(key, predicatesAsJSONObjects);
}
try {
serializedGraph.write(root.toJSONString().getBytes());
@@ -80,33 +94,18 @@ public class RdfJsonSerializingProvider
}
}
- private Map<NonLiteral, String> createSubjectsAsJSONObjects(
- TripleCollection tc) {
- Map<NonLiteral, String> subjectsAsJSONObjects = new
HashMap<NonLiteral, String>();
- Iterator<Triple> triples = tc.iterator();
- int bNodeCounter = 1;
- while (triples.hasNext()) {
- NonLiteral subject = triples.next().getSubject();
- if (!subjectsAsJSONObjects.containsKey(subject)) {
- if (subject instanceof UriRef) {
- subjectsAsJSONObjects.put(subject,
((UriRef) subject).getUnicodeString());
- } else if (subject instanceof BNode) {
- subjectsAsJSONObjects.put(subject, "_:"
+ bNodeCounter++);
- }
- }
- }
- return subjectsAsJSONObjects;
+ private String getNextBNodeId() {
+ return "_:b" + ++bNodeCounter;
}
- private JSONArray addValuesToJSONArray(TripleCollection tc,
- NonLiteral subject, UriRef predicate,
- Map<NonLiteral, String> subjectsAsJSONObjects) {
+ private JSONArray addValuesToJSONArray(TripleCollection tc, NonLiteral
subject, UriRef predicate,
+ Map<BNode, String> bNodeMap) {
JSONArray jsonValues = new JSONArray();
- Iterator<Triple> objectsFromPredicate = tc.filter(subject,
predicate, null);
- while (objectsFromPredicate.hasNext()) {
- Resource object =
objectsFromPredicate.next().getObject();
+ Iterator<Triple> objectsOfPredicate = tc.filter(subject,
predicate, null);
+ while (objectsOfPredicate.hasNext()) {
+ Resource object = objectsOfPredicate.next().getObject();
JSONObject objectAsJSONObject = new JSONObject();
if (object instanceof PlainLiteral) {
PlainLiteral plainLiteral = (PlainLiteral)
object;
@@ -121,11 +120,16 @@ public class RdfJsonSerializingProvider
objectAsJSONObject.put("type", "literal");
objectAsJSONObject.put("datatype",
literal.getDataType().getUnicodeString());
} else if (object instanceof UriRef) {
- UriRef uri = (UriRef) object;
- objectAsJSONObject.put("value",
uri.getUnicodeString());
+ UriRef uriRef = (UriRef) object;
+ objectAsJSONObject.put("value",
uriRef.getUnicodeString());
objectAsJSONObject.put("type", "uri");
} else if (object instanceof BNode) {
- objectAsJSONObject.put("value",
subjectsAsJSONObjects.get(object));
+ String bNodeId = bNodeMap.get((BNode)object);
+ if (bNodeId == null) {
+ bNodeId = getNextBNodeId();
+ bNodeMap.put((BNode)object, bNodeId);
+ }
+ objectAsJSONObject.put("value", bNodeId);
objectAsJSONObject.put("type", "bnode");
}
jsonValues.add(objectAsJSONObject);
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=1073738&r1=1073737&r2=1073738&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
Wed Feb 23 13:36:42 2011
@@ -31,50 +31,79 @@ import org.apache.clerezza.rdf.core.impl
import org.apache.clerezza.rdf.core.serializedform.ParsingProvider;
import org.apache.clerezza.rdf.core.serializedform.SerializingProvider;
import org.apache.clerezza.rdf.rdfjson.parser.RdfJsonParsingProvider;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
/**
- * Serializes a Graph to rdf+json
+ * serializes a Graph to rdf+json
*
* see http://n2.talis.com/wiki/RDF_JSON_Specification
*
- * @author tio
+ * @author tio, hasan
*/
public class RdfJsonSerializerProviderTest {
private MGraph mGraph;
- private void initializeGraph() {
- String baseUri = "http://base/";
+ @BeforeClass
+ public static void setUpClass() throws Exception {
+ }
+
+ @AfterClass
+ public static void tearDownClass() throws Exception {
+ }
+
+ @Before
+ public void setUp() {
mGraph = new SimpleMGraph();
- 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));
+ }
+
+ @After
+ public void tearDown() {
+ }
+
+ @Test
+ public void testSerializationOfBNode() {
+ mGraph.add(new TripleImpl(new
UriRef("http://example.org/node1"),
+ new UriRef("http://example.org/prop1"), new
BNode()));
+ SerializingProvider provider = new RdfJsonSerializingProvider();
+ ByteArrayOutputStream serializedGraph = new
ByteArrayOutputStream();
+ provider.serialize(serializedGraph, mGraph,
"application/rdf+json");
+ Assert.assertTrue(serializedGraph.toString().contains("_:"));
}
/*
- * Serializes a Graph and parse it.
+ * serializes a graph and parse it back.
*/
@Test
public void testSerializer() {
initializeGraph();
SerializingProvider provider = new RdfJsonSerializingProvider();
ByteArrayOutputStream serializedGraph = new
ByteArrayOutputStream();
- provider.serialize(serializedGraph, mGraph.getGraph(),
- "application/rdf+json");
+ provider.serialize(serializedGraph, mGraph,
"application/rdf+json");
ParsingProvider parsingProvider = new RdfJsonParsingProvider();
ByteArrayInputStream jsonIn = new
ByteArrayInputStream(serializedGraph.toByteArray());
- MGraph deserializedMGraph = new SimpleMGraph();
- parsingProvider.parse(deserializedMGraph, jsonIn,
"application/rdf+json", null);
- Assert.assertEquals(6, deserializedMGraph.size());
- Assert.assertEquals(mGraph.getGraph(),
deserializedMGraph.getGraph());
+ MGraph parsedMGraph = new SimpleMGraph();
+ parsingProvider.parse(parsedMGraph, jsonIn,
"application/rdf+json", null);
+
+ 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));
}
}