<div dir="auto">Your mixing SFRotation and ScaleOrientation in your code.   Not sure if you caught it or not.</div><br><div class="gmail_quote"><div dir="ltr">On Fri, Jun 8, 2018, 6:17 PM Don Brutzman <<a href="mailto:brutzman@nps.edu">brutzman@nps.edu</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">onward...<br>
<br>
On 6/8/2018 11:36 AM, Andreas Plesch wrote:<br>
> On Fri, Jun 8, 2018 at 2:19 AM Don Brutzman <<a href="mailto:brutzman@nps.edu" target="_blank" rel="noreferrer">brutzman@nps.edu</a> <mailto:<a href="mailto:brutzman@nps.edu" target="_blank" rel="noreferrer">brutzman@nps.edu</a>>> wrote:<br>
> <br>
>     i tried testing this against PixelTexture value<br>
> <br>
>              2 4 3 0xff0000 0xffff00 0x007700 0xff0077 0x0000ff 0xff7700 0x00ff77 0x888888<br>
> <br>
>     from scene<br>
> <br>
>     <a href="http://X3dGraphics.com/examples/X3dForWebAuthors/Chapter05AppearanceMaterialTextures/PixelTexture.x3d" rel="noreferrer noreferrer" target="_blank">http://X3dGraphics.com/examples/X3dForWebAuthors/Chapter05AppearanceMaterialTextures/PixelTexture.x3d</a><br>
> <br>
>     using <a href="https://regex101.com" rel="noreferrer noreferrer" target="_blank">https://regex101.com</a> and that tests satisfactorily.<br>
> <br>
>     however the default value of '0 0 0' fails according to XML Spy, so there is still a problem here...<br>
> <br>
> I could confirm that this is due to XML regex expressions not considering anchors, in particular the $ end of string anchor.<br>
<br>
OK... haven't used them elsewhere in the regexes.  Further info:<br>
<br>
        Start of String and End of String Anchors<br>
        <a href="https://www.regular-expressions.info/anchors.html" rel="noreferrer noreferrer" target="_blank">https://www.regular-expressions.info/anchors.html</a><br>
<br>
parenthetically OBTW also found this reference, constructing a nondeterministic finite automaton (NFA).  Whoa.<br>
<br>
        Ken Thompson's construction algorithm<br>
        <a href="https://en.wikipedia.org/wiki/Thompson%27s_construction_algorithm" rel="noreferrer noreferrer" target="_blank">https://en.wikipedia.org/wiki/Thompson%27s_construction_algorithm</a><br>
<br>
> Without anchors the regex becomes longer and a bit more complicated, still not allowing leading zeroes or commas:<br>
> <br>
> ^\s*(\d|[1-9]\d+)(\s+(\d|[1-9]\d+)){2}(\s+((0x([a-f]|[A-F}|\d]){1,8})|[1-9]\d+|\d))*\s*$ (allowing for leading and trailing white space, and anchoring)<br>
> <br>
> (\d|[1-9]\d+)(\s+(\d|[1-9]\d+)){2}(\s+((0x([a-f]|[A-F}|\d]){1,8})|[1-9]\d+|\d))* (untested XML version which is implicitly anchored, assuming the whitespace collapsing restriction)<br>
<br>
Am using this second form as our next version, consistent with other approaches provided.<br>
<br>
for MFImage, adapted it with a prepended ( and then appended (\s)*(,)?(\s)*)* in order to consume intermediate whitespace plus single optional comma.<br>
<br>
> <a href="https://regex101.com/r/CJ1h80/4/tests" rel="noreferrer noreferrer" target="_blank">https://regex101.com/r/CJ1h80/4/tests</a><br>
<br>
wow that saved regex pattern + rationale is utterly awesome.  screenshot attached and online at<br>
<br>
        <a href="http://www.web3d.org/specifications/images/Regex101SFImageTestingScreenshot.png" rel="noreferrer noreferrer" target="_blank">http://www.web3d.org/specifications/images/Regex101SFImageTestingScreenshot.png</a><br>
Your customized regex page also answers how we might connect regex online testing directly to each type on the regex page... link now added at<br>
<br>
        <a href="http://www.web3d.org/specifications/X3dRegularExpressions.html#SFImage" rel="noreferrer noreferrer" target="_blank">http://www.web3d.org/specifications/X3dRegularExpressions.html#SFImage</a><br>
<br>
> lets everybody test and improve this regex with some of the more challenging cases as unit tests, including the default 0 0 0 case.<br>
<br>
all in!  as you will see, the site allowed me to add a test corresponding to the PixelTexture.x3d and PixelTextureBW.x3d models from X3D for Web Authors (X3D4WA) archive.<br>
<br>
> It is more important to come up with examples which almost match but actually should not match than testing conforming examples such as the web3d example library. Of course there should not be any false positives, eg. not matching examples which are in fact fine.<br>
<br>
well OK but not a worry.  relative priorities are all good when we "divide + conquer" like this.<br>
<br>
testing all archive scenes helps reveal unintended side effects from changes as well.<br>
<br>
... also OBE. building on last night's progress, I have added<br>
<br>
=========================================================================================<br>
<a href="http://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/fields/SFVec3fObject.html#validate--" rel="noreferrer noreferrer" target="_blank">http://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/fields/SFVec3fObject.html#validate--</a><br>
<br>
validate() methods to each of the simple types that provide an error message when a value fails.  excerpt:<br>
<br>
public SFVec3fObject setValueByString (String newValue) throws InvalidFieldValueException<br>
{<br>
        if (newValue == null)<br>
                newValue = new String(); // Principle of Least Astonishment (POLA)<br>
                // <a href="https://en.wikipedia.org/wiki/Principle_of_least_astonishment" rel="noreferrer noreferrer" target="_blank">https://en.wikipedia.org/wiki/Principle_of_least_astonishment</a><br>
<br>
        if (!SFVec3fObject.matches(newValue)) // regex test<br>
        {<br>
                String errorNotice = "*** Regular expression (regex) failure, new SFVec3fObject(" + newValue + ")";<br>
                validationResult.append(errorNotice).append("\n");<br>
        }<br>
=========================================================================================<br>
<a href="http://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/Grouping/TransformObject.html#validate--" rel="noreferrer noreferrer" target="_blank">http://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/Grouping/TransformObject.html#validate--</a><br>
<br>
validate() methods for each field to the comprehensive validate() checks in each node object.<br>
<br>
excerpt from TransformObject validate() method:<br>
<br>
        setScaleOrientation(getScaleOrientation()); // exercise field checks, simple types<br>
        validationResult.append((new SFRotationObject(getScaleOrientation())).validate());  // regex check of corresponding String value<br>
<br>
        setTranslation(getTranslation()); // exercise field checks, simple types<br>
                validationResult.append((new SFVec3fObject(getTranslation())).validate());  // regex check of corresponding String value<br>
[...]<br>
=========================================================================================<br>
<br>
just ran some initial tests, it revealed a copy/paste error on my part that was fixed.  update uploads in progress.<br>
<br>
as before, am only experimenting on the x3d-4.0 schema and X3DUOM object model with these regex tests.  will propagate across prior versions once stable.<br>
<br>
full regression tests on example archives are now poised to run, will follow up at a later time.  of course those kinds of tests can also find errors in X3D scene content as well as the regexes themselves.<br>
<br>
> The new regex had to split the matching of the 3 initial integers into two parts. First matching the first integer, then matching at least one whitespace followed by an integer, twice.<br>
> For optional value matching, the order is now at least one whitespace followed by a number rather than number then whitespace, to avoid requiring whitespace at the very end. This in turn required an ordering of the or number branches to hex, then multidigits, then single digits for reasons I hesitate to fully explore but probably having to do with greediness.<br>
> The new regex also uses the \d and \s classes for conciseness, as well as Leonards idea to limit hex values to at most 8 characters.<br>
<br>
interesting certainly.  i got as far as i could today.<br>
<br>
improved guidance:<br>
==================<br>
<a href="http://www.web3d.org/specifications/X3dRegularExpressions.html#X3dPatterns" rel="noreferrer noreferrer" target="_blank">http://www.web3d.org/specifications/X3dRegularExpressions.html#X3dPatterns</a><br>
<br>
General regex design considerations for X3D XML Schema include the following.<br>
* For numeric types, leading sign characters (+ or -) are optionally present.<br>
*  For numeric types, leading zeroes are not allowed, except for an optional leading zero preceding the decimal point when the significand is only fractional.<br>
*  Intermediate commas are treated as whitespace, but only allowed between each singleton value. For example, SFVec3f 3-tuple values within an MFVec3f array do not contain comma characters.<br>
*  Careful design allows use of regexes that can also be adapted to JavaScript/JSON, Java and other language environments.<br>
*  These regexes all assume that leading/trailing whitespace has been removed. It is possible to prepend/append regex constructs such as (\s)+ to consume outer whitespace.<br>
==================<br>
<br>
> TODO: clarify commas, spec. says commas in SF fields are whitespace, so should be allowed. But allowing in SF fields and then not allowing them in the corresponding MF field for other than set separation is quite confusing.<br>
<br>
I have been watching for years and have yet to see (or imagine) any scene with pathological commas that deserved to be ignored.  sometimes whitespace normalization was worthwhile; most often data errors had occurred which were otherwise hidden and mysterious failures.<br>
<br>
The worst error is the one you cannot find.  Strictness of commas (disallowed within n-tuples, allowed between n-tuples) is A Good Thing that leads to quality content and is not a blocker for any other content.<br>
<br>
> Give it a spin, -Andreas<br>
> <br>
>     in any case, great start! have added it to X3D v4.0 schema for further experimentation, in this case under the annotations until working better.<br>
> <br>
>     deployed online.  however can't get svn to work here so checkins will be another time.<br>
> <br>
>     <a href="http://www.web3d.org/specifications/X3dSchemaDocumentation4.0/x3d-4.0_SFImage.html" rel="noreferrer noreferrer" target="_blank">http://www.web3d.org/specifications/X3dSchemaDocumentation4.0/x3d-4.0_SFImage.html</a><br>
> <br>
> <br>
>     On 6/7/2018 11:11 AM, Andreas Plesch wrote:<br>
>      > Ok, let's give it a try:<br>
>      ><br>
>      > [ \t]*(([0-9]|[1-9][0-9]+)([ ]+|$)){3}(([0-9]|([1-9][0-9]+)|(0x([0-9]|[a-f]|[A-F])+))([ ]+|$))*<br>
>      ><br>
>      > In words:<br>
>      ><br>
>      > match any leading white space followed by<br>
>      > exactly three times the following<br>
>      >   - one of the following<br>
>      >     - either a single digit (including 0) or<br>
>      >     - a two or more digit number starting with a 1 to 9 digit<br>
>      >   - followed by either<br>
>      >    - one or more spaces<br>
>      >    - or the end of the string (accommodating the default '0 0 0' case)<br>
>      > then optionally followed zero or more times by<br>
>      >    - one of the following<br>
>      >      - either a single digit (including 0) or<br>
>      >      - a two or more digit number starting with a 1 to 9 digit<br>
>      >      - 0x followed by at least one of<br>
>      >         - a single digit or<br>
>      >         - a to f letter or<br>
>      >         - A to F letter<br>
>      >    - followed by either<br>
>      >      - one or more spaces<br>
>      >      - or the end of the string<br>
<br>
all the best, Don<br>
-- <br>
Don Brutzman  Naval Postgraduate School, Code USW/Br       <a href="mailto:brutzman@nps.edu" target="_blank" rel="noreferrer">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 <a href="http://faculty.nps.edu/brutzman" rel="noreferrer noreferrer" target="_blank">http://faculty.nps.edu/brutzman</a><br>
<br>
_______________________________________________<br>
x3d-public mailing list<br>
<a href="mailto:x3d-public@web3d.org" target="_blank" rel="noreferrer">x3d-public@web3d.org</a><br>
<a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org" rel="noreferrer noreferrer" target="_blank">http://web3d.org/mailman/listinfo/x3d-public_web3d.org</a><br>
</blockquote></div>