<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><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;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 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;}
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;}
--></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]--></head><body lang=EN-GB link="#0563C1" vlink="#954F72"><div class=WordSection1><p class=MsoNormal>Hi,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I have been considering the Object Model for X3D (OM4X3D). I noted the following definition for the abstract node type X3DNode, which is inherited by all nodes:<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>      </span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'><</span><span style='font-size:10.0pt;font-family:Consolas;color:maroon;background:white;mso-highlight:white'>AbstractNodeType</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'> name</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>X3DNode</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"></span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>         </span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'><</span><span style='font-size:10.0pt;font-family:Consolas;color:maroon;background:white;mso-highlight:white'>InterfaceDefinition</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'> specificationUrl</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>http://www.web3d.org/documents/specifications/19775-1/V3.3/Part01/components/core.html#X3DNode</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'>                              appinfo</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>All instantiable nodes implement X3DNode, which corresponds to SFNode in the X3D specification.</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"></span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>            </span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'><</span><span style='font-size:10.0pt;font-family:Consolas;color:maroon;background:white;mso-highlight:white'>componentInfo</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'> name</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>Core</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'> level</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>1</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"/></span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>            </span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'><</span><span style='font-size:10.0pt;font-family:Consolas;color:maroon;background:white;mso-highlight:white'>field</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'> type</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>SFNode</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'>                   accessType</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>inputOutput</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'>                   name</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>metadata</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'>                   default</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>NULL</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'>                   acceptableNodeTypes</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>X3DMetadataObject</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"/></span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>            </span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'><</span><span style='font-size:10.0pt;font-family:Consolas;color:maroon;background:white;mso-highlight:white'>field</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'> type</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>SFString</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'>                   accessType</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>inputOutput</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'>                   name</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>DEF</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'>                   inheritedFrom</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>DEF_USE</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"/></span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>            </span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'><</span><span style='font-size:10.0pt;font-family:Consolas;color:maroon;background:white;mso-highlight:white'>field</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'> type</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>SFString</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'>                   accessType</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>inputOutput</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'>                   name</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>USE</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'>                   inheritedFrom</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>DEF_USE</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"/></span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>            </span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'><</span><span style='font-size:10.0pt;font-family:Consolas;color:maroon;background:white;mso-highlight:white'>field</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'> type</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>SFString</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'>                   accessType</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>inputOutput</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'>                   name</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>class</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'>                   inheritedFrom</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>globalAttributes</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"/></span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>            </span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'><</span><span style='font-size:10.0pt;font-family:Consolas;color:maroon;background:white;mso-highlight:white'>ContentModel</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>></span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>               </span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'><</span><span style='font-size:10.0pt;font-family:Consolas;color:maroon;background:white;mso-highlight:white'>GroupContentModel</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'> name</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>ChildContentModelCore</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'> minOccurs</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>0</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"/></span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>            </span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'></</span><span style='font-size:10.0pt;font-family:Consolas;color:maroon;background:white;mso-highlight:white'>ContentModel</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>></span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>         </span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'></</span><span style='font-size:10.0pt;font-family:Consolas;color:maroon;background:white;mso-highlight:white'>InterfaceDefinition</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>></span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>      </span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'></</span><span style='font-size:10.0pt;font-family:Consolas;color:maroon;background:white;mso-highlight:white'>AbstractNodeType</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>></span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The items in this listing that bother me are those for the “DEF”, “USE” and “class”. These are common to all node types, both abstract and concrete.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Each of these is defined as a “field”. Clearly, in X3D, these are not “fields”. They do not have the properties of “fields” in general, such as “accessType”, or of the SFString field type in particular.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I think these need to be defined in alternative terms, using terminology that differentiates them from fields. I suggest “attribute”. There may well be better terms.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I propose that the definition above would be more accurately expressed as follows:<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>      </span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'><</span><span style='font-size:10.0pt;font-family:Consolas;color:maroon;background:white;mso-highlight:white'>AbstractNodeType</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'> name</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>X3DNode</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"></span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>         </span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'><</span><span style='font-size:10.0pt;font-family:Consolas;color:maroon;background:white;mso-highlight:white'>InterfaceDefinition</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'> specificationUrl</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>http://www.web3d.org/documents/specifications/19775-1/V3.3/Part01/components/core.html#X3DNode</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'>                              appinfo</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>All instantiable nodes implement X3DNode, which corresponds to SFNode in the X3D specification.</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"></span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>            </span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'><</span><span style='font-size:10.0pt;font-family:Consolas;color:maroon;background:white;mso-highlight:white'>componentInfo</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'> name</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>Core</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'> level</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>1</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"/></span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>            </span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'><</span><span style='font-size:10.0pt;font-family:Consolas;color:maroon;background:white;mso-highlight:white'>field</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'> type</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>SFNode</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'>                   accessType</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>inputOutput</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'>                   name</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>metadata</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'>                   default</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>NULL</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'>                   acceptableNodeTypes</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>X3DMetadataObject</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"/></span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>            </span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'><</span><span style='font-size:10.0pt;font-family:Consolas;color:maroon;background:white;mso-highlight:white'>attribute</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'> type</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>NMTOKEN</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'>                   name</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>DEF</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'>                   inheritedFrom</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>DEF_USE</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"/></span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>            </span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'><</span><span style='font-size:10.0pt;font-family:Consolas;color:maroon;background:white;mso-highlight:white'>attribute</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'> type</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>NMTOKEN</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'>                   name</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>USE</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'>                   inheritedFrom</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>DEF_USE</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"/></span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>            </span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'><</span><span style='font-size:10.0pt;font-family:Consolas;color:maroon;background:white;mso-highlight:white'>attribute</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'> type</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>NMTOKEN</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'>                   name</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>class</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'>                   inheritedFrom</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>globalAttributes</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"/></span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>            </span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'><</span><span style='font-size:10.0pt;font-family:Consolas;color:maroon;background:white;mso-highlight:white'>ContentModel</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>></span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>               </span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'><</span><span style='font-size:10.0pt;font-family:Consolas;color:maroon;background:white;mso-highlight:white'>GroupContentModel</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'> name</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>ChildContentModelCore</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"</span><span style='font-size:10.0pt;font-family:Consolas;color:red;background:white;mso-highlight:white'> minOccurs</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>="</span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>0</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>"/></span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>            </span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'></</span><span style='font-size:10.0pt;font-family:Consolas;color:maroon;background:white;mso-highlight:white'>ContentModel</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>></span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>         </span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'></</span><span style='font-size:10.0pt;font-family:Consolas;color:maroon;background:white;mso-highlight:white'>InterfaceDefinition</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>></span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>      </span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'></</span><span style='font-size:10.0pt;font-family:Consolas;color:maroon;background:white;mso-highlight:white'>AbstractNodeType</span><span style='font-size:10.0pt;font-family:Consolas;color:blue;background:white;mso-highlight:white'>></span><span style='font-size:10.0pt;font-family:Consolas;color:black;background:white;mso-highlight:white'><o:p></o:p></span></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I have suggested the “type” of each attribute might be “NMTOKEN”. There may well be better types. If not, then “NMTOKEN” would need some explanation.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>One final observation, specific to the X3DNode abstract type, is the “appinfo” text. This says the “X3DNode” “corresponds to SFNode in the X3D specification”. This is clearly not true. SFNode is a field type. X3DNode is an abstract node type. The only relationship between the two is that any node can be set as the “value” of an SFNode field type.<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><p class=MsoNormal><o:p> </o:p></p></div></body></html>