<div><div dir="auto">I would love to contribute to the JSON standard now that I am a member again. I just don’t know about my wordsmithing skills, so people will have to improve what I write.</div><div dir="auto"><br></div><div dir="auto">The feature I am showing in @prantlf/jsonlint is the ability to use JSON schema. Other jsonlint’s I am aware of do not use JSON schema, so they are simply like JSON.parse() in JavaScript with error reporting. What this means is if you have a node that isn’t an X3D node in JSON, no error will be reported, possibly leading to constructors that weren’t meant to be called, like Function, to name a potentially dangerous one. <span style="font-family:-apple-system,sans-serif;font-size:inherit">Recent code related to Maya was revealed to access globals() to construct a class.</span></div></div><div dir="auto"><br></div><div dir="auto">This is why JSON Schema, XML schema (on JSON), a factory pattern, a set of node names to check against, an API like X_ITE, X3DOM, X3DJSAIL or Castle is of upmost concern, in mildly conservative cases. APIs can have a wide variety of treatment, with eval being common in some, it’s not wise to just use a linter. </div><div dir="auto"><br></div><div dir="auto">I welcome Altova XMLSpy and Liquid XML. OxygenXML might be another. Some have more means than others. XML schema can be employed for those who can’t afford a commercial schema and don’t want to use my JSON schema. I recommend web3d invest in the XML schema solution for JSON documents before proceeding with JSON Schema, realizing JSON schema has things that XML schema doesn’t and vica versa. I have also investigated other XML schema to JSON schema solutions, and X3D JSON appears to be a special case.</div><div dir="auto"><br></div><div dir="auto">There’s no problem with just typing constructors hardcoded in your Java code, that’s validated by the compiler/interpreter. The problem is treating data like code.</div><div dir="auto"><br></div><div dir="auto">Thanks,</div><div dir="auto"><br></div><div dir="auto">John </div><div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Jan 4, 2026 at 11:30 AM Don Brutzman <<a href="mailto:don.brutzman@gmail.com" target="_blank">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 dir="ltr"><div dir="ltr"><div>First off, for clarity, there is no official X3D JSON Schema yet.</div><div><br></div><div>Next, the X3D Example Archives provide a jsonlint link via <a href="http://jsonlint.com" target="_blank">jsonlint.com</a> for each of the models. For instance,</div><div><ul><li>X3D Example Archives: X3D4WA, X3D for Web Authors, Chapter 03 Grouping, Group Animated</li><li>Example for Group node, with animated color for the Sphere</li><li><a href="https://www.web3d.org/x3d/content/examples/X3dForWebAuthors/Chapter03Grouping/GroupAnimatedIndex.html" target="_blank">https://www.web3d.org/x3d/content/examples/X3dForWebAuthors/Chapter03Grouping/GroupAnimatedIndex.html</a></li><li>"
<a title="JavaScript Object Notation (JSON) encoding of X3D model" href="https://www.web3d.org/x3d/content/examples/X3dForWebAuthors/Chapter03Grouping/GroupAnimated.json" style="font-family:"Times New Roman";font-size:medium;text-align:-webkit-center" target="_blank">.json</a><span style="color:rgb(0,0,0);font-family:"Times New Roman";font-size:medium;text-align:-webkit-center"> (</span><a title="jsonlint validation" href="https://jsonlint.com/?url=https://www.web3d.org/x3d/content/examples/X3dForWebAuthors/Chapter03Grouping/GroupAnimated.json" style="font-family:"Times New Roman";font-size:medium;text-align:-webkit-center" target="_blank">check</a><span style="color:rgb(0,0,0);font-family:"Times New Roman";font-size:medium;text-align:-webkit-center">)</span> " (see blue highlight in image)</li><li><a href="https://jsonlint.com/?url=https://www.web3d.org/x3d/content/examples/X3dForWebAuthors/Chapter03Grouping/GroupAnimated.json" target="_blank">https://jsonlint.com/?url=https://www.web3d.org/x3d/content/examples/X3dForWebAuthors/Chapter03Grouping/GroupAnimated.json</a></li><li>"
<span style="color:rgb(21,128,61);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:medium;background-color:rgb(220,252,231)">JSON is valid!</span> " </li></ul><div><img src="cid:ii_mk005i8u0" alt="image.png" style="width:932px;max-width:100%"><br></div></div><div><div dir="ltr" class="gmail_signature"><div dir="ltr"><div style="color:rgb(34,34,34)"><font face="arial, sans-serif"><br></font></div><div style="color:rgb(34,34,34)"><font face="arial, sans-serif">The build scripts for the example archives also use </font></div><div style="color:rgb(34,34,34)"><ul><li><font face="arial, sans-serif">Google Code Archive: </font>jslint4java</li><li><a href="https://code.google.com/archive/p/jslint4java/" target="_blank">https://code.google.com/archive/p/jslint4java/</a></li><li>example console output:</li></ul><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><font face="monospace">C:\x3d-code\<a href="http://www.web3d.org" target="_blank">www.web3d.org</a>\x3d\content\examples\X3dForWebAuthors/Chapter03Grouping//GroupAnimated.json validation checking with jslint<br>C:\x3d-code\<a href="http://www.web3d.org" target="_blank">www.web3d.org</a>\x3d\content\examples\X3dForWebAuthors/Chapter03Grouping//GroupAnimated.json validation checking with json-schema-validator<br>... does not support latest JSON Schema, this test is not yet usable</font></blockquote><div><br></div><div>So I think we have good coverage of jsonlint for the examples archive.</div><div><br></div><div>Our best description for how to use X3D JSON can be found at</div><div><ul><li><b>X3D to JSON Stylesheet Converter</b></li><li>The X3D to JSON stylesheet converts .x3d XML to .json, supporting the forthcoming JSON Encoding for X3D Graphics.</li><li><a href="https://www.web3d.org/x3d/stylesheets/X3dToJson.html" target="_blank">https://www.web3d.org/x3d/stylesheets/X3dToJson.html</a></li></ul></div><div>Next, looking ahead: later this year am expecting we will look at updating and autogenerating the X3D JSON Schema from X3DUOM using best practices. Although JSON Schema was never standardized via IETF RFC, usage seems fairly common these days. This can be an informative annex in upcoming X3D JSON Encoding ISO/IEC 19776-5:202x specification. Using x3d-public mailing list, am expecting we will have at least three design patterns to consider:</div><div><ol><li>your best effort for JSON schema</li><li>Altova XMLSpy, XML schema converted to JSON schema</li><li>Liquid XML, XML schema converted to JSON schema</li><li>any other design patterns that are offered</li></ol><div>It certainly will be interesting to have an X3D JSON draft standard and some recommendable form of X3D JSON validation available. Thanks for leading the way in this direction.</div><div><br></div><div>Have fun with X3D JSON! 😀</div></div></div><div style="color:rgb(34,34,34)"><font face="arial, sans-serif"><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 dir="ltr" class="gmail_attr">On Sun, Jan 4, 2026 at 6:39 AM John Carlson via X3D-Ecosystem <<a href="mailto:x3d-ecosystem@web3d.org" target="_blank">x3d-ecosystem@web3d.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div style="font-size:inherit"><pre style="white-space:pre-wrap;color:rgb(49,49,49);font-size:inherit;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;word-spacing:1px;text-decoration:none;font-family:monospace" dir="auto"><code style="font-family:monospace;font-size:1rem">If you use jsonlint to validate JSON, you may get this error:</code></pre><pre style="white-space:pre-wrap;color:rgb(49,49,49);font-size:inherit;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;word-spacing:1px;text-decoration:none;font-family:monospace" dir="auto"><span style="font-size:1rem">echo "{}" | jsonlint -V x3d-4.0-JSONSchema.json -e draft-2020-12</span><br></pre><pre style="white-space:pre-wrap;color:rgb(49,49,49);font-size:inherit;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;word-spacing:1px;text-decoration:none;font-family:monospace" dir="auto"><code style="font-family:monospace;font-size:1rem">File: <stdin>
Loading the JSON Schema failed:
Compiling the JSON Schema failed.
strict mode: unknown keyword: "x-orderOf"</code></pre><pre style="white-space:pre-wrap;color:rgb(49,49,49);font-size:inherit;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;word-spacing:1px;text-decoration:none;font-family:monospace" dir="auto"><code style="font-family:monospace;font-size:1rem"><br></code></pre><pre style="white-space:pre-wrap;color:rgb(49,49,49);font-size:inherit;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;word-spacing:1px;text-decoration:none;font-family:monospace" dir="auto"><code style="font-family:monospace;font-size:1rem">I have just become aware of this.</code></pre><pre style="white-space:pre-wrap;color:rgb(49,49,49);font-size:inherit;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;word-spacing:1px;text-decoration:none;font-family:monospace" dir="auto"><code style="font-family:monospace;font-size:1rem"><br></code></pre><pre style="white-space:pre-wrap;color:rgb(49,49,49);font-size:inherit;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;word-spacing:1px;text-decoration:none;font-family:monospace" dir="auto"><code style="font-family:monospace;font-size:1rem">X3dvalidate avoids this by passing { strict: false } to the Ajv2020 constructor.</code></pre><pre style="white-space:pre-wrap;color:rgb(49,49,49);font-size:inherit;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;word-spacing:1px;text-decoration:none;font-family:monospace" dir="auto"><code style="font-family:monospace;font-size:1rem"><br></code></pre><pre style="white-space:pre-wrap;color:rgb(49,49,49);font-size:inherit;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;word-spacing:1px;text-decoration:none;font-family:monospace" dir="auto"><code style="font-family:monospace;font-size:1rem">So your choices are use x3dvalidate, modify the schema, or modify jsonlint.</code></pre><pre style="white-space:pre-wrap;color:rgb(49,49,49);font-size:inherit;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;word-spacing:1px;text-decoration:none;font-family:monospace" dir="auto"><code style="font-family:monospace;font-size:1rem"><br></code></pre><pre style="white-space:pre-wrap;color:rgb(49,49,49);font-size:inherit;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;word-spacing:1px;text-decoration:none;font-family:monospace" dir="auto"><code style="font-family:monospace;font-size:1rem">If someone wants me to do a pull request for jsonlint, I can look into it, but I feel the ajv-formats2019 will need to be added as well.</code></pre><pre style="white-space:pre-wrap;color:rgb(49,49,49);font-size:inherit;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;word-spacing:1px;text-decoration:none;font-family:monospace" dir="auto"><code style="font-family:monospace;font-size:1rem"><br></code></pre><pre style="white-space:pre-wrap;color:rgb(49,49,49);font-size:inherit;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;word-spacing:1px;text-decoration:none;font-family:monospace" dir="auto">As the x-orderOf is non-functional, I can also remove it.</pre><pre style="white-space:pre-wrap;color:rgb(49,49,49);font-size:inherit;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;word-spacing:1px;text-decoration:none;font-family:monospace" dir="auto"><code style="font-family:monospace;font-size:1rem"><br></code></pre><pre style="white-space:pre-wrap;color:rgb(49,49,49);font-size:inherit;font-style:normal;font-weight:400;letter-spacing:normal;text-indent:0px;text-transform:none;word-spacing:1px;text-decoration:none;font-family:monospace" dir="auto"><code style="font-family:monospace;font-size:1rem">John</code></pre></div></blockquote></div></div></div><div dir="ltr"><div dir="ltr"><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-Ecosystem mailing list<br>
<a href="mailto:X3D-Ecosystem@web3d.org" target="_blank">X3D-Ecosystem@web3d.org</a><br>
<a href="http://web3d.org/mailman/listinfo/x3d-ecosystem_web3d.org" rel="noreferrer" target="_blank">http://web3d.org/mailman/listinfo/x3d-ecosystem_web3d.org</a><br>
</blockquote></div></div></div>
</blockquote></div></div>
</div>