X3D JSON Encoding
These are X3D Working Group notes on the creation of an X3D JSON encoding and a corresponding conversion process.
Design Requirements, Goals and Use Cases
- Round-trippable encoding supporting X3D abstract specification
Design goals and primary use cases:
- Exchange format for a variety of 3D geometry and scene graphs
- Are there any use cases that might modify how X3D is represented in JSON?
- If so, it would be good to spell them out and understand them well.
- We want conversion rules to permit implementations that can achieve user goals.
- Experimental X3dToJson.xslt stylesheet converts .x3d into .json encoding. In version control at sourceforge
- Current work: lists of comments; field/fieldValue representations for Scripts and prototypes
- Embedded in X3D-Edit for testing
- Initial Hello World examples deployed (.x3d) (.html) (x3dom .xhtml) (.json)
- Conversion syntax discussions continue on x3dom-developers mail list (with "dump scene as json" test by Dr. Yvonne Jung)
- X3D Examples include build scripts to convert .x3d to .json, then perform jslint validation
Primary design criterion: round-trippable lossless representation of X3D scene.
Conversion approach of greatest practical interest: XML to/from JSON. Issues:
- How to convert attribute names to distinguish them from child elements. Resolution: "@attributeName".
- JSON handling of container elements to preserve parent/child relationships, distinguishing child elements from attributes Resolution: use SFNode/MFNode field names as unique keys.
- Creation of JSON elements with datatypes appropriate to content (e.g., integer, float, strings, etc.). Note special JSON rules for floats (not equivalent to IEEE floats).
- Both X3D and JSON can include comments, and so need an option for inclusion (by default) or removal (optional) of comments in order to ensure 100% round-trip conversion capabilities.
- jslint-validatable field/fieldValue representations within Scripts and prototypes
- Support for singleton (self-closing) XML tags also needs to be considered, without loss of generality.
- Inclusion and preservation of embedded XML namespace information in an XML (.x3d) document: might not be necessary or possible.
Probably smartest to first start out defining an X3D best practice.
The most probable place to put it is as a new Part 5 to ISO/IEC 19776. In this manner, it would correspond to the XML, Classic VRML, and Compressed Binary encodings.
Here are suggested discussion points for X3D teleconferences and future followups.
- Is there a good/consistent way for X3DOM to utilize such capabilities?
- Is there a single authoritative reference for JSON itself? and for JSON-XML conversions? See  for the JSON Data Interchange Format, need to confirm no others.
- What is the right file extension? .json, .x3dj or something else
- Can a file reader distinguish the incoming encodings (.x3d .x3dv .x3db .x3de .json) independent of file extension or MIME media type?
- Once a canonical form for X3D as JSON is established, add conversion capabilities to X3D-Edit and also autoconvert, test and publish JSON for all of the 3800+ scenes in the X3D Examples Archives
- Compare compression size and decompression speed of a TestMesh.x3d.json.gz to TestMesh.x3db and TestMesh.x3d.exi (EXI will likely win because it includes data typing)
Probably lots more... What else?
- XML to JSON Converter (provides option to assign a prefix to JSON attributes, default is @ character) http://www.freeformatter.com/xml-to-json-converter.html
- Apache Camel, XML JSON Data Format (camel-xmljson) [http://camel.apache.org/xmljson.html
- ECMA 404: JSON Data Interchange Format (Final Draft) http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf
- JSON Markup Language (JsonML) http://www.jsonml.org/
- XSLTJSON: Transforming XML to JSON using XSLT http://www.bramstein.com/projects/xsltjson
- Converting Between XML and JSON http://www.xml.com/pub/a/2006/05/31/converting-between-xml-and-json.html
- XML/JSON Perl Converter http://search.cpan.org/~ken/XML-XML2JSON-0.06/lib/XML/XML2JSON.pm
- IBM's PHP converter http://www.ibm.com/developerworks/library/x-xml2jsonphp
- Java Converter http://www.json.org/javadoc/org/json/XML.html
- Google Code Library https://code.google.com/p/x2js
Mailing list discussions