<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:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@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;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
.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;}
/* List Definitions */
@list l0
        {mso-list-id:159127141;
        mso-list-type:hybrid;
        mso-list-template-ids:1150867210 -1 47512730 1119882808 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l0:level1
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:.25in;
        text-indent:-.25in;}
@list l0:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:.75in;
        text-indent:-.25in;}
@list l0:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:99.0pt;
        text-indent:-.25in;
        font-family:Symbol;
        mso-fareast-font-family:"Times New Roman";
        mso-bidi-font-family:Calibri;}
@list l0:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:1.75in;
        text-indent:-.25in;}
@list l0:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:2.25in;
        text-indent:-.25in;}
@list l0:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:2.75in;
        text-indent:-9.0pt;}
@list l0:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:3.25in;
        text-indent:-.25in;}
@list l0:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:3.75in;
        text-indent:-.25in;}
@list l0:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:4.25in;
        text-indent:-9.0pt;}
@list l1
        {mso-list-id:317997323;
        mso-list-type:hybrid;
        mso-list-template-ids:116431248 -1 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l1:level1
        {mso-level-start-at:3;
        mso-level-number-format:bullet;
        mso-level-text:-;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Calibri",sans-serif;
        mso-fareast-font-family:"Times New Roman";}
@list l1:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l1:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l1:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;}
@list l1:level5
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l1:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l1:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;}
@list l1:level8
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l1:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l2
        {mso-list-id:534733796;
        mso-list-type:hybrid;
        mso-list-template-ids:-1069099872 -1 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l2:level1
        {mso-level-start-at:0;
        mso-level-number-format:bullet;
        mso-level-text:\F0D8;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;
        mso-fareast-font-family:"Times New Roman";
        mso-bidi-font-family:"Times New Roman";}
@list l2:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l2:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l2:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;}
@list l2:level5
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l2:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l2:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;}
@list l2:level8
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l2:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l3
        {mso-list-id:592708765;
        mso-list-type:hybrid;
        mso-list-template-ids:1063159862 -1 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l3:level1
        {mso-level-start-at:3;
        mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;
        mso-fareast-font-family:"Times New Roman";
        mso-bidi-font-family:"Times New Roman";}
@list l3:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l3:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l3:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;}
@list l3:level5
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l3:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l3:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;}
@list l3:level8
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l3:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
--></style></head><body lang=EN-US link=blue vlink="#954F72" style='word-wrap:break-word'><div class=WordSection1><p class=MsoNormal><o:p> </o:p></p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l2 level1 lfo4'>).  Good enough to give it a shot again.<o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Fine Timing, as dust settles and leveraging this as tool to transcode x3dv to xml. </p><p class=MsoNormal>Joe</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:brutzman@nps.edu">Brutzman, Donald (Don) (CIV)</a><br><b>Sent: </b>Monday, October 11, 2021 4:49 PM<br><b>To: </b><a href="mailto:x3d-public@web3d.org">X3D Graphics public mailing list</a><br><b>Subject: </b>[x3d-public] renewed development of X3D JSON support</p></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Attendees: John Carlson, Don Brutzman<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><ol style='margin-top:0in' start=1 type=1><li class=MsoListParagraph style='margin-left:-.25in;mso-list:l0 level1 lfo1'><i>JSON Schema Status</i><o:p></o:p></li></ol><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>- <strong><span style='font-family:"Calibri",sans-serif'>JSON Schema</span></strong> is a vocabulary that allows you to <strong><span style='font-family:"Calibri",sans-serif'>annotate</span></strong> and <strong><span style='font-family:"Calibri",sans-serif'>validate</span></strong> JSON documents.<o:p></o:p></p><p class=MsoNormal>- https://json-schema.org<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Looks like they have an updated numbering scheme. Latest published IETF Draft is 2020-12.  IETF requires that each draft gets updated each 6 months, but they have long missed meeting such goals.  We have to settle on what has meaningful tool support. <o:p></o:p></p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l1 level1 lfo2'>https://json-schema.org/specification-links.html#understanding-draft-names-and-numbers<o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Many implementations are listed at<o:p></o:p></p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l1 level1 lfo2'>https://json-schema.org/iplementations.html<o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Looking at versions of Java implementations:<o:p></o:p></p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l1 level1 lfo2'>We previously used Everit but that looks to be stopped 2 years ago<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l1 level1 lfo2'>Several implements support version 2019-09, only one reports 2020-12 support<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l1 level1 lfo2'>Snow https://github.com/ssilverman/snowy-json<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l1 level1 lfo2'>Vert.x json schema <a href="https://github.com/eclipse-vertx/vertx-json-schema"><span style='color:windowtext;text-decoration:none'>https://github.com/eclipse-vertx/vertx-json-schema</span></a> (looks recent)<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l1 level1 lfo2'>Jsonschmafriend https://github.com/jimblackler/jsonschemafriend (looks recent, supports 2020-12)<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l1 level1 lfo2'>Gson https://en.wikipedia.org/wiki/Gson<o:p></o:p></li></ul><p class=MsoListParagraph><o:p> </o:p></p><p class=MsoListParagraph style='margin-left:0in'>Very interesting test page, can feed it a JSON schema and JSON file for validation:</p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l1 level1 lfo2'>https://tryjsonschematypes.appspot.com<o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Interestingly the JSON Schema Store indicates 419 schemas are available, of various versions reaching back to draft-04..<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Gson (aka Google Gson) is an <a href="https://en.wikipedia.org/wiki/Open-source_software" title="Open-source software"><span style='color:windowtext;text-decoration:none'>open-source</span></a> <a href="https://en.wikipedia.org/wiki/Java_(programming_language)" title="Java (programming language)"><span style='color:windowtext;text-decoration:none'>Java</span></a> library to <a href="https://en.wikipedia.org/wiki/Serialize" title=Serialize><span style='color:windowtext;text-decoration:none'>serialize</span></a> and deserialize Java objects to (and from) <a href="https://en.wikipedia.org/wiki/JSON" title=JSON><span style='color:windowtext;text-decoration:none'>JSON</span></a>.  Conceivably it might be integrated with X3DJSAIL objects for X3D nodes and statements.  Supports many versions.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>Conclusion #1: given multiple tool support, we will pursue JSON Schema 2020-12 for X3D JSON, and further test across multiple programming languages.<o:p></o:p></b></p><p class=MsoNormal><b><o:p> </o:p></b></p><p class=MsoNormal>Reaction: thank goodness we waited a couple of years rather than dig a hole with prior versions of tools that are now apparently defunct.  Latest version of JSON schema looks pretty stable and mature now, though we are certainly waiting for a stable standard (many years in development, still not done).  Good enough to give it a shot again.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>We are pretty adept at converting X3DUOM into other things.  Once we have a good pattern for X3D JSON Schema matching 2020-12, we can easily (1 week’s effort) autogenerate it.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>NPS will soon get an updated version of XML Spy.  They appear to support 2020-12. Interesting they have a new feature, apparently matching what we want to do.  Worth checking:<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l3 level1 lfo3'>Convert XML Schema to/from JSON Schema<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l3 level1 lfo3'>https://www.altova.com/manual/XMLSpy/spyenterprise/xsjson_schview_version.html<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l3 level1 lfo3'>https://www.altova.com/manual/XMLSpy/spyenterprise/urefconvert_xmlschematojsonschema.html<o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>We will look at this in the next meeting.  <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><ol style='margin-top:0in' start=2 type=1><li class=MsoListParagraph style='margin-left:-.25in;mso-list:l0 level1 lfo1'><i>John’s implementations<o:p></o:p></i></li></ol><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Existing X3D JSON Schema drafts by John are found at<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>- https://github.com/coderextreme/X3DJSONLD/tree/master/src/main/schema<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>John’s current autogenerated X3D JSON schema is draft-07, he has prior work that is 2019-09.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Looking at versions of JavaScript implementations:<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l1 level1 lfo2'>Ajv appears to support latest 2020-12 and 2019-09<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l1 level1 lfo2'>John will upgrade his use of this library to latest<o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Suggestion: let’s work on a X3D4 JSON Schema that also validates X3D versions 3.0-3.3.  (This might be the case already.)<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>Plan: we will work on updating JSON Schema, then validating examples first with JavaScript and Java.<o:p></o:p></b></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><ol style='margin-top:0in' start=3 type=1><li class=MsoListParagraph style='margin-left:-.25in;mso-list:l0 level1 lfo1'><i>X3D JSON pages<o:p></o:p></i></li></ol><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Initial design-planning page:<o:p></o:p></p><ol style='margin-top:0in' start=3 type=1><ol style='margin-top:0in' start=1 type=a><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:-9.0pt;mso-list:l0 level3 lfo1'>X3D JSON Encoding<o:p></o:p></li><li class=MsoListParagraph style='margin-left:-9.0pt;mso-list:l0 level3 lfo1'>https://www.web3d.org/wiki/index.php/X3D_JSON_Encoding<o:p></o:p></li></ul></ol></ol><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Detailed design and implementation:<o:p></o:p></p><ol style='margin-top:0in' start=3 type=1><ol style='margin-top:0in' start=1 type=a><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:-9.0pt;mso-list:l0 level3 lfo1'>X3D to JSON Stylesheet Converter<o:p></o:p></li><li class=MsoListParagraph style='margin-left:-9.0pt;mso-list:l0 level3 lfo1'>https://www.web3d.org/x3d/stylesheets/X3dToJson.html<o:p></o:p></li></ul></ol></ol><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>These pages need to be reviewed and confirmed or updated.  Upcoming meeting.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>---- <o:p></o:p></p><p class=MsoListParagraph style='margin-left:.25in'><o:p> </o:p></p><ol style='margin-top:0in' start=4 type=1><li class=MsoListParagraph style='margin-left:-.25in;mso-list:l0 level1 lfo1'><i>Library support<o:p></o:p></i></li></ol><p class=MsoListParagraph style='margin-left:.25in'><i><o:p> </o:p></i></p><ol style='margin-top:0in' start=4 type=1><ol style='margin-top:0in' start=1 type=a><li class=MsoListParagraph style='margin-left:-.25in;mso-list:l0 level2 lfo1'>X3DJSONLD<o:p></o:p></li></ol></ol><p class=MsoNormal>- https://github.com/coderextreme/X3DJSONLD<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is where John’s collected and latest work is found.  This library runs under node.js and browsers, and has many features, and has many tests for X3D JSON in X3DOM and X_ITE.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>We might try to document it better.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><ol style='margin-top:0in' start=4 type=1><ol style='margin-top:0in' start=2 type=a><li class=MsoListParagraph style='margin-left:-.25in;mso-list:l0 level2 lfo1'>X3DJSAIL Java<o:p></o:p></li></ol></ol><p class=MsoNormal>X3D Java Scene Access Interface Library (X3DJSAIL)<o:p></o:p></p><p class=MsoNormal>https://www.web3d.org/specifications/java/X3DJSAIL.html<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>John has written some Java code that might import JSON to create X3DJSAIL objects, that might work.  However that works via the DOM, and we hope to avoid dual translations for one pass to avoid brittleness.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>X3DJSAIL includes JSON output (export), which was pretty easy, but not parsing (import).<o:p></o:p></p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l1 level1 lfo2'>https://www.web3d.org/specifications/java/X3DJSAIL.html#Conversions<o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>We looked at whether Saxon library might work for JSON import, since X3DJSAIL already includes Saxon saxon-he-10.6 (HE = Home Edition = open source).  Interestingly there is a function built in that might work, <o:p></o:p></p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l1 level1 lfo2'>https://www.saxonica.com/html/documentation10/functions/fn/json-to-xml.html<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l1 level1 lfo2'>https://www.saxonica.com/html/documentation10/functions/fn/parse-json.html<o:p></o:p></li></ul><p class=MsoListParagraph style='margin-left:.75in'><o:p> </o:p></p><ol style='margin-top:0in' start=4 type=1><ol style='margin-top:0in' start=3 type=a><li class=MsoListParagraph style='margin-left:-.25in;mso-list:l0 level2 lfo1'>X3DPSAIL Python<o:p></o:p></li></ol></ol><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>There is a Python package “jsonschema” that appears to have 2020-12 support.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l1 level1 lfo2'>Python package jsonschema, available on py<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l1 level1 lfo2'>https://github.com/Julian/jsonschema<o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>---- <o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><ol style='margin-top:0in' start=5 type=1><li class=MsoListParagraph style='margin-left:-.25in;mso-list:l0 level1 lfo1'><i>Online examples<o:p></o:p></i></li></ol><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Once we get an updated java library, we will resume unit testing of all X3D JSON examples with Ant.  Our build scripts currently support jslint only.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l1 level1 lfo2'>X3D Resources: Examples<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l1 level1 lfo2'>https://www.web3d.org/x3d/content/examples/X3dResources.html#Examples<o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>---- <o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><ol style='margin-top:0in' start=6 type=1><li class=MsoListParagraph style='margin-left:-.25in;mso-list:l0 level1 lfo1'><i>X3D JSON Specification plans<o:p></o:p></i></li></ol><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Still TODO is make the C/C++/C# draft specifications available in GitHub and web3d.org<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>We have to finish X3D Architecture specification before we can add a JSON specification.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>See the following for the road map of all X3D Specifications.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l1 level1 lfo2'>X3D Specifications: Schema and DOCTYPE Validation<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l1 level1 lfo2'>https://www.web3d.org/specifications<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l1 level1 lfo2'>X3D Graphics Standards Relationships<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l1 level1 lfo2'><a href="https://www.web3d.org/specifications/X3dSpecificationRelationships.png">https://www.web3d.org/specifications/X3dSpecificationRelationships.png</a><o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>----<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><ol style='margin-top:0in' start=7 type=1><li class=MsoListParagraph style='margin-left:-.25in;mso-list:l0 level1 lfo1'>John’s movie recommendation<o:p></o:p></li></ol><p class=MsoNormal><o:p> </o:p></p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l1 level1 lfo2'>"The Billion Dollar Code" NetFlix<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l1 level1 lfo2'>https://www.netflix.com/title/81074012<o:p></o:p></li></ul><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>Having fun diversifying X3D4 again!  8)<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>all the best, Don<br><span style='font-size:10.0pt;font-family:"Courier New"'>-- <br>Don Brutzman  Naval Postgraduate School, Code USW/Br       brutzman@nps.edu<br>Watkins 270,  MOVES Institute, Monterey CA 93943-5000 USA   +1.831.656.2149<br>X3D graphics, virtual worlds, navy robotics </span><a href="http://faculty.nps.edu/brutzman"><span style='font-size:10.0pt;font-family:"Courier New"'>http://faculty.nps.edu/brutzman</span></a><o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p></div></body></html>