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));
-       }
 }


Reply via email to