<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"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:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style></head><body lang=EN-US><div class=WordSection1><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Don wrote:</p><p class=MsoNormal>Note that the nodes inherit from X3DConcreteNode, statements inherit from X3DConcreteStatement, and everything inherits from X3DConcreteElement.  These abstract superclasses can be helpful when you need to distinguish between discovered objects (such as children nodes/statements).</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This is not obvious from looking at the Object Model.  Should it be?  X3DConcrete is not even mentioned in the ObjectModel.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Adding X3DChildNode helped.  Why isn’t this mentioned in the Object Model more often?</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Some changes to parseom.py which generates mapToMethod.js.  This is the sort of thing I’d like to see in the ObjectModel so I wouldn’t have to add special cases.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>classes["X3DConcreteNode"] = ClassPrinter("X3DConcreteNode", {})</p><p class=MsoNormal>classes["X3DConcreteStatement"] = ClassPrinter("X3DConcreteStatement", {})</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>cns = soup.find_all("ConcreteNode")</p><p class=MsoNormal>for cn in cns:</p><p class=MsoNormal>    classes[cn['name']] = ClassPrinter(cn, { "X3DConcreteNode" : 1, "X3DChildNode" : 1 })</p><p class=MsoNormal>    classes["X3DConcreteNode"].children.append(cn["name"])</p><p class=MsoNormal>    classes["X3DChildNode"].children.append(cn["name"])</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>sts = soup.find_all("Statement")</p><p class=MsoNormal>for st in sts:</p><p class=MsoNormal>    classes[st['name']] = ClassPrinter(st, { "X3DConcreteStatement" : 1, "X3DChildNode" : 1 })</p><p class=MsoNormal>    classes["X3DConcreteStatement"].children.append(st["name"])</p><p class=MsoNormal>    classes["X3DChildNode"].children.append(st["name"])</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I am not sure all ConcreteNodes and Statements are X3DChildNodes.  If not, I need a way to distinguish them.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>John</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p></div></body></html>