<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=iso-8859-2">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:Wingdings;
panose-1:5 0 0 0 0 0 0 0 0 0;}
@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;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}
pre
{mso-style-priority:99;
mso-style-link:"HTML Preformatted Char";
margin:0in;
margin-bottom:.0001pt;
font-size:10.0pt;
font-family:"Courier New";}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
{mso-style-priority:34;
margin-top:0in;
margin-right:0in;
margin-bottom:0in;
margin-left:.5in;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
span.EmailStyle22
{mso-style-type:personal-compose;
font-family:"Calibri",sans-serif;
color:windowtext;}
span.HTMLPreformattedChar
{mso-style-name:"HTML Preformatted Char";
mso-style-priority:99;
mso-style-link:"HTML Preformatted";
font-family:"Courier New";}
.MsoChpDefault
{mso-style-type:export-only;
font-size:10.0pt;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
{page:WordSection1;}
/* List Definitions */
@list l0
{mso-list-id:498350115;
mso-list-type:hybrid;
mso-list-template-ids:-1938416156 1584970270 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l0:level1
{mso-level-start-at:2;
mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;
mso-fareast-font-family:Calibri;
mso-bidi-font-family:"Times New Roman";}
@list l0:level2
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:"Courier New";}
@list l0:level3
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Wingdings;}
@list l0:level4
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l0:level5
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:"Courier New";}
@list l0:level6
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Wingdings;}
@list l0:level7
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l0:level8
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:"Courier New";}
@list l0:level9
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Wingdings;}
@list l1
{mso-list-id:662003385;
mso-list-type:hybrid;
mso-list-template-ids:-600930612 677551162 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l1:level1
{mso-level-start-at:16;
mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;
mso-fareast-font-family:Calibri;
mso-bidi-font-family:"Times New Roman";}
@list l1:level2
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:"Courier New";}
@list l1:level3
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Wingdings;}
@list l1:level4
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l1:level5
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:"Courier New";}
@list l1:level6
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Wingdings;}
@list l1:level7
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l1:level8
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:"Courier New";}
@list l1:level9
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Wingdings;}
@list l2
{mso-list-id:1066149849;
mso-list-template-ids:-106264312;}
@list l2:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l2:level2
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:1.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l2:level3
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:1.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l2:level4
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:2.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l2:level5
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:2.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l2:level6
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:3.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l2:level7
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:3.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l2:level8
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:4.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l2:level9
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:4.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l3
{mso-list-id:1344210689;
mso-list-template-ids:-613121132;}
@list l3:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l3:level2
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:1.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l3:level3
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:1.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l3:level4
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:2.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l3:level5
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:2.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l3:level6
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:3.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l3:level7
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:3.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l3:level8
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:4.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l3:level9
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:4.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l4
{mso-list-id:1444154037;
mso-list-template-ids:-382696042;}
@list l4:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l4:level2
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:1.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l4:level3
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:1.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l4:level4
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:2.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l4:level5
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:2.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l4:level6
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:3.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l4:level7
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:3.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l4:level8
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:4.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l4:level9
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:4.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l5
{mso-list-id:2092700591;
mso-list-type:hybrid;
mso-list-template-ids:-795967936 1348613750 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l5:level1
{mso-level-start-at:16;
mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;
mso-fareast-font-family:Calibri;
mso-bidi-font-family:"Times New Roman";}
@list l5:level2
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:"Courier New";}
@list l5:level3
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Wingdings;}
@list l5:level4
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l5:level5
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:"Courier New";}
@list l5:level6
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Wingdings;}
@list l5:level7
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l5:level8
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:"Courier New";}
@list l5:level9
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Wingdings;}
ol
{margin-bottom:0in;}
ul
{margin-bottom:0in;}
--></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-US" link="blue" vlink="purple" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal">Am happy to report that the “sourceCode” approach is now implemented in X3DUOM, Java X3DJSAIL, Python X3DPSAIL x3d.py, X3dToJson.xslt stylesheet and various documentation links. As described in the X3D XML encoding, embedded script code
is equivalent to the final url in the Script/ShaderProgram/ShaderPart url field, which is executed sequentially as an ordered list.<o:p></o:p></p>
<p class="MsoNormal"><br>
This took a lot of work, hopefully everything is holding up. Links and excerpts of tested support follow.<o:p></o:p></p>
<div style="mso-element:para-border-div;border:none;border-bottom:solid windowtext 1.5pt;padding:0in 0in 1.0pt 0in">
<p class="MsoNormal" style="border:none;padding:0in"><o:p> </o:p></p>
</div>
<p class="MsoNormal">Java<o:p></o:p></p>
<ul style="margin-top:0in" type="disc">
<li class="MsoListParagraph" style="margin-left:0in;mso-list:l5 level1 lfo8">X3D Java Scene Access Interface Library (X3DJSAIL)<o:p></o:p></li><li class="MsoListParagraph" style="margin-left:0in;mso-list:l5 level1 lfo8">https://www.web3d.org/specifications/java/X3DJSAIL.html<o:p></o:p></li><li class="MsoListParagraph" style="margin-left:0in;mso-list:l5 level1 lfo8">https://www.web3d.org/specifications/java/X3DJSAIL.html#sourceCode<o:p></o:p></li><li class="MsoListParagraph" style="margin-left:0in;mso-list:l5 level1 lfo8">https://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/Scripting/Script.html#appendSourceCode(java.lang.String)<o:p></o:p></li><li class="MsoListParagraph" style="margin-left:0in;mso-list:l5 level1 lfo8">https://www.web3d.org/specifications/java/examples/HelloWorldProgramOutputLog.txt (excerpt follows)<o:p></o:p></li></ul>
<p class="MsoListParagraph"><o:p> </o:p></p>
<pre> .addChild(new Group("BackgroundGroup")<o:p></o:p></pre>
<pre> .addChild(new Background("GradualBackground"))<o:p></o:p></pre>
<pre> .addChild(new <b>Script</b>("colorTypeConversionScript").<b>setSourceCode</b>("""<o:p></o:p></pre>
<pre>ecmascript:<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>function colorInput (eventValue) // Example source code<o:p></o:p></pre>
<pre>{<o:p></o:p></pre>
<pre> colorsOutput = new MFColor(eventValue); // assigning value sends output event<o:p></o:p></pre>
<pre>// Browser.print('colorInput=' + eventValue + ', colorsOutput=' + colorsOutput + '\n');<o:p></o:p></pre>
<pre>}<o:p></o:p></pre>
<pre>""")<o:p></o:p></pre>
<pre> .addField(new field().setName("colorInput").setType(field.TYPE_SFCOLOR).setAccessType(field.ACCESSTYPE_INPUTONLY))<o:p></o:p></pre>
<div style="mso-element:para-border-div;border:none;border-bottom:solid windowtext 1.5pt;padding:0in 0in 1.0pt 0in">
<pre style="border:none;padding:0in"> .addField(new field().setName("colorsOutput").setType(field.TYPE_MFCOLOR).setAccessType(field.ACCESSTYPE_OUTPUTONLY)))<o:p></o:p></pre>
<pre style="border:none;padding:0in"><o:p> </o:p></pre>
</div>
<p class="MsoNormal">Python<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<ul style="margin-top:0in" type="disc">
<li class="MsoListParagraph" style="margin-left:0in;mso-list:l5 level1 lfo8">X3D Python Scene Access Interface Library (X3DPSAIL) for Python X3D Package x3d.py<o:p></o:p></li><li class="MsoListParagraph" style="margin-left:0in;mso-list:l5 level1 lfo8">https://www.web3d.org/x3d/stylesheets/python/python.html<o:p></o:p></li><li class="MsoListParagraph" style="margin-left:0in;mso-list:l5 level1 lfo8">https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/stylesheets/python/x3d.py<o:p></o:p></li><li class="MsoListParagraph" style="margin-left:0in;mso-list:l5 level1 lfo8">Python Package Installer PyPi x3d.py 4.0.47
<o:p></o:p></li><li class="MsoListParagraph" style="margin-left:0in;mso-list:l5 level1 lfo8">https://pypi.org/project/x3d<o:p></o:p></li><li class="MsoListParagraph" style="margin-left:0in;mso-list:l5 level1 lfo8">https://www.web3d.org/x3d/stylesheets/python/examples/PythonX3dSmokeTests.py<o:p></o:p></li></ul>
<div style="mso-element:para-border-div;border:none;border-bottom:solid windowtext 1.5pt;padding:0in 0in 1.0pt 0in">
<p class="MsoNormal" style="border:none;padding:0in"><o:p> </o:p></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-family:"Courier New""> Script(DEF='SmokeScript',sourceCode="""<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-family:"Courier New"">ecmascript:<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-family:"Courier New"">// testing multi-line text block support for Script sourceCode field<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-family:"Courier New"">""")<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><o:p> </o:p></p>
</div>
<p class="MsoNormal">Turtle OWL<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<ul style="margin-top:0in" type="disc">
<li class="MsoListParagraph" style="margin-left:0in;mso-list:l5 level1 lfo8">X3D Ontology for Semantic Web<o:p></o:p></li><li class="MsoListParagraph" style="margin-left:0in;mso-list:l5 level1 lfo8">https://www.web3d.org/x3d/content/semantics/semantics.html<o:p></o:p></li><li class="MsoListParagraph" style="margin-left:0in;mso-list:l5 level1 lfo8">https://www.web3d.org/x3d/content/semantics/semantics.html#MaterialModulatorQueries<o:p></o:p></li><li class="MsoListParagraph" style="margin-left:0in;mso-list:l5 level1 lfo8">https://www.web3d.org/x3d/content/semantics/examples/MaterialModulator.ttl<o:p></o:p></li></ul>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">:MaterialModulatorScript a owl:NamedIndividual, x3do:Script ;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New""> x3do:hasParent :ProtoBody_2_2_2 ;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New""> x3do:hasField :field_2_2_2_2_1, :field_2_2_2_2_2, :field_2_2_2_2_3, :field_2_2_2_2_4 ;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New""> x3do:hasIS :IS_2_2_2_2_5 ;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New""> x3do:DEF 'MaterialModulatorScript' ;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New""> x3do:sourceCode """<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">ecmascript:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">function initialize ()<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">{<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New""> newColor = diffuseColor; // start with original color<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">// [etc. additional source here]<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">""" .<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">:field_2_2_2_2_1 a owl:NamedIndividual, x3do:field ;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New""> x3do:hasParent :MaterialModulatorScript ;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New""> x3do:accessType 'inputOutput' ;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New""> x3do:name 'enabled' ;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New""> x3do:type 'SFBool' .<o:p></o:p></span></p>
<div style="mso-element:para-border-div;border:none;border-bottom:solid windowtext 1.5pt;padding:0in 0in 1.0pt 0in">
<p class="MsoNormal" style="border:none;padding:0in">etc.<o:p></o:p></p>
<p class="MsoNormal" style="border:none;padding:0in"><o:p> </o:p></p>
</div>
<p class="MsoNormal">JSON<o:p></o:p></p>
<div style="mso-element:para-border-div;border:none;border-bottom:solid windowtext 1.5pt;padding:0in 0in 1.0pt 0in">
<p class="MsoNormal" style="border:none;padding:0in"><o:p> </o:p></p>
<p class="MsoNormal" style="border:none;padding:0in">Updated conversion stylesheet X3dToJson.xslt and online documentation<o:p></o:p></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New"">*
</span>X3D to JSON Stylesheet Converter<o:p></o:p></p>
<p class="MsoNormal" style="border:none;padding:0in">* https://www.web3d.org/x3d/stylesheets/X3dToJson.html<o:p></o:p></p>
<p class="MsoNormal" style="border:none;padding:0in">* https://www.web3d.org/x3d/stylesheets/X3dToJson.html#DataTypes<o:p></o:p></p>
<p class="MsoNormal" style="border:none;padding:0in"><o:p> </o:p></p>
</div>
<div align="center">
<table class="MsoNormalTable" border="1" cellpadding="0">
<thead>
<tr>
<td colspan="3" style="padding:.6pt .6pt .6pt .6pt">
<p class="MsoNormal" align="center" style="text-align:center"><b>Nomenclature comparison: X3D, XML, JSON
<o:p></o:p></b></p>
</td>
</tr>
<tr>
<td style="padding:.6pt .6pt .6pt .6pt">
<p class="MsoNormal" align="center" style="text-align:center"><b>X3D scene graph <o:p>
</o:p></b></p>
</td>
<td style="padding:.6pt .6pt .6pt .6pt">
<p class="MsoNormal" align="center" style="text-align:center"><b>XML encoding for X3D
<o:p></o:p></b></p>
</td>
<td style="padding:.6pt .6pt .6pt .6pt">
<p class="MsoNormal" align="center" style="text-align:center"><b>JSON encoding for X3D
<o:p></o:p></b></p>
</td>
</tr>
</thead>
<tbody>
<tr>
<td style="padding:.6pt .6pt .6pt .6pt">
<p class="MsoNormal">X3D nodes <o:p></o:p></p>
</td>
<td style="padding:.6pt .6pt .6pt .6pt">
<p class="MsoNormal">XML elements <o:p></o:p></p>
</td>
<td style="padding:.6pt .6pt .6pt .6pt">
<p class="MsoNormal">JSON objects <o:p></o:p></p>
</td>
</tr>
<tr>
<td style="padding:.6pt .6pt .6pt .6pt">
<p class="MsoNormal">X3D node name <o:p></o:p></p>
</td>
<td style="padding:.6pt .6pt .6pt .6pt">
<p class="MsoNormal">XML tag (open/close or singleton tags) <o:p></o:p></p>
</td>
<td style="padding:.6pt .6pt .6pt .6pt">
<p class="MsoNormal">JSON object name <o:p></o:p></p>
</td>
</tr>
<tr>
<td style="padding:.6pt .6pt .6pt .6pt">
<p class="MsoNormal">Scene-graph structures/statements <o:p></o:p></p>
</td>
<td style="padding:.6pt .6pt .6pt .6pt">
<p class="MsoNormal">XML elements <o:p></o:p></p>
</td>
<td style="padding:.6pt .6pt .6pt .6pt">
<p class="MsoNormal">JSON objects <o:p></o:p></p>
</td>
</tr>
<tr>
<td style="padding:.6pt .6pt .6pt .6pt">
<p class="MsoNormal">X3D simple-type fields <o:p></o:p></p>
</td>
<td style="padding:.6pt .6pt .6pt .6pt">
<p class="MsoNormal">XML attributes <o:p></o:p></p>
</td>
<td style="padding:.6pt .6pt .6pt .6pt">
<p class="MsoNormal">prepend <span style="font-size:10.0pt;font-family:"Courier New"">
@</span> sign to field name as JSON string <o:p></o:p></p>
</td>
</tr>
<tr>
<td style="padding:.6pt .6pt .6pt .6pt">
<p class="MsoNormal">X3D MFNode child nodes <o:p></o:p></p>
</td>
<td style="padding:.6pt .6pt .6pt .6pt">
<p class="MsoNormal">Single ordered array of sibling elements <o:p></o:p></p>
</td>
<td style="padding:.6pt .6pt .6pt .6pt">
<p class="MsoNormal">One or more JSON strings for each [array of JSON objects] <o:p>
</o:p></p>
</td>
</tr>
<tr>
<td style="padding:.6pt .6pt .6pt .6pt">
<p class="MsoNormal">X3D SFNode/MFNode field names <o:p></o:p></p>
</td>
<td style="padding:.6pt .6pt .6pt .6pt">
<p class="MsoNormal">containerField value <br>
Example: <span style="font-size:10.0pt;font-family:"Courier New"">containerField='children'</span>
<o:p></o:p></p>
</td>
<td style="padding:.6pt .6pt .6pt .6pt">
<p class="MsoNormal">Prepend <span style="font-size:10.0pt;font-family:"Courier New"">
-</span> hyphen to JSON string for field name, do not include as a separate <span style="font-size:10.0pt;font-family:"Courier New"">
@containerField</span> attribute <br>
Example: <span style="font-size:10.0pt;font-family:"Courier New"">"-children"</span>
<o:p></o:p></p>
</td>
</tr>
<tr>
<td style="padding:.6pt .6pt .6pt .6pt">
<p class="MsoNormal">Comments <o:p></o:p></p>
</td>
<td style="padding:.6pt .6pt .6pt .6pt">
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New""><!-- XML comment --></span>
<o:p></o:p></p>
</td>
<td style="padding:.6pt .6pt .6pt .6pt">
<p class="MsoNormal">Special string prefix: <span style="font-size:10.0pt;font-family:"Courier New"">
"<b>#comment</b>"</span> for single-object comments <o:p></o:p></p>
</td>
</tr>
<tr>
<td style="padding:.6pt .6pt .6pt .6pt">
<p class="MsoNormal">Embedded source code for <br>
<u><span style="color:blue">Script</span></u>, <u><span style="color:blue">ShaderPart</span></u> and
<u><span style="color:blue">ShaderProgram</span></u> nodes <o:p></o:p></p>
</td>
<td style="padding:.6pt .6pt .6pt .6pt">
<p class="MsoNormal">CDATA (Character DATA) section <br>
<span style="font-size:10.0pt;font-family:"Courier New""><[CDATA[ "world wild Web!" ]]></span>
<o:p></o:p></p>
</td>
<td style="padding:.6pt .6pt .6pt .6pt">
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">"#sourceCode"</span> string array containing original code, typically not escaped. (previously named
<span style="font-size:10.0pt;font-family:"Courier New"">#sourceText</span>) <o:p>
</o:p></p>
</td>
</tr>
</tbody>
</table>
</div>
<div style="mso-element:para-border-div;border:none;border-bottom:solid windowtext 1.5pt;padding:0in 0in 1.0pt 0in">
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New"">Excerpt from MaterialModulator.json<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""> { "Script":<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""> {<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""> "@DEF":"MaterialModulatorScript",<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""> "field": [<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""> {<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""> "@name":"enabled",<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""> "@accessType":"inputOutput",<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""> "@type":"SFBool"<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""> },<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""> {<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""> "@name":"diffuseColor",<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""> "@accessType":"inputOutput",<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""> "@type":"SFColor"<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""> },<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""> {<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""> "@name":"newColor",<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""> "@accessType":"outputOnly",<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""> "@type":"SFColor"<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""> },<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""> {<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""> "@name":"clockTrigger",<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""> "@accessType":"inputOnly",<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""> "@type":"SFTime"<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""> }<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""> ],<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""> "IS": {<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""> "connect": [<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""> {<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""> "@nodeField":"enabled",<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""> "@protoField":"enabled"<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""> },<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""> {<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""> "@nodeField":"diffuseColor",<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""> "@protoField":"diffuseColor"<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""> }<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""> ]<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""> },<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""> "#sourceCode":[<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New"">"",<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New"">"",<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New"">"ecmascript:",<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New"">"function initialize ()",<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New"">"{",<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New"">" newColor = diffuseColor; // start with original color",<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New"">"}",<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New"">"function clockTrigger (timeValue)",<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New"">"{",<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New"">" if (!enabled) return;",<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New"">" red = newColor.r;",<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New"">" green = newColor.g;",<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New"">" blue = newColor.b;",<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New"">"",<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New"">" // note different modulation rates for each color component, % is modulus operator",<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New"">" newColor = new SFColor ((red + 0.02) % 1, (green + 0.03) % 1, (blue + 0.04) % 1);",<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New"">"\tif (enabled)",<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New"">"\t{",<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New"">"\t\tBrowser.print ('diffuseColor=(' + red +',' + green + ',' + blue + ') newColor=' + newColor.toString() + '\n');",<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New"">"\t}",<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New"">"}",<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New"">"function set_enabled (newValue)",<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New"">"{",<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New"">"\tenabled = newValue;",<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New"">"}",<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New"">"",<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New"">""<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New"">] }<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt;font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><span style="font-size:10.0pt">Note that (surprisingly) we haven’t found an official syntax for multi-line text blocks in the ECMAScript specification. If anyone knows a reference for that, please advise.<o:p></o:p></span></p>
<p class="MsoNormal" style="border:none;padding:0in"><o:p> </o:p></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">The “sourceCode” approach is not needed for XML, which uses contained character data (CDATA) to avoid escaping.
<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Also not needed for ClassicVRML which simply adds a quoted text block as part of the url field.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Added hint to X3D Tooltips:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<ul style="margin-top:0in" type="disc">
<li class="MsoListParagraph" style="margin-left:0in;mso-list:l1 level1 lfo7">X3D Tooltips, Script, url<o:p></o:p></li><li class="MsoListParagraph" style="margin-left:0in;mso-list:l1 level1 lfo7">Hint: embedded ecmascript: source can also be contained in the sourceCode pseudo-field without escape characters, equivalent to last entry in the url list, when using other API codebases
and file encodings.<o:p></o:p></li><li class="MsoListParagraph" style="margin-left:0in;mso-list:l1 level1 lfo7">https://www.web3d.org/x3d/tooltips/X3dTooltips.html#Script.url<o:p></o:p></li></ul>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">All of this autogeneration was possible through annotation of Script/ShaderProgram/ShaderPart in the XML Schema, which is used to autogenerate X3DUOM.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<ul style="margin-top:0in" type="disc">
<li class="MsoListParagraph" style="margin-left:0in;mso-list:l1 level1 lfo7">X3D Unified Object Model (X3DUOM)<o:p></o:p></li><li class="MsoListParagraph" style="margin-left:0in;mso-list:l1 level1 lfo7">https://www.web3d.org/specifications/X3DUOM.html<o:p></o:p></li><li class="MsoListParagraph" style="margin-left:0in;mso-list:l1 level1 lfo7">https://www.web3d.org/specifications/X3dUnifiedObjectModel-4.0.xml<o:p></o:p></li></ul>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New""> <ConcreteNode name="<b>Script</b>"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New""> <InterfaceDefinition specificationUrl=https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-CD1/Part01/components/scripting.html#Script<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New""> appinfo="Script contains author-programmed event behaviors for a scene."><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New""> <componentInfo name="Scripting" level="1"/><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New""> <Inheritance baseType="X3DScriptNode"/><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New""> <field name="<b>sourceCode</b>"<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New""> type="SFString"<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New""> accessType="inputOutput"<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New""> baseType="xs:string"<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New""> description="Embedded scripting source code can be contained within the parent node as a plain-text CDATA block, without requiring escaping of special characters."/><o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">This approach should be workable for JavaScript, C, C++ and C# programming language bindings. Further progress in those directions will be welcome.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Regression testing results:<o:p></o:p></p>
<ul style="margin-top:0in" type="disc">
<li class="MsoListParagraph" style="margin-left:0in;mso-list:l1 level1 lfo7">https://www.web3d.org/x3d/content/examples/build.java.all.log.txt<o:p></o:p></li><li class="MsoListParagraph" style="margin-left:0in;mso-list:l1 level1 lfo7">https://www.web3d.org/x3d/content/examples/build.python.all.log.txt<o:p></o:p></li><li class="MsoListParagraph" style="margin-left:0in;mso-list:l1 level1 lfo7">https://www.web3d.org/x3d/content/examples/build.turtle.all.log.txt<o:p></o:p></li><li class="MsoListParagraph" style="margin-left:0in;mso-list:l1 level1 lfo7">https://www.web3d.org/x3d/content/examples/build.json.all.log.txt (in progress)<o:p></o:p></li></ul>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">The ability to embed Script source conveniently within an X3D model, and have it portable across all our many variations, has many benefits. Security aspects are worth noting: a trusted X3D model can have advanced behaviors in one self-contained
scene (or file tree) without requiring network access.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thanks to everyone contributing to discussion that got us to this new and excellent plateau for consistent Extensible 3D portability.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Have fun with X3D scripting programs! 8)<o:p></o:p></p>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">all the best, Don<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">-- <o:p>
</o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">Don Brutzman Naval Postgraduate School, Code USW/Br brutzman@nps.edu<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">Watkins 270, MOVES Institute, Monterey CA 93943-5000 USA +1.831.656.2149<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">X3D graphics, virtual worlds, Navy robotics https://</span>
<span style="font-size:10.0pt;font-family:"Courier New"">faculty.nps.edu/brutzman<o:p></o:p></span></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> Brutzman, Donald (Don) (CIV) <brutzman@nps.edu>
<br>
<b>Sent:</b> Saturday, January 15, 2022 1:44 PM<br>
<b>To:</b> Holger Seelig <holger.seelig@yahoo.de>; X3D <x3d-public@web3d.org><br>
<b>Cc:</b> Brutzman, Donald (Don) (CIV) <brutzman@nps.edu><br>
<b>Subject:</b> RE: [x3d-public] ... need x3d.py python support for Script CDATA; name sourceCode vice sourceText for clarity<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thanks for all feedback, Holger and John.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Simple proposal for the moment: am working to demonstrate consistently unescaped script code within Script node. We achieved that capability with X3D JSON draft encoding, but didn’t use it anywhere else.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">While adding the capability to X3DUOM and Java (so far), it became obvious that the term “sourceText” is ambiguous since typically the entire model consists of source text (for XML, ClassicVRML, source code, etc.)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">This name is not yet in any of our X3D specifications so we are free to change it… am suggesting “sourceCode” as a less ambiguous name, for containing unescaped source code within Script, ShaderProgram or ShaderPart node.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">No further improvements to “sourceCode” yet heard – if that name is OK, then great. It seems clear when used in a sentence.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">We can certainly carry forward code support for the original “sourceText” for a while, not trying to break experimental code/model implementation and evaluation, but am thinking that we don’t want to perpetuate two names forever, since
that just leads to confusion and inconsistency in years to come.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<ul style="margin-top:0in" type="disc">
<li class="MsoListParagraph" style="margin-left:0in;mso-list:l0 level1 lfo3">Wikipedia: Don't repeat yourself (DRY principle)<o:p></o:p></li><li class="MsoListParagraph" style="margin-left:0in;mso-list:l0 level1 lfo3"><a href="https://en.wikipedia.org/wiki/Don't_repeat_yourself">https://en.wikipedia.org/wiki/Don't_repeat_yourself</a><o:p></o:p></li></ul>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Hope this sounds sensible... thanks for continuing consideration.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I’ll work on adding “sourceCode” capabilities to X3DPSAIL Python and X3D Ontology Turtle next, continuing with regression testing.<o:p></o:p></p>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">all the best, Don<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">-- <o:p>
</o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">Don Brutzman Naval Postgraduate School, Code USW/Br
<a href="mailto:brutzman@nps.edu">brutzman@nps.edu</a><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">Watkins 270, MOVES Institute, Monterey CA 93943-5000 USA +1.831.656.2149<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">X3D graphics, virtual worlds, Navy robotics https://</span>
<span style="font-size:10.0pt;font-family:"Courier New"">faculty.nps.edu/brutzman<o:p></o:p></span></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> x3d-public <<a href="mailto:x3d-public-bounces@web3d.org">x3d-public-bounces@web3d.org</a>>
<b>On Behalf Of </b>Holger Seelig<br>
<b>Sent:</b> Saturday, January 15, 2022 1:28 PM<br>
<b>To:</b> X3D <<a href="mailto:x3d-public@web3d.org">x3d-public@web3d.org</a>><br>
<b>Subject:</b> Re: [x3d-public] Possible issue with X3dToPython.xslt, newly tested file from X3D4WA: need x3d.py python support for Script CDATA<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">A good way to implement changes in parser/generator is to output new style code, and parse new and old style code, ie. be backwardly compatible. It depends on how much changes in X3D JSON encoding. If it is only the change of #sourceText
to #sourceCode then it is very easy to provide both variations. If it is more than this, a detailed list of changes would be very useful.<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Best regards,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Holger<o:p></o:p></p>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><o:p> </o:p></p>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<p class="MsoNormal">Am 15.01.2022 um 22:12 schrieb John Carlson <<a href="mailto:yottzumm@gmail.com">yottzumm@gmail.com</a>>:<o:p></o:p></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">In other words, let’s fix known problems before creating new ones.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Thanks!<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">John<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">On Sat, Jan 15, 2022 at 3:06 PM John Carlson <<a href="mailto:yottzumm@gmail.com">yottzumm@gmail.com</a>> wrote:<o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt">
<div>
<p class="MsoNormal">It’s higher priority for me to fix the X3dToJson.xslt so that Navigation.type produces a consistent type of data. At this time, I don’t know if it produces a JSON string or a JSON array. I believe the JSON Schema says array. If we want
it to be a string, okay, but can we change all other MFStrings to output JSON strings in X3dToJson.xslt?<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Maybe I missed an email on this?<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">John<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">On Sat, Jan 15, 2022 at 2:52 PM John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>> wrote:<o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt">
<div>
<p class="MsoNormal">It’s just that people may already have JSON files working with X_ITE. We will have to go through regression testing etc. We don’t have scripting with X3DOM working yet except on some of my published work. And even some of that is not
working. AFAIK, all my scripts work ok in X_ITE. So I would encourage us to tread carefully when modifying JSONParser.js in X_ITE, and provide for a deprecation period.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">I don’t have to retest my shaders—they are in external files.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">If we decide to force a change to X3D JSON Schema, I will probably slowly deprecate #sourceText in favor of sourceCode, but I doubt if all this will happen overnight. My surgery was postponed and I want to minimize impact on my wrists
right now. That is, I will support sourceCode and sourceText in parallel. I will have to figure out how the new X3DUOM impacts all my python generators as well.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">I’m guessing you don’t actually have any Scripting working on those older products you mention, so it didn’t really impact you until you wanted to do python+scripting in Jupyter.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">I will look a bit into X3DUOM changes to see how much my other code is impacted, or can be enhanced.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">There’s also probably X3DJSONLD.java and X3DJSONLD.cpp that need to be changed.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">I would encourage maintaining at least a synonym “#sourceText” for sourceCode.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">We should probably create a plan for updating JSONParser.js in X_ITE.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">I’m not really sure there will ever be a JSON encoding for X3D, but I’m glad X3dToJson.xslt is being maintained as I don’t have a good replacement yet.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">“someday” is today for me. What will it take to make X3D JSON a standard? We already have two working implementations, AFAIK.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">John<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">On Sat, Jan 15, 2022 at 1:12 PM Brutzman, Donald (Don) (CIV) <<a href="mailto:brutzman@nps.edu" target="_blank">brutzman@nps.edu</a>> wrote:<o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">I’ve got X3DUOM and Java working on my machine. Python, X3D Ontology and Tooltips next.<o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">John, can we please change the JSON encoding to use “<span style="color:black;background:yellow">sourceCode</span>” instead of
<span style="color:black;background:yellow">sourceText</span> for consistency? I don’t think there is any need for synonyms or backwards compatibility, the encoding hasn’t been formalized yet and (someday) JSON Schema will help people confirm correctness.<o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<ul type="disc">
<li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l4 level1 lfo6">
X3D to JSON Stylesheet Converter: Data Types<o:p></o:p></li><li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l4 level1 lfo6">
<a href="https://www.web3d.org/x3d/stylesheets/X3dToJson.html#DataTypes" target="_blank">https://www.web3d.org/x3d/stylesheets/X3dToJson.html#DataTypes</a><o:p></o:p></li></ul>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:10.0pt;font-family:"Courier New""> </span><o:p></o:p></p>
<div align="center">
<table class="MsoNormalTable" border="1" cellspacing="5" cellpadding="0">
<tbody>
<tr>
<td style="padding:.6pt .6pt .6pt .6pt">
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-family:"Times New Roman",serif">Embedded source code for<br>
<a href="https://www.web3d.org/x3d/content/X3dTooltips.html#Script" target="_blank">Script</a>, <a href="https://www.web3d.org/x3d/content/X3dTooltips.html#ShaderPart" target="_blank">ShaderPart</a> and <a href="https://www.web3d.org/x3d/content/X3dTooltips.html#ShaderProgram" target="_blank">ShaderProgram</a> nodes</span><o:p></o:p></p>
</td>
<td style="padding:.6pt .6pt .6pt .6pt">
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-family:"Times New Roman",serif">CDATA (Character DATA) section<br>
</span><span style="font-size:10.0pt;font-family:"Courier New""><[CDATA[ "world wild Web!" ]]></span><o:p></o:p></p>
</td>
<td style="padding:.6pt .6pt .6pt .6pt">
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:10.0pt;font-family:"Courier New"">"#<span style="color:black;background:yellow">sourceText</span>"</span><span style="font-family:"Times New Roman",serif"> string
array containing original code, possibly escaped</span><o:p></o:p></p>
</td>
</tr>
</tbody>
</table>
</div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:10.0pt;font-family:"Courier New";color:white"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:10.0pt;font-family:"Courier New""> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:10.0pt;font-family:"Courier New"">all the best, Don</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:10.0pt;font-family:"Courier New"">--
</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:10.0pt;font-family:"Courier New"">Don Brutzman Naval Postgraduate School, Code USW/Br
<a href="mailto:brutzman@nps.edu" target="_blank">brutzman@nps.edu</a></span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:10.0pt;font-family:"Courier New"">Watkins 270, MOVES Institute, Monterey CA 93943-5000 USA +1.831.656.2149</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:10.0pt;font-family:"Courier New"">X3D graphics, virtual worlds, Navy robotics https://</span>
<span style="font-size:10.0pt;font-family:"Courier New""><a href="http://faculty.nps.edu/brutzman" target="_blank">faculty.nps.edu/brutzman</a></span><o:p></o:p></p>
</div>
</div>
</div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><b>From:</b> John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>>
<br>
<b>Sent:</b> Friday, January 14, 2022 5:25 AM<br>
<b>To:</b> Brutzman, Donald (Don) (CIV) <<a href="mailto:brutzman@nps.edu" target="_blank">brutzman@nps.edu</a>><br>
<b>Cc:</b> X3D Graphics public mailing list <<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a>><br>
<b>Subject:</b> Re: Possible issue with X3dToPython.xslt, newly tested file from X3D4WA: need x3d.py python support for Script CDATA<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">I finally got a chance to think about this, and I think it will be good to support legacy files by providing a synonym for “#sourceText”—“sourceCode” as you say. If a particular
binding can’t provide for #sourceText, then sourceCode can be used as a fallback.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">We can discuss changes to the JSON WD Draft at some point.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">We will have to update X3D JSON schema as previously discussed implicitly.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">John <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">On Tue, Jan 11, 2022 at 1:03 AM Brutzman, Donald (Don) (CIV) <<a href="mailto:brutzman@nps.edu" target="_blank">brutzman@nps.edu</a>> wrote:<o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt">
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">1. Following some initial testing, am happy to report that this approach to embed source code in Script nodes seems consistently feasible for X3DUOM, Python, Java and X3D Ontology
all at once.<br>
<br>
It will take a little work to fully implement, but it should improve the expressive power (meaning "fix a hole") in each of our programming-language bindings.<br>
<br>
------<br>
<br>
2. In some sense embedding script code is already possible - you can put such a program in first string contained in a Script url list - but in practice that tends to be quite difficult because then all sorts of obfuscating escaping of special characters has
to take place.<br>
<br>
So having a separate place for source-code blocks is very helpful. The X3D Architecture recognizes this possibility and defines corresponding behaviors. Further details can be found in X3D XML Encoding.<br>
<br>
* X3D4 Architecture, clause 19 Scripting component, 29.4.1 Script<br>
* <a href="https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-CD1/Part01/components/scripting.html#Script" target="_blank">
https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-CD1/Part01/components/scripting.html#Script</a><br>
<br>
* X3D4 Architecture, 9.2.3 Scripting language protocols<br>
<a href="https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-CD1/Part01/components/networking.html#ScriptingLanguageProtocols" target="_blank">https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-CD1/Part01/components/networking.html#ScriptingLanguageProtocols</a><br>
<br>
* X3D XML Encoding, Clause 4 Concepts, 4.3.13 Encapsulating Script node code<br>
<a href="https://www.web3d.org/documents/specifications/19776-1/V3.3/Part01/concepts.html#EncapsulatingScriptNodeCode" target="_blank">https://www.web3d.org/documents/specifications/19776-1/V3.3/Part01/concepts.html#EncapsulatingScriptNodeCode</a><br>
<br>
"If both a url field and a CDATA clause are encountered, the url field is processed first. Thus, the CDATA construct can also be considered equivalent to one additional value appended to the url MFString array. This ordering allows an online script code
url to take priority over fallback default script code in the CDATA construct. This ordering also allows run-time updates if a viewer is connected to the network, if so desired by the originating author."<br>
<br>
------<br>
<br>
3. Next - naming. "CDATA" is pretty obscure as a field name, especially since that is an XML datatype (for Character Data). Thus am thinking "sourceCode" might be a better name... what do you think?<br>
<br>
The ability to embed safe scripting code within any X3D Script is a powerful capability that also improves security possibilities for advanced X3D... it is easier to secure and safely transport an embedded script than it is to have multiple files handled safely.<br>
<br>
John, it looks like we already did something just like this in the JSON encoding, we called it "sourceText", excerpt follows. (Excessive string quoting was necessary to pass JSON parsing rules for multiline text.)<br>
<br>
----------------------------------------------------------------------------------------------------------------------------------------------<br>
* <a href="https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fx3dgraphics.com%2Fexamples%2FX3dForWebAuthors%2FChapter14Prototypes%2FMaterialModulator.json&data=04%7C01%7Cbrutzman%40nps.edu%7Caed811be7a784b60a13e08d9d870344e%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C637778798739194954%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=Ar76EY0SextiLRf2vQJ%2FIu3aB2nepdIEH%2FFe4w57FbI%3D&reserved=0" target="_blank">
https://X3dGraphics.com/examples/X3dForWebAuthors/Chapter14Prototypes/MaterialModulator.json</a><br>
<br>
{ "Script":<br>
{<br>
[....]<br>
"#sourceText":[<br>
"",<br>
"",<br>
"ecmascript:",<br>
"function initialize ()",<br>
"{",<br>
" newColor = diffuseColor; // start with original color",<br>
"}",<br>
"function clockTrigger (timeValue)",<br>
"{",<br>
" if (!enabled) return;",<br>
" red = newColor.r;",<br>
" green = newColor.g;",<br>
" blue = newColor.b;",<br>
"",<br>
" // note different modulation rates for each color component, % is modulus operator",<br>
" newColor = new SFColor ((red + 0.02) % 1, (green + 0.03) % 1, (blue + 0.04) % 1);",<br>
"\tif (enabled)",<br>
"\t{",<br>
"\t\tBrowser.print ('diffuseColor=(' + red +',' + green + ',' + blue + ') newColor=' + newColor.toString() + '\n');",<br>
"\t}",<br>
"}",<br>
"function set_enabled (newValue)",<br>
"{",<br>
"\tenabled = newValue;",<br>
"}",<br>
"",<br>
""<br>
]<br>
----------------------------------------------------------------------------------------------------------------------------------------------<br>
Which in the .x3d XML CDATA simply looks like<br>
<br>
<Script DEF='MaterialModulatorScript'><br>
<field accessType='inputOutput' name='enabled' type='SFBool'/><br>
<field accessType='inputOutput' name='diffuseColor' type='SFColor'/><br>
<field accessType='outputOnly' name='newColor' type='SFColor'/><br>
<field accessType='inputOnly' name='clockTrigger' type='SFTime'/><br>
<IS><br>
<connect nodeField='enabled' protoField='enabled'/><br>
<connect nodeField='diffuseColor' protoField='diffuseColor'/><br>
</IS><br>
<![CDATA[<br>
ecmascript:<br>
function initialize ()<br>
{<br>
newColor = diffuseColor; // start with original color<br>
}<br>
function clockTrigger (timeValue)<br>
{<br>
if (!enabled) return;<br>
red = newColor.r;<br>
green = newColor.g;<br>
blue = newColor.b;<br>
<br>
// note different modulation rates for each color component, % is modulus operator<br>
newColor = new SFColor ((red + 0.02) % 1, (green + 0.03) % 1, (blue + 0.04) % 1);<br>
if (enabled)<br>
{<br>
Browser.print ('diffuseColor=(' + red +',' + green + ',' + blue + ') newColor=' + newColor.toString() + '\n');<br>
}<br>
}<br>
function set_enabled (newValue)<br>
{<br>
enabled = newValue;<br>
}<br>
]]><br>
</Script><br>
<br>
----------------------------------------------------------------------------------------------------------------------------------------------<br>
<br>
So this possibility is a cool prospect, again thanks for flagging it. I'll work further on X3DUOM and Python, Java, OWL compatibility next.<br>
<br>
Have fun with X3D! 8)<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 https:// <a href="http://faculty.nps.edu/brutzman" target="_blank">
faculty.nps.edu/brutzman</a><br>
<br>
-----Original Message-----<br>
From: Brutzman, Donald (Don) (CIV) <<a href="mailto:brutzman@nps.edu" target="_blank">brutzman@nps.edu</a>>
<br>
Sent: Monday, January 10, 2022 6:37 PM<br>
To: John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>><br>
Cc: X3D Graphics public mailing list <<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a>>; Brutzman, Donald (Don) (CIV) <<a href="mailto:brutzman@nps.edu" target="_blank">brutzman@nps.edu</a>><br>
Subject: RE: Possible issue with X3dToPython.xslt, newly tested file from X3D4WA: need x3d.py python support for Script CDATA<br>
<br>
Thanks for the interesting trouble report John.<br>
<br>
No changes needed to original X3D model, it passes all X3D Validator tests (though X3D Schematron provides a few warnings).<br>
<br>
* <a href="https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fx3dgraphics.com%2Fexamples%2FX3dForWebAuthors%2FChapter14Prototypes%2FMaterialModulator.x3d&data=04%7C01%7Cbrutzman%40nps.edu%7Caed811be7a784b60a13e08d9d870344e%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C637778798739194954%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=5R2TQEFkBNxTRMd%2BOIDpxJ%2FEYpKa4uz6i0YPCY7ZYA0%3D&reserved=0" target="_blank">
https://X3dGraphics.com/examples/X3dForWebAuthors/Chapter14Prototypes/MaterialModulator.x3d</a><br>
* <a href="https://savage.nps.edu/X3dValidator" target="_blank">https://savage.nps.edu/X3dValidator</a><br>
<br>
XMLSpy was stricter about type handling than our Java-based Saxon10 conversions for this example. XMLSpy diagnosed some problems that I fixed.<br>
<br>
After also fixing the stylesheet name provided by a diagnostic, all X3dToPython.xslt changes were checked into subversion.<br>
<br>
I now get the following conversion error:<br>
<br>
=====================<br>
create python:<br>
C:\x3d-code\<a href="http://www.web3d.org/" target="_blank">www.web3d.org</a>\x3d\content\examples\X3dForWebAuthors/Chapter14Prototypes//MaterialModulator.x3d processing with X3dToPython stylesheet...<br>
*** TODO x3d.py and X3dToPython.xslt need to handle embedded CDATA source code for Script C:\x3d-code\<a href="http://www.web3d.org/" target="_blank">www.web3d.org</a>\x3d\content\examples\X3dForWebAuthors/Chapter14Prototypes//MaterialModulator.py self-validation
tests...<br>
validate python:<br>
File "C:\x3d-code\<a href="http://www.web3d.org/" target="_blank">www.web3d.org</a>\x3d\content\examples\X3dForWebAuthors\Chapter14Prototypes\MaterialModulator.py", line 74<br>
*** TODO x3d.py and X3dToPython.xslt need to handle embedded CDATA source code for Script<br>
^<br>
SyntaxError: invalid syntax<br>
Result: 1<br>
===================================<br>
<br>
So, embedded CDATA scripting code inside a Script node (and similar Shader nodes) remains an omission in our Python support.<br>
<br>
To remedy this, we need to create a special field in the X3DPSAIL class Script. *What shall we call it?* Creating a Script member named CDATA seems unambiguous and eponymous with the XML encoding...<br>
<br>
* X3D Tooltips, Script and Script url<br>
<a href="https://www.web3d.org/x3d/tooltips/X3dTooltips.html#Script" target="_blank">https://www.web3d.org/x3d/tooltips/X3dTooltips.html#Script</a><br>
<a href="https://www.web3d.org/x3d/tooltips/X3dTooltips.html#Script.url" target="_blank">https://www.web3d.org/x3d/tooltips/X3dTooltips.html#Script.url</a><br>
<br>
* X3D Tooltips, XML Data Types<br>
<a href="https://www.web3d.org/x3d/tooltips/X3dTooltips.html#XML" target="_blank">https://www.web3d.org/x3d/tooltips/X3dTooltips.html#XML</a><br>
<br>
" CDATA is an XML term for Character Data. The base type for all XML attributes consists of string-based CDATA characters. CDATA is used throughout the X3D DOCTYPE definitions, which can only check for the presence of legal strings and thus are not able to
validate numeric type information. XML Schema provides stricter validation based on data types."<br>
<br>
* XML, 2.4 Character Data and Markup<br>
<a href="https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.w3.org%2FTR%2FREC-xml%2F%23syntax&data=04%7C01%7Cbrutzman%40nps.edu%7Caed811be7a784b60a13e08d9d870344e%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C637778798739194954%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=IuNBPkHPH2el1z4FZmdgyER1qw8DS5R6uvvI1cEi3dc%3D&reserved=0" target="_blank">https://www.w3.org/TR/REC-xml/#syntax</a><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 https:// <a href="http://faculty.nps.edu/brutzman" target="_blank">
faculty.nps.edu/brutzman</a><br>
<br>
-----Original Message-----<br>
From: John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>><br>
Sent: Monday, January 10, 2022 4:06 PM<br>
To: Brutzman, Donald (Don) (CIV) <<a href="mailto:brutzman@nps.edu" target="_blank">brutzman@nps.edu</a>>; X3D Graphics public mailing list <<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a>><br>
Subject: Possible issue with X3dToPython.xslt, newly tested file from X3D4WA<br>
<br>
X3D XML file attached. From X3DJSONLD's maven build log:<br>
<br>
[INFO] --- xml-maven-plugin:1.0.2:transform (default) @ X3DJSONLD --- [INFO] Transforming file:<br>
/home/coderextreme/X3DJSONLD/src/main/data/MaterialModulatorExamples.x3d<br>
[INFO] Transforming file:<br>
/home/coderextreme/X3DJSONLD/src/main/data/MaterialModulator.x3d<br>
Type error at char 37 in xsl:value-of/@select on line 610 column 120 of<br>
X3dToPython.xslt:<br>
XPTY0004: A sequence of more than one item is not allowed as the first argument of<br>
normalize-space() ("", "", ...)<br>
at xsl:apply-templates<br>
(file:/home/coderextreme/X3DJSONLD/src/main/lib/stylesheets/X3dToPython.xslt#606)<br>
processing /X3D/Scene[1]/ProtoDeclare[1]/ProtoBody[1]/Script[1]<br>
at xsl:apply-templates<br>
(file:/home/coderextreme/X3DJSONLD/src/main/lib/stylesheets/X3dToPython.xslt#606)<br>
processing /X3D/Scene[1]/ProtoDeclare[1]/ProtoBody[1]<br>
at xsl:apply-templates<br>
(file:/home/coderextreme/X3DJSONLD/src/main/lib/stylesheets/X3dToPython.xslt#606)<br>
processing /X3D/Scene[1]/ProtoDeclare[1]<br>
at xsl:apply-templates<br>
(file:/home/coderextreme/X3DJSONLD/src/main/lib/stylesheets/X3dToPython.xslt#606)<br>
processing /X3D/Scene[1]<br>
at xsl:apply-templates<br>
(file:/home/coderextreme/X3DJSONLD/src/main/lib/stylesheets/X3dToPython.xslt#123)<br>
processing /X3D<br>
[INFO]<br>
------------------------------------------------------------------------<br>
[INFO] BUILD FAILURE<br>
[INFO]<br>
------------------------------------------------------------------------<br>
[INFO] Total time: 2.840 s<br>
[INFO] Finished at: 2022-01-10T17:59:22-06:00 [INFO]<br>
------------------------------------------------------------------------<br>
[ERROR] Failed to execute goal<br>
org.codehaus.mojo:xml-maven-plugin:1.0.2:transform (default) on project<br>
X3DJSONLD: Failed to transform input file<br>
/home/coderextreme/X3DJSONLD/src/main/data/MaterialModulator.x3d: A sequence of more than one item is not allowed as the first argument of<br>
normalize-space() ("", "", ...) -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.<br>
[ERROR] Re-run Maven using the -X switch to enable full debug logging.<br>
[ERROR]<br>
[ERROR] For more information about the errors and possible solutions, please read the following articles:<br>
[ERROR] [Help 1]<br>
<a href="https://nam10.safelinks.protection.outlook.com/?url=http%3A%2F%2Fcwiki.apache.org%2Fconfluence%2Fdisplay%2FMAVEN%2FMojoExecutionException&data=04%7C01%7Cbrutzman%40nps.edu%7Caed811be7a784b60a13e08d9d870344e%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C637778798739194954%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=h7YPO3pgu7UkzDT0NPDVUR%2Fw6fX29yeUbK12MpMq9%2B8%3D&reserved=0" target="_blank">https://nam10.safelinks.protection.outlook.com/?url=http%3A%2F%2Fcwiki.apache.org%2Fconfluence%2Fdisplay%2FMAVEN%2FMojoExecutionException&data=04%7C01%7Cbrutzman%40nps.edu%7C79b6d0212127425f31b408d9d4ab3773%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C637774654099751000%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=VYVojdsW4QsyjrkZGnqfPOPmUp7x5ftTGE3H0TzrTts%3D&reserved=0</a><o:p></o:p></p>
</blockquote>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</blockquote>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
</body>
</html>