<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style></head><body lang=EN-US link=blue vlink="#954F72"><div class=WordSection1><p class=MsoNormal>Here’s how I modify format uri in Ajv.  I don’t know if it will pass code though. I also wonder if this is usable in Java, but you can try. I don’t even know if this will get through email, but you can see it here: https://github.com/coderextreme/X3DJSONLD/blob/master/src/main/node/loaderJQuery.js .  If someone puts code in a @url in X3DJSONLD (the loader part), I believe I will throw up a warning, and they can investigate and accept.  The @url field gets passed to X3DOM and Cobweb, possibly modified (oops!).  What happens if you put a second piece of ecmascript in the url (in XML)?  How is behavior defined in the standard?  </p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This regexp is what caught uses of ## in @url.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>                ajv.addFormat("uri", /^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})<a href="mailto:*@)?(?:\%5b(?:(?:(?:(?:%5b0-9a-f%5d%7b1,4%7d:)%7b6%7d|::(?:%5b0-9a-f%5d%7b1,4%7d:)%7b5%7d|(?:%5b0-9a-f%5d%7b1,4%7d)?::(?:%5b0-9a-f%5d%7b1,4%7d:)%7b4%7d|(?:(?:%5b0-9a-f%5d%7b1,4%7d:)%7b0,1%7d%5b0-9a-f%5d%7b1,4%7d)?::(?:%5b0-9a-f%5d%7b1,4%7d:)%7b3%7d|(?:(?:%5b0-9a-f%5d%7b1,4%7d:)%7b0,2%7d%5b0-9a-f%5d%7b1,4%7d)?::(?:%5b0-9a-f%5d%7b1,4%7d:)%7b2%7d|(?:(?:%5b0-9a-f%5d%7b1,4%7d:)%7b0,3%7d%5b0-9a-f%5d%7b1,4%7d)?::%5b0-9a-f%5d%7b1,4%7d:|(?:(?:%5b0-9a-f%5d%7b1,4%7d:)%7b0,4%7d%5b0-9a-f%5d%7b1,4%7d)?::)(?:%5b0-9a-f%5d%7b1,4%7d:%5b0-9a-f%5d%7b1,4%7d|(?:(?:25%5b0-5%5d|2%5b0-4%5d\d|%5b01%5d?\d\d?)\.)%7b3%7d(?:25%5b0-5%5d|2%5b0-4%5d\d|%5b01%5d?\d\d?))|(?:(?:%5b0-9a-f%5d%7b1,4%7d:)%7b0,5%7d%5b0-9a-f%5d%7b1,4%7d)?::%5b0-9a-f%5d%7b1,4%7d|(?:(?:%5b0-9a-f%5d%7b1,4%7d:)%7b0,6%7d%5b0-9a-f%5d%7b1,4%7d)?::)|%5bVv%5d%5b0-9a-f%5d+\.%5ba-z0-9\-._~!$&'()*+,;=:%5d+)\%5d|(?:(?:25%5b0-5%5d|2%5b0-4%5d\d|%5b01%5d?\d\d?)\.)%7b3%7d(?:25%5b0-5%5d|2%5b0-4%5d\d|%5b01%5d?\d\d?)|(?:%5ba-z0-9\-._~!$&'()*+,;=%5d|%25%5b0-9a-f%5d%7b2%7d)*)(?::\d*)?(?:\/(?:%5ba-z0-9\-._~!$&'()*+,;=:@%5d|%25%5b0-9a-f%5d%7b2%7d)*)*|\/(?:(?:%5ba-z0-9\-._~!$&'()*+,;=:@%5d|%25%5b0-9a-f%5d%7b2%7d)+(?:\/(?:%5ba-z0-9\-._~!$&'()*+,;=:@%5d|%25%5b0-9a-f%5d%7b2%7d)*)*)?|(?:%5ba-z0-9\-._~!$&'()*+,;=:@%5d|%25%5b0-9a-f%5d%7b2%7d)+(?:\/(?:%5ba-z0-9\-._~!$&'()*+,;=:@%5d|%25%5b0-9a-f%5d%7b2%7d)*)*)?(?:\?(?:%5ba-z0-9\-._~!$&'()*+,;=:@\/?%5d|%25%5b0-9a-f%5d%7b2%7d)*)?(?:\#(?:[a-z0-9\-._~!$&'()*+,;=:@\/?]|%[0-9a-f]{2})*)?$/i)">*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@\/?]|%[0-9a-f]{2})*)?(?:\#(?:[a-z0-9\-._~!$&'()*+,;=:@\/?]|%[0-9a-f]{2})*)?$/i)</a>;</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Sent from <a href="https://go.microsoft.com/fwlink/?LinkId=550986">Mail</a> for Windows 10</p><p class=MsoNormal><o:p> </o:p></p><div style='mso-element:para-border-div;border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal style='border:none;padding:0in'><b>From: </b><a href="mailto:yottzumm@gmail.com">John Carlson</a><br><b>Sent: </b>Sunday, August 20, 2017 5:53 PM<br><b>To: </b><a href="mailto:brutzman@nps.edu">Don Brutzman</a>; <a href="mailto:roy.walmsley@ntlworld.com">Roy Walmsley</a><br><b>Cc: </b><a href="mailto:x3d-public@web3d.org">X3D Graphics public mailing list</a><br><b>Subject: </b>RE: JSON schema handling of Script url containing ecmascript source</p></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Code does not match a URI.  You can modify your validator to accept a wider range of URI values, or we can get rid of the format, or we can probably all decide on a different format. Choices 1 and 3 require you modify your validator. <o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Here’s the current definition of @url in JSON schema:<o:p></o:p></p><p class=MsoNormal>                                "@url": {<o:p></o:p></p><p class=MsoNormal>                                        "type": "array",<o:p></o:p></p><p class=MsoNormal>                                        "minItems": 1,<o:p></o:p></p><p class=MsoNormal>                                        "items": {<o:p></o:p></p><p class=MsoNormal>                                                "type": "string",<o:p></o:p></p><p class=MsoNormal>                                                "format": "uri"<o:p></o:p></p><p class=MsoNormal>                                        }<o:p></o:p></p><p class=MsoNormal>                                }<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Sent from <a href="https://go.microsoft.com/fwlink/?LinkId=550986">Mail</a> for Windows 10<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b>From: </b><a href="mailto:brutzman@nps.edu">Don Brutzman</a><br><b>Sent: </b>Sunday, August 20, 2017 5:31 PM<br><b>To: </b><a href="mailto:roy.walmsley@ntlworld.com">Roy Walmsley</a>; <a href="mailto:yottzumm@gmail.com">John Carlson</a><br><b>Cc: </b><a href="mailto:x3d-public@web3d.org">X3D Graphics public mailing list</a><br><b>Subject: </b>JSON schema handling of Script url containing ecmascript source<o:p></o:p></p></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Found the following problem with JSON schema handling of Script url containing <o:p></o:p></p><p class=MsoNormal>source:<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>====================================<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>C:\x3d-code\www.web3d.org\x3d\content\examples\Vrml2Sourcebook/Chapter30Scripts//Figure30_1ScriptSlidingBall.json <o:p></o:p></p><p class=MsoNormal>validation checking with json-schema-validator<o:p></o:p></p><p class=MsoNormal>--- BEGIN <o:p></o:p></p><p class=MsoNormal>C:\x3d-code\www.web3d.org\x3d\content\examples\Vrml2Sourcebook\Chapter30Scripts\Figure30_1ScriptSlidingBall.json---<o:p></o:p></p><p class=MsoNormal>validation: FAILURE<o:p></o:p></p><p class=MsoNormal>[ {<o:p></o:p></p><p class=MsoNormal>   "level" : "error",<o:p></o:p></p><p class=MsoNormal>   "schema" : {<o:p></o:p></p><p class=MsoNormal>     "loadingURI" : <o:p></o:p></p><p class=MsoNormal>"file:/C:/x3d-code/www.web3d.org/specifications/x3d-3.3-JSONSchema.json#",<o:p></o:p></p><p class=MsoNormal>     "pointer" : "/definitions/Script/properties/@url/items"<o:p></o:p></p><p class=MsoNormal>   },<o:p></o:p></p><p class=MsoNormal>   "instance" : {<o:p></o:p></p><p class=MsoNormal>     "pointer" : "/X3D/Scene/-children/3/Group/-children/8/Script/@url/0"<o:p></o:p></p><p class=MsoNormal>   },<o:p></o:p></p><p class=MsoNormal>   "domain" : "validation",<o:p></o:p></p><p class=MsoNormal>   "keyword" : "format",<o:p></o:p></p><p class=MsoNormal>   "attribute" : "uri",<o:p></o:p></p><p class=MsoNormal>   "message" : "string \"ecmascript: function set_fraction( fraction eventTime ) <o:p></o:p></p><p class=MsoNormal>{ value_changed[0] = fraction; value_changed[1] = 0.0; value_changed[2] = 0.0; <o:p></o:p></p><p class=MsoNormal>}\" is not a valid URI",<o:p></o:p></p><p class=MsoNormal>   "value" : "ecmascript: function set_fraction( fraction eventTime ) { <o:p></o:p></p><p class=MsoNormal>value_changed[0] = fraction; value_changed[1] = 0.0; value_changed[2] = 0.0; }"<o:p></o:p></p><p class=MsoNormal>} ]<o:p></o:p></p><p class=MsoNormal>--- END <o:p></o:p></p><p class=MsoNormal>C:\x3d-code\www.web3d.org\x3d\content\examples\Vrml2Sourcebook\Chapter30Scripts\Figure30_1ScriptSlidingBall.json---<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>====================================<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>http://www.web3d.org/x3d/content/examples/Vrml2Sourcebook/Chapter30Scripts/Figure30_1ScriptSlidingBall.x3d<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>       <!-- Second Script example: executable code is placed in url field. This <o:p></o:p></p><p class=MsoNormal>is legal, but no longer a recommended approach. --><o:p></o:p></p><p class=MsoNormal>       <!-- Warning: avoid // inline comments or else canonicalization will hide <o:p></o:p></p><p class=MsoNormal>all follow-on code! --><o:p></o:p></p><p class=MsoNormal>       <Script DEF='MoverUsingUrlScript' url='"ecmascript: function <o:p></o:p></p><p class=MsoNormal>set_fraction( fraction eventTime ) { value_changed[0] = fraction; <o:p></o:p></p><p class=MsoNormal>value_changed[1] = 0.0; value_changed[2] = 0.0; }"'><o:p></o:p></p><p class=MsoNormal>         <field accessType='inputOnly' name='set_fraction' type='SFFloat'/><o:p></o:p></p><p class=MsoNormal>        <field accessType='outputOnly' name='value_changed' type='SFVec3f'/><o:p></o:p></p><p class=MsoNormal>       </Script><o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>====================================<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>http://www.web3d.org/x3d/content/examples/Vrml2Sourcebook/Chapter30Scripts/Figure30_1ScriptSlidingBall.json<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>{<o:p></o:p></p><p class=MsoNormal>   "#comment":"Second Script example: executable code is placed in url field. <o:p></o:p></p><p class=MsoNormal>This is legal, but no longer a recommended approach."<o:p></o:p></p><p class=MsoNormal>},<o:p></o:p></p><p class=MsoNormal>{<o:p></o:p></p><p class=MsoNormal>   "#comment":"Warning: avoid // inline comments or else canonicalization will <o:p></o:p></p><p class=MsoNormal>hide all follow-on code!"<o:p></o:p></p><p class=MsoNormal>},<o:p></o:p></p><p class=MsoNormal>{ "Script":<o:p></o:p></p><p class=MsoNormal>   {<o:p></o:p></p><p class=MsoNormal>     "@DEF":"MoverUsingUrlScript",<o:p></o:p></p><p class=MsoNormal>     "@url":["ecmascript: function set_fraction( fraction eventTime ) { <o:p></o:p></p><p class=MsoNormal>value_changed[0] = fraction; value_changed[1] = 0.0; value_changed[2] = 0.0; }"],<o:p></o:p></p><p class=MsoNormal>     "field": [<o:p></o:p></p><p class=MsoNormal>       {<o:p></o:p></p><p class=MsoNormal>         "@name":"set_fraction",<o:p></o:p></p><p class=MsoNormal>         "@accessType":"inputOnly",<o:p></o:p></p><p class=MsoNormal>         "@type":"SFFloat"<o:p></o:p></p><p class=MsoNormal>       },<o:p></o:p></p><p class=MsoNormal>       {<o:p></o:p></p><p class=MsoNormal>         "@name":"value_changed",<o:p></o:p></p><p class=MsoNormal>         "@accessType":"outputOnly",<o:p></o:p></p><p class=MsoNormal>         "@type":"SFVec3f"<o:p></o:p></p><p class=MsoNormal>       }<o:p></o:p></p><p class=MsoNormal>     ]<o:p></o:p></p><p class=MsoNormal>   }<o:p></o:p></p><p class=MsoNormal>},<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>====================================<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>all the best, Don<o:p></o:p></p><p class=MsoNormal>-- <o:p></o:p></p><p class=MsoNormal>Don Brutzman  Naval Postgraduate School, Code USW/Br brutzman@nps.edu<o:p></o:p></p><p class=MsoNormal>Watkins 270,  MOVES Institute, Monterey CA 93943-5000 USA +1.831.656.2149<o:p></o:p></p><p class=MsoNormal>X3D graphics, virtual worlds, navy robotics http://faculty.nps.edu/brutzman<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p></div></body></html>