<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:#954F72;
text-decoration:underline;}
.MsoChpDefault
{mso-style-type:export-only;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
{page:WordSection1;}
--></style></head><body lang=EN-US link=blue vlink="#954F72"><div class=WordSection1><p class=MsoNormal>Don,</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Waiting for an example of head’s -children in JSON similar to HelloWorldProgramOutput.json, with youir proposed changes.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Thanks,</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>John</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Sent from <a href="https://go.microsoft.com/fwlink/?LinkId=550986">Mail</a> for Windows 10</p><p class=MsoNormal><o:p> </o:p></p><div style='mso-element:para-border-div;border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal style='border:none;padding:0in'><b>From: </b><a href="mailto:yottzumm@gmail.com">John Carlson</a><br><b>Sent: </b>Wednesday, July 24, 2019 10:36 AM<br><b>To: </b><a href="mailto:brutzman@nps.edu">Don Brutzman</a>; <a href="mailto:x3d-public@web3d.org">X3D Graphics public mailing list</a><br><b>Subject: </b>RE: Refinement of X3D JSON Merged with: FW: [x3dom-users] simple X3D-> JSON -> X3DOM, D3.js</p></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Found previous email from Douglas Crockford, included below.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I will proceed with this, as long as you want to include something like:<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>“tag”: “meta”<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>or <o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>“tag”: “unit”<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>or <o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>“tag”: “component”<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>as object field in each JSON object made a child of head. This was similar to my original JSON proposed encoding and others, but using $ for tag like JSON5 for all objects.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Otherwise, I see no way forward except to modify most JSON (JavaScript) string parsers (or write our own exclusive one).<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Please try parsing and generating your proposed JSON in a Java JSON parser/generator. Roundtripping JSON is important too!<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>An example will help!<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Thanks!<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>John<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Sent from <a href="https://go.microsoft.com/fwlink/?LinkId=550986">Mail</a> for Windows 10<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b>From: </b><a href="mailto:douglas@crockford.com">Douglas Crockford</a><br><b>Sent: </b>Monday, February 23, 2015 3:24 PM<br><b>To: </b><a href="mailto:brutzman@nps.edu">Don Brutzman</a>; <a href="mailto:yottzumm@gmail.com">John Carlson</a><br><b>Subject: </b>Re: [x3dom-users] simple X3D -> JSON -> X3DOM, D3.js<o:p></o:p></p></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I recommend failing on duplicate keys.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>On 2015-02-23 1:21 PM, Don Brutzman wrote:<o:p></o:p></p><p class=MsoNormal>> Thanks John.<o:p></o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> Our goal with trying to find a good X3D encoding using JSON is to <o:p></o:p></p><p class=MsoNormal>> support programmers who might want to load scene data into a <o:p></o:p></p><p class=MsoNormal>> javascript program. Our objective is to represent the scene graph <o:p></o:p></p><p class=MsoNormal>> information, no more no less, just like the XML and ClassicVRML and <o:p></o:p></p><p class=MsoNormal>> Compressed Binary programs. How that information is utilized and <o:p></o:p></p><p class=MsoNormal>> adapted by the programmer (or library loader) is up to them.<o:p></o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> Many XML documents have duplicates of elements and attributes, so <o:p></o:p></p><p class=MsoNormal>> trying to create unique keys for each repeated element and attribute <o:p></o:p></p><p class=MsoNormal>> doesn't seem meaningful or round-trippable.<o:p></o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> Mailing list discussion seems to be the best way to proceed, there are <o:p></o:p></p><p class=MsoNormal>> a lot of expert programmers there.<o:p></o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> On 2/20/2015 6:08 PM, John Carlson wrote:<o:p></o:p></p><p class=MsoNormal>>> I found this. It has been discussed at length. <o:p></o:p></p><p class=MsoNormal>>> https://esdiscuss.org/topic/json-duplicate-keys<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> On Fri, Feb 20, 2015 at 7:18 PM, John Carlson <yottzumm@gmail.com <o:p></o:p></p><p class=MsoNormal>>> <mailto:yottzumm@gmail.com>> wrote:<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> And whee, node.js reports nothing. So basically Don, if you <o:p></o:p></p><p class=MsoNormal>>> leave the duplicated JSON object name in, you will be tossing all <o:p></o:p></p><p class=MsoNormal>>> your JavaScript programmers which use standard utilities in node.js <o:p></o:p></p><p class=MsoNormal>>> into a black hole. Here's the final code for node. I will test in a <o:p></o:p></p><p class=MsoNormal>>> browser next:<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> "use strict";<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> var content = '';<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> process.stdin.resume();<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> process.stdin.on('data', function(buf) { content += <o:p></o:p></p><p class=MsoNormal>>> buf.toString(); });<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> process.stdin.on('end', function() {<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> try {<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> console.log(JSON.stringify(JSON.parse(content), null, " "));<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> } catch (e) {<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> console.log(e);<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> }<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> });<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> On Fri, Feb 20, 2015 at 7:05 PM, John Carlson <yottzumm@gmail.com <o:p></o:p></p><p class=MsoNormal>>> <mailto:yottzumm@gmail.com>> wrote:<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> Okay, I figured it out. JavaScript silently ignores <o:p></o:p></p><p class=MsoNormal>>> duplicate keys unless use strict is used.<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> "use strict";<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> try {<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> var json = {"name":"n","name":"v"};<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> console.log(json);<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> } catch (e) {<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> console.log(e);<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> }<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> On Fri, Feb 20, 2015 at 6:23 PM, John Carlson <o:p></o:p></p><p class=MsoNormal>>> <yottzumm@gmail.com <mailto:yottzumm@gmail.com>> wrote:<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> Here is a very simple test case. I am posting to <o:p></o:p></p><p class=MsoNormal>>> stackoverflow. I hope I don't get voted down.<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> try {<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> var json = '{"name":"n","name":"v"}';<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> console.log(json);<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> var jsonout = JSON.stringify(JSON.parse(json));<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> console.log(jsonout);<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> } catch (e) {<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> console.log(e);<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> }<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> On Fri, Feb 20, 2015 at 6:22 PM, John Carlson <o:p></o:p></p><p class=MsoNormal>>> <yottzumm@gmail.com <mailto:yottzumm@gmail.com>> wrote:<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> I just found out that JSON.parse dies silently. <o:p></o:p></p><p class=MsoNormal>>> Here's better code, that still succeeds and removes a Transform. I <o:p></o:p></p><p class=MsoNormal>>> think this is either a problem with the standard, or a problem with <o:p></o:p></p><p class=MsoNormal>>> JSON.stringify or JSON.parse in node.js, or my code, but we better <o:p></o:p></p><p class=MsoNormal>>> fix one of them. Anyone know the authors of node.js and could tap <o:p></o:p></p><p class=MsoNormal>>> into them for not complying with the standard? I'm not saying my code <o:p></o:p></p><p class=MsoNormal>>> is perfect. Should I go to stackoverflow and ask them to fix my code?<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> // Java Style Sheet Language, implementation 2<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> var content = '';<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> // read content into buffer<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> process.stdin.resume();<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> process.stdin.on('data', function(buf) { content += <o:p></o:p></p><p class=MsoNormal>>> buf.toString(); });<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> process.stdin.on('end', function() {<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> try {<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> console.log(JSON.stringify(JSON.parse(content), null, <o:p></o:p></p><p class=MsoNormal>>> " "));<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> } catch (e) {<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> console.log(e);<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> }<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> });<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> Here's an example of running my code with a very <o:p></o:p></p><p class=MsoNormal>>> simple example:<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> $ cat simple.json<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> {<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> "name": "n",<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> "name": "v"<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> }<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> $ node ValidateJSON.js < simple.json<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> {<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> "name": "v"<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> }<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> On Fri, Feb 20, 2015 at 6:03 PM, John Carlson <o:p></o:p></p><p class=MsoNormal>>> <yottzumm@gmail.com <mailto:yottzumm@gmail.com>> wrote:<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> Okay, here's the results! Douglas, I am <o:p></o:p></p><p class=MsoNormal>>> including you, because JSON.parse or JSON.stringify in node.js <o:p></o:p></p><p class=MsoNormal>>> silently eliminate a whole lot of "JSON".<o:p></o:p></p><p class=MsoNormal>>> Or it could be my code. Let's figure out which <o:p></o:p></p><p class=MsoNormal>>> it is.<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> //////////////////////////////////<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> // ValidateJSON.js, which should be runnable in <o:p></o:p></p><p class=MsoNormal>>> any node.js (please point out any bugs):<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> var content = '';<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> // read content into buffer<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> process.stdin.resume();<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> process.stdin.on('data', function(buf) { content <o:p></o:p></p><p class=MsoNormal>>> += buf.toString(); });<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> process.stdin.on('end', function() {<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> console.log(JSON.stringify(JSON.parse(content), null, " "));<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> });<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> //////////////////////////////////////////<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> // INPUT<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> http://coderextreme.net/x3d.json<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> // OUTPUT<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> http://coderextreme.net/roundtrip.json<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> ///////////////////////////////////////////<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> // Running results<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> $ node ValidateJSON.js < x3d.json > roundtrip.json<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> $ grep Transform x3d.json<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> "Transform": [<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> "Transform": [<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> $ grep Transform roundtrip.json<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> "Transform": [<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> Where's the missing Transform? Did my code eat <o:p></o:p></p><p class=MsoNormal>>> it? Did JSON.parse eat it? Did JSON.stringify eat it? did <o:p></o:p></p><p class=MsoNormal>>> console.log eat it?<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> On Fri, Feb 20, 2015 at 4:33 PM, Don Brutzman <o:p></o:p></p><p class=MsoNormal>>> <brutzman@nps.edu <mailto:brutzman@nps.edu>> wrote:<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> As before, your insights are much <o:p></o:p></p><p class=MsoNormal>>> appreciated. Thanks John.<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> It is looking like there may be some <o:p></o:p></p><p class=MsoNormal>>> terminology mismatches? That might be an important cause of <o:p></o:p></p><p class=MsoNormal>>> misunderstanding. Hoping to get clearer.<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> When talking about "name" values, please <o:p></o:p></p><p class=MsoNormal>>> clarify. Are your referring to element and attribute names, or <o:p></o:p></p><p class=MsoNormal>>> DEF/USE ID/IDREF names?<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> In general, we have been trying to create a <o:p></o:p></p><p class=MsoNormal>>> JSON representation for X3D that is round-trippable with any other <o:p></o:p></p><p class=MsoNormal>>> encoding.<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> Not a goal is to create something incorrect <o:p></o:p></p><p class=MsoNormal>>> or unusable. This isn't a marketing activity. So no need for a <o:p></o:p></p><p class=MsoNormal>>> BogusJSON or whatever, there is simply no need for something broken.<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> The X3dToJson.xslt is trying to take an <o:p></o:p></p><p class=MsoNormal>>> XML-based .x3d scene and produce a usable JSON representation. If <o:p></o:p></p><p class=MsoNormal>>> information is lost, and the result can't be written back out as the <o:p></o:p></p><p class=MsoNormal>>> original scene, then an encoding fails the round-trip test.<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> Multiple approaches exist for converting XML <o:p></o:p></p><p class=MsoNormal>>> to JSON. Some were explored and compared on the earlier email <o:p></o:p></p><p class=MsoNormal>>> threads. First one that pops up on today's search is<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> http://www.utilities-online.__info/xmltojson/ <o:p></o:p></p><p class=MsoNormal>>> <http://www.utilities-online.info/xmltojson/><o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> When given the HelloWorld.x3d scene, it <o:p></o:p></p><p class=MsoNormal>>> replies with<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> {<o:p></o:p></p><p class=MsoNormal>>> "X3D": {<o:p></o:p></p><p class=MsoNormal>>> "-profile": "Immersive",<o:p></o:p></p><p class=MsoNormal>>> "-version": "3.3",<o:p></o:p></p><p class=MsoNormal>>> "-xmlns:xsd": <o:p></o:p></p><p class=MsoNormal>>> "http://www.w3.org/2001/__XMLSchema-instance <o:p></o:p></p><p class=MsoNormal>>> <http://www.w3.org/2001/XMLSchema-instance>",<o:p></o:p></p><p class=MsoNormal>>> "-xsd:__noNamespaceSchemaLocation": " <o:p></o:p></p><p class=MsoNormal>>> http://www.web3d.org/__specifications/x3d-3.3.xsd <o:p></o:p></p><p class=MsoNormal>>> <http://www.web3d.org/specifications/x3d-3.3.xsd> ",<o:p></o:p></p><p class=MsoNormal>>> "head": {<o:p></o:p></p><p class=MsoNormal>>> "meta": [<o:p></o:p></p><p class=MsoNormal>>> {<o:p></o:p></p><p class=MsoNormal>>> "-name": "title",<o:p></o:p></p><p class=MsoNormal>>> "-content": "HelloWorld.x3d"<o:p></o:p></p><p class=MsoNormal>>> },<o:p></o:p></p><p class=MsoNormal>>> {<o:p></o:p></p><p class=MsoNormal>>> "-name": "description",<o:p></o:p></p><p class=MsoNormal>>> "-content": "Simple X3D scene <o:p></o:p></p><p class=MsoNormal>>> example: Hello World!"<o:p></o:p></p><p class=MsoNormal>>> },<o:p></o:p></p><p class=MsoNormal>>> {<o:p></o:p></p><p class=MsoNormal>>> "-name": "created",<o:p></o:p></p><p class=MsoNormal>>> "-content": "30 October 2000"<o:p></o:p></p><p class=MsoNormal>>> },<o:p></o:p></p><p class=MsoNormal>>> {<o:p></o:p></p><p class=MsoNormal>>> "-name": "modified",<o:p></o:p></p><p class=MsoNormal>>> "-content": "23 November 2014"<o:p></o:p></p><p class=MsoNormal>>> },<o:p></o:p></p><p class=MsoNormal>>> {<o:p></o:p></p><p class=MsoNormal>>> "-name": "creator",<o:p></o:p></p><p class=MsoNormal>>> "-content": "Don Brutzman"<o:p></o:p></p><p class=MsoNormal>>> },<o:p></o:p></p><p class=MsoNormal>>> {<o:p></o:p></p><p class=MsoNormal>>> "-name": "Image",<o:p></o:p></p><p class=MsoNormal>>> "-content": "HelloWorld.tall.png"<o:p></o:p></p><p class=MsoNormal>>> },<o:p></o:p></p><p class=MsoNormal>>> {<o:p></o:p></p><p class=MsoNormal>>> "-name": "reference",<o:p></o:p></p><p class=MsoNormal>>> "-content": " <o:p></o:p></p><p class=MsoNormal>>> http://en.wikipedia.org/wiki/__Hello_world <o:p></o:p></p><p class=MsoNormal>>> <http://en.wikipedia.org/wiki/Hello_world> "<o:p></o:p></p><p class=MsoNormal>>> },<o:p></o:p></p><p class=MsoNormal>>> {<o:p></o:p></p><p class=MsoNormal>>> "-name": "reference",<o:p></o:p></p><p class=MsoNormal>>> "-content": " <o:p></o:p></p><p class=MsoNormal>>> en.wikipedia.org/wiki/Hello#\ <o:p></o:p></p><p class=MsoNormal>>> <http://en.wikipedia.org/wiki/Hello#%5C>"__Hello,_World\"_computer___program <o:p></o:p></p><p class=MsoNormal>>> "<o:p></o:p></p><p class=MsoNormal>>> },<o:p></o:p></p><p class=MsoNormal>>> {<o:p></o:p></p><p class=MsoNormal>>> "-name": "reference",<o:p></o:p></p><p class=MsoNormal>>> "-content": " <o:p></o:p></p><p class=MsoNormal>>> http://en.wikibooks.org/w/__index.php?title=Computer___Programming/Hello_world <o:p></o:p></p><p class=MsoNormal>>> <http://en.wikibooks.org/w/index.php?title=Computer_Programming/Hello_world> <o:p></o:p></p><p class=MsoNormal>>> "<o:p></o:p></p><p class=MsoNormal>>> },<o:p></o:p></p><p class=MsoNormal>>> {<o:p></o:p></p><p class=MsoNormal>>> "-name": "reference",<o:p></o:p></p><p class=MsoNormal>>> "-content": " <o:p></o:p></p><p class=MsoNormal>>> http://www.HelloWorldExample.__net <http://www.HelloWorldExample.net> "<o:p></o:p></p><p class=MsoNormal>>> },<o:p></o:p></p><p class=MsoNormal>>> {<o:p></o:p></p><p class=MsoNormal>>> "-name": "reference",<o:p></o:p></p><p class=MsoNormal>>> "-content": " http://www.web3D.org "<o:p></o:p></p><p class=MsoNormal>>> },<o:p></o:p></p><p class=MsoNormal>>> {<o:p></o:p></p><p class=MsoNormal>>> "-name": "reference",<o:p></o:p></p><p class=MsoNormal>>> "-content": " <o:p></o:p></p><p class=MsoNormal>>> http://www.web3d.org/realtime-__3d/news/internationalization-__x3d <o:p></o:p></p><p class=MsoNormal>>> <http://www.web3d.org/realtime-3d/news/internationalization-x3d> "<o:p></o:p></p><p class=MsoNormal>>> },<o:p></o:p></p><p class=MsoNormal>>> {<o:p></o:p></p><p class=MsoNormal>>> "-name": "reference",<o:p></o:p></p><p class=MsoNormal>>> "-content": " <o:p></o:p></p><p class=MsoNormal>>> http://www.web3d.org/x3d/__content/examples/HelloWorld.__x3d <o:p></o:p></p><p class=MsoNormal>>> <http://www.web3d.org/x3d/content/examples/HelloWorld.x3d> "<o:p></o:p></p><p class=MsoNormal>>> },<o:p></o:p></p><p class=MsoNormal>>> {<o:p></o:p></p><p class=MsoNormal>>> "-name": "reference",<o:p></o:p></p><p class=MsoNormal>>> "-content": " <o:p></o:p></p><p class=MsoNormal>>> http://X3dGraphics.com/__examples/__X3dForAdvancedModeling/__HelloWorldScenes <o:p></o:p></p><p class=MsoNormal>>> <http://X3dGraphics.com/examples/X3dForAdvancedModeling/HelloWorldScenes> <o:p></o:p></p><p class=MsoNormal>>> "<o:p></o:p></p><p class=MsoNormal>>> },<o:p></o:p></p><p class=MsoNormal>>> {<o:p></o:p></p><p class=MsoNormal>>> "-name": "identifier",<o:p></o:p></p><p class=MsoNormal>>> "-content": " <o:p></o:p></p><p class=MsoNormal>>> http://X3dGraphics.com/__examples/X3dForWebAuthors/__Chapter01-TechnicalOverview/__HelloWorld.x3d <o:p></o:p></p><p class=MsoNormal>>> <http://X3dGraphics.com/examples/X3dForWebAuthors/Chapter01-TechnicalOverview/HelloWorld.x3d> <o:p></o:p></p><p class=MsoNormal>>> "<o:p></o:p></p><p class=MsoNormal>>> },<o:p></o:p></p><p class=MsoNormal>>> {<o:p></o:p></p><p class=MsoNormal>>> "-name": "license",<o:p></o:p></p><p class=MsoNormal>>> "-content": " <o:p></o:p></p><p class=MsoNormal>>> http://www.web3d.org/x3d/__content/examples/license.html <o:p></o:p></p><p class=MsoNormal>>> <http://www.web3d.org/x3d/content/examples/license.html> "<o:p></o:p></p><p class=MsoNormal>>> },<o:p></o:p></p><p class=MsoNormal>>> {<o:p></o:p></p><p class=MsoNormal>>> "-name": "generator",<o:p></o:p></p><p class=MsoNormal>>> "-content": "X3D-Edit 3.3, <o:p></o:p></p><p class=MsoNormal>>> https://savage.nps.edu/X3D-__Edit <https://savage.nps.edu/X3D-Edit>"<o:p></o:p></p><p class=MsoNormal>>> },<o:p></o:p></p><p class=MsoNormal>>> {<o:p></o:p></p><p class=MsoNormal>>> "-name": "reference",<o:p></o:p></p><p class=MsoNormal>>> "-content": "HelloWorld.wrl"<o:p></o:p></p><p class=MsoNormal>>> },<o:p></o:p></p><p class=MsoNormal>>> {<o:p></o:p></p><p class=MsoNormal>>> "-name": "reference",<o:p></o:p></p><p class=MsoNormal>>> "-content": "HelloWorld.x3dv"<o:p></o:p></p><p class=MsoNormal>>> },<o:p></o:p></p><p class=MsoNormal>>> {<o:p></o:p></p><p class=MsoNormal>>> "-name": "reference",<o:p></o:p></p><p class=MsoNormal>>> "-content": "HelloWorld.x3db"<o:p></o:p></p><p class=MsoNormal>>> },<o:p></o:p></p><p class=MsoNormal>>> {<o:p></o:p></p><p class=MsoNormal>>> "-name": "reference",<o:p></o:p></p><p class=MsoNormal>>> "-content": "HelloWorld.xhtml"<o:p></o:p></p><p class=MsoNormal>>> },<o:p></o:p></p><p class=MsoNormal>>> {<o:p></o:p></p><p class=MsoNormal>>> "-name": "reference",<o:p></o:p></p><p class=MsoNormal>>> "-content": "HelloWorld.json"<o:p></o:p></p><p class=MsoNormal>>> }<o:p></o:p></p><p class=MsoNormal>>> ]<o:p></o:p></p><p class=MsoNormal>>> },<o:p></o:p></p><p class=MsoNormal>>> "Scene": {<o:p></o:p></p><p class=MsoNormal>>> "Group": {<o:p></o:p></p><p class=MsoNormal>>> "Viewpoint": {<o:p></o:p></p><p class=MsoNormal>>> "-DEF": "ViewUpClose",<o:p></o:p></p><p class=MsoNormal>>> "-centerOfRotation": "0 -1 0",<o:p></o:p></p><p class=MsoNormal>>> "-description": "Hello world!",<o:p></o:p></p><p class=MsoNormal>>> "-position": "0 -1 7"<o:p></o:p></p><p class=MsoNormal>>> },<o:p></o:p></p><p class=MsoNormal>>> "Transform": [<o:p></o:p></p><p class=MsoNormal>>> {<o:p></o:p></p><p class=MsoNormal>>> "-rotation": "0 1 0 3",<o:p></o:p></p><p class=MsoNormal>>> "Shape": {<o:p></o:p></p><p class=MsoNormal>>> "Appearance": {<o:p></o:p></p><p class=MsoNormal>>> "Material": {<o:p></o:p></p><p class=MsoNormal>>> "-DEF": "MaterialLightBlue",<o:p></o:p></p><p class=MsoNormal>>> "-diffuseColor": "0.1 0.5 1"<o:p></o:p></p><p class=MsoNormal>>> },<o:p></o:p></p><p class=MsoNormal>>> "ImageTexture": {<o:p></o:p></p><p class=MsoNormal>>> "-DEF": <o:p></o:p></p><p class=MsoNormal>>> "ImageCloudlessEarth",<o:p></o:p></p><p class=MsoNormal>>> "-url": " <o:p></o:p></p><p class=MsoNormal>>> \"earth-topo.png\" \"earth-topo.jpg\" \"earth-topo-small.gif\" <o:p></o:p></p><p class=MsoNormal>>> \"http://www.web3d.org/x3d/__content/examples/Basic/earth-__topo.png\ <o:p></o:p></p><p class=MsoNormal>>> <http://www.web3d.org/x3d/content/examples/Basic/earth-topo.png%5C>" <o:p></o:p></p><p class=MsoNormal>>> \"http://www.web3d.org/x3d/__content/examples/Basic/earth-__topo.jpg\ <o:p></o:p></p><p class=MsoNormal>>> <http://www.web3d.org/x3d/content/examples/Basic/earth-topo.jpg%5C>" <o:p></o:p></p><p class=MsoNormal>>> \"http://www.web3d.org/x3d/__content/examples/Basic/earth-__topo-small.gif\ <o:p></o:p></p><p class=MsoNormal>>> <http://www.web3d.org/x3d/content/examples/Basic/earth-topo-small.gif%5C>" <o:p></o:p></p><p class=MsoNormal>>> "<o:p></o:p></p><p class=MsoNormal>>> }<o:p></o:p></p><p class=MsoNormal>>> }<o:p></o:p></p><p class=MsoNormal>>> }<o:p></o:p></p><p class=MsoNormal>>> },<o:p></o:p></p><p class=MsoNormal>>> {<o:p></o:p></p><p class=MsoNormal>>> "-translation": "0 -2 0",<o:p></o:p></p><p class=MsoNormal>>> "Shape": {<o:p></o:p></p><p class=MsoNormal>>> "Text": {<o:p></o:p></p><p class=MsoNormal>>> "-DEF": "TextMessage",<o:p></o:p></p><p class=MsoNormal>>> "-string": "\"Hello\" <o:p></o:p></p><p class=MsoNormal>>> \"world!\"",<o:p></o:p></p><p class=MsoNormal>>> "FontStyle": { "-justify": <o:p></o:p></p><p class=MsoNormal>>> "\"MIDDLE\" \"MIDDLE\"" }<o:p></o:p></p><p class=MsoNormal>>> },<o:p></o:p></p><p class=MsoNormal>>> "Appearance": {<o:p></o:p></p><p class=MsoNormal>>> "Material": { "-USE": <o:p></o:p></p><p class=MsoNormal>>> "MaterialLightBlue" }<o:p></o:p></p><p class=MsoNormal>>> }<o:p></o:p></p><p class=MsoNormal>>> }<o:p></o:p></p><p class=MsoNormal>>> }<o:p></o:p></p><p class=MsoNormal>>> ]<o:p></o:p></p><p class=MsoNormal>>> }<o:p></o:p></p><p class=MsoNormal>>> }<o:p></o:p></p><p class=MsoNormal>>> }<o:p></o:p></p><p class=MsoNormal>>> }<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> This varies from the current HelloWorld.json <o:p></o:p></p><p class=MsoNormal>>> by including X3D/head/meta* tags, using a different attribute prefix <o:p></o:p></p><p class=MsoNormal>>> (- vice @), and dropping comments and inclusion/exclusion of default <o:p></o:p></p><p class=MsoNormal>>> attribute values.<o:p></o:p></p><p class=MsoNormal>>> http://www.web3d.org/x3d/__content/examples/HelloWorld.__json <o:p></o:p></p><p class=MsoNormal>>> <http://www.web3d.org/x3d/content/examples/HelloWorld.json><o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> So is the XML -> JSON conversion from <o:p></o:p></p><p class=MsoNormal>>> http://www.utilities-online.__info/xmltojson <o:p></o:p></p><p class=MsoNormal>>> <http://www.utilities-online.info/xmltojson> producing illegal JSON too?<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> Looking forward to continued scrutiny and <o:p></o:p></p><p class=MsoNormal>>> improved understanding.<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> On 2/20/2015 11:15 AM, John Carlson wrote:<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> On Feb 19, 2015 12:21 AM, <o:p></o:p></p><p class=MsoNormal>>> "John Carlson" <yottzumm@gmail.com <mailto:yottzumm@gmail.com> <o:p></o:p></p><p class=MsoNormal>>> <mailto:yottzumm@gmail.com <mailto:yottzumm@gmail.com>> <o:p></o:p></p><p class=MsoNormal>>> <mailto:yottzumm@gmail.com <mailto:yottzumm@gmail.com> <o:p></o:p></p><p class=MsoNormal>>> <mailto:yottzumm@gmail.com <mailto:yottzumm@gmail.com>>>> wrote:<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> How does the X3D JSON <o:p></o:p></p><p class=MsoNormal>>> encoding handle two Shapes or Transforms or Groups of the same type <o:p></o:p></p><p class=MsoNormal>>> at the same depth in the tree with the same parent? Do you modify the <o:p></o:p></p><p class=MsoNormal>>> tree structure significantly? I'm not that familiar with the <o:p></o:p></p><p class=MsoNormal>>> schema. I just know you're going to have to do something else in <o:p></o:p></p><p class=MsoNormal>>> JavaScript, even if your JSON parses and works. You can't use the <o:p></o:p></p><p class=MsoNormal>>> JSON directly as Javascript. JSON != JavaScript. We desire a <o:p></o:p></p><p class=MsoNormal>>> *JavaScript* and JSON encoding.<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> This is a crucial point and I'm <o:p></o:p></p><p class=MsoNormal>>> really glad you are raising it.<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> You're right it's a crucial point. It's <o:p></o:p></p><p class=MsoNormal>>> so crucial I brought it up with Douglas Crockford. He said the <o:p></o:p></p><p class=MsoNormal>>> standard did not need to be changed. What's important is how the <o:p></o:p></p><p class=MsoNormal>>> standard is *used*. Say I'm in Java, and I'm reading in a A JSON <o:p></o:p></p><p class=MsoNormal>>> object. What happens if I see a name in and object twice? What do I <o:p></o:p></p><p class=MsoNormal>>> do? Do I instantly change my attribute to a list? How? Must I use a <o:p></o:p></p><p class=MsoNormal>>> list for every single attribute because that's what is allowed by <o:p></o:p></p><p class=MsoNormal>>> JSON? No, is the answer. JSON doesn't specify a set of name/list <o:p></o:p></p><p class=MsoNormal>>> pairs, it specifies name/value pairs. JSON objects are meant to be <o:p></o:p></p><p class=MsoNormal>>> associative arrays or struct or record as is mentioned in the <o:p></o:p></p><p class=MsoNormal>>> standard. I asked Douglas to change the standard so names appeared <o:p></o:p></p><p class=MsoNormal>>> only once in an object. He demurred. The thing is, it's the *use* <o:p></o:p></p><p class=MsoNormal>>> that matters, and you're going to pull a lot of programmer's hair out <o:p></o:p></p><p class=MsoNormal>>> and stick their fingers in electrical sockets if you continue to use <o:p></o:p></p><p class=MsoNormal>>> names more than once in a JSON object. It<o:p></o:p></p><p class=MsoNormal>>> violates the spirit of the<o:p></o:p></p><p class=MsoNormal>>> standard if not the letter.<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> If we think about use cases for <o:p></o:p></p><p class=MsoNormal>>> Javascript applications loading X3D models, I think they are most <o:p></o:p></p><p class=MsoNormal>>> interested in reusing geometry for their own nefarious/magnificent <o:p></o:p></p><p class=MsoNormal>>> purposes. Javascript programmers are likely less interested in X3D <o:p></o:p></p><p class=MsoNormal>>> event models, Scripts, protos and whatnot. Library loaders might <o:p></o:p></p><p class=MsoNormal>>> convert such things to match their paradigm, or might also ignore <o:p></o:p></p><p class=MsoNormal>>> non-geometry nodes completely.<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> I guess what matters ultimately is that <o:p></o:p></p><p class=MsoNormal>>> JSON parsers must reject names appearing in objects more that once. <o:p></o:p></p><p class=MsoNormal>>> Also, please do not call your encoding JSON because it<o:p></o:p></p><p class=MsoNormal>>> just *isn't*. If we must, programmers <o:p></o:p></p><p class=MsoNormal>>> will move away from your JSON encoding, and use their own, as I have <o:p></o:p></p><p class=MsoNormal>>> already done. All I'm actually doing is to asking you to make an X3D <o:p></o:p></p><p class=MsoNormal>>> JSON standard which makes good sense, and if not, don't call it <o:p></o:p></p><p class=MsoNormal>>> JSON. FJSON or Fake JSON might be more appropriate.<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> Rephrase, Let JSON be JSON (a subset <o:p></o:p></p><p class=MsoNormal>>> that is good for data objects) and Javascript be Javascript (a <o:p></o:p></p><p class=MsoNormal>>> full-blown programming language).<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> Not trying to downplay or avoid <o:p></o:p></p><p class=MsoNormal>>> anything, just looking at what the most common uses of an X3D scene <o:p></o:p></p><p class=MsoNormal>>> encoded as JSON might be.<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> Such an idea actually brings us full <o:p></o:p></p><p class=MsoNormal>>> circle to the design premise of all the scene encodings (XML .x3d, <o:p></o:p></p><p class=MsoNormal>>> Classic VRML .x3dv, binary .x3db) which is to completely/compatibly <o:p></o:p></p><p class=MsoNormal>>> represent an X3D scene, period.<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> If we achieve that with JSON, making <o:p></o:p></p><p class=MsoNormal>>> common geometry constructs easy for programmers to access, then great <o:p></o:p></p><p class=MsoNormal>>> they will do so. If we also try to tell them "For Advanced Graphics <o:p></o:p></p><p class=MsoNormal>>> Using X3D JSON You Must Program Your Javascript Application This Way" <o:p></o:p></p><p class=MsoNormal>>> they will laugh.<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> Viva la difference, programming <o:p></o:p></p><p class=MsoNormal>>> styles and practices will always vary and evolve. Whatever works.<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> Yes, whatever works. Names or field <o:p></o:p></p><p class=MsoNormal>>> slots appearing in an object more than once in a struct or record <o:p></o:p></p><p class=MsoNormal>>> don't work in programmers' minds. You will force every value to be a <o:p></o:p></p><p class=MsoNormal>>> list in their minds. Which may be what you intend. If so, then <o:p></o:p></p><p class=MsoNormal>>> explicitly do that in your JSON output (my restructuring in my <o:p></o:p></p><p class=MsoNormal>>> previous message). Don't force the programmer into cognitive <o:p></o:p></p><p class=MsoNormal>>> overload. Please only have names appearing once in your objects, I <o:p></o:p></p><p class=MsoNormal>>> beg you desperately, if you want your X3D JSON standard to be <o:p></o:p></p><p class=MsoNormal>>> relevant. If not, then call it X3DON not *JS*ON<o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> all the best, Don<o:p></o:p></p><p class=MsoNormal>>> --<o:p></o:p></p><p class=MsoNormal>>> Don Brutzman Naval Postgraduate School, Code <o:p></o:p></p><p class=MsoNormal>>> USW/Br brutzman@nps.edu <mailto:brutzman@nps.edu><o:p></o:p></p><p class=MsoNormal>>> Watkins 270, MOVES Institute, Monterey CA <o:p></o:p></p><p class=MsoNormal>>> 93943-5000 USA +1.831.656.2149 <tel:%2B1.831.656.2149><o:p></o:p></p><p class=MsoNormal>>> X3D graphics, virtual worlds, navy robotics <o:p></o:p></p><p class=MsoNormal>>> http://faculty.nps.edu/__brutzman <http://faculty.nps.edu/brutzman><o:p></o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>><o:p> </o:p></p><p class=MsoNormal>> all the best, Don<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p></div></body></html>