[x3d-public] [Remaining Work] X3dToPython.xslt, BooleanSequencer keyValue

Brutzman, Donald (Don) (CIV) brutzman at nps.edu
Tue Jul 5 09:28:53 PDT 2022


[Summary: X3D to Python MFBool conversion problem fixed.]

 

1.	Thanks for diagnosis and focus on correct code block.  The actual
conversion problem was failure to normalize whitespace (including original
commas) before changing blank characters to comma separators in final
output.  Thus multiple blank and comma characters (which together are
allowed whitespace in the XML output) were previously getting converted to
multiple commas, ouch.

 

Revised XSLT:

*	<xsl:variable name="commaSeparatedMFBool"
select="translate(normalize-space(translate(translate(translate(string($x3dV
alue),'f','F'),'t','T'),',',' ')),' ',',')"/>

 

I modified a test scene and checked the converted output:

*
https://www.web3d.org/x3d/content/examples/Basic/development/BooleanSequence
rExample.x3d
*
https://www.web3d.org/x3d/content/examples/Basic/development/BooleanSequence
rExample.py



Revised model excerpts and correct output with diagnostic turned on:

 

*	<BooleanSequencer DEF='LeftViewBinder' key='0 0.1 0.25'
keyValue='false true false'/>
*	<BooleanSequencer DEF='BackViewBinder' key='0 0.375 0.475'
keyValue='false, true, false'/>
*	<BooleanSequencer DEF='RightViewBinder' key='0 0.5 0.6'
keyValue='false , true , false'/>

 

create python:

C:\x3d-code\www.web3d.org\x3d\content\examples\Basic/development//BooleanSeq
uencerExample.x3d processing with X3dToPython stylesheet...

*** MFBool handling, $x3dValue='false true false,
$commaSeparatedMFBool='False,True,False

*** MFBool handling, $x3dValue='false, true, false,
$commaSeparatedMFBool='False,True,False

*** MFBool handling, $x3dValue='false , true , false,
$commaSeparatedMFBool='False,True,False

 

*
BooleanSequencer(DEF='LeftViewBinder',key=[0,0.1,0.25],keyValue=[False,True,
False]),
*
BooleanSequencer(DEF='BackViewBinder',key=[0,0.375,0.475],keyValue=[False,Tr
ue,False]),
*
BooleanSequencer(DEF='RightViewBinder',key=[0,0.5,0.6],keyValue=[False,True,
False]),

 

Original test scene goes back to original state, since X3D Canonicalization
(C14N) changes those pesky commas back into single blank characters.

 

*	ISO/IEC 19776-3, Extensible 3D (X3D) encodings, Part 3: Compressed
binary encoding
*	Annex 4 Concepts, Clause 4.2.3 X3D canonical form
*
https://www.web3d.org/documents/specifications/19776-3/V3.3/Part03/concepts.
html#X3DCanonicalForm

 

*	X3D Canonicalizer
*
https://svn.code.sf.net/p/x3d/code/www.web3d.org/x3d/tools/canonical/doc/x3d
Tools.htm

 

X3dToPython.xslt stylesheet committed, changes should be good for you now.

 

2.	Regarding rephrased tooltip for MFBool: please note

a.	All such hints are similarly / identically phrased for
maintainability,
b.	All tooltip hints are for XML encoding, too easily confused
otherwise.

 

*	X3D4 Tooltips, FieldTypesTable
*	https://www.web3d.org/x3d/tooltips/X3dTooltips.html#FieldTypesTable 
*	For MFBool:

Hint: comma characters are allowed as whitespace between individual SFBool
values in the list.
Hint: comma characters are not included in canonical form.

 

So I think we are good.  Again thanks for a helpful catch.

 

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: Monday, July 4, 2022 7:25 PM
To: Brutzman, Donald (Don) (CIV) <brutzman at nps.edu>; X3D Graphics public
mailing list <x3d-public at web3d.org>; holger.seelig at gmail.com
Subject: Re: [Remaining Work] X3dToPython.xslt, BooleanSequencer keyValue

 

Code in question in X3dToPython.xslt, I think, for MFBool's. 

 

            <xsl:when test="($x3dType = 'MFBool')">
                <!-- Python boolean values are True and False,
comma-separated list -->
                <xsl:value-of
select="translate(translate(translate(string($x3dValue),'f','F'),'t','T'),'
',',')"/>
            </xsl:when>

 

Spaces are translated to ',', i think, to "true, false" in XML gets
translated to "True,,False" in Python.

 

I don't know how to fix this yet (I'm an XSLT plebe), except fix the XML so
Python will work okay.  Maybe we should put a feature request into Saxon or
ask for help?

 

At this point, my suggestion would be to fall back to some kind of regular
expression replacement?

 

Or what I would do in sed, like:

 

s/,+/,/g

 

and

 

s/ +/ /g

 

between SFBools

 

One may wish to put \s or \S , from more advanced regular expressions, and
only allow one comma between SFBools in the MFBool.

 

I don't know if XSLT supports any of this.  Check out this table for XSLT
2.0?  Is this accurate?

 

16.4 Using Regular Expressions | Learning XSLT (flylib.com)
<https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fflylib.co
m%2Fbooks%2Fen%2F2.424.1.122%2F1%2F&data=05%7C01%7Cbrutzman%40nps.edu%7Cfebd
8a7a066b4c06d29108da5e2d9806%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C63
7925847160880998%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzI
iLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=AfjPGqSrV4%2BwpPzxROzi
hR3yWwKSRezo89pEJWCXU3g%3D&reserved=0> 

 

Did a little googling, found this:

 

regex - XSLT + regular expression replace - Stack Overflow
<https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fstackover
flow.com%2Fquestions%2F35840063%2Fxslt-regular-expression-replace&data=05%7C
01%7Cbrutzman%40nps.edu%7Cfebd8a7a066b4c06d29108da5e2d9806%7C6d936231a51740e
a9199f7578963378e%7C0%7C0%7C637925847160880998%7CUnknown%7CTWFpbGZsb3d8eyJWI
joiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7
C&sdata=YogJt1t6CIIgoer9GrMVA7rfWfN7RGU7wieOdYT714Y%3D&reserved=0>
(analyze-string)

 

Perhaps a few of us could attend an advanced XSLT course?

 

Maybe we could have a learning session?  I only see one analyze-string in
our XSLT code base.

 

Could be a big win, would be my guess.

 

Or we could use SNOBOL or its derivative, Icon. Icon (programming language)
- Wikipedia
<https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fen.wikipe
dia.org%2Fwiki%2FIcon_%2528programming_language%2529&data=05%7C01%7Cbrutzman
%40nps.edu%7Cfebd8a7a066b4c06d29108da5e2d9806%7C6d936231a51740ea9199f7578963
378e%7C0%7C0%7C637925847160880998%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMD
AiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=QzM1G
lrkto0CBwqHC6wZ6zx6ecYDM7vzLFvavlL7u%2BA%3D&reserved=0>  (see "Dialects" and
"Influenced" for additional features, some 3D).


I studied Icon in school, and it was a good language, I didn't run into any
snafu's with our problem set solutions.

 

I would recommend Icon over XML, XSLT, Python and JavaScript, if anyone
cares, at least for text processing.  I didn't do 3D with Icon.

 

John

 

On Mon, Jul 4, 2022 at 8:18 PM John Carlson <yottzumm at gmail.com
<mailto:yottzumm at gmail.com> > wrote:

Trying to help...For MFBool in X3d tooltips, perhaps rephrase whitespace as
below, for both XML, JSON and Python (and perhaps others). 

 

Hint: a single comma character is allowed as whitespace between individual
SFBool values in the list.

 

Sorry, I apologize for bringing up MFStrings.  I was in the wrong.

 

 

 

On Mon, Jul 4, 2022 at 7:53 PM John Carlson <yottzumm at gmail.com
<mailto:yottzumm at gmail.com> > wrote:

If commas are not allowed in XML for MFBool, then Holger needs to change her
particle system code. 

 

 

On Mon, Jul 4, 2022 at 7:49 PM John Carlson <yottzumm at gmail.com
<mailto:yottzumm at gmail.com> > wrote:

Note: Please clarify MFBool. I will look again at recent emails.

 

My understanding is that SFBool values can be separated by /, / comma
followed by space in an MFBool in XML (comma as whitespace). What I'm not
understanding is the Python output from X3dToPython.xslt, which puts out
commas next to each other (comma not as whitespace).  See below.

 

On Mon, Jul 4, 2022 at 4:56 PM John Carlson <yottzumm at gmail.com
<mailto:yottzumm at gmail.com> > wrote:

Note extra commas in MFBool outputs from X3dToPython.xslt and
X3dToJson.xslt.

 

On Mon, Jul 4, 2022 at 4:23 PM John Carlson <yottzumm at gmail.com
<mailto:yottzumm at gmail.com> > wrote:

Note, the following examples are unvalidated. Beware! 

 

For example, from:
https://raw.githubusercontent.com/create3000/Library/main/Tests/Components/P
articleSystems/BoundedPhysicsModel.x3d
<https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fraw.githu
busercontent.com%2Fcreate3000%2FLibrary%2Fmain%2FTests%2FComponents%2FPartic
leSystems%2FBoundedPhysicsModel.x3d&data=05%7C01%7Cbrutzman%40nps.edu%7Cfebd
8a7a066b4c06d29108da5e2d9806%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C63
7925847160880998%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzI
iLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=YNS4TaXeAD7d0Cznh6VzX5
gD81gEsGo6g7rGkaFV90g%3D&reserved=0>  

    <BooleanSequencer DEF='_4'
        key='0, 0.3, 1'
        keyValue='true, false'/>

 

And python:

 

BooleanSequencer(DEF='_4',key=[0,0.3,1],keyValue=[True,,False]),

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20220705/a3ca1338/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 5353 bytes
Desc: not available
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20220705/a3ca1338/attachment-0001.p7s>


More information about the x3d-public mailing list