<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;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
.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 link=blue vlink="#954F72"><div class=WordSection1><p class=MsoNormal>I don’ think that “set_” or “_changed” is the problem.  I believe you handled them last time I looked at the code.  My initial tests modifying my serializer say the problem still exists.  More examples later.</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>Sent from <a href="https://go.microsoft.com/fwlink/?LinkId=550986">Mail</a> for Windows 10</p><p class=MsoNormal><o:p> </o:p></p><div style='mso-element:para-border-div;border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal style='border:none;padding:0in'><b>From: </b><a href="mailto:brutzman@nps.edu">Don Brutzman</a><br><b>Sent: </b>Thursday, April 20, 2017 10:32 AM<br><b>To: </b><a href="mailto:yottzumm@gmail.com">yottzumm@gmail.com</a><br><b>Cc: </b><a href="mailto:x3d-public@web3d.org">X3D Graphics public mailing list</a>; <a href="mailto:roy.walmsley@ntlworld.com">Roy Walmsley</a>; <a href="mailto:Job@alexkern.de">Job@alexkern.de</a><br><b>Subject: </b>Re: continuing route issue with X3DJSAIL - set_Value prefix andvalue_changed suffix</p></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>this is a very useful example.  am thinking through various ways to allow set_ prefix and _changed suffix in ROUTE toField fromField, then realized we have a specification omission.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>On 4/18/2017 9:24 PM, Don Brutzman wrote:</p><p class=MsoNormal>> John, the diagnostic is telling us what it doesn't like.  It can't reconcile set_cycleTime with cycleTime.</p><p class=MsoNormal>> </p><p class=MsoNormal>> Am doing my best to produce both valid .x3d and corresponding .java so that we can, in each case,</p><p class=MsoNormal>> - decide if an .x3d scene is in error;</p><p class=MsoNormal>> - decide if X3DJSAIL API is in error, or inadequate;</p><p class=MsoNormal>> - decide if the .java program is in error; or, rarely,</p><p class=MsoNormal>> - decide if the specification is in error.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Section 4.4.2.2 Field Semantics is OK.  However if we look at X3D Canonical Form:</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>                4.2.3 X3D canonical form</p><p class=MsoNormal>                http://www.web3d.org/documents/specifications/19776-3/V3.3/Part03/concepts.html#X3DCanonicalForm</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>rules a..o there do not include this case</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>It looks like they should, since the purposes of canonicalization (c14n) are to</p><p class=MsoNormal>- provide most compact and unambiguous form of an X3D scene</p><p class=MsoNormal>- provide unique form of .x3d encoding to enable XML Digital Signature for authentication and XML Encryption for privacy.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>In general X3DJSAIL strives to provide X3D Canonical Form as its default output for toX3dFile() serialization.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>                X3DObject: toFileX3D (javadoc)</p><p class=MsoNormal>                http://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/Core/X3DObject.html#toFileX3D-java.lang.String-</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>So I plan to modify the accessor and validate() methods for ROUTEObject to omit "set_" and "_changed" prefix/suffix before checking and when saving.  Most likely this will prevent other unexpected edge cases from emerging later as well.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Comments welcome.  Code change and recommended specification addition to follow in near future.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>> You don't have to debug stylesheet unless you want too.  Whatever works, I'll keep plugging away whenever possible.  Sorry but I have my hands full right now with the library and conversion stylesheet and example archives... if we can isolate bugs, and debug our respective tools accordingly, that is great.</p><p class=MsoNormal>> </p><p class=MsoNormal>> The guiding spec prose here is</p><p class=MsoNormal>> </p><p class=MsoNormal>>      4.4.2.2 Field semantics</p><p class=MsoNormal>>      http://www.web3d.org/documents/specifications/19775-1/V3.3/Part01/concepts.html#Routes</p><p class=MsoNormal>> </p><p class=MsoNormal>> I believe that if a field has accessType inputOutput, then a ROUTE can refer to it as zzz or set_zzz or zzz_changed as appropriate - see following spec prose.</p><p class=MsoNormal>> </p><p class=MsoNormal>> If correct, since most fields are accessType inputOutput, then there are two allowed forms within most ROUTE fromName and toName values.</p><p class=MsoNormal>> </p><p class=MsoNormal>> ============================================================================</p><p class=MsoNormal>> 4.4.2.2 Field semantics</p><p class=MsoNormal>> </p><p class=MsoNormal>> Fields define the persistent state of nodes, and values which nodes may send or receive in the form of events. X3D supports four types of access to a node's fields:</p><p class=MsoNormal>> </p><p class=MsoNormal>>      initializeOnly access, which allows content to supply an initial value for the field but does not allow subsequent changes to its value;</p><p class=MsoNormal>>      inputOnly access, which means that the node may receive an event to change the value of its field, but does not allow the field's value to be read;</p><p class=MsoNormal>>      outputOnly access, which means that the node may send an event when its value changes, but does not allow the field's value to be written; and</p><p class=MsoNormal>>      inputOutput access, which allows full access to the field: content may supply an initial value for the field, the node may receive an event to change the value of its field, and the node may send an event when its value changes.</p><p class=MsoNormal>> </p><p class=MsoNormal>> An inputOutput field can receive events like an inputOnly field, can generate events like an outputOnly field, and can be stored in X3D files like an initializeOnly field. An inputOutput field named zzz can be referred to as 'set_zzz' and treated as an inputOnly, and can be referred to as 'zzz_changed' and treated as an outputOnly field. Within ISO/IEC 19775, fields with inputOutput access or inputOnly access are collectively referred to as input fields, fields with inputOutput access or outputOnly access are collectively referred to as output fields, and the events these fields receive and send are called input events and output events, respectively.</p><p class=MsoNormal>> </p><p class=MsoNormal>> The initial value of an inputOutput field is its value in the X3D file, or the default value for the node in which it is contained, if a value is not specified. When an inputOutput field receives an event it shall generate an event with the same value and timestamp. The following sources, in precedence order, shall be used to determine the initial value of the inputOutput field:</p><p class=MsoNormal>> </p><p class=MsoNormal>>      the user-defined value in the instantiation (if one is specified);</p><p class=MsoNormal>>      the default value for that field as specified in the node or prototype definition.</p><p class=MsoNormal>> </p><p class=MsoNormal>> The recommendations for naming initializeOnly fields, inputOutput fields, outputOnly fields, and inputOnly fields for built-in nodes are as follows:</p><p class=MsoNormal>> </p><p class=MsoNormal>>      All names containing multiple words start with a lower case letter, and the first letter of all subsequent words is capitalized (e.g., addChildren), with the exception of set_ and _changed, as described below.</p><p class=MsoNormal>>      It is recommended that all inputOnly fields have the prefix “set_”, with the exception of the addChildren and removeChildren fields.</p><p class=MsoNormal>>      Certain inputOnly fields and outputOnly fields of type SFTime do not use the "set_" prefix or "_changed" suffix.</p><p class=MsoNormal>>      It is recommended that all other outputOnly fields have the suffix “_changed” appended, with the exception of outputOnly fields of type SFBool.</p><p class=MsoNormal>> ================================================================================</p><p class=MsoNormal>> </p><p class=MsoNormal>> Have been striving to make X3DJSAIL exceptions sufficiently explanatory to enable author debugging and correction.  Let's try that...</p><p class=MsoNormal>> </p><p class=MsoNormal>> And so, looking at the exception you caught below, it appears that the ROUTEObject validation output should accept either either name prior to checking type.  That would be an X3DJSAIL effort.</p><p class=MsoNormal>> </p><p class=MsoNormal>> Please let me know if that diagnosis seems correct.  I will look at the ROUTEObject code when time permits.</p><p class=MsoNormal>> </p><p class=MsoNormal>> I should likely also add words to tooltips to describe this allowed variance.</p><p class=MsoNormal>> </p><p class=MsoNormal>>      http://www.web3d.org/x3d/content/X3dTooltips.html#ROUTE</p><p class=MsoNormal>> </p><p class=MsoNormal>> Hope this email makes sense.  Step by step...</p><p class=MsoNormal>> </p><p class=MsoNormal>> </p><p class=MsoNormal>> On 4/18/2017 10:24 AM, yottzumm@gmail.com wrote:</p><p class=MsoNormal>>> Java code and X3D attached.   Please provide generated Java code back which runs, so I can look at it and get my java serializer working.  I will soon download X3dToJava.xslt, and play with it.  I guess you want me to test it too? 😊 or instead? LOL!  Not everyone wants to run a stylesheet.  I’ve been doing it because I don’t have a good XML to X3D JSON converter yet ☹.  Let’s break the monopoly!  This was my start of one: https://github.com/coderextreme/X3DJSONLD/blob/master/Standard.js  Let’s just say generating X3DJSON is hard.  I was even able to generate JSON for the three-x3d-loader.  The code is found here: https://github.com/coderextreme/X3DJSONLD/blob/master/Three2Serializer.js  so you might base it on that.  IDK, working with X3DJSON as a source seems easy enough.</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>>> $ java bubbles</p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> org.web3d.x3d.sai.InvalidFieldValueException:  ROUTE details: FROM TourTime.cycleTime (TimeSensor.SFTime.outputOnly) TO RandomTourTime.set_cycle (Script.ERROR_UNKNOWN_FIELD_TYPE.inputOnly)</p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> ROUTE has source-destination type mismatch, fromField='cycleTime' source and toField='set_cycle' destination have different types.</p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> org.web3d.x3d.sai.InvalidFieldValueException:  ROUTE details: FROM TourTime.cycleTime (TimeSensor.SFTime.outputOnly) TO RandomTourTime.set_cycle (Script.ERROR_UNKNOWN_FIELD_TYPE.inputOnly)</p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> ROUTE has source-destination type mismatch, fromField='cycleTime' source and toField='set_cycle' destination have different types.</p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>>          at org.web3d.x3d.jsail.Core.ROUTEObject.validate(ROUTEObject.java:721)</p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>>          at org.web3d.x3d.jsail.Core.SceneObject.validate(SceneObject.java:547)</p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>>          at org.web3d.x3d.jsail.Core.X3DObject.validate(X3DObject.java:1831)</p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>>          at org.web3d.x3d.jsail.Core.X3DObject.toFileJSON(X3DObject.java:730)</p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>>          at bubbles.main(bubbles.java:79)</p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> Exception in thread "main" org.web3d.x3d.sai.InvalidFieldValueException:  ROUTE details: FROM TourTime.cycleTime (TimeSensor.SFTime.outputOnly) TO RandomTourTime.set_cycle (Script.ERROR_UNKNOWN_FIELD_TYPE.inputOnly)</p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>> ROUTE has source-destination type mismatch, fromField='cycleTime' source and toField='set_cycle' destination have different types.</p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>>          at org.web3d.x3d.jsail.Core.ROUTEObject.validate(ROUTEObject.java:721)</p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>>          at org.web3d.x3d.jsail.Core.SceneObject.validate(SceneObject.java:547)</p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>>          at org.web3d.x3d.jsail.Core.X3DObject.validate(X3DObject.java:1831)</p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>>          at org.web3d.x3d.jsail.Core.X3DObject.toFileJSON(X3DObject.java:730)</p><p class=MsoNormal>>><o:p> </o:p></p><p class=MsoNormal>>>          at bubbles.main(bubbles.java:79)</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>> </p><p class=MsoNormal>> </p><p class=MsoNormal>> all the best, Don</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>all the best, Don</p><p class=MsoNormal>-- </p><p class=MsoNormal>Don Brutzman  Naval Postgraduate School, Code USW/Br       brutzman@nps.edu</p><p class=MsoNormal>Watkins 270,  MOVES Institute, Monterey CA 93943-5000 USA   +1.831.656.2149</p><p class=MsoNormal>X3D graphics, virtual worlds, navy robotics http://faculty.nps.edu/brutzman</p><p class=MsoNormal><o:p> </o:p></p></div></body></html>