JavaScript JSON convertors for Cytoscape 3.0 file formats

Project Idea:

The project title is: JavaScript JSON convertors for Cytoscape 3.0 file formats.
 The idea is based upon suggested Idea 19: JavaScript JSON convertors for graph file formats, but I would like to drop the word “graph” from it, because this project will support virtually all formats accepted by Cytoscape 3.0 .
Synopsis:

This project deals with the conversion of different graph and other  formats used in Cytoscape 3.0 to Json used in cytoscape.js and vice versa. 
Cytoscape 3.0 accepts file formats like xgmml, graphml, gml, nnf, sif, xls, sif, csv whereas cytoscape.js currently accepts only json representations of the data. It is not an easy task to create json representation of a required graph by hand. This is where this project comes in. I will develop some converters using JavaScript which will automate this generation of json representation.  Cytoscape-web, the predecessor of Cytoscape.js supported only sif files, but this project will support import and export to all the formats mentioned earlier.
Implementation details:

The Cytoscape 3.0 file formats that will be supported are:
Xgmml, Graphml, Sif, Nnf, Gml (,Csv, Xlsx).
They are arranged according to their priority and so this is the order in which their json converters will be implemented. The last two (in bracket) will be kept as extras, meaning that they will be implemented only if the project is finished well before the deadline (see the timeline for details) .

Now, this is how I plan to deal with each of them.
1.	Xgmml: This is the top priority format and hence will be dealt with first. Xml parsers available in native javascript and jquery will be used for parsing the xgmml file. Then some JavaScript code (using looping and if needed, regular expressions) will deal with the parsed xml file to convert them correctly into javascript variables and objects. Finally, they can be used to generate its json representation. (Maybe, take some inspiration from this library in Gremlin (written in java): https://github.com/tinkerpop/blueprints/wiki/GraphSON-Reader-and-Writer-Library )
This required some separate functions which can:
•	convert parsed xml to jS variables and objects
•	create xml from given jS variables and objects
•	save given jS variables and objects as json
•	convert json into given jS variables and objects

2.	Graphml:  Graphml is also a xml-based format, so the implementation process is same as that of the previous one. Only the code will be different to take care of the syntax difference of these formats.

Before I move on to the other ones, here is a small chart for reference:

3.	Sif and Nnf: Very simple jS code needs to be written to take care of these file formats. There is already a python-based implementation of these converters (written by me) available at https://github.com/bendtherules/GSOC_13/tree/master/nnf_and_sif_to_json_py  . Nnf files will be stripped off its network information and treated just like a Sif file (Possible problem with multi-network files ??)
4.	GML:  A custom-made parser needs to be built based on regular expressions (native js or possibly using xregexp library http://xregexp.com/ ). The rest of the plan is the same as that of xgmml, only this new parser will be used.
Few words on the extras:
These extras will be done only if there is ample time left after the completion of the whole project, so there is no way that they will harm the main project. I am aware that new GSOC applicants like me tend to propose a lot more than they can actually complete, so I have tried not to fall in that trap. But these extras are here, because I plan to do them in the future, within or after GSOC.  Also, as a side note, in future, I wish to release this codes as a separate jS library for converting customized-xml formats into json (I hope my mentoring org will allow this).
5.	Csv:  Use any well-documented csv parser and rest is the same.
6.	Xlsx: This is the most challenging part. I wouldn’t have tried this if there was no cross-browser external library to read and write xlsx format. But thankfully and quite surprisingly, there is one called Xlsx.js https://github.com/stephen-hardy/xlsx.js . I am not much sure if I can pull off this part, but I am still including this in the proposal mostly for my inspiration than anything else. Also, I know that the Cytoscape project originally supported .xls, but I think its best kept to Microsoft Excel for converting .xls into .xlsx .

Timeline:

1.	Before June 17 : 
o	Learn more about:
o	   Jquery, xregexp, csv-parser, json, xlsx.js and the graph formats.
o	Set up development environment
2.	June 17 – July 6 (18 days): Implement xgmml converter
o	June 17 – June 29 (12 days): Implement xgmml parser
o	July 30 – July 5 (6 days): Rest of the converter
3.	July 5 – July 7 (3 days): Test converter with different xgmml files.
4.	July 8 – July 25 (18 days): Implement graphml converter
o	 July 8 – July 19 (12 days): Implement graphml parser
o	July 20 – July 25 (6 days): Rest of the converter
5.	 July 26 – July 28 (3 days): Test graphml converter
6.	July 29 (Mid-term evaluation):  Deliver fully-implemented xgmml and graphml parser.
7.	July 30: Take a day off from coding and analyze what went right and wrong in the first-term. (How about a blog post? :D)
8.	July 31 – August 2 (3 days): Implement and test Sif and Nnf converter.
9.	August 3 – August 20 (18 days): Implement Gml converter (First 12 days for the parser).
10.	August 21 – August 23 (3 days): Test Gml converter
11.	August 24 – August 27 (4 days):  Put all the converters together and test them (Packaging).
12.	August 28 – September 3 (10 days): Prepare documentation and add inline comments in the code.
13.	September 4 – September 16 (13 days): Buffer time (If everything is working, work on the extras) 
(Feedback will be obtained for all the converters from the community and they will be of more importance than the extras)
Possible hurdles:

1.	Json handler in Cytoscape.js might not be able to handle objects within the “data” section. If so, request the developer or send a patch to the core project so that it is supported.
2.	Make sure the regular-expression based Gml parser is not buggy.
3.	The input graph formats might not be well-formed (if manually created). (Maybe, add a xml-checker and discard non well-formed files. Such a checker might not be possible in case of non-xml based formats. )
What can I bring to the team?

•	Yes, I am committed in working hard for this GSOC project this summer.  I do not have any other commitment during the summer other than my college internals for the next session which should be held near the end of August or the start of September. I am not yet sure about the date, but I will ask for a one-week break during that time. I hope it won’t be much of a problem.
•	Being my first GSOC project, I am also super-excited about it, can’t wait to have a fruitful summer this year.
•	I wish to learn some more about the core Cytoscape project but as I am not a Java developer, I wish to linger with the Cytoscape.js project.