[x3d-public] Possible issue with X3dToPython.xslt, newly tested file from X3D4WA: need x3d.py python support for Script CDATA

John Carlson yottzumm at gmail.com
Sat Jan 15 17:07:44 PST 2022


With all due speed, please ensure that create.X3DJSAIL ant target is
working.

Not sure X3d-Edit 4 is working, will alter script to add bin to JAVA_HOME,
and report back my success or failure:
~/x3dedit40/x3dedit40/bin  $ ./x3dedit4064Wind*bat
Must set environment variable JAVA_HOME
JAVA_HOME=C:\openjdk-17.0.1_windows-x64_bin\jdk-17.0.1

C:\Users\john\x3dedit40\x3dedit40\bin>set
jdkhome=C:\openjdk-17.0.1_windows-x64_bin\jdk-17.0.1
jdkhome=C:\openjdk-17.0.1_windows-x64_bin\jdk-17.0.1

C:\Users\john\x3dedit40\x3dedit40\bin>x3dedit4064.exe

C:\Users\john\x3dedit40\x3dedit40\bin>PAUSE
Press any key to continue . . .

On Sat, Jan 15, 2022 at 1:12 PM Brutzman, Donald (Don) (CIV) <
brutzman at nps.edu> wrote:

> I’ve got X3DUOM and Java working on my machine.  Python, X3D Ontology and
> Tooltips next.
>
>
>
> John, can we please change the JSON encoding to use “sourceCode” instead
> of sourceText 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.
>
>
>
>    - X3D to JSON Stylesheet Converter: Data Types
>    - https://www.web3d.org/x3d/stylesheets/X3dToJson.html#DataTypes
>
>
>
> Embedded source code for
> Script <https://www.web3d.org/x3d/content/X3dTooltips.html#Script>,
> ShaderPart <https://www.web3d.org/x3d/content/X3dTooltips.html#ShaderPart>
>  and ShaderProgram
> <https://www.web3d.org/x3d/content/X3dTooltips.html#ShaderProgram> nodes
>
> CDATA (Character DATA) section
> <[CDATA[ "world wild Web!" ]]>
>
> "#sourceText" string array containing original code, possibly escaped
>
>
>
>
>
> all the best, Don
>
> --
>
> Don Brutzman  Naval Postgraduate School, Code USW/Br
> brutzman at nps.edu
>
> Watkins 270,  MOVES Institute, Monterey CA 93943-5000 USA
> +1.831.656.2149
>
> X3D graphics, virtual worlds, Navy robotics https://
> faculty.nps.edu/brutzman
>
>
>
> *From:* John Carlson <yottzumm at gmail.com>
> *Sent:* Friday, January 14, 2022 5:25 AM
> *To:* Brutzman, Donald (Don) (CIV) <brutzman at nps.edu>
> *Cc:* X3D Graphics public mailing list <x3d-public at web3d.org>
> *Subject:* Re: Possible issue with X3dToPython.xslt, newly tested file
> from X3D4WA: need x3d.py python support for Script CDATA
>
>
>
> 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.
>
>
>
> We can discuss changes to the JSON WD Draft at some point.
>
>
>
> We will have to update X3D JSON schema as previously discussed implicitly.
>
>
>
> John
>
>
>
> On Tue, Jan 11, 2022 at 1:03 AM Brutzman, Donald (Don) (CIV) <
> brutzman at nps.edu> wrote:
>
> 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.
>
> 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.
>
> ------
>
> 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.
>
> 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.
>
> * X3D4 Architecture, clause 19 Scripting component, 29.4.1 Script
> *
> https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-CD1/Part01/components/scripting.html#Script
>
> * X3D4 Architecture, 9.2.3 Scripting language protocols
>
> https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-CD1/Part01/components/networking.html#ScriptingLanguageProtocols
>
> * X3D XML Encoding, Clause 4 Concepts, 4.3.13 Encapsulating Script node
> code
>
> https://www.web3d.org/documents/specifications/19776-1/V3.3/Part01/concepts.html#EncapsulatingScriptNodeCode
>
>    "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."
>
> ------
>
> 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?
>
> 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.
>
> 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.)
>
>
> ----------------------------------------------------------------------------------------------------------------------------------------------
> *
> https://X3dGraphics.com/examples/X3dForWebAuthors/Chapter14Prototypes/MaterialModulator.json
> <https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fx3dgraphics.com%2Fexamples%2FX3dForWebAuthors%2FChapter14Prototypes%2FMaterialModulator.json&data=04%7C01%7Cbrutzman%40nps.edu%7C015d3b7123844f4c7d7508d9d761502e%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C637777635530499448%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=nBWBGWktMkBVA9XkqojDDqLZFbYrEIb3%2FGYH0za3FG0%3D&reserved=0>
>
>                     { "Script":
>                       {
> [....]
>                         "#sourceText":[
> "",
> "",
> "ecmascript:",
> "function initialize ()",
> "{",
> "    newColor = diffuseColor; // start with original color",
> "}",
> "function clockTrigger (timeValue)",
> "{",
> "    if (!enabled) return;",
> "    red   = newColor.r;",
> "    green = newColor.g;",
> "    blue  = newColor.b;",
> "",
> "    // note different modulation rates for each color component, % is
> modulus operator",
> "    newColor = new SFColor ((red + 0.02) % 1, (green + 0.03) % 1, (blue +
> 0.04) % 1);",
> "\tif (enabled)",
> "\t{",
> "\t\tBrowser.print ('diffuseColor=(' + red +',' + green + ',' + blue + ')
> newColor=' + newColor.toString() + '\n');",
> "\t}",
> "}",
> "function set_enabled (newValue)",
> "{",
> "\tenabled = newValue;",
> "}",
> "",
> ""
> ]
>
> ----------------------------------------------------------------------------------------------------------------------------------------------
> Which in the .x3d XML CDATA simply looks like
>
>         <Script DEF='MaterialModulatorScript'>
>           <field accessType='inputOutput' name='enabled' type='SFBool'/>
>           <field accessType='inputOutput' name='diffuseColor'
> type='SFColor'/>
>           <field accessType='outputOnly' name='newColor' type='SFColor'/>
>           <field accessType='inputOnly' name='clockTrigger' type='SFTime'/>
>           <IS>
>             <connect nodeField='enabled' protoField='enabled'/>
>             <connect nodeField='diffuseColor' protoField='diffuseColor'/>
>           </IS>
>           <![CDATA[
> ecmascript:
> function initialize ()
> {
>     newColor = diffuseColor; // start with original color
> }
> function clockTrigger (timeValue)
> {
>     if (!enabled) return;
>     red   = newColor.r;
>     green = newColor.g;
>     blue  = newColor.b;
>
>     // note different modulation rates for each color component, % is
> modulus operator
>     newColor = new SFColor ((red + 0.02) % 1, (green + 0.03) % 1, (blue +
> 0.04) % 1);
>         if (enabled)
>         {
>                 Browser.print ('diffuseColor=(' + red +',' + green + ',' +
> blue + ') newColor=' + newColor.toString() + '\n');
>         }
> }
> function set_enabled (newValue)
> {
>         enabled = newValue;
> }
> ]]>
>         </Script>
>
>
> ----------------------------------------------------------------------------------------------------------------------------------------------
>
> So this possibility is a cool prospect, again thanks for flagging it.
> I'll work further on X3DUOM and Python, Java, OWL compatibility next.
>
> Have fun with X3D!  8)
>
> all the best, Don
> --
> Don Brutzman  Naval Postgraduate School, Code USW/Br
> brutzman at nps.edu
> Watkins 270,  MOVES Institute, Monterey CA 93943-5000 USA
> +1.831.656.2149
> X3D graphics, virtual worlds, navy robotics https://
> faculty.nps.edu/brutzman
>
> -----Original Message-----
> From: Brutzman, Donald (Don) (CIV) <brutzman at nps.edu>
> Sent: Monday, January 10, 2022 6:37 PM
> To: John Carlson <yottzumm at gmail.com>
> Cc: X3D Graphics public mailing list <x3d-public at web3d.org>; Brutzman,
> Donald (Don) (CIV) <brutzman at nps.edu>
> Subject: RE: Possible issue with X3dToPython.xslt, newly tested file from
> X3D4WA: need x3d.py python support for Script CDATA
>
> Thanks for the interesting trouble report John.
>
> No changes needed to original X3D model, it passes all X3D Validator tests
> (though X3D Schematron provides a few warnings).
>
> *
> https://X3dGraphics.com/examples/X3dForWebAuthors/Chapter14Prototypes/MaterialModulator.x3d
> <https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fx3dgraphics.com%2Fexamples%2FX3dForWebAuthors%2FChapter14Prototypes%2FMaterialModulator.x3d&data=04%7C01%7Cbrutzman%40nps.edu%7C015d3b7123844f4c7d7508d9d761502e%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C637777635530499448%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=A57o96EWq%2B5YUt%2FtG81jPRexgtCi4BvN%2BnhpTrgV4OQ%3D&reserved=0>
> * https://savage.nps.edu/X3dValidator
>
> XMLSpy was stricter about type handling than our Java-based Saxon10
> conversions for this example.  XMLSpy diagnosed some problems that I fixed.
>
> After also fixing the stylesheet name provided by a diagnostic, all
> X3dToPython.xslt changes were checked into subversion.
>
> I now get the following conversion error:
>
> =====================
> create python:
> C:\x3d-code\www.web3d.org\x3d\content\examples\X3dForWebAuthors/Chapter14Prototypes//MaterialModulator.x3d
> processing with X3dToPython stylesheet...
> *** TODO x3d.py and X3dToPython.xslt need to handle embedded CDATA source
> code for Script C:\x3d-code\www.web3d.org\x3d\content\examples\X3dForWebAuthors/Chapter14Prototypes//MaterialModulator.py
> self-validation tests...
> validate python:
>   File "C:\x3d-code\www.web3d.org\x3d\content\examples\X3dForWebAuthors\Chapter14Prototypes\MaterialModulator.py",
> line 74
>     *** TODO x3d.py and X3dToPython.xslt need to handle embedded CDATA
> source code for Script
>       ^
> SyntaxError: invalid syntax
> Result: 1
> ===================================
>
> So, embedded CDATA scripting code inside a Script node (and similar Shader
> nodes) remains an omission in our Python support.
>
> 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...
>
> * X3D Tooltips, Script and Script url
>    https://www.web3d.org/x3d/tooltips/X3dTooltips.html#Script
>    https://www.web3d.org/x3d/tooltips/X3dTooltips.html#Script.url
>
> * X3D Tooltips, XML Data Types
>    https://www.web3d.org/x3d/tooltips/X3dTooltips.html#XML
>
> " 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."
>
> * XML, 2.4 Character Data and Markup
>    https://www.w3.org/TR/REC-xml/#syntax
> <https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.w3.org%2FTR%2FREC-xml%2F%23syntax&data=04%7C01%7Cbrutzman%40nps.edu%7C015d3b7123844f4c7d7508d9d761502e%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C637777635530499448%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=biLfaypaJLVx%2BbLUJycGeGJcGNvsOlc%2FV0NtjL7vNHA%3D&reserved=0>
>
> all the best, Don
> --
> Don Brutzman  Naval Postgraduate School, Code USW/Br
> brutzman at nps.edu
> Watkins 270,  MOVES Institute, Monterey CA 93943-5000 USA
> +1.831.656.2149
> X3D graphics, virtual worlds, navy robotics https://
> faculty.nps.edu/brutzman
>
> -----Original Message-----
> From: John Carlson <yottzumm at gmail.com>
> Sent: Monday, January 10, 2022 4:06 PM
> To: Brutzman, Donald (Don) (CIV) <brutzman at nps.edu>; X3D Graphics public
> mailing list <x3d-public at web3d.org>
> Subject: Possible issue with X3dToPython.xslt, newly tested file from
> X3D4WA
>
> X3D XML file attached.  From X3DJSONLD's maven build log:
>
> [INFO] --- xml-maven-plugin:1.0.2:transform (default) @ X3DJSONLD ---
> [INFO] Transforming file:
> /home/coderextreme/X3DJSONLD/src/main/data/MaterialModulatorExamples.x3d
> [INFO] Transforming file:
> /home/coderextreme/X3DJSONLD/src/main/data/MaterialModulator.x3d
> Type error at char 37 in xsl:value-of/@select on line 610 column 120 of
> X3dToPython.xslt:
>    XPTY0004: A sequence of more than one item is not allowed as the first
> argument of
>    normalize-space() ("", "", ...)
>    at xsl:apply-templates
>
> (file:/home/coderextreme/X3DJSONLD/src/main/lib/stylesheets/X3dToPython.xslt#606)
>       processing /X3D/Scene[1]/ProtoDeclare[1]/ProtoBody[1]/Script[1]
>    at xsl:apply-templates
>
> (file:/home/coderextreme/X3DJSONLD/src/main/lib/stylesheets/X3dToPython.xslt#606)
>       processing /X3D/Scene[1]/ProtoDeclare[1]/ProtoBody[1]
>    at xsl:apply-templates
>
> (file:/home/coderextreme/X3DJSONLD/src/main/lib/stylesheets/X3dToPython.xslt#606)
>       processing /X3D/Scene[1]/ProtoDeclare[1]
>    at xsl:apply-templates
>
> (file:/home/coderextreme/X3DJSONLD/src/main/lib/stylesheets/X3dToPython.xslt#606)
>       processing /X3D/Scene[1]
>    at xsl:apply-templates
>
> (file:/home/coderextreme/X3DJSONLD/src/main/lib/stylesheets/X3dToPython.xslt#123)
>       processing /X3D
> [INFO]
> ------------------------------------------------------------------------
> [INFO] BUILD FAILURE
> [INFO]
> ------------------------------------------------------------------------
> [INFO] Total time:  2.840 s
> [INFO] Finished at: 2022-01-10T17:59:22-06:00 [INFO]
> ------------------------------------------------------------------------
> [ERROR] Failed to execute goal
> org.codehaus.mojo:xml-maven-plugin:1.0.2:transform (default) on project
> X3DJSONLD: Failed to transform input file
> /home/coderextreme/X3DJSONLD/src/main/data/MaterialModulator.x3d: A
> sequence of more than one item is not allowed as the first argument of
> normalize-space() ("", "", ...)  -> [Help 1] [ERROR] [ERROR] To see the
> full stack trace of the errors, re-run Maven with the -e switch.
> [ERROR] Re-run Maven using the -X switch to enable full debug logging.
> [ERROR]
> [ERROR] For more information about the errors and possible solutions,
> please read the following articles:
> [ERROR] [Help 1]
>
> 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
> <https://nam10.safelinks.protection.outlook.com/?url=http%3A%2F%2Fcwiki.apache.org%2Fconfluence%2Fdisplay%2FMAVEN%2FMojoExecutionException&data=04%7C01%7Cbrutzman%40nps.edu%7C015d3b7123844f4c7d7508d9d761502e%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C637777635530499448%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=EVAYH1SE%2FC6vXPYV9v0Zi5rmvMiki8JEsb2CwoyP6XQ%3D&reserved=0>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20220115/49dcc51d/attachment-0001.html>


More information about the x3d-public mailing list