<div dir="auto">Here’s Jin Blink to dissect:  <div style="font-size:inherit"><a href="https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/data/JinBlink.x3d" style="font-size:inherit">https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/data/JinBlink.x3d</a></div><div style="font-size:inherit" dir="auto"><br></div><div style="font-size:inherit" dir="auto">John</div></div><div><div class="gmail_quote gmail_quote_container"><div dir="ltr" class="gmail_attr">On Fri, Mar 27, 2026 at 10:47 AM Don Brutzman <<a href="mailto:don.brutzman@gmail.com">don.brutzman@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Please keep things simple.  An X3D model is either valid or not.</div><div><br></div><div dir="auto">An X3D JSON model has limited validation capabilities on its own, namely jsonlint to confirm that it is well formed.</div><div><br></div><div dir="auto"> An excellent test of any converters is whether round-trip conversion is possible.  If information is lost or incorrectly structured, then that round-trip test reveals that something somewhere didn't work.  Further sleuthing and corrections are then appropriate for further work.</div><div><br></div><div>When XML encoding is part of round-trip testing, then immense set of quality assurance diagnostics are available.</div><div><br></div><div>Exceedingly long conversion chains might reveal a difficulty, but they are often confusing and unhelpful for precise debugging and correction.</div><div><br></div><div>Recommend working on small examples, one at a time.  That way any conversion flaws can be fixed, one at a time.  Step by step.</div><div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div style="color:rgb(34,34,34)"><font face="monospace"><br></font></div><div style="color:rgb(34,34,34)"><font face="monospace">all the best, Don</font></div><div style="color:rgb(34,34,34)"><font face="monospace">-- </font></div><div style="color:rgb(34,34,34)"><font face="monospace">X3D Graphics, Maritime Robotics, Distributed Simulation</font></div><div style="color:rgb(34,34,34)"><font face="monospace">Relative Motion Consulting  <a href="https://RelativeMotion.info" target="_blank">https://RelativeMotion.info</a></font></div></div></div></div><br></div><br><div class="gmail_quote"></div><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Mar 27, 2026 at 8:20 AM John Carlson via x3d-public <<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a>> wrote:<br></div></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"></blockquote></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="auto">To be clear:</div><div dir="auto"><br></div><div dir="auto">.x3d->x3d-tidy->.x3dj->X3DJSONLD->DOM->Serializer->Java, etc.->X3DJSAIL/stylesheets->XML, JSON, (more?) probably won’t work in many cases, due to DEF/USE reordering within SFNode field reordering.  I am not saying the .x3dj files are bad files.</div><div dir="auto"><br></div><div><div style="font-size:inherit" dir="auto"><span style="color:rgb(0,0,0);font-family:-apple-system,sans-serif;font-size:inherit;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;float:none;display:inline">x3d->X3dToJson.xslt->.json->X3DJSONLD->DOM->Serializer->Java, etc.->X</span><span style="font-family:-apple-system,sans-serif;font-size:inherit">3DJSAIL/stylesheets->XML, JSON, (more?) probably will work.</span></div><div style="font-size:inherit" dir="auto"><span style="font-family:-apple-system,sans-serif;font-size:inherit"><br></span></div><div style="font-size:inherit" dir="auto">Using Canonical form might solve this issue.  But what is canonical JSON?</div><div style="font-size:inherit" dir="auto"><br></div><div style="font-size:inherit" dir="auto">Specific ordering issues that that have come up include head statements, HAnimHumanoid and HAnimSegment nodes.</div><div style="font-size:inherit" dir="auto"><br></div><div style="font-size:inherit" dir="auto">Please try to ensure that the authors ordering is preserved, or use canonical form.</div><div style="font-size:inherit" dir="auto"><br></div><div style="font-size:inherit" dir="auto">Note that X3DJSONLD *should* act like a pass through.  But further work to achieve canonical form may be desired.</div><div style="font-size:inherit" dir="auto"><br></div><div style="font-size:inherit" dir="auto">X3DJSAIL/stylesheets should stick with canonical form, if it uses it, but warn of potential DEF/USE reordering, if it can’t handle DEF/USE reordering under canonicalization.</div><div style="font-size:inherit" dir="auto"><br></div><div style="font-size:inherit" dir="auto">x3d-tidy should also stick with canonical form, or not modify canonical form or alternatively, author’s intent.</div><div style="font-size:inherit" dir="auto"><br></div><div style="font-size:inherit" dir="auto">Does this seem reasonable?</div><div style="font-size:inherit" dir="auto"><br></div><div style="font-size:inherit" dir="auto"><span style="font-size:inherit;font-family:-apple-system,sans-serif">John</span><br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
</blockquote></div></div></blockquote></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
_______________________________________________<br>
x3d-public mailing list<br>
<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a><br>
<a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org" rel="noreferrer" target="_blank">http://web3d.org/mailman/listinfo/x3d-public_web3d.org</a><br>
</blockquote></div>
</blockquote></div></div>