<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>