<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
<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 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:Aptos;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:11.0pt;
        font-family:"Aptos",sans-serif;
        mso-ligatures:standardcontextual;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#467886;
        text-decoration:underline;}
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:"Aptos",sans-serif;
        mso-ligatures:standardcontextual;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Aptos",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:11.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:48116227;
        mso-list-template-ids:-1349612796;}
@list l0: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 l0:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:"Courier New";
        mso-bidi-font-family:"Times New Roman";}
@list l0:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l0:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l0:level5
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l0:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l0:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l0:level8
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l0:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l1
        {mso-list-id:293679459;
        mso-list-template-ids:-1443980052;}
@list l1: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 l1:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:"Courier New";
        mso-bidi-font-family:"Times New Roman";}
@list l1:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l1:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l1:level5
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l1:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l1:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l1:level8
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l1:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l2
        {mso-list-id:1312827287;
        mso-list-template-ids:683028968;}
@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:o;
        mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:"Courier New";
        mso-bidi-font-family:"Times New Roman";}
@list l2:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l2:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l2:level5
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l2:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l2:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l2:level8
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l2:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l3
        {mso-list-id:1370644683;
        mso-list-type:hybrid;
        mso-list-template-ids:-1461021570 -204317896 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l3:level1
        {mso-level-start-at:3;
        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:Aptos;
        mso-bidi-font-family:"Times New Roman";}
@list l3: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 l3: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 l3: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 l3: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 l3: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 l3: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 l3: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 l3: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 l4
        {mso-list-id:1843817991;
        mso-list-template-ids:-2113257014;}
@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:o;
        mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:"Courier New";
        mso-bidi-font-family:"Times New Roman";}
@list l4:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l4:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l4:level5
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l4:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l4:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l4:level8
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l4:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        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="#467886" vlink="#96607D" style='word-wrap:break-word'><div class=WordSection1><p class=MsoNormal>Happy to report a successful codebase update:<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:l3 level1 lfo1'>X3D Java Scene Access Interface Library (X3DJSAIL)<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l3 level1 lfo1'>X3DJSAIL supports programmers with standards-based X3D Java interfaces and objects, all as open source.<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l3 level1 lfo1'>https://www.web3d.org/specifications/java/X3DJSAIL.html<o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This build release successfully tests the latest Java OpenJDK 22.0.1 programming language.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>X3D scene conversion and file serialization using the X3D Examples Archives has produced over four thousand diverse models for unit testing.  Unit testing has resulted in successful production of complete Javadoc for these Java translations.<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:l3 level1 lfo1'>X3D Resources, Examples: Scene Archives for X3D<o:p></o:p></li><ul style='margin-top:0in' type=circle><li class=MsoListParagraph style='margin-left:0in;mso-list:l3 level2 lfo1'>https://www.web3d.org/x3d/content/examples/X3dResources.html#Examples<o:p></o:p></li></ul><li class=MsoListParagraph style='margin-left:0in;mso-list:l3 level1 lfo1'>X3DJSAIL Examples, Javadoc<o:p></o:p></li><ul style='margin-top:0in' type=circle><li class=MsoListParagraph style='margin-left:0in;mso-list:l3 level2 lfo1'>https://www.web3d.org/specifications/java/X3DJSAIL.html#Examples<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l3 level2 lfo1'>https://www.web3d.org/specifications/java/javadoc<o:p></o:p></li></ul><li class=MsoListParagraph style='margin-left:0in;mso-list:l3 level1 lfo1'>Javadoc for each model archive<o:p></o:p></li><ul style='margin-top:0in' type=circle><li class=MsoListParagraph style='margin-left:0in;mso-list:l3 level2 lfo1'>https://www.web3d.org/x3d/content/examples/X3dForWebAuthors/javadoc<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l3 level2 lfo1'>https://www.web3d.org/x3d/content/examples/X3dForAdvancedModeling/javadoc<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l3 level2 lfo1'>https://www.web3d.org/x3d/content/examples/Basic/javadoc<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l3 level2 lfo1'>https://www.web3d.org/x3d/content/examples/ConformanceNist/javadoc<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l3 level2 lfo1'>https://www.web3d.org/x3d/content/examples/HumanoidAnimation<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l3 level2 lfo1'>https://www.web3d.org/x3d/content/examples/Vrml2Sourcebook/javadoc<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l3 level2 lfo1'>https://savage.nps.edu/Savage<o:p></o:p></li></ul><li class=MsoListParagraph style='margin-left:0in;mso-list:l3 level1 lfo1'>Comprehensive conversion, compilation and execution results<o:p></o:p></li><ul style='margin-top:0in' type=circle><li class=MsoListParagraph style='margin-left:0in;mso-list:l3 level2 lfo1'>Can search for  “<span style='font-size:10.0pt;font-family:"Courier New"'>*** Error</span>” and  “<span style='font-size:10.0pt;font-family:"Courier New"'>*** Warning</span>”  line prefixes to find current model issues<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l3 level2 lfo1'>https://www.web3d.org/x3d/content/examples/build.java.all.log.txt<o:p></o:p></li></ul></ul><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Conversion of an .x3d model into X3DJSAIL .java program is a feature provided by X3D-Edit.  Have <span style='font-size:10.0pt;font-family:"Courier New"'>X3DJSAIL.4.0.full.jar</span> in your CLASSPATH in order to compile and run the result.<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:l3 level1 lfo1'>X3D-Edit 4.0 Authoring Tool for Extensible 3D (X3D) Graphics<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l3 level1 lfo1'>X3D-Edit is a free, open-source Extensible 3D (X3D) Graphics authoring tool for simple high-quality authoring, editing, import/export, validation and viewing of X3D scenes.<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l3 level1 lfo1'>https://savage.nps.edu/x3d-edit<o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l3 level1 lfo1'>X3DJSAIL Downloads<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l3 level1 lfo1'>https://www.web3d.org/specifications/java/X3DJSAIL.html#Downloads<o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Looking ahead, two capabilities are identified as priorities for future X3DJSAIL releases.<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:l3 level1 lfo1'>X3DJSAIL TODO Planned and Completed Work<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l3 level1 lfo1'>https://www.web3d.org/specifications/java/X3DJSAIL.html#TODO<o:p></o:p></li><li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l3 level1 lfo1'>In order to help reduce model bloat for CAD and related exports, provide ability to limit resolution (significant digits) of floating-point outputs in order to reduce output file size. Provide separate optional settings for lengths, rotations, and texture coordinates, both on a scene and per-node basis. Note precision values as contained metadata.<o:p></o:p></li><li class=MsoNormal style='color:black;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l3 level1 lfo1'>When updating specifications for X3D 4.0, use <a href="https://docs.oracle.com/javase/tutorial/java/annotations/index.html" target="_blank">Java Annotations</a> to confirm support for abstract <a href="https://web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-2v4.0-WD1/Part02/X3D_SAI.html" target="_blank">19775-2 X3D Scene Access Interface (SAI)</a> requirements, once eventually applying updates to <a href="https://www.web3d.org/documents/specifications/19777-2/V3.3" target="_blank">19777-2 Java Scene Access Interface (SAI)</a>.<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='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;border:none;padding:0in'><span style='color:black'><o:p> </o:p></span></p></div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:.5in'><b><span style='font-size:10.0pt;color:black;mso-ligatures:none'>Abstract<o:p></o:p></span></b></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:.5in'><span style='font-size:10.0pt;color:black;mso-ligatures:none'>X3DJSAIL, the X3D Java Scene Access Interface Library is a set of strongly typed Java application programming interfaces (APIs) providing programmer access to an X3D scene graph. Two integrated Java packages are included that contain X3D SAI interfaces and support the <a href="https://www.web3d.org/standards"><span style='color:blue'>X3D Graphics Standards</span></a> for Java programmers.<o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:1.0in;text-indent:-.25in;mso-list:l2 level1 lfo2'><![if !supportLists]><span style='font-size:10.0pt;font-family:Symbol;color:black;mso-ligatures:none'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>        </span></span></span><![endif]><span style='font-size:10.0pt;color:black;mso-ligatures:none'>org.web3d.x3d.jsail</span><span style='font-size:10.0pt;color:black;mso-ligatures:none'> provides concrete implementation-oriented classes for building X3D scenes using standalone Java objects.<o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:1.0in;text-indent:-.25in;mso-list:l2 level1 lfo2'><![if !supportLists]><span style='font-size:10.0pt;font-family:Symbol;color:black;mso-ligatures:none'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>        </span></span></span><![endif]><span style='font-size:10.0pt;color:black;mso-ligatures:none'>org.web3d.x3d.sai</span><span style='font-size:10.0pt;color:black;mso-ligatures:none'>     contains standard X3D SAI interfaces to independently compile Script-node source for use in X3D players.<o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:.5in'><i><span style='font-size:10.0pt;color:black;mso-ligatures:none'>Goal outcomes:</span></i><span style='font-size:10.0pt;color:black;mso-ligatures:none'> make it easy to create a fully valid X3D scene graph using Java, while also making it hard to create an incorrect or invalid X3D model. X3DJSAIL has succeeded in accomplishing these goals.<o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:1.0in;text-indent:-.25in;mso-list:l4 level1 lfo3'><![if !supportLists]><span style='font-size:10.0pt;font-family:Symbol;color:black;mso-ligatures:none'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>        </span></span></span><![endif]><span style='font-size:10.0pt;color:black;mso-ligatures:none'>Software design patterns are autogenerated from rigorous definitions of all X3D node and field relationships using the <a href="https://www.web3d.org/specifications/X3DUOM.html" target="_blank" title="X3D Unified Object Model (X3DUOM)"><span style='color:blue'>X3D Unified Object Model (X3DUOM)</span></a>.<o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:1.0in;text-indent:-.25in;mso-list:l4 level1 lfo3'><![if !supportLists]><span style='font-size:10.0pt;font-family:Symbol;color:black;mso-ligatures:none'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>        </span></span></span><![endif]><span style='font-size:10.0pt;color:black;mso-ligatures:none'>Validation of individual fields includes application of <a href="https://www.web3d.org/specifications/X3dRegularExpressions.html" target="_blank" title="X3D Regular Expressions (regexes)"><span style='color:blue'>X3D Regular Expressions (regexes)</span></a>.<o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:1.0in;text-indent:-.25in;mso-list:l4 level1 lfo3'><![if !supportLists]><span style='font-size:10.0pt;font-family:Symbol;color:black;mso-ligatures:none'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>        </span></span></span><![endif]><span style='font-size:10.0pt;color:black;mso-ligatures:none'>X3DJSAIL <a href="https://www.web3d.org/specifications/java/javadoc/index.html" target="_blank" title="Java Documentation"><span style='color:blue'>Javadoc</span></a> includes all descriptions, links, hints, and warnings from the <a href="https://www.web3d.org/x3d/tooltips/X3dTooltips.html"><span style='color:blue'>X3D Tooltips</span></a>.<o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:.5in'><span style='font-size:10.0pt;color:black;mso-ligatures:none'>Available products include <a href="https://www.web3d.org/specifications/java/javadoc/index.html" target="_blank"><span style='color:blue'>Javadoc</span></a> documentation, several thousand self-validating <a href="https://www.web3d.org/specifications/java/X3DJSAIL.html#Examples"><span style='color:blue'>examples</span></a>, <a href="https://www.web3d.org/specifications/java/src/" target="_blank"><span style='color:blue'>source code</span></a>, <a href="https://www.web3d.org/specifications/java/build.xml" target="_blank"><span style='color:blue'>build support</span></a> for <a href="https://www.web3d.org/specifications/java/classes/" target="_blank"><span style='color:blue'>compiled classes</span></a>, <a href="https://www.web3d.org/specifications/java/X3DJSAIL.html#Downloads"><span style='color:blue'>run-time jar archives</span></a>, and draft specification annexes for <a href="https://www.web3d.org/specifications/java/draftJavaLanguageBindingAnnexes/Part2/nodeInterfaces.html" target="_blank"><span style='color:blue'>node interfaces</span></a> and <a href="https://www.web3d.org/specifications/java/draftJavaLanguageBindingAnnexes/Part2/nodeTypeInterfaces.html" target="_blank"><span style='color:blue'>abstract-node type interfaces</span></a>.<o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:.5in'><span style='font-size:10.0pt;color:black;mso-ligatures:none'>This library successfully supports multiple purposes:<o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:1.0in;text-indent:-.25in;mso-list:l0 level1 lfo4'><![if !supportLists]><span style='font-size:10.0pt;font-family:Symbol;color:black;mso-ligatures:none'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>        </span></span></span><![endif]><span style='font-size:10.0pt;color:black;mso-ligatures:none'>Create high-performance standalone Java applications using a <a href="https://en.wikipedia.org/wiki/Plain_Old_Java_Object" target="_blank"><span style='color:blue'>Plain Old Java Object (POJO)</span></a> implementation for X3D.<o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:1.0in;text-indent:-.25in;mso-list:l0 level1 lfo4'><![if !supportLists]><span style='font-size:10.0pt;font-family:Symbol;color:black;mso-ligatures:none'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>        </span></span></span><![endif]><span style='font-size:10.0pt;color:black;mso-ligatures:none'>Such X3D-capable Java applications can be <i>client-based</i>, <i>server-based</i>, or driven via <a href="https://docs.oracle.com/javase/tutorial/essential/environment/cmdLineArgs.html" target="_blank"><span style='color:blue'>command-line invocation (CLI)</span></a> such as <a href="https://www.java.com/en/download/help/javaconsole.html" target="_blank"><span style='color:blue'>Java Console (jconsole)</span></a>.<o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:1.0in;text-indent:-.25in;mso-list:l0 level1 lfo4'><![if !supportLists]><span style='font-size:10.0pt;font-family:Symbol;color:black;mso-ligatures:none'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>        </span></span></span><![endif]><span style='font-size:10.0pt;color:black;mso-ligatures:none'>No additional Java packages are necessary, with all included code offered under a royalty-free <a href="https://www.web3d.org/specifications/java/license.html" target="_blank"><span style='color:blue'>license</span></a> suitable for any legitimate purpose.<o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:1.0in;text-indent:-.25in;mso-list:l0 level1 lfo4'><![if !supportLists]><span style='font-size:10.0pt;font-family:Symbol;color:black;mso-ligatures:none'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>        </span></span></span><![endif]><span style='font-size:10.0pt;color:black;mso-ligatures:none'>Confirms correct implementation of ISO standard <a href="https://www.web3d.org/x3d4" target="_blank"><span style='color:blue'>X3D version 4.0</span></a> while maintaining full support for prior X3D versions 3.0 through 3.3.<o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:.5in'><span style='font-size:10.0pt;color:black;mso-ligatures:none'>X3DJSAIL also serves as a design template to autogenerate similar codebases for <a href="https://www.web3d.org/x3d/stylesheets/python/python.html" target="_blank"><span style='color:blue'>Python</span></a> and <a href="https://www.web3d.org/x3d/content/semantics/semantics.html" target="_blank"><span style='color:blue'>X3D Ontology</span></a> using Turtle. Similar future possibilities include ECMAScript and JSON Schema, C#/C++/C, and potentially programming languages.<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'><o:p> </o:p></p></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Feedback welcome.  Have fun with X3D using Java!   <span style='font-family:"Segoe UI Emoji",sans-serif'>😊</span><o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><span style='font-size:9.0pt;font-family:"Courier New";mso-ligatures:none'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:9.0pt;font-family:"Courier New";mso-ligatures:none'>all the best, Don<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:9.0pt;font-family:"Courier New";mso-ligatures:none'>-- <o:p></o:p></span></p><p class=MsoNormal><span style='font-size:9.0pt;font-family:"Courier New";mso-ligatures:none'>Don Brutzman  Naval Postgraduate School, Code USW/Br        brutzman@nps.edu<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:9.0pt;font-family:"Courier New";mso-ligatures:none'>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:9.0pt;font-family:"Courier New";mso-ligatures:none'>X3D graphics, virtual worlds, navy robotics https://faculty.nps.edu/brutzman<o:p></o:p></span></p><p class=MsoNormal><o:p> </o:p></p></div></body></html>