<div dir="ltr">I think it's more critical when both oldName and newName exist in XML or VRML (in JSON, last takes precedence, I think). Which value do you put store last when both the new and old attributes are specified in XML?   Some kind of ordering will exist in the tools processing the XML, but without a standard, there may be alternate implementations.<div><br></div><div>Thanks,</div><div><br></div><div>John</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Nov 29, 2020 at 11:21 AM Don Brutzman <<a href="mailto:brutzman@nps.edu">brutzman@nps.edu</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 11/29/2020 8:02 AM, John Carlson wrote:<br>
> <br>
> One thing I am fearful of for our users is that they use multiple synonyms within a synonym group, and expect that different field values won’t get overwritten.<br>
Not sure what you mean by synonym group, haven't defined that.  There is no plan or need for multiple synonyms.<br>
<br>
The specific list of potential field synonyms that are identified:<br>
<br>
* X3D Scene Authoring Hints, 🔖 Potential future changes for improved consistency of field names<br>
   <a href="https://www.web3d.org/x3d/content/examples/X3dSceneAuthoringHints.html#fieldNameChanges" rel="noreferrer" target="_blank">https://www.web3d.org/x3d/content/examples/X3dSceneAuthoringHints.html#fieldNameChanges</a><br>
<br>
The design assumption that only a single field exists, as before, but it might now have a synonym name.<br>
<br>
So, for example, please consider the following utility methods. I'm not seeing any kind of data-consistency problem arising like what you are describing above.<br>
<br>
Example implementation approach for get/set accessor methods:<br>
<br>
        public void setNewFieldName (SFInt32 newValue)<br>
        {<br>
                setOldFieldName (newValue); // pass value in<br>
        }<br>
<br>
        public SFInt32 getNewFieldName ()<br>
        {<br>
                getOldFieldName (); // pass value back out<br>
        }<br>
<br>
Similarly, for a CADFaceObject (which has no other children field) this pattern would look something like:<br>
<br>
        public void setChildren (SFNode newValue)<br>
        {<br>
                setShape (newValue); // pass value in<br>
        }<br>
<br>
        public SFNode getChildren ()<br>
        {<br>
                getShape(); // pass value back out<br>
        }<br>
<br>
I think these illustrate that a pair of methods for each field synonym reaches minimum level of code support needed for synonym functionality, likely for any scene graph operations including parsing.<br>
<br>
Sample pseudocode for a parser that optionally wants to provide helpful warning about erroneous duplication when loading a file:<br>
<br>
        if (thisParsableNode.hasDataOldName() and thisParsableNode.hasDataNewName()) // optional error checking<br>
           print ("Duplicate field definition encountered in erroneous model file using old and new field name synonyms...");<br>
<br>
Alternatively an existing library that able to load files might instead choose to do nothing to change their parser. As typical for X3D, browsers are not required to report errors (default error response is undefined).  So if a model file erroneously had two values for a single field and the parser just loaded one of them, or silently loaded the second value right on top the first, that would be an allowed response.<br>
<br>
This example approach seems pretty minimalist.  Each implementation can vary as they see fit, but so far synonyms seem simple to implement.<br>
<br>
Hope this pseudocode helps.  Any other use cases for codebases not covered here?  Further checkpoints welcome.<br>
<br>
all the best, Don<br>
-- <br>
Don Brutzman  Naval Postgraduate School, Code USW/Br       <a href="mailto:brutzman@nps.edu" target="_blank">brutzman@nps.edu</a><br>
Watkins 270,  MOVES Institute, Monterey CA 93943-5000 USA   +1.831.656.2149<br>
X3D graphics, virtual worlds, navy robotics <a href="http://faculty.nps.edu/brutzman" rel="noreferrer" target="_blank">http://faculty.nps.edu/brutzman</a><br>
</blockquote></div>