<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>JinLOA4.java (your conversion) still produces code to large (see
      earlier email for code examples to get around this for the most
      part).</p>
    <p>I will attempt to make sure that the setMetadata method is called
      instead of the addValue metadata in my JSON->Java load/export
      code.</p>
    <p>John<br>
    </p>
    <div class="moz-cite-prefix">On 12/23/21 21:34, John Carlson wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:CAGC3UE=Wz8ZnLvG-kDXLuB6bz50gKUv99Vg35OjM6QMQ+r1cPg@mail.gmail.com">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <div dir="auto">Don,</div>
      <div dir="auto"><br>
      </div>
      <div dir="auto">I don’t know if I also mentioned my conversions
        from JSON to Java failed…used setValue instead of setMetadata.  
        I have some free time this evening and will work on JSON schema
        validation, fieldTypes.js, and mapToMethod.js as generated from
        X3DUOM and found in X3DJSONLD.  These JS files impact my
        serializers (exported Java) and schema validation of
        JINLOA4.json.   Likely I will be able to do a build, and then do
        spot checking for any issues.</div>
      <div dir="auto"><br>
      </div>
      <div dir="auto">I did not understand the difference between
        Humanoid in the abstract spec and HAnimHumanoid in the concrete
        spec.</div>
      <div dir="auto"><br>
      </div>
      <div dir="auto">Excellent analysis, Don, and Merry Xmas to you and
        yours.</div>
      <div><br>
        <div class="gmail_quote">
          <div dir="ltr" class="gmail_attr">On Thu, Dec 23, 2021 at 1:50
            PM Brutzman, Donald (Don) (CIV) <<a
              href="mailto:brutzman@nps.edu" moz-do-not-send="true"
              class="moz-txt-link-freetext">brutzman@nps.edu</a>>
            wrote:<br>
          </div>
          <blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:rgb(204,204,204)">
            <div link="blue" vlink="purple" style="word-wrap:break-word"
              lang="EN-US">
              <div class="m_-409662890751525771WordSection1">
                <p class="MsoNormal">Hi John, thanks for this
                  elaboration of the question.  Here is an in-depth
                  explanation giving multiple related references that
                  answer the question: yes, the /metadata/ field is part
                  of HAnimHumanoid node.</p>
                <p class="MsoNormal"> </p>
                <p class="MsoNormal">More precise URL for HAnimHumanoid
                  in HAnim v2.0 specification is</p>
                <p class="MsoNormal"> </p>
                <ul style="margin-top:0in" type="disc">
                  <li class="m_-409662890751525771MsoListParagraph"
                    style="margin-left:0in">Part 1:  Humanoid animation
                    (HAnim) architecture, Clause 6 Object Interfaces,
                    6.2 Humanoid</li>
                  <li class="m_-409662890751525771MsoListParagraph"
                    style="margin-left:0in"><a
href="https://www.web3d.org/documents/specifications/19774-1/V2.0/Architecture/Obje"
                      target="_blank" moz-do-not-send="true"
                      class="moz-txt-link-freetext">https://www.web3d.org/documents/specifications/19774-1/V2.0/Architecture/Obje</a>
                    Part 1:  Humanoid animation (HAnim)
                    architecturectInterfaces.html#Humanoid</li>
                </ul>
                <p class="MsoNormal"> </p>
                <p class="MsoNormal">HAnim architecture specification is
                  abstract and must be implemented by other
                  specifications.  Thus you have to look in X3D
                  Architecture specification for corresponding X3D
                  details.</p>
                <p class="MsoNormal"> </p>
                <p class="MsoNormal">Corresponding X3D Architecture
                  specification is</p>
                <p class="MsoNormal"> </p>
                <ul style="margin-top:0in" type="disc">
                  <li class="m_-409662890751525771MsoListParagraph"
                    style="margin-left:0in">X3D4 Part 1: Architecture
                    and base components, 26 Humanoid Animation (HAnim)
                    component, clause 26.3.2 HAnimHumanoid</li>
                  <li class="m_-409662890751525771MsoListParagraph"
                    style="margin-left:0in"><a
href="https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-CD1/Part01/components/hanim.html#HAnimHumanoid"
                      target="_blank" moz-do-not-send="true"
                      class="moz-txt-link-freetext">https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-CD1/Part01/components/hanim.html#HAnimHumanoid</a></li>
                </ul>
                <p class="MsoNormal"> </p>
                <p class="MsoNormal" style="margin-left:18.75pt"><span
                    style="font-size:8.5pt;font-family:"Courier
                    New";color:black">HAnimHumanoid : X3DChildNode,
                    X3DBoundedObject {</span></p>
                <p class="MsoNormal" style="margin-left:18.75pt"><span
                    style="font-size:8.5pt;font-family:"Courier
                    New";color:black">  SFVec3f    [in,out]
                    center                0 0 0    (-∞,∞)</span></p>
                <p class="MsoNormal" style="margin-left:18.75pt"><span
                    style="font-size:8.5pt;font-family:"Courier
                    New";color:black">  SFString   [in,out]
                    description           ""</span></p>
                <p class="MsoNormal" style="margin-left:18.75pt"><span
                    style="font-size:8.5pt;font-family:"Courier
                    New";color:black">  SFBool     [in,out]
                    bboxDisplay           FALSE</span></p>
                <p class="MsoNormal" style="margin-left:18.75pt"><span
                    style="font-size:8.5pt;font-family:"Courier
                    New";color:black">  SFBool     [in,out]
                    visible               TRUE</span></p>
                <p class="MsoNormal" style="margin-left:18.75pt"><span
                    style="font-size:8.5pt;font-family:"Courier
                    New";color:black">  MFString   [in,out]
                    info                  []</span></p>
                <p class="MsoNormal" style="margin-left:18.75pt"><span
                    style="font-size:8.5pt;font-family:"Courier
                    New";color:black">  MFVec3f    [in,out]
                    jointBindingPositions []       (-∞,∞)</span></p>
                <p class="MsoNormal" style="margin-left:18.75pt"><span
                    style="font-size:8.5pt;font-family:"Courier
                    New";color:black">  MFRotation [in,out]
                    jointBindingRotations []       (-∞,∞)|[-1,1]</span></p>
                <p class="MsoNormal" style="margin-left:18.75pt"><span
                    style="font-size:8.5pt;font-family:"Courier
                    New";color:black">  MFVec3f    [in,out]
                    jointBindingScales    []       (0,∞)</span></p>
                <p class="MsoNormal" style="margin-left:18.75pt"><span
                    style="font-size:8.5pt;font-family:"Courier
                    New";color:black">  MFNode     [in,out]
                    joints                []       [HAnimJoint]</span></p>
                <p class="MsoNormal" style="margin-left:18.75pt"><span
                    style="font-size:8.5pt;font-family:"Courier
                    New";color:black">  SFInt32    [in,out]
                    loa                   -1       [-1,4]</span></p>
                <p class="MsoNormal" style="margin-left:18.75pt"><span
                    style="font-size:8.5pt;font-family:"Courier
                    New";color:black">  SFNode     [in,out]
                    metadata              NULL     [X3DMetadataObject]</span></p>
                <p class="MsoNormal" style="margin-left:18.75pt"><span
                    style="font-size:8.5pt;font-family:"Courier
                    New";color:black">  MFNode     [in,out]
                    motions               []       [HAnimMotion]</span></p>
                <p class="MsoNormal" style="margin-left:18.75pt"><span
                    style="font-size:8.5pt;font-family:"Courier
                    New";color:black">  MFBool     [in,out]
                    motionsEnabled        []</span></p>
                <p class="MsoNormal" style="margin-left:18.75pt"><span
                    style="font-size:8.5pt;font-family:"Courier
                    New";color:black">  SFString   [in,out]
                    name                  ""</span></p>
                <p class="MsoNormal" style="margin-left:18.75pt"><span
                    style="font-size:8.5pt;font-family:"Courier
                    New";color:black">  SFRotation [in,out]
                    rotation              0 0 1 0  (-∞,∞)|[-1,1]</span></p>
                <p class="MsoNormal" style="margin-left:18.75pt"><span
                    style="font-size:8.5pt;font-family:"Courier
                    New";color:black">  SFVec3f    [in,out]
                    scale                 1 1 1    (0,∞)</span></p>
                <p class="MsoNormal" style="margin-left:18.75pt"><span
                    style="font-size:8.5pt;font-family:"Courier
                    New";color:black">  SFRotation [in,out]
                    scaleOrientation      0 0 1 0  (-∞,∞)|[-1,1]</span></p>
                <p class="MsoNormal" style="margin-left:18.75pt"><span
                    style="font-size:8.5pt;font-family:"Courier
                    New";color:black">  MFNode     [in,out]
                    segments              []       [HAnimSegment]</span></p>
                <p class="MsoNormal" style="margin-left:18.75pt"><span
                    style="font-size:8.5pt;font-family:"Courier
                    New";color:black">  MFNode     [in,out]
                    sites                 []       [HAnimSite]</span></p>
                <p class="MsoNormal" style="margin-left:18.75pt"><span
                    style="font-size:8.5pt;font-family:"Courier
                    New";color:black">  SFString   [in,out]
                    skeletalConfiguration "BASIC"</span></p>
                <p class="MsoNormal" style="margin-left:18.75pt"><span
                    style="font-size:8.5pt;font-family:"Courier
                    New";color:black">  MFNode     [in,out]
                    skeleton              []       [HAnimJoint,
                    HAnimSite]</span></p>
                <p class="MsoNormal" style="margin-left:18.75pt"><span
                    style="font-size:8.5pt;font-family:"Courier
                    New";color:black">  MFNode     [in,out]
                    skin                  []      
                    <s style="font-family:"Courier New""><span
                        style="font-family:"Courier
                        New";background-color:orange">[IndexedFaceSet,
                        X3DGroupingNode, Shape]</span></s><span
                      style="font-family:"Courier
                      New";background-color:yellow">[IndexedFaceSet,
                      IndexedFanSet, IndexedQuadSet, IndexedTriangleSet,
                      IndexedTriangleStripSet]</span></span></p>
                <p class="MsoNormal" style="margin-left:18.75pt"><span
                    style="font-size:8.5pt;font-family:"Courier
                    New";color:black">  SFNode     [in,out]
                    skinBindingCoord      NULL     [X3DCoordinateNode]</span></p>
                <p class="MsoNormal" style="margin-left:18.75pt"><span
                    style="font-size:8.5pt;font-family:"Courier
                    New";color:black">  SFNode     [in,out]
                    skinBindingNormal     NULL     [X3DNormalNode]</span></p>
                <p class="MsoNormal" style="margin-left:18.75pt"><span
                    style="font-size:8.5pt;font-family:"Courier
                    New";color:black">  SFNode     [in,out]
                    skinCoord             NULL     [X3DCoordinateNode]</span></p>
                <p class="MsoNormal" style="margin-left:18.75pt"><span
                    style="font-size:8.5pt;font-family:"Courier
                    New";color:black">  SFNode     [in,out]
                    skinNormal            NULL     [X3DNormalNode]</span></p>
                <p class="MsoNormal" style="margin-left:18.75pt"><span
                    style="font-size:8.5pt;font-family:"Courier
                    New";color:black">  SFVec3f    [in,out]
                    translation           0 0 0    (-∞,∞)</span></p>
                <p class="MsoNormal" style="margin-left:18.75pt"><span
                    style="font-size:8.5pt;font-family:"Courier
                    New";color:black">  SFString   [in,out]
                    version               ""</span></p>
                <p class="MsoNormal" style="margin-left:18.75pt"><span
                    style="font-size:8.5pt;font-family:"Courier
                    New";color:black">  MFNode     [in,out]
                    viewpoints            []       [HAnimSite]</span></p>
                <p class="MsoNormal" style="margin-left:18.75pt"><span
                    style="font-size:8.5pt;font-family:"Courier
                    New";color:black">  SFVec3f    []      
                    bboxCenter            0 0 0    (-∞,∞)</span></p>
                <p class="MsoNormal" style="margin-left:18.75pt"><span
                    style="font-size:8.5pt;font-family:"Courier
                    New";color:black">  SFVec3f    []      
                    bboxSize              -1 -1 -1 [0,∞) or −1 −1 −1</span></p>
                <p class="MsoNormal" style="margin-left:18.75pt"><span
                    style="font-size:8.5pt;font-family:"Courier
                    New";color:black">}</span></p>
                <p class="MsoNormal"> </p>
                <div>
                  <p class="MsoNormal">As you can see, this node
                    signature does include /metadata/ field.</p>
                  <p class="MsoNormal"> </p>
                  <p class="MsoNormal">As you can also see, there is no
                    /value/ field.</p>
                  <p class="MsoNormal"> </p>
                  <p class="MsoNormal">Of note is that there is an
                    HAnimHumanoid /info/ field for metadata information,
                    an MFString array of “name=value” pairs.  Very
                    clumsy to use in practice.  The X3D4 Architecture
                    notes in 26.3.2 the preferred alternative approach:</p>
                  <ul style="margin-top:0in" type="disc">
                    <li class="m_-409662890751525771MsoListParagraph"
                      style="margin-left:0in"><span
                        style="background-color:yellow">Metadata values
                        from the
                        <i>info</i> field can be equivalently encoded
                        via MetadataSet containing related
                        X3DMetadataObject nodes.</span>
                    </li>
                  </ul>
                  <p class="MsoNormal">Conversions are provided by
                    X3dTidy cleanup stylesheet, and converted examples
                    online. (Not finding this information in X3D Scene
                    Authoring Hints, will add it.)</p>
                  <div style="border-style:none none
                    solid;border-bottom-width:1.5pt;padding:0in 0in
                    1pt;border-bottom-color:windowtext">
                    <p class="MsoNormal" style="border:none;padding:0in"> </p>
                  </div>
                  <p class="MsoNormal"> </p>
                  <ul style="margin-top:0in" type="disc">
                    <li class="m_-409662890751525771MsoListParagraph"
                      style="margin-left:0in">HumanoidAnimation X3D
                      Examples Archive</li>
                    <li class="m_-409662890751525771MsoListParagraph"
                      style="margin-left:0in"><a
                        href="https://www.web3d.org/x3d/content/examples/HumanoidAnimation"
                        target="_blank" moz-do-not-send="true"
                        class="moz-txt-link-freetext">https://www.web3d.org/x3d/content/examples/HumanoidAnimation</a></li>
                  </ul>
                  <div style="border-style:none none
                    solid;border-bottom-width:1.5pt;padding:0in 0in
                    1pt;border-bottom-color:windowtext">
                    <p class="MsoNormal" style="border:none;padding:0in"> </p>
                  </div>
                  <p class="MsoNormal"> </p>
                  <ul style="margin-top:0in" type="disc">
                    <li class="m_-409662890751525771MsoListParagraph"
                      style="margin-left:0in">X3D Example Archives:
                      Humanoid Animation, Characters, Jin LOA 4</li>
                    <li class="m_-409662890751525771MsoListParagraph"
                      style="margin-left:0in"><a
href="https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Characters/JinLOA4Index.html"
                        target="_blank" moz-do-not-send="true"
                        class="moz-txt-link-freetext">https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Characters/JinLOA4Index.html</a></li>
                    <li class="m_-409662890751525771MsoListParagraph"
                      style="margin-left:0in"><a
href="https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Characters/JinLOA4.html#hanim_JinLOA4"
                        target="_blank" moz-do-not-send="true"
                        class="moz-txt-link-freetext">https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Characters/JinLOA4.html#hanim_JinLOA4</a></li>
                  </ul>
                  <p class="MsoNormal"> </p>
                  <p class="MsoNormal"><HAnimHumanoid DEF='hanim_JinLOA4' loa='4' name='JinLOA4' scale='0.0225
                    0.0225 0.0225'>
                  </p>
                  <p class="MsoNormal">  <MetadataSet name='HAnimHumanoid.info' reference='<a
href="https://www.web3d.org/documents/specifications/19774/V2.0/Architecture/ObjectInterfaces.html#Humanoid"
                      target="_blank" moz-do-not-send="true"
                      class="moz-txt-link-freetext">https://www.web3d.org/documents/specifications/19774/V2.0/Architecture/ObjectInterfaces.html#Humanoid</a>' containerField='metadata'>
                  </p>
                  <p class="MsoNormal">    <MetadataString containerField='value' name='authorName' value='Jin
                    Hoon Lee and Min Joo Lee, Chul Hee Jung and Myeong
                    Won Lee'/>
                    <br>
    <MetadataString containerField='value' name='authorEmail' value='<a
                      href="mailto:myeongwonlee@gmail.com"
                      target="_blank" moz-do-not-send="true"
                      class="moz-txt-link-freetext">myeongwonlee@gmail.com</a>'/>
                    <br>
    <MetadataString containerField='value' name='creationDate' value='31
                    March 2011'/>
                    <br>
    <MetadataString containerField='value' name='gender' value='female'/>
                    <br>
    <MetadataFloat containerField='value' name='height' value='1.5'/>
                    <br>
    <MetadataString containerField='value' name='humanoidVersion' value='"2.0"'/>
                  </p>
                  <div style="border-style:none none
                    solid;border-bottom-width:1.5pt;padding:0in 0in
                    1pt;border-bottom-color:windowtext">
                    <p class="MsoNormal" style="border:none;padding:0in">  </MetadataSet>
                      <br>
                      <a
                        name="m_-409662890751525771_hanim_humanoid_root"
                        moz-do-not-send="true"></a>  <HAnimJoint DEF='hanim_humanoid_root' center='0
                      36.709999
                      -0.707600' containerField='skeleton' name='humanoid_root'></p>
                  </div>
                  <p class="MsoNormal"> </p>
                  <p class="MsoNormal">Reviewing X3D Tooltips confirms
                    this answer to your question, along with convenient
                    links to clauses in both specifications.  (Each of
                    the node names e.g. HAnimHumanoid links to the
                    current X3D Architecture CD1 clause.)</p>
                  <p class="MsoNormal"> </p>
                  <ul style="margin-top:0in" type="disc">
                    <li class="m_-409662890751525771MsoListParagraph"
                      style="margin-left:0in">X3D Tooltips HAnimHumanoid
                    </li>
                    <li class="m_-409662890751525771MsoListParagraph"
                      style="margin-left:0in"><a
                        href="https://www.web3d.org/x3d/tooltips/X3dTooltips.html#HAnimHumanoid"
                        target="_blank" moz-do-not-send="true"
                        class="moz-txt-link-freetext">https://www.web3d.org/x3d/tooltips/X3dTooltips.html#HAnimHumanoid</a></li>
                  </ul>
                  <p class="MsoNormal"> </p>
                  <p class="MsoNormal">Now checking X3D Unified Object
                    Model (X3DUOM) X3dUnifiedObjectModel-4.0.xml</p>
                  <p class="MsoNormal"> </p>
                  <ul style="margin-top:0in" type="disc">
                    <li class="m_-409662890751525771MsoListParagraph"
                      style="margin-left:0in"><a
                        href="https://www.web3d.org/specifications"
                        target="_blank" moz-do-not-send="true"
                        class="moz-txt-link-freetext">https://www.web3d.org/specifications</a></li>
                    <li class="m_-409662890751525771MsoListParagraph"
                      style="margin-left:0in"><a
href="https://www.web3d.org/specifications/X3dUnifiedObjectModel-4.0.xml"
                        target="_blank" moz-do-not-send="true"
                        class="moz-txt-link-freetext">https://www.web3d.org/specifications/X3dUnifiedObjectModel-4.0.xml</a></li>
                  </ul>
                  <p class="MsoNormal"> </p>
                  <p class="MsoNormal">      <ConcreteNode
                    name="HAnimHumanoid"></p>
                  <p class="MsoNormal">         <InterfaceDefinition
                    specificationUrl=”<a
href="https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-CD1/Part01/components/hanim.html#HAnimHumanoid"
                      target="_blank" moz-do-not-send="true"
                      class="moz-txt-link-freetext">https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-CD1/Part01/components/hanim.html#HAnimHumanoid</a>”
                  </p>
                  <p class="MsoNormal">                              appinfo="The
                    HAnimHumanoid node is used to: (a) store references
                    to the joints, segments, sites, skeleton, optional
                    skin, and fixed viewpoints, (b) serve as a container
                    for the entire humanoid, (c) provide a convenient
                    way of moving the humanoid through its environment,
                    and (d) store human-readable metadata such as name,
                    version, author, copyright, age, gender and other
                    information."></p>
                  <p class="MsoNormal">            <componentInfo
                    name="HAnim" level="1"/></p>
                  <p class="MsoNormal">            <Inheritance
                    baseType="X3DChildNode"/></p>
                  <p class="MsoNormal">           
                    <AdditionalInheritance
                    baseType="X3DBoundedObject"/></p>
                  <p class="MsoNormal">            <field
                    name="bboxCenter"</p>
                  <p class="MsoNormal">                   type="SFVec3f"</p>
                  <p class="MsoNormal">                  
                    accessType="initializeOnly"</p>
                  <p class="MsoNormal">                   default="0 0
                    0"</p>
                  <p class="MsoNormal">                  
                    inheritedFrom="X3DBoundedObject"</p>
                  <p class="MsoNormal">                  
                    description="Bounding box center accompanies
                    bboxSize and provides an optional hint for bounding
                    box position offset from origin of local coordinate
                    system."/></p>
                  <p class="MsoNormal">            <field
                    name="bboxDisplay"</p>
                  <p class="MsoNormal">                   type="SFBool"</p>
                  <p class="MsoNormal">                  
                    accessType="inputOutput"</p>
                  <p class="MsoNormal">                  
                    default="false"</p>
                  <p class="MsoNormal">                  
                    inheritedFrom="X3DBoundedObject"</p>
                  <p class="MsoNormal">                  
                    description="Whether to display bounding box for
                    associated geometry, aligned with world
                    coordinates."/></p>
                  <p class="MsoNormal">            <field
                    name="bboxSize"</p>
                  <p class="MsoNormal">                   type="SFVec3f"</p>
                  <p class="MsoNormal">                  
                    accessType="initializeOnly"</p>
                  <p class="MsoNormal">                   default="-1 -1
                    -1"</p>
                  <p class="MsoNormal">                  
                    inheritedFrom="X3DBoundedObject"</p>
                  <p class="MsoNormal">                  
                    baseType="bboxSizeType"</p>
                  <p class="MsoNormal">                  
                    description="Bounding box size is usually omitted,
                    and can easily be calculated automatically by an X3D
                    player at scene-loading time with minimal
                    computational cost."/></p>
                  <p class="MsoNormal">            <field
                    name="center"</p>
                  <p class="MsoNormal">                   type="SFVec3f"</p>
                  <p class="MsoNormal">                  
                    accessType="inputOutput"</p>
                  <p class="MsoNormal">                  default="0 0 0"</p>
                  <p class="MsoNormal">                  
                    description="Translation offset from origin of local
                    coordinate system."/></p>
                  <p class="MsoNormal">            <field
                    name="description"</p>
                  <p class="MsoNormal">                  
                    type="SFString"</p>
                  <p class="MsoNormal">                  
                    accessType="inputOutput"</p>
                  <p class="MsoNormal">                  
                    description="Author-provided prose that describes
                    intended purpose of this node."/></p>
                  <p class="MsoNormal">            <field name="info"</p>
                  <p class="MsoNormal">                  
                    type="MFString"</p>
                  <p class="MsoNormal">                  
                    accessType="inputOutput"</p>
                  <p class="MsoNormal">                  
                    description="Contains metadata keyword=value pairs,
                    where approved keyword terms are humanoidVersion
                    authorName authorEmail copyright creationDate
                    usageRestrictions age gender height and
                    weight."/></p>
                  <p class="MsoNormal">            <field name="IS"</p>
                  <p class="MsoNormal">                   type="SFNode"</p>
                  <p class="MsoNormal">                  
                    accessType="inputOutput"</p>
                  <p class="MsoNormal">                   default="NULL"</p>
                  <p class="MsoNormal">                  
                    acceptableNodeTypes="IS"</p>
                  <p class="MsoNormal">                  
                    inheritedFrom="X3DNode"/></p>
                  <p class="MsoNormal">            <field
                    name="jointBindingPositions"</p>
                  <p class="MsoNormal">                   type="MFVec3f"</p>
                  <p class="MsoNormal">                  
                    accessType="inputOutput"</p>
                  <p class="MsoNormal">                   default="0 0
                    0"</p>
                  <p class="MsoNormal">                  
                    description="Specifies an array of position values
                    for each HAnimJoint node in the joints field, in
                    order, corresponding to each binding pose."/></p>
                  <p class="MsoNormal">            <field
                    name="jointBindingRotations"</p>
                  <p class="MsoNormal">                  
                    type="MFRotation"</p>
                  <p class="MsoNormal">                  
                    accessType="inputOutput"</p>
                  <p class="MsoNormal">                   default="0 0 1
                    0"</p>
                  <p class="MsoNormal">                  
                    description="Specifies an array of rotation values
                    for each HAnimJoint node in the joints field, in
                    order, corresponding to each binding pose."/></p>
                  <p class="MsoNormal">            <field
                    name="jointBindingScales"</p>
                  <p class="MsoNormal">                   type="MFVec3f"</p>
                  <p class="MsoNormal">                  
                    accessType="inputOutput"</p>
                  <p class="MsoNormal">                   default="0 0
                    0"</p>
                  <p class="MsoNormal">                  
                    description="Specifies an array of scale values for
                    each HAnimJoint node in the joints field, in order,
                    corresponding to each binding pose."/></p>
                  <p class="MsoNormal">            <field
                    name="joints"</p>
                  <p class="MsoNormal">                   type="MFNode"</p>
                  <p class="MsoNormal">                  
                    accessType="inputOutput"</p>
                  <p class="MsoNormal">                  
                    acceptableNodeTypes="HAnimJoint"</p>
                  <p class="MsoNormal">                  
                    description="The joints field contains a list of USE
                    references for all HAnimJoint node instances found
                    within the preceding skeleton hierarchy."/></p>
                  <p class="MsoNormal">            <field name="loa"</p>
                  <p class="MsoNormal">                   type="SFInt32"</p>
                  <p class="MsoNormal">                  
                    accessType="inputOutput"</p>
                  <p class="MsoNormal">                   default="-1"</p>
                  <p class="MsoNormal">                  
                    minInclusive="-1"</p>
                  <p class="MsoNormal">                  
                    maxInclusive="4"</p>
                  <p class="MsoNormal">                  
                    baseType="loaType"</p>
                  <p class="MsoNormal">                  
                    description="Level Of Articulation 0."/></p>
                  <p class="MsoNormal">            <field
                    name="metadata"</p>
                  <p class="MsoNormal">                   type="SFNode"</p>
                  <p class="MsoNormal">                  
                    accessType="inputOutput"</p>
                  <p class="MsoNormal">                   default="NULL"</p>
                  <p class="MsoNormal">                  
                    acceptableNodeTypes="X3DMetadataObject"</p>
                  <p class="MsoNormal">                
                      inheritedFrom="X3DNode"</p>
                  <p class="MsoNormal">                  
                    description="Information about this node can be
                    contained in a MetadataBoolean, MetadataDouble,
                    MetadataFloat, MetadataInteger, MetadataString or
                    MetadataSet node."/></p>
                  <p class="MsoNormal">            <field
                    name="motions"</p>
                  <p class="MsoNormal">                   type="MFNode"</p>
                  <p class="MsoNormal">                  
                    accessType="inputOutput"</p>
                  <p class="MsoNormal">                  
                    acceptableNodeTypes="HAnimMotion"</p>
                  <p class="MsoNormal">                  
                    description="Contains any HAnimMotion nodes that can
                    animate the HAnimHumanoid."/></p>
                  <p class="MsoNormal">            <field name="name"</p>
                  <p class="MsoNormal">  
                                    type="SFString"</p>
                  <p class="MsoNormal">                  
                    accessType="inputOutput"</p>
                  <p class="MsoNormal">                  
                    baseType="xs:NMTOKEN"</p>
                  <p class="MsoNormal">                  
                    description="Unique name attribute must be defined
                    so that each HAnimHumanoid node in a scene can be
                    identified at run time for animation purposes."/></p>
                  <p class="MsoNormal">            <field
                    name="rotation"</p>
                  <p class="MsoNormal">                  
                    type="SFRotation"</p>
                  <p class="MsoNormal">             
                         accessType="inputOutput"</p>
                  <p class="MsoNormal">                   default="0 0 1
                    0"</p>
                  <p class="MsoNormal">                  
                    description="Orientation of children relative to
                    local coordinate system."/></p>
                  <p class="MsoNormal">            <field
                    name="scale"</p>
                  <p class="MsoNormal">                   type="SFVec3f"</p>
                  <p class="MsoNormal">                  
                    accessType="inputOutput"</p>
                  <p class="MsoNormal">                   default="1 1
                    1"</p>
                  <p class="MsoNormal">                  
                    minExclusive="0"</p>
                  <p class="MsoNormal">                  
                    description="Non-uniform x-y-z scale of child
                    coordinate system, adjusted by center and
                    scaleOrientation."/></p>
                  <p class="MsoNormal">            <field
                    name="scaleOrientation"</p>
                  <p class="MsoNormal">                  
                    type="SFRotation"</p>
                  <p class="MsoNormal">                  
                    accessType="inputOutput"</p>
                  <p class="MsoNormal">                   default="0 0 1
                    0"</p>
                  <p class="MsoNormal">                  
                    description="Preliminary rotation of coordinate
                    system before scaling (to allow scaling around
                    arbitrary orientations)."/></p>
                  <p class="MsoNormal">            <field
                    name="segments"</p>
                  <p class="MsoNormal">                   type="MFNode"</p>
                  <p class="MsoNormal">                  
                    accessType="inputOutput"</p>
                  <p class="MsoNormal">                  
                    acceptableNodeTypes="HAnimSegment"</p>
                  <p class="MsoNormal">                  
                    description="The segments field contains a list of
                    USE references for all HAnimSegment node instances
                    found within the preceding skeleton hierarchy."/></p>
                  <p class="MsoNormal">            <field
                    name="sites"</p>
                  <p class="MsoNormal">                   type="MFNode"</p>
                  <p class="MsoNormal">                  
                    accessType="inputOutput"</p>
                  <p class="MsoNormal">                  
                    acceptableNodeTypes="HAnimSite"</p>
                  <p class="MsoNormal">       
                               description="sites field contains a list
                    of USE references for all HAnimSite node instances
                    found within the preceding skeleton hierarchy."/></p>
                  <p class="MsoNormal">            <field
                    name="skeletalConfiguration"</p>
                  <p class="MsoNormal">                  
                    type="SFString"</p>
                  <p class="MsoNormal">                  
                    accessType="inputOutput"</p>
                  <p class="MsoNormal">                  
                    default="BASIC"</p>
                  <p class="MsoNormal">                  
                    description="Models sharing a common skeletal
                    configuration can share animations and binding
                    poses."/></p>
                  <p class="MsoNormal">            <field
                    name="skeleton"</p>
                  <p class="MsoNormal">                   type="MFNode"</p>
                  <p class="MsoNormal">                  
                    accessType="inputOutput"</p>
                  <p class="MsoNormal">                  
                    acceptableNodeTypes="HAnimJoint|HAnimSite"</p>
                  <p class="MsoNormal">                  
                    description="List of top-level HAnimJoint and
                    HAnimSite nodes that create the skeleton
                    model."/></p>
                  <p class="MsoNormal">            <field name="skin"</p>
                  <p class="MsoNormal">                   type="MFNode"</p>
                  <p class="MsoNormal">                  
                    accessType="inputOutput"</p>
                  <p class="MsoNormal">                  
                    acceptableNodeTypes="Group|Transform|Shape|IndexedFaceSet"</p>
                  <p class="MsoNormal">                  
                    description="List of one or more indexed mesh
                    definitions (such as IndexedFaceSet) that utilize
                    skinCoord point and skinNormal normal data."/></p>
                  <p class="MsoNormal">            <field
                    name="skinBindingCoord"</p>
                  <p class="MsoNormal">                   type="SFNode"</p>
                  <p class="MsoNormal">                  
                    accessType="inputOutput"</p>
                  <p class="MsoNormal">                   default="NULL"</p>
                  <p class="MsoNormal">                  
                    acceptableNodeTypes="X3DCoordinateNode"</p>
                  <p class="MsoNormal">                  
                    description="Array of Coordinate nodes to handle
                    non-default source pose so that both skin and
                    skeleton can be in same binding pose."/></p>
                  <p class="MsoNormal">            <field
                    name="skinBindingNormal"</p>
                  <p class="MsoNormal">                   type="SFNode"</p>
                  <p class="MsoNormal">                  
                    accessType="inputOutput"</p>
                  <p class="MsoNormal">                   default="NULL"</p>
                  <p class="MsoNormal">                  
                    acceptableNodeTypes="X3DNormalNode"</p>
                  <p class="MsoNormal">                  
                    description="Array of Normal nodes to handle
                    non-default source pose so that both skin and
                    skeleton can be in same binding pose."/></p>
                  <p class="MsoNormal">            <field
                    name="skinCoord"</p>
                  <p class="MsoNormal">                   type="SFNode"</p>
                  <p class="MsoNormal">                  
                    accessType="inputOutput"</p>
                  <p class="MsoNormal">                   default="NULL"</p>
                  <p class="MsoNormal">                  
                    acceptableNodeTypes="X3DCoordinateNode"</p>
                  <p class="MsoNormal">                  
                    description="Coordinate node utilized by indexed
                    mesh definitions for skin."/></p>
                  <p class="MsoNormal">            <field
                    name="skinNormal"</p>
                  <p class="MsoNormal">                   type="SFNode"</p>
                  <p class="MsoNormal">                  
                    accessType="inputOutput"</p>
                  <p class="MsoNormal">                   default="NULL"</p>
                  <p class="MsoNormal">                  
                    acceptableNodeTypes="X3DNormalNode"</p>
                  <p class="MsoNormal">                  
                    description="Single Normal node utilized by indexed
                    mesh definitions for skin."/></p>
                  <p class="MsoNormal">            <field
                    name="translation"</p>
                  <p class="MsoNormal">                   type="SFVec3f"</p>
                  <p class="MsoNormal">                  
                    accessType="inputOutput"</p>
                  <p class="MsoNormal">                   default="0 0
                    0"</p>
                  <p class="MsoNormal">                  
                    description="Position of children relative to local
                    coordinate system."/></p>
                  <p class="MsoNormal">            <field
                    name="version"</p>
                  <p class="MsoNormal">                  
                    type="SFString"</p>
                  <p class="MsoNormal">                  
                    accessType="inputOutput"</p>
                  <p class="MsoNormal">                   default="2.0"</p>
                  <p class="MsoNormal">                  
                    additionalEnumerationValuesAllowed="false"</p>
                  <p class="MsoNormal">                  
                    simpleType="hanimVersionChoices"</p>
                  <p class="MsoNormal">                  
                    baseType="xs:NMTOKEN"</p>
                  <p class="MsoNormal">                 
                     description="HAnimHumanoid version, where value is
                    1."></p>
                  <p class="MsoNormal">               <enumeration
                    value="1.0"</p>
                  <p class="MsoNormal">                           
                    appinfo="International standard HAnim 19774 version
                    1 approved by ISO in 2006. Note that HAnim version
                    2.0 has more capabilties, while version 1.0 includes
                    several small incompatibilities. Since no other
                    versions were formally approved, no other values are
                    allowed for earlier HAnim versions."</p>
                  <p class="MsoNormal">                           
                    documentation="<a
                      href="https://www.web3d.org/documents/specifications/19774/V1.0"
                      target="_blank" moz-do-not-send="true"
                      class="moz-txt-link-freetext">https://www.web3d.org/documents/specifications/19774/V1.0</a>"
                    /></p>
                  <p class="MsoNormal">               <enumeration
                    value="2.0"</p>
                  <p class="MsoNormal">                           
                    appinfo="Revised standard HAnim 19774 version 2
                    (parts 1 and 2) were approved by ISO in November
                    2019, published by Web3D Consortium May 2020."</p>
                  <p class="MsoNormal">                           
                    documentation="<a
                      href="https://www.web3d.org/documents/specifications/19774/V2.0"
                      target="_blank" moz-do-not-send="true"
                      class="moz-txt-link-freetext">https://www.web3d.org/documents/specifications/19774/V2.0</a>"
                    /></p>
                  <p class="MsoNormal">            </field></p>
                  <p class="MsoNormal">            <field
                    name="viewpoints"</p>
                  <p class="MsoNormal">                   type="MFNode"</p>
                  <p class="MsoNormal">                  
                    accessType="inputOutput"</p>
                  <p class="MsoNormal">                  
                    acceptableNodeTypes="HAnimSite"</p>
                  <p class="MsoNormal">                  
                    description="List of HAnimSite nodes containing
                    Viewpoint nodes that appear in the skeleton model,
                    usually as USE node references."/></p>
                  <p class="MsoNormal">            <field
                    name="visible"</p>
                  <p class="MsoNormal">                   type="SFBool"</p>
                  <p class="MsoNormal">                  
                    accessType="inputOutput"</p>
                  <p class="MsoNormal">                   default="true"</p>
                  <p class="MsoNormal">                  
                    inheritedFrom="X3DBoundedObject"</p>
                  <p class="MsoNormal">                  
                    description="Whether or not renderable content
                    within this node is visually displayed."/></p>
                  <p class="MsoNormal">            <field name="DEF"</p>
                  <p class="MsoNormal">                  
                    type="SFString"</p>
                  <p class="MsoNormal">                  
                    accessType="inputOutput"</p>
                  <p class="MsoNormal">                  
                    inheritedFrom="X3DNode"</p>
                  <p class="MsoNormal">                  
                    baseType="xs:ID"</p>
                  <p class="MsoNormal">                  
                    description="DEF defines a unique ID name for this
                    node, referenceable by other nodes."/></p>
                  <p class="MsoNormal">            <field name="USE"</p>
                  <p class="MsoNormal">                  
                    type="SFString"</p>
                  <p class="MsoNormal">                  
                    accessType="inputOutput"</p>
                  <p class="MsoNormal">                  
                    inheritedFrom="X3DNode"</p>
                  <p class="MsoNormal">                  
                    baseType="xs:IDREF"</p>
                  <p class="MsoNormal">                  
                    description="USE means reuse an already DEF-ed node
                    ID, excluding all child nodes and all other
                    attributes (except for containerField, which can
                    have a different value)."/></p>
                  <p class="MsoNormal">            <field
                    name="class"</p>
                  <p class="MsoNormal">                  
                    type="SFString"</p>
                  <p class="MsoNormal">                  
                    accessType="inputOutput"</p>
                  <p class="MsoNormal">                  
                    inheritedFrom="X3DNode"</p>
                  <p class="MsoNormal">                  
                    baseType="xs:NMTOKENS"</p>
                  <p class="MsoNormal">                  
                    description="The class attribute on each X3D node
                    and statement is a space-separated list of classes,
                    reserved for use by Cascading Style Sheets (CSS) and
                    XML stylesheets."/></p>
                  <p class="MsoNormal">            <field name="id"</p>
                  <p class="MsoNormal">                  
                    type="SFString"</p>
                  <p class="MsoNormal">                  
                    accessType="inputOutput"</p>
                  <p class="MsoNormal">                  
                    inheritedFrom="X3DNode"</p>
                  <p class="MsoNormal">                  
                    baseType="xs:NMTOKEN"</p>
                  <p class="MsoNormal">                  
                    description="The id attribute on each X3D node and
                    statement is considered a unique identifier when
                    used as part of an encompassing HTML/DOM
                    context."/></p>
                  <p class="MsoNormal">            <field
                    name="style"</p>
                  <p class="MsoNormal">          
                            type="SFString"</p>
                  <p class="MsoNormal">                  
                    accessType="inputOutput"</p>
                  <p class="MsoNormal">                  
                    inheritedFrom="X3DNode"</p>
                  <p class="MsoNormal">                  
                    description="The style attribute on each X3D node
                    and statement provides an inline block of CSS source
                    for element styling, reserved for use by Cascading
                    Style Sheets (CSS) and XML stylesheets."/></p>
                  <p class="MsoNormal">            <containerField
                    default="children" type="xs:NMTOKEN"/></p>
                  <p class="MsoNormal">            <ContentModel></p>
                  <p class="MsoNormal">              
                    <GroupContentModel name="ChildContentModelCore"
                    minOccurs="0"/></p>
                  <p class="MsoNormal">           
                       <NodeContentModel name="HAnimJoint"
                    minOccurs="0" maxOccurs="unbounded"/></p>
                  <p class="MsoNormal">              
                    <NodeContentModel name="HAnimSegment"
                    minOccurs="0" maxOccurs="unbounded"/></p>
                  <p class="MsoNormal">              
                    <NodeContentModel name="HAnimSite" minOccurs="0"
                    maxOccurs="unbounded"/></p>
                  <p class="MsoNormal">              
                    <NodeContentModel name="HAnimMotion"
                    minOccurs="0" maxOccurs="unbounded"/></p>
                  <p class="MsoNormal">              
                    <NodeContentModel name="Group"/></p>
                  <p class="MsoNormal">              
                    <NodeContentModel name="Transform"/></p>
                  <p class="MsoNormal">              
                    <NodeContentModel name="Shape"/></p>
                  <p class="MsoNormal">              
                    <NodeContentModel name="IndexedFaceSet"/></p>
                  <p class="MsoNormal">              
                    <NodeContentModel name="Coordinate"/></p>
                  <p class="MsoNormal">              
                    <NodeContentModel name="CoordinateDouble"/></p>
                  <p class="MsoNormal">              
                    <NodeContentModel name="Normal" minOccurs="0"
                    maxOccurs="2"/></p>
                  <p class="MsoNormal">              
                    <NodeContentModel name="ProtoInstance"
                    minOccurs="0" maxOccurs="unbounded"/></p>
                  <p class="MsoNormal">            </ContentModel></p>
                  <p class="MsoNormal">        
                    </InterfaceDefinition></p>
                  <p class="MsoNormal">      </ConcreteNode></p>
                  <p class="MsoNormal"> </p>
                  <p class="MsoNormal">Regarding python, I checked the
                    conversion of JinLOA4.x3d to JinLOA4.py</p>
                  <p class="MsoNormal"> </p>
                  <p class="MsoNormal">Stylesheet X3dToPython.xstl
                    seemed to work OK </p>
                  <p class="MsoNormal"> </p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">   
HAnimHumanoid(DEF='hanim_JinLOA4',loa=4,name='JinLOA4',scale=(0.0225,0.0225,0.0225),version='2.0',</span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">      skeleton=[</span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">     
HAnimJoint(DEF='hanim_humanoid_root',center=(0,36.709999,-0.707600),name='humanoid_root',stiffness=[0,0,0],</span></p>
                  <p class="MsoNormal"> </p>
                  <p class="MsoNormal">but then got a self-validation
                    error by the JinLOA4.py python program,
                  </p>
                  <p class="MsoNormal"> </p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">create python:</span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">C:\x3d-code\<a
                        href="http://www.web3d.org" target="_blank"
                        style="font-family:"Courier New""
                        moz-do-not-send="true">www.web3d.org</a>\x3d\content\examples\HumanoidAnimation/Characters//JinLOA4.x3d
                      processing with X3dToPython stylesheet...</span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">C:\x3d-code\<a
                        href="http://www.web3d.org" target="_blank"
                        style="font-family:"Courier New""
                        moz-do-not-send="true">www.web3d.org</a>\x3d\content\examples\HumanoidAnimation/Characters//JinLOA4.py
                      self-validation tests...</span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">validate python:</span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">x3d.py package loaded, have fun with
                      X3D Graphics!</span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">Traceback (most recent call last):</span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">  File "C:\x3d-code\<a
                        href="http://www.web3d.org" target="_blank"
                        style="font-family:"Courier New""
                        moz-do-not-send="true">www.web3d.org</a>\x3d\content\examples\HumanoidAnimation\Characters\JinLOA4.py",
                      line 169, in <module></span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">   
HAnimJoint(DEF='hanim_l_tarsal_distal_interphalangeal_1',center=(2.761,0.539400,5.125),name='l_tarsal_distal_interphalangeal_1',stiffness=[0,0,0],</span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">  File "C:\x3d-code\<a
                        href="http://www.web3d.org" target="_blank"
                        style="font-family:"Courier New""
                        moz-do-not-send="true">www.web3d.org</a>\x3d\stylesheets\python\x3d\x3d.py",
                      line 43724, in __init__</span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">    self.stiffness = stiffness</span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">  File "C:\x3d-code\<a
                        href="http://www.web3d.org" target="_blank"
                        style="font-family:"Courier New""
                        moz-do-not-send="true">www.web3d.org</a>\x3d\stylesheets\python\x3d\x3d.py",
                      line 43873, in stiffness</span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">    assertValidSFVec3f(stiffness)</span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">  File "C:\x3d-code\<a
                        href="http://www.web3d.org" target="_blank"
                        style="font-family:"Courier New""
                        moz-do-not-send="true">www.web3d.org</a>\x3d\stylesheets\python\x3d\x3d.py",
                      line 3953, in assertValidSFVec3f</span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">    raise X3DTypeError(str(value)[:100]
                      + ', type=' + str(type(value)) + ' is not a valid
                      Python tuple for SFVec3f')</span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">x3d.X3DTypeError: [0, 0, 0],
                      type=<class 'list'> is not a valid Python
                      tuple for SFVec3f</span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">Result: 1</span></p>
                  <p class="MsoNormal"> </p>
                  <p class="MsoNormal">Note how <span
                      style="font-size:10pt;font-family:"Courier
                      New"">
                      stiffness=[0,0,0]</span>was given as a list in
                    brackets, rather than a tuple value in parentheses
                    <span
                      style="font-size:10pt;font-family:"Courier
                      New"">stiffness=(0,0,0)</span> as might be
                    expected for SFVec3f, and so this is a useful
                    diagnostic.</p>
                  <p class="MsoNormal"> </p>
                  <p class="MsoNormal">However the actual specification
                    type for stiffness is MFFloat.  (This was a mantis
                    issue, might we tighten it to SFVec3f, but decided
                    to keep it MFFloat in case more-advanced kinematics
                    engines were someday of interest.</p>
                  <p class="MsoNormal"> </p>
                  <p class="MsoNormal">* <a
href="https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-CD1/Part01/components/hanim.html#HAnimJoint"
                      target="_blank" moz-do-not-send="true"
                      class="moz-txt-link-freetext">https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-CD1/Part01/components/hanim.html#HAnimJoint</a></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New""> </span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">26.3.3 HAnimJoint</span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">HAnimJoint : X3DGroupingNode {</span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">[…]</span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">  MFFloat    [in,out] stiffness       
                      [0 0 0]  [0,1]</span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New""> </span></p>
                  <p class="MsoNormal"> </p>
                  <p class="MsoNormal">Applied change to X3D DTD, X3D
                    XML Schema and again autogenerated X3DUOM and x3d.py
                    and X3D Ontology to match.</p>
                  <p class="MsoNormal"> </p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">23 DEC 2021, carlson brutzman</span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">- restore type of HAnimJoint stiffness
                      field as MFFloat (vice SFVec3f) to match</span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">  specification, since more-advanced
                      kinematics engines might someday hold interest.</span></p>
                  <p class="MsoNormal"> </p>
                  <p class="MsoNormal">This fixed the stiffness error.</p>
                  <p class="MsoNormal"> </p>
                  <p class="MsoNormal">However, next got a surprising
                    conversion error (which might have been what you
                    experienced originally):</p>
                  <p class="MsoNormal"> </p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">=====================</span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">create python:</span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">C:\x3d-code\<a
                        href="http://www.web3d.org" target="_blank"
                        style="font-family:"Courier New""
                        moz-do-not-send="true">www.web3d.org</a>\x3d\content\examples\HumanoidAnimation/Characters//JinLOA4.x3d
                      processing with X3dToPython stylesheet...</span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">C:\x3d-code\<a
                        href="http://www.web3d.org" target="_blank"
                        style="font-family:"Courier New""
                        moz-do-not-send="true">www.web3d.org</a>\x3d\content\examples\HumanoidAnimation/Characters//JinLOA4.py
                      self-validation tests...</span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">validate python:</span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">x3d.py package loaded, have fun with
                      X3D Graphics!Traceback (most recent call last):</span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New""> </span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">  File "C:\x3d-code\<a
                        href="http://www.web3d.org" target="_blank"
                        style="font-family:"Courier New""
                        moz-do-not-send="true">www.web3d.org</a>\x3d\content\examples\HumanoidAnimation\Characters\JinLOA4.py",
                      line 50, in <module></span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">   
HAnimHumanoid(DEF='hanim_JinLOA4',loa=4,name='JinLOA4',scale=(0.0225,0.0225,0.0225),version='2.0',</span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">TypeError: HAnimHumanoid.__init__() got
                      an unexpected keyword argument 'value'</span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">Result: 1</span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">=====================</span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New""> </span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New""> </span></p>
                  <p class="MsoNormal">Which apparently was on line
                    1950,</p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New""> </span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">  
                      value=MetadataSet(name='HAnimHumanoid.info',reference='<a
href="https://www.web3d.org/documents/specifications/19774/V2.0/Architecture/ObjectInterfaces.html#Humanoid"
                        target="_blank" style="font-family:"Courier
                        New"" moz-do-not-send="true"
                        class="moz-txt-link-freetext">https://www.web3d.org/documents/specifications/19774/V2.0/Architecture/ObjectInterfaces.html#Humanoid</a>',
                    </span>etc.</p>
                  <p class="MsoNormal"> </p>
                  <p class="MsoNormal">This conversion should have been
                    <span
                      style="font-size:10pt;font-family:"Courier
                      New"">
                      metadata=MetadataSet</span> etc. Looks like the
                    field name for the HAnimHumanoid MetadataSet was not
                    specified incorrectly, the automatic conversion by
                    X3dTidy did not apply correct containerField value.</p>
                  <p class="MsoNormal"> </p>
                  <p class="MsoNormal">I have added a rule to
                    X3dTidy.xslt that looks for this case (for either
                    representation, X3D3 or X3D4) and corrects it.  I
                    have added a similar diagnostic rule to
                    X3dSchematron checks.</p>
                  <p class="MsoNormal"> </p>
                  <p class="MsoNormal">All affected HAnimHumanoid scenes
                    have been updated and are now getting compiled
                    correctly by Python.</p>
                  <p class="MsoNormal"> </p>
                  <p class="MsoNormal">All changes checked into
                    subversion.  Further regression testing continuing,
                    website uploads to follow.</p>
                  <p class="MsoNormal"> </p>
                  <p class="MsoNormal">So again thanks for exposing this
                    issue.  Pretty complex but resolvable.  Once again
                    the strict nature of Python aided us in achieving
                    high Quality Assurance (QA) for X3D.</p>
                  <p class="MsoNormal"> </p>
                  <p class="MsoNormal">Happy holidays with X3D!   8)<span
                      style="font-size:10pt;font-family:"Courier
                      New""></span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New""> </span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">all the best, Don</span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">-- </span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">Don Brutzman  Naval Postgraduate
                      School, Code USW/Br        <a
                        href="mailto:brutzman@nps.edu" target="_blank"
                        style="font-family:"Courier New""
                        moz-do-not-send="true"
                        class="moz-txt-link-freetext">brutzman@nps.edu</a></span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">Watkins 270,  MOVES Institute, Monterey
                      CA 93943-5000 USA    +1.831.656.2149</span></p>
                  <p class="MsoNormal"><span
                      style="font-size:10pt;font-family:"Courier
                      New"">X3D graphics, virtual worlds, navy
                      robotics https://</span>
                    <span
                      style="font-size:10pt;font-family:"Courier
                      New""><a
                        href="http://faculty.nps.edu/brutzman"
                        target="_blank" style="font-family:"Courier
                        New"" moz-do-not-send="true">faculty.nps.edu/brutzman</a></span></p>
                </div>
                <p class="MsoNormal"> </p>
                <div>
                  <div style="border-style:solid none
                    none;border-top-width:1pt;padding:3pt 0in
                    0in;border-top-color:rgb(225,225,225)">
                    <p class="MsoNormal"><b>From:</b> John Carlson <<a
                        href="mailto:yottzumm@gmail.com" target="_blank"
                        moz-do-not-send="true"
                        class="moz-txt-link-freetext">yottzumm@gmail.com</a>>
                      <br>
                      <b>Sent:</b> Wednesday, December 22, 2021 12:44 PM<br>
                      <b>To:</b> Brutzman, Donald (Don) (CIV) <<a
                        href="mailto:brutzman@nps.edu" target="_blank"
                        moz-do-not-send="true"
                        class="moz-txt-link-freetext">brutzman@nps.edu</a>>;
                      X3D Graphics public mailing list <<a
                        href="mailto:x3d-public@web3d.org"
                        target="_blank" moz-do-not-send="true"
                        class="moz-txt-link-freetext">x3d-public@web3d.org</a>><br>
                      <b>Subject:</b> Re: HAnim, X3dToPython.xslt
                      X3dToJson.xslt Upgrade X3DUOM?</p>
                  </div>
                </div>
                <p class="MsoNormal"> </p>
                <div>
                  <div>
                    <p class="MsoNormal">I believe I checked the right
                      standard, here:</p>
                  </div>
                  <div>
                    <p class="MsoNormal"> </p>
                    <div>
                      <p class="MsoNormal"><a
href="https://www.web3d.org/documents/specifications/19774-1/V2.0/index.html"
                          target="_blank" moz-do-not-send="true"
                          class="moz-txt-link-freetext">https://www.web3d.org/documents/specifications/19774-1/V2.0/index.html</a></p>
                    </div>
                    <div>
                      <p class="MsoNormal"> </p>
                    </div>
                    <p class="MsoNormal"> And neither value or metadata
                      is a field????</p>
                  </div>
                  <div>
                    <p class="MsoNormal"> </p>
                  </div>
                  <div>
                    <p class="MsoNormal">Seems a bit strange.</p>
                  </div>
                  <div>
                    <p class="MsoNormal"> </p>
                    <div>
                      <div>
                        <p class="MsoNormal">On Wed, Dec 22, 2021 at
                          2:20 PM John Carlson <<a
                            href="mailto:yottzumm@gmail.com"
                            target="_blank" moz-do-not-send="true"
                            class="moz-txt-link-freetext">yottzumm@gmail.com</a>>
                          wrote:</p>
                      </div>
                      <blockquote style="border-style:none none none
                        solid;border-left-width:1pt;padding:0in 0in 0in
6pt;margin-left:4.8pt;margin-right:0in;border-left-color:rgb(204,204,204)">
                        <div>
                          <p class="MsoNormal">hoping to see value field
                            added to HAnimHumanoid in X3DUOM, or some
                            notice that the package generating
                            stylesheets are not up-to-date.</p>
                        </div>
                        <div>
                          <p class="MsoNormal"> </p>
                        </div>
                        <div>
                          <p class="MsoNormal">Also, check to make sure
                            stiffness is assigned the right data
                            structure (between list and tuple).   And
                            no, iOS, I do not want “Tupperware” for the
                            second time.   We need more women
                            mathematicians (sorry for any
                            stereotyping).  On that subject, I wonder
                            what coordinate system crocheted hats use?</p>
                        </div>
                        <div>
                          <p class="MsoNormal"> </p>
                          <div>
                            <div>
                              <p class="MsoNormal">On Mon, Dec 20, 2021
                                at 3:17 AM John Carlson <<a
                                  href="mailto:yottzumm@gmail.com"
                                  target="_blank" moz-do-not-send="true"
                                  class="moz-txt-link-freetext">yottzumm@gmail.com</a>>
                                wrote:</p>
                            </div>
                            <blockquote style="border-style:none none
                              none
                              solid;border-left-width:1pt;padding:0in
                              0in 0in
6pt;margin-left:4.8pt;margin-right:0in;border-left-color:rgb(204,204,204)">
                              <div>
                                <p>Okay, now I seem to be having a
                                  similar problem between my python
                                  serializer, X3dToPython.xslt, and
                                  probably other serialized stuff.  I
                                  couldn't figure out how to fix the
                                  stiffness issue in X3dToPython.xslt,
                                  but hand-editing saved that on this
                                  particular python file
                                  (python/net/x3djsonld/data/JinLOA4.py).
                                  Other JinLOA's still have lists with
                                  Don's generator.</p>
                                <p>I believe the main change I am
                                  dealing with is metadata vs value
                                  containerFields.   See JSON diff
                                  below.  I'm not seeing relevant
                                  changes to X3D JSON schema 4.0.  Does
                                  something need to be upgraded in
                                  X3DUOM or X3D JSON schema?  I'm not
                                  seeing a value field in HAnimHumanoid.</p>
                                <p><b><span
                                      style="font-family:"Courier
                                      New";background-color:white;color:rgb(84,84,255)">~/X3DJSONLD/src/main/python/net/coderextreme/data</span></b><span
                                    style="font-family:"Courier
                                    New";background-color:white;color:black">$
                                    python JinLOA4.py  </span><span
                                    style="font-family:"Courier
                                    New""><br>
                                    Traceback (most recent call last): <br>
                                     File
"/home/coderextreme/X3DJSONLD/src/main/python/net/coderextreme/data/JinLOA4.py",
                                    line 148, in <module>
                                    <br>
   HAnimHumanoid23.setValue(MetadataSet24) <br>
                                    AttributeError:
                                    'org.web3d.x3d.jsail.HAnim.HAnimHumanoid'
                                    object has no attribute 'setValue'.
                                    Did you mean: 'setName'?
                                    <br>
                                    <b style="font-family:"Courier
                                      New""><span
                                        style="font-family:"Courier
New";background-color:white;color:rgb(84,84,255)">~/X3DJSONLD/src/main/python/net/x3djsonld/data</span></b><span
                                      style="font-family:"Courier
                                      New";background-color:white;color:black">$
                                      python JinLOA4.py        </span><br>
                                    x3d.py package loaded, have fun with
                                    X3D Graphics! <br>
                                    Traceback (most recent call last): <br>
                                     File
"/home/coderextreme/X3DJSONLD/src/main/python/net/x3djsonld/data/JinLOA4.py",
                                    line 50, in <module>
                                    <br>
   HAnimHumanoid(DEF='hanim_JinLOA4',loa=4,name='JinLOA4',scale=(0.0225,0.0225,0.0225),version='2.0',
                                    <br>
                                    TypeError: HAnimHumanoid.__init__()
                                    got an unexpected keyword argument
                                    'value'</span></p>
                                <p> </p>
                                <p> </p>
                                <p><br>
                                  <b><span
                                      style="font-family:"Courier
                                      New";background-color:white;color:rgb(84,84,255)">~/X3DJSONLD/src/main/data</span></b><span
                                    style="font-family:"Courier
                                    New";background-color:white;color:black">$
                                    git diff JinLOA4.json
                                  </span><span
                                    style="font-family:"Courier
                                    New""><br>
                                    <b style="font-family:"Courier
                                      New""><span
                                        style="font-family:"Courier
New";background-color:white;color:black">diff --git
                                        a/src/main/data/JinLOA4.json
                                        b/src/main/data/JinLOA4.json</span></b><span
                                      style="font-family:"Courier
                                      New";background-color:white;color:black">
                                    </span><br>
                                    <b style="font-family:"Courier
                                      New""><span
                                        style="font-family:"Courier
New";background-color:white;color:black">index c970a652a..e1930f4cf
                                        100644</span></b><span
                                      style="font-family:"Courier
                                      New";background-color:white;color:black">
                                    </span><br>
                                    <b style="font-family:"Courier
                                      New""><span
                                        style="font-family:"Courier
New";background-color:white;color:black">---
                                        a/src/main/data/JinLOA4.json</span></b><span
                                      style="font-family:"Courier
                                      New";background-color:white;color:black">
                                    </span><br>
                                    <b style="font-family:"Courier
                                      New""><span
                                        style="font-family:"Courier
New";background-color:white;color:black">+++
                                        b/src/main/data/JinLOA4.json</span></b><span
                                      style="font-family:"Courier
                                      New";background-color:white;color:black">
                                    </span><br>
                                    <span
                                      style="font-family:"Courier
                                      New";background-color:white;color:rgb(24,178,178)">@@
                                      -78,7 +78,7 @@</span><span
                                      style="font-family:"Courier
                                      New";background-color:white;color:black">
                                    </span><br>
                                              }, <br>
                                              { <br>
                                                "@name":"translated", <br>
                                    <span
                                      style="font-family:"Courier
                                      New";background-color:white;color:rgb(178,24,24)">-
                                                 "@content":"14 October
                                      2021"</span><span
                                      style="font-family:"Courier
                                      New";background-color:white;color:black">
                                    </span><br>
                                    <span
                                      style="font-family:"Courier
                                      New";background-color:white;color:rgb(24,178,24)">+
                                                 "@content":"20 December
                                      2021"</span><span
                                      style="font-family:"Courier
                                      New";background-color:white;color:black">
                                    </span><br>
                                              }, <br>
                                              { <br>
                                                "@name":"generator", <br>
                                    <span
                                      style="font-family:"Courier
                                      New";background-color:white;color:rgb(24,178,178)">@@
                                      -116,7 +116,7 @@</span><span
                                      style="font-family:"Courier
                                      New";background-color:white;color:black">
                                    </span><br>
                                                  "@loa":4, <br>
              "@scale":[0.0225,0.0225,0.0225], <br>
                                                  "@version":"2.0", <br>
                                    <span
                                      style="font-family:"Courier
                                      New";background-color:white;color:rgb(178,24,24)">-
                                                   "-metadata":</span><span
                                      style="font-family:"Courier
                                      New";background-color:white;color:black">
                                    </span><br>
                                    <span
                                      style="font-family:"Courier
                                      New";background-color:white;color:rgb(24,178,24)">+
                                                   "-value":[</span><span
                                      style="font-family:"Courier
                                      New";background-color:white;color:black">
                                    </span><br>
                                                    { "MetadataSet": <br>
                                                      { <br>
                    "@name":"HAnimHumanoid.info", <br>
                                    <span
                                      style="font-family:"Courier
                                      New";background-color:white;color:rgb(24,178,178)">@@
                                      -160,7 +160,8 @@</span><span
                                      style="font-family:"Courier
                                      New";background-color:white;color:black">
                                    </span><br>
                                                          } <br>
                                                        ] <br>
                                                      } <br>
                                    <span
                                      style="font-family:"Courier
                                      New";background-color:white;color:rgb(178,24,24)">-
                                                     },</span><span
                                      style="font-family:"Courier
                                      New";background-color:white;color:black">
                                    </span><br>
                                    <span
                                      style="font-family:"Courier
                                      New";background-color:white;color:rgb(24,178,24)">+
                                                     }</span><span
                                      style="font-family:"Courier
                                      New";background-color:white;color:black">
                                    </span><br>
                                    <span
                                      style="font-family:"Courier
                                      New";background-color:white;color:rgb(24,178,24)">+
                                                   ],</span><span
                                      style="font-family:"Courier
                                      New";background-color:white;color:black">
                                    </span><br>
                                                  "-skeleton":[ <br>
                                                    { "HAnimJoint": <br>
                                                      {<br>
                                    <br>
                                    ===================</span></p>
                                <p><span
                                    style="font-family:"Courier
                                    New"">Validating JSON against
                                    schema:</span></p>
                                <p><b><span
                                      style="font-family:"Courier
                                      New";background-color:white;color:rgb(84,84,255)">~/X3DJSONLD/src/main/schema</span></b><span
                                    style="font-family:"Courier
                                    New";background-color:white;color:black">$
                                    node ~/x3dvalidate/x3dvalidate.js
                                    ../data/JinLOA4.json  </span><span
                                    style="font-family:"Courier
                                    New""><br>
                                    Loading schema <br>
                                    Parsing schema <br>
                                    Adding schema <br>
                                    Schema 4.0 added <br>
                                    Schema 4.0 compiled <br>
================================================================================
                                    <br>
                                    File: ../data/JinLOA4.json <br>
                                    Error reading ../data/JinLOA4.json  <br>
                                    keyword: required <br>
                                    instancePath:
                                    /X3D/Scene/-children/3/HAnimHumanoid
                                    <br>
                                    message: must have required property
                                    @USE <br>
                                    params: {"missingProperty":"@USE"} <br>
                                    file: ../data/JinLOA4.json <br>
                                    version: 4.0 <br>
                                    <br>
                                    keyword: additionalProperties <br>
                                    instancePath:
                                    /X3D/Scene/-children/3/HAnimHumanoid
                                    <br>
                                    message: must NOT have additional
                                    properties <br>
                                    params:
                                    {"additionalProperty":"-value"} <br>
                                    file: ../data/JinLOA4.json <br>
                                    version: 4.0 <br>
                                    <br>
                                    keyword: oneOf <br>
                                    instancePath:
                                    /X3D/Scene/-children/3/HAnimHumanoid
                                    <br>
                                    message: must match exactly one
                                    schema in "oneOf" <br>
                                    params: {"passingSchemas":null} <br>
                                    file: ../data/JinLOA4.json <br>
                                    version: 4.0</span></p>
                              </div>
                            </blockquote>
                          </div>
                        </div>
                      </blockquote>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </blockquote>
        </div>
      </div>
    </blockquote>
  </body>
</html>