<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;}
@font-face
        {font-family:Verdana;
        panose-1:2 11 6 4 3 5 4 4 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:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        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;
        margin-bottom:.0001pt;
        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:572932419;
        mso-list-type:hybrid;
        mso-list-template-ids:-434103470 -1 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l0:level1
        {mso-level-start-at:4;
        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 l0: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 l0: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 l0: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 l0: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 l0: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 l0: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 l0: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 l0: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="#0563C1" vlink="#954F72"><div class=WordSection1><p class=MsoNormal>Don,</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I don’t believe any of the below is a showstopper, except for the patch to the 4.0 schema.  It’s merely making the autogenerated schemas comply with the standard better (required properties and fields), and making the X3DUOM comply as well.  Here’s how we make X3DUOM comply:</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:l0 level1 lfo1'>X3D Unified Object Model, the Scene field of X3D Statement should have use="required" to agree with 3.3 JSON Schema.</li></ul><p class=MsoNormal>Also</p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l0 level1 lfo1'>The 3.0, 3.1, 3.2 and 4.0 JSON schemas should be updated to the latest versions.</li></ul><p class=MsoNormal style='margin-left:.25in'><o:p> </o:p></p><p class=MsoNormal>The autogenerated JSON Schemas, version 3.0, 3.1, 3.2, 3.3 and 4.0 should require Scene and encoding properties of X3D statement/object, per Roy's 3.3 JSON schema.  I noticed this while playing with the online validator at <a href="https://coderextreme.net/X3DJSONLD/src/main/html/validator.html">https://coderextreme.net/X3DJSONLD/src/main/html/validator.html</a>   </p><p class=MsoNormal>Stated here:</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><span style='font-size:14.5pt;font-family:"Verdana",sans-serif;color:black;background:white'>ISO/IEC 19776-5:201x<b> </b></span>Table 4.2</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>In X3D Unified Object Model, the Scene field of X3D Statement should have use="required" to agree with 3.3 JSON Schema, I believe.  Currently, the X3D Unified Object Model has default="NULL" for Scene.   I will look into how to make Scene nullable yet required in JSON and JSON Schema if desired (I’m imagining something like “Scene” : null, or “Scene” : {} more likely).  I am not sure what would happen (to my whole tool chain!) if people started including null’s in their JSON, but we should test…Any good examples of a bare null (no quotes)  in our X3D JSON examples?</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Here are some examples with "NULL".  I think they should be null instead. Likely you should change X3dToJson.xslt.  But we need to consult the working draft as well – how it wants to encode NULL.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>$ find . -name '*.json' -print0| xargs -0 grep -l '"NULL"'</p><p class=MsoNormal>./Basic/development/X3dRetreatProtoExercise.json</p><p class=MsoNormal>./Basic/HumanoidAnimation/AllenDuttonProtoInstances.json</p><p class=MsoNormal>./Basic/HumanoidAnimation/HAnimPrototypes.json</p><p class=MsoNormal>./Basic/HumanoidAnimation/InterchangableActorsViaDynamicRoutingPrototypes.json</p><p class=MsoNormal>./Basic/HumanoidAnimation/NancyPrototypes.json</p><p class=MsoNormal>./Basic/Shaders/SimpleShader.json</p><p class=MsoNormal>./Savage/Tools/Animation/WaypointInterpolatorPrototype.json</p><p class=MsoNormal>./Savage/Tools/Terrain/GeoLocation3.json</p><p class=MsoNormal>./Savage/Tools/Terrain/GeoTerrainGrid.json</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>For @value, we’re leaving the type kind of open, but the X3DUOM says SFString.  Hmm.  The JSON schema says @value is {}.  Strange.  I don’t see how it gets generated that way, but I must have done it some tricky way <span style='font-family:"Segoe UI Emoji",sans-serif'>😊</span>.  I guess that’s a puzzle for now.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>There is no analogous field for encoding in X3DUOM, so we will hardcode its requirement in the JSON schema autogenerator.  I can also hardcode Scene’s requirement in the autogenerator, if necessary—I’ve already done it.  I just need to take it out if we add use=”required” to the Scene field in X3DUOM.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Let me know if you want me to update the online JSON schemas for these two properties, I’ve already updated x3d-3.3-JSONSchema.autogenerated.json, and there’s also a patch for the 4.0 JSON schema outstanding.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Attached is a new autogenerator.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>That’s all for now!</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>Here’s the full patch:</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Index: x3d-3.0-JSONSchema.json</p><p class=MsoNormal>===================================================================</p><p class=MsoNormal>--- x3d-3.0-JSONSchema.json     (revision 26720)</p><p class=MsoNormal>+++ x3d-3.0-JSONSchema.json     (working copy)</p><p class=MsoNormal>@@ -13720,6 +13720,8 @@</p><p class=MsoNormal>       },</p><p class=MsoNormal>       "required": [</p><p class=MsoNormal>         "@profile",</p><p class=MsoNormal>+        "Scene",</p><p class=MsoNormal>+        "encoding",</p><p class=MsoNormal>         "@version"</p><p class=MsoNormal>       ],</p><p class=MsoNormal>       "additionalProperties": false</p><p class=MsoNormal>Index: x3d-3.1-JSONSchema.json</p><p class=MsoNormal>===================================================================</p><p class=MsoNormal>--- x3d-3.1-JSONSchema.json     (revision 26720)</p><p class=MsoNormal>+++ x3d-3.1-JSONSchema.json     (working copy)</p><p class=MsoNormal>@@ -15700,6 +15700,8 @@</p><p class=MsoNormal>       },</p><p class=MsoNormal>       "required": [</p><p class=MsoNormal>         "@profile",</p><p class=MsoNormal>+        "Scene",</p><p class=MsoNormal>+        "encoding",</p><p class=MsoNormal>         "@version"</p><p class=MsoNormal>       ],</p><p class=MsoNormal>       "additionalProperties": false</p><p class=MsoNormal>Index: x3d-3.2-JSONSchema.json</p><p class=MsoNormal>===================================================================</p><p class=MsoNormal>--- x3d-3.2-JSONSchema.json     (revision 26720)</p><p class=MsoNormal>+++ x3d-3.2-JSONSchema.json     (working copy)</p><p class=MsoNormal>@@ -22492,6 +22492,8 @@</p><p class=MsoNormal>       },</p><p class=MsoNormal>       "required": [</p><p class=MsoNormal>         "@profile",</p><p class=MsoNormal>+        "Scene",</p><p class=MsoNormal>+        "encoding",</p><p class=MsoNormal>         "@version"</p><p class=MsoNormal>       ],</p><p class=MsoNormal>       "additionalProperties": false</p><p class=MsoNormal>Index: x3d-4.0-JSONSchema.json</p><p class=MsoNormal>===================================================================</p><p class=MsoNormal>--- x3d-4.0-JSONSchema.json     (revision 26720)</p><p class=MsoNormal>+++ x3d-4.0-JSONSchema.json     (working copy)</p><p class=MsoNormal>@@ -9220,7 +9220,6 @@</p><p class=MsoNormal>                 "r_metacarpophalangeal_joint_5",</p><p class=MsoNormal>                 "r_carpal_proximal_interphalangeal_joint_5",</p><p class=MsoNormal>                 "r_carpal_distal_interphalangeal_joint_5",</p><p class=MsoNormal>-                "r_carpal_distal_interphalangeal_joint_5",</p><p class=MsoNormal>                 "l_tarsometatarsal_joint",</p><p class=MsoNormal>                 "l_metatarsophalangeal_joint",</p><p class=MsoNormal>                 "l_tarsal_interphalangeal_joint",</p><p class=MsoNormal>@@ -24206,6 +24205,8 @@</p><p class=MsoNormal>       },</p><p class=MsoNormal>       "required": [</p><p class=MsoNormal>         "@profile",</p><p class=MsoNormal>+        "Scene",</p><p class=MsoNormal>+        "encoding",</p><p class=MsoNormal>         "@version"</p><p class=MsoNormal>       ],</p><p class=MsoNormal>       "additionalProperties": false</p><p class=MsoNormal><o:p> </o:p></p></div></body></html>