<div dir="ltr">Let's see if I can explain this question clearly.<br><br>First the example:<br><br><div><a href="https://github.com/andreasplesch/x3dom/blob/gh-pages/test/functional/proto/castle/proto_nested.x3d">https://github.com/andreasplesch/x3dom/blob/gh-pages/test/functional/proto/castle/proto_nested.x3d</a> </div><div><br></div><div>The table2 ProtoBody uses an instance of the leg2 proto. The leg2 proto declaration is defined outside of the table2 proto declaration name scope.</div><div><br></div><div>The expected result is that the table2 proto declaration is able to use the name 'leg2' to find the leg2 proto definition.</div><div><br></div><div>This does not work in my x3dom proto exploration and it took me a while to realize that the reason is (too?) strict scoping. The leg2 proto definition occurs outside of the execution context and name scope of the table2 proto. Therefore it is not visible to the table2 proto.<br></div><div><br></div><div>At first glance this strictness seems not unreasonable, however, all tested browsers display the scene as expected.</div><div><br></div><div>So I am somewhat puzzled. I think what it means is that name scoping does not apply to the name of Protos given by the name attribute, since the name of Proto is the name of a node definition. Proto names are possibly global.</div><div><br></div><div>One consequence is that two Protos in a scene cannot have the same name. And I recall that this case is spec'ed to lead to undefined behaviour.</div><div><br></div><div>Would it be correct to treat Proto names as global ? To be clear, by Proto name I refer to the name given by the name attribute, not a DEF name of an instance.</div><div><br></div><div>Thanks for any insight, or pointers to relevant spec. sections, -Andreas</div><div><br></div><div>-- <br>Andreas Plesch<br>Waltham, MA 02453</div></div>