<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html;
      charset=windows-1252">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">The original purpose (and still used in
      this manner) of the 'USE' attribute is to indicate that another
      node should also appear in place of the node declaring 'USE'. In
      fact the specification states (4.4.3 -
<a class="moz-txt-link-freetext" href="http://www.web3d.org/documents/specifications/19775-1/V3.3/Part01/concepts.html#DEFL_USESemantics">http://www.web3d.org/documents/specifications/19775-1/V3.3/Part01/concepts.html#DEFL_USESemantics</a>)
      that "the same node is inserted into the scene graph a second
      time, resulting in the node having multiple parents".<br>
      <br>
      This requirement is not allowed in DOM (see
      <a class="moz-txt-link-freetext" href="https://www.w3.org/TR/dom/#concept-node-tree">https://www.w3.org/TR/dom/#concept-node-tree</a> for the standard,
      <a class="moz-txt-link-freetext" href="https://www.w3.org/wiki/Traversing_the_DOM#Nodes">https://www.w3.org/wiki/Traversing_the_DOM#Nodes</a> for the
      explanation). A DOM element is allowed to have at most one parent.
      It is possible to create a (deep) copy of the node and insert it
      into the tree. That gives a structure like:<br>
      <br>
      <tt>[Meant to be seen in fixed width font]</tt><br>
      <br>
      <font size="+1"><tt><font size="+1"><tt>  B - C - D<br>
               </tt></font></tt></font><font size="+1"><tt><font
            size="+1"><tt><font size="+1"><tt>/       <br>
                </tt></font></tt></font>A        <br>
           \       <br>
             E -CC -DD<br>
          <br>
        </tt></font>Where A is the parent of this (sub-)tree, B is the
      node that start one branch (e.g., Transform). C is the 'DEF'ed
      node with a child of D. E is a separate child of A (e.g., a
      different Transform) CC is the 'USE' version of C. Since HTML does
      not allow multiple parents ('B' and 'E'), a copy of 'C' needs to
      be made. This needs to be a deep copy (all children) as no node
      can have more than one parent.<br>
      <br>
      The problem with a deep copy is that it is non-deterministic as
      the element is self-referential (it refers to it's parent, which
      refers to it...)<br>
      <br>
      It seems to me that there is a conflict in requirements between
      X3D's statement on DEF/USE and the requirement to put all X3D
      nodes in the DOM. There are several ways around this:<br>
      1) Remove the multiple parent requirement from DEF/USE<br>
      2) Remove the requirement of all nodes being in the DOM.<br>
      <br>
      Each has advantages and disadvantages. Which choice is made
      determines how X3D operates in the HTML/DOM environment.<br>
      <br>
      <br>
      Leonard Daly<br>
      <br>
      <br>
      <br>
      <br>
      <br>
      <br>
      <br>
    </div>
    <blockquote type="cite"
      cite="mid:021101d2e5e2$75bdfa80$6139ef80$@ntlworld.com">
      <meta http-equiv="Content-Type" content="text/html;
        charset=windows-1252">
      <meta name="Generator" content="Microsoft Word 15 (filtered
        medium)">
      <style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0cm;
        margin-right:0cm;
        margin-bottom:0cm;
        margin-left:36.0pt;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:1596867684;
        mso-list-type:hybrid;
        mso-list-template-ids:96228464 134807569 134807577 134807579 134807567 134807577 134807579 134807567 134807577 134807579;}
@list l0:level1
        {mso-level-text:"%1\)";
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l0:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l0:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
ol
        {margin-bottom:0cm;}
ul
        {margin-bottom:0cm;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
      <div class="WordSection1">
        <p class="MsoNormal">Hi all,<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">Recently we updated the DTD/schemas to make
          the “name” field of nodes like MetadataBoolean, or
          FloatVertexAttribute a required field. However, we then
          realised that when any of these nodes has the “USE” attribute,
          the “name” field must not be set. Hence the changes needed to
          be revisited.<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">I started to look at the JSON schema for
          the MetadataBoolean node, to try to implement this stricter
          validation requirement. With some online assistance I found
          that I could easily make either one or the other required, but
          not both. This would meet the original requirement.<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">However, this raised a more general
          question in my mind. When any node has the “USE” attribute
          set, what other fields/attributes are permitted?<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">As a test case, I concentrated on the
          MetadataBoolean node. I came up with a JSON schema that might
          illustrate this better. I have attached a snapshot image for
          this fragment of the JSON schema.<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">The validation of the MetadataBoolean node
          begins with a “one of” operator (shown immediately to the
          right of the MetadataBoolean box. This operator requires that
          one, and only one, of the two subschemas be valid. For the
          first subschema (the upper of the two) I simply removed the
          “@USE” property, making the “@name” field required (to meet
          the original requirement). For the second subschema (the lower
          of the two) I made the “@USE” property required, and only
          added the “IS” property. Note that both subschemas only permit
          those properties listed (i.e. additional properties are
          disallowed).<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">In principle, there should be no difficulty
          applying this validation methodology within the JSON schema to
          all nodes.<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">Some questions:<o:p></o:p></p>
        <ol style="margin-top:0cm" start="1" type="1">
          <li class="MsoListParagraph"
            style="margin-left:0cm;mso-list:l0 level1 lfo1">Is this
            validation methodology correctly aligned with the standards?<o:p></o:p></li>
          <li class="MsoListParagraph"
            style="margin-left:0cm;mso-list:l0 level1 lfo1">Do we want
            to apply this methodology to all nodes?<o:p></o:p></li>
          <li class="MsoListParagraph"
            style="margin-left:0cm;mso-list:l0 level1 lfo1">Do we want
            to apply this methodology to other validation tools, e.g.
            Schematron, and also consider whether the XML schema or the
            DTD have sufficient expressive power too.<o:p></o:p></li>
        </ol>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">All comments appreciated,<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">All the best,<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">Roy<o:p></o:p></p>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
x3d-public mailing list
<a class="moz-txt-link-abbreviated" href="mailto:x3d-public@web3d.org">x3d-public@web3d.org</a>
<a class="moz-txt-link-freetext" href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org">http://web3d.org/mailman/listinfo/x3d-public_web3d.org</a>
</pre>
    </blockquote>
    <p><br>
    </p>
    <div class="moz-signature">-- <br>
      <font class="tahoma,arial,helvetica san serif" color="#333366">
        <font size="+1"><b>Leonard Daly</b></font><br>
        3D Systems & Cloud Consultant<br>
        LA ACM SIGGRAPH Chair<br>
        President, Daly Realism - <i>Creating the Future</i>
      </font></div>
  </body>
</html>