<div dir="auto">Thanks, Don.  Things are working much better now and I don’t have to jump through any hoops to get a working schema.  <span style="font-family:-apple-system,sans-serif">Wonderful.</span></div><div dir="auto"><br></div><div dir="auto">I have been working on upgrading my apps including X3DJSONLD (swiss army knife), x3dvalidate (JSON validator) and x3dschema (Java converter from JSON to DOM with XML schema validation).</div><div dir="auto"><br></div><div dir="auto">I’m pretty sure most of this is checked in, but I recall an issue with x3dvalidate such that it was expecting an object in PhysicalMaterial.baseTexture and either create3000/x3d-tidy or X3dToJson.xslt was producing an array.  Whatever changes you made to X3DUOM worked well!  I will test again before making an informal release.  Many of the 4.1 examples contain baseTexture, so this is critical.</div><div dir="auto"><br></div><div dir="auto">One hack I did was convert setPoses to addChild, works well so far.  I touched similar places in my serializers.</div><div dir="auto"><br></div><div dir="auto">One thing is bugging me is arc2.json converted from arc.x3d validates on the command line, but apparently something about the conversion happens, and the file doesn’t convert in the browser and AJV throws an error.  Here are the problematic files.</div><div dir="auto"><br></div><div dir="auto"><div style="font-size:inherit"><a href="https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/data/arc2.x3d" style="font-size:inherit">https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/data/arc2.x3d</a></div><br></div><div dir="auto"><div style="font-size:inherit"><a href="https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/data/arc2.json" style="font-size:inherit">https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/data/arc2.json</a></div><br></div><div dir="auto">I realize you can validate these files OK.  The problem comes when converting a PositionInterpolator.keyValue needs to be converted from a string to numbers.</div><div dir="auto"><br></div><div dir="auto"><br></div><div dir="auto">John </div><div><br><div class="gmail_quote gmail_quote_container"><div dir="ltr" class="gmail_attr">On Wed, Jan 14, 2026 at 12:02 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>John, thanks for flagging this difficulty.  It turns out there was an omission in the schema, which led to omissions in X3DUOM and corresponding APIs.  Now fixed.</div><div><ul><li><b>X3D version 4.1 XML Schema Documentation</b></li><li><a href="https://www.web3d.org/specifications/X3dSchemaDocumentation4.1/x3d-4.1.html" target="_blank">https://www.web3d.org/specifications/X3dSchemaDocumentation4.1/x3d-4.1.html</a></li><li>then <b>HAnimPose</b></li><li><a href="https://www.web3d.org/specifications/X3dSchemaDocumentation4.1/x3d-4.1_HAnimPose.html" target="_blank">https://www.web3d.org/specifications/X3dSchemaDocumentation4.1/x3d-4.1_HAnimPose.html</a></li></ul></div><div>Also missing was documentation for HAnimPose children field in X3D Tooltips, emphasizing that only HAnimJoint nodes go in this field.</div><div><ul><li><b>X3D Tooltips, HAnimPose node, children field</b></li><li><a href="https://www.web3d.org/x3d/tooltips/X3dTooltips.html#HAnimPose.children" target="_blank">https://www.web3d.org/x3d/tooltips/X3dTooltips.html#HAnimPose.children</a></li><li><b style="color:rgb(0,0,0);font-family:"Times New Roman";font-size:medium">[children <a href="https://www.web3d.org/x3d/tooltips/X3dTooltips.html#accessType" title="initializable field that can send or receive events at run time" target="_blank">accessType inputOutput</a>, <a href="https://www.web3d.org/x3d/tooltips/X3dTooltips.html#MFNode" title="Multi-Field node array value" target="_blank">type MFNode</a> array, empty list] [<a title="X3D concrete node" href="https://www.web3d.org/x3d/tooltips/X3dTooltips.html#HAnimJoint" target="_blank">HAnimJoint</a>]</b><br style="color:rgb(0,0,0);font-family:"Times New Roman";font-size:medium"><span style="color:rgb(0,0,0);font-family:"Times New Roman";font-size:medium;background-color:rgb(255,255,187)">The children field lists all HAnimJoint nodes making up this pose. Contained HAnimJoint nodes provide center, rotation, and scale values which are applied to corresponding HAnimJoint nodes with the same name in the parent HAnimHumanoid skeleton.</span><br style="color:rgb(0,0,0);font-family:"Times New Roman";font-size:medium"><font color="#ee5500" style="font-family:"Times New Roman";font-size:medium"><b>Warning:</b></font><span style="color:rgb(0,0,0);font-family:"Times New Roman";font-size:medium;background-color:rgb(255,255,187)"> these nodes must be independent of HAnimHumanoid skeleton joints, do not re-USE any skeleton HAnimJoint nodes.</span><br style="color:rgb(0,0,0);font-family:"Times New Roman";font-size:medium"><font color="#ee5500" style="font-family:"Times New Roman";font-size:medium"><b>Warning:</b></font><span style="color:rgb(0,0,0);font-family:"Times New Roman";font-size:medium;background-color:rgb(255,255,187)"> no other node types are allowed in the HAnimPose children field.</span></li></ul></div><div>The X3DUOM page has a lot of detailed information.  I also took this opportunity to generate new X3DUOM documentation, using the XML Schema which keeps it in order.</div><div><ul><li><b>X3D Unified Object Model (X3DUOM)</b></li><li>The X3D Unified Object Model (X3DUOM) is a full set of object-oriented interfaces for all nodes, fields and statements in the X3D Architecture Specification. This XML file is both human-readable and machine-readable, serving as the basis for multiple autogenerated tools and diagnostics.</li><li><a href="https://www.web3d.org/specifications/X3DUOM.html" target="_blank">https://www.web3d.org/specifications/X3DUOM.html</a> then select </li><li>Documentation with diagrams illustrating purpose and structures</li><li><a href="https://www.web3d.org/specifications/X3DUOM/documentation/X3dUnifiedObjectModel.html" target="_blank">https://www.web3d.org/specifications/X3DUOM/documentation/X3dUnifiedObjectModel.html</a></li></ul><div>A good way to check that everything propagated satisfactorily through this production chain is to check the autogenerated X3DJSAIL Javadoc.</div></div><div><ul><li><b>X3DJSAIL Javadoc, X3D Java Scene Access Interface Library</b></li><li><a href="https://www.web3d.org/specifications/java/javadoc/index.html" target="_blank">https://www.web3d.org/specifications/java/javadoc/index.html</a></li><li>for example HAnimPose</li><li><a href="https://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/HAnim/HAnimPose.html" target="_blank">https://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/HAnim/HAnimPose.html</a></li></ul><div>Again thanks for reporting this difficulty, everything just got a little better.</div></div><div><br></div><div>Have fun with X3DUOM!  😬</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 Tue, Jan 13, 2026 at 4:18 PM 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="ltr">I'm trying to validate HAnimJoint children of HAnimPose in JSON.<div><br></div><div>I have not validated any .x3d files yet.</div><div><br></div><div>I am looking at X3DUOM, under HAnimPose, I see:</div><div><br></div><div><NodeContentModel name="HAnimJoint"/></div><div><br></div><div>Under <ContentModel>.</div><div><br></div><div>I have not previously handled ContentModel, except for StatementContentModel.</div><div><br></div><div>I'm guessing the name= in a NodeContentModel refers to the node type (HAnimJoint in this case) allowed under the parent node (HAnimPose in this case).</div><div><br></div><div>Thanks for any assistance in reading X3DUOM.</div><div><br></div><div>I will proceed with handling NodeContentModel in JSON schema, perhaps GroupContentModel can be discussed later.</div><div><br></div><div>John</div><div><br></div><div><br></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>