[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Re: question on random numbers for browser XSLT

Subject: Re: Re: question on random numbers for browser XSLT
From: Hermann Stamm-Wilbrandt <STAMMW@xxxxxxxxxx>
Date: Sat, 25 Jul 2009 11:05:17 +0200
Re:  Re: question on random numbers for browser XSLT
> Or, for XSLT 1.0 one could write the following (knowing that the
> values contain only uppercase latin characters or digits):

You cannot assume that in general. Here is what IDs get generated
for different browser/OS when clicking on this link:
http://www.stamm-wilbrandt.de/en/xsl-list/random/scott.xml

Linux:
id0x098f7528  Firefox 3.0.10
o770813095    Opera 9.64
IDACI52B      Internet Explorer 6.0.2800 (ies4linux)

Windows:
id0x0b563640  Firefox 3.0.12
IDACAYFC      Internet Explorer 6.0.2900
o5002021      Opera 9.63
id2010145     Safari 4.0.2
id205096      Chrome 2.0.172


$ cat scott.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="scott.xsl"?>)
<tag/>
$ cat scott.xsl
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:exsl="http://exslt.org/common"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
  exclude-result-prefixes="exsl msxsl"
>
  <xsl:output method="html" encoding="UTF-8" />

  <msxsl:script language="JScript" implements-prefix="exsl">
    this['node-set'] =  function (x) {
      return x;
    }
  </msxsl:script>

  <xsl:template match="/">
    <html>
      <body>
        <xsl:variable name="seed"><a/></xsl:variable>
        <xsl:value-of select="generate-id(exsl:node-set($seed))" />
      </body>
    </html>
  </xsl:template>

</xsl:stylesheet>



Mit besten Gr|_en / Best wishes,

Hermann Stamm-Wilbrandt
Developer, XML Compiler
WebSphere DataPower SOA Appliances
----------------------------------------------------------------------
IBM Deutschland Research & Development GmbH
Vorsitzender des Aufsichtsrats: Martin Jetter
Geschdftsf|hrung: Erich Baier
Sitz der Gesellschaft: Bvblingen
Registergericht: Amtsgericht Stuttgart, HRB 243294



             Dimitre Novatchev
             <dnovatchev@gmail
             .com>                                                      To
                                       xsl-list@xxxxxxxxxxxxxxxxxxxxxx
             07/25/2009 01:51                                           cc
             AM
                                                                   Subject
                                       Re:  Re: question on random
             Please respond to         numbers for browser XSLT
             xsl-list@xxxxxxxx
              lberrytech.com








Or, for XSLT 1.0 one could write the following (knowing that the
values contain only uppercase latin characters or digits):

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:testmap="testmap"
exclude-result-prefixes="xsl testmap"
>
   <xsl:import href="str-dvc-map.xsl"/>

   <!-- to be applied on any xml source -->

   <testmap:testmap/>

   <xsl:output method="text"/>

   <xsl:variable name="vChars" select=
   "'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'"
   />

   <xsl:template match="/">
     <xsl:variable name="vTestMap" select="document('')/*/testmap:*[1]"/>

     <xsl:variable name="vNumericVal">
                  <xsl:call-template name="str-map">
                    <xsl:with-param name="pFun" select="$vTestMap"/>
                    <xsl:with-param name="pStr" select="'IDACQ0LB'"/>
                  </xsl:call-template>
     </xsl:variable>

     <xsl:value-of select="$vNumericVal mod 65536"/>
   </xsl:template>

    <xsl:template name="double" match="testmap:*">
      <xsl:param name="arg1"/>

      <xsl:value-of select="string-length(substring-before
($vChars,$arg1))"/>
    </xsl:template>

</xsl:stylesheet>



--
Cheers,
Dimitre Novatchev
---------------------------------------
Truly great madness cannot be achieved without significant intelligence.
---------------------------------------
To invent, you need a good imagination and a pile of junk
-------------------------------------
Never fight an inanimate object
-------------------------------------
You've achieved success in your field when you don't know whether what
you're doing is work or play



On Fri, Jul 24, 2009 at 4:06 PM, Dimitre Novatchev<dnovatchev@xxxxxxxxx>
wrote:
> Hermann,
>
>> Now these values look different for different browsers, and need to
>> "somehow"
>> be converted to a seed value for FXSLs random generator.
>>
>> Ideas?
>
>
> You could try something simple as the following:
>
>   sum(string-to-codepoints($pId))   mod   65536
>
>
> and see that the results' variety is satisfactory.
>
> --
> Cheers,
> Dimitre Novatchev
> ---------------------------------------
> Truly great madness cannot be achieved without significant intelligence.
> ---------------------------------------
> To invent, you need a good imagination and a pile of junk
> -------------------------------------
> Never fight an inanimate object
> -------------------------------------
> You've achieved success in your field when you don't know whether what
> you're doing is work or play
>
>
>
>
> On Fri, Jul 24, 2009 at 3:28 PM, Hermann
> Stamm-Wilbrandt<STAMMW@xxxxxxxxxx> wrote:
>> Dimitre,
>>
>>> > If you have decided to go with a service providing random numbers
then
>>> > xslt-ish way (set based) to do it would be a service receiving a
number
>> and
>>> > returning an xml with a specified number of random numbers.
>>> >
>>>
>>> Using a service to provide a random sequence is much more unreliable
>>> and inefficient than just doing this in pure XSLT, as this has been
>>> done by FXSL for many years:
>>>
>>>
>>
http://fxsl.sourceforge.net/articles/Random/Casting%20the%20Dice%20with%20FXS
L-htm.htm

>>
>> first of all, FXSL is a cool library and the documentation at the link
is
>> informative.
>>
>> I tried fxsl-1.2 and installed these necessary files on my webserver:
>> curry.xsl  iter.xsl  map.xsl  random.xsl  test-random.xsl
>>
>> First I realized that it did work on FF3 and not on FF2 (because of the
>> missing
>> support of exslt:node-set there). Then I tried it on IE6 and it did not
>> work first.
>> After applying below patch it worked under IE6, too.
>> You may try it out here:
>>
http://www.stamm-wilbrandt.de/en/xsl-list/random/fxsl-1.2/test-random.xml
>>
>> The output is the same as generated by eg. "xsltproc test-random.xsl
>> some.xml", but
>> it is ALWAYS THE SAME output (try it repeatedly).
>>
>> I knew of the different techniques in generating pseudo random numbers
but
>> what
>> is really needed is to be able to provide a changing seed (eg.
initialize
>> with
>> the number of seconds since 1/1/1970, time(NULL) in C).
>>
>> Then I remembered the generate-id use of Scott, and after reading
Michaels
>> last
>> post the following fragment seems to be an always changing value:
>> http://www.stamm-wilbrandt.de/en/xsl-list/random/scott.xml
>>
>>        <xsl:variable name="seed"><a/></xsl:variable>
>>        <xsl:value-of select="generate-id(exsl:node-set($seed))" />
>>
>> Now these values look different for different browsers, and need to
>> "somehow"
>> be converted to a seed value for FXSLs random generator.
>>
>> Ideas?
>>
>>
>>
=============================================================================

>> from "
http://dpcarlisle.blogspot.com/2007/05/exslt-node-set-function.html"
>> $ diff random.xsl.orig random.xsl
>> 20c20,21
>> <  exclude-result-prefixes="xsl ext randScale myRandNext
>> mySingleRandDistFun x"
>> ---
>>>  xmlns:msxsl="urn:schemas-microsoft-com:xslt"
>>>  exclude-result-prefixes="xsl ext msxsl randScale myRandNext
>> mySingleRandDistFun x".
>> 30a32,36
>>>   <msxsl:script language="JScript" implements-prefix="ext">
>>>     this['node-set'] =  function (x) {
>>>       return x;
>>>     }
>>>   </msxsl:script>
>> $
>>
>>
>>
>> Mit besten Gr|_en / Best wishes,
>>
>> Hermann Stamm-Wilbrandt
>> Developer, XML Compiler
>> WebSphere DataPower SOA Appliances
>> ----------------------------------------------------------------------
>> IBM Deutschland Research & Development GmbH
>> Vorsitzender des Aufsichtsrats: Martin Jetter
>> Geschdftsf|hrung: Erich Baier
>> Sitz der Gesellschaft: Bvblingen
>> Registergericht: Amtsgericht Stuttgart, HRB 243294
>>
>>
>>
>>             Dimitre Novatchev
>>             <dnovatchev@gmail
>>             .com>
To
>>                                       xsl-list@xxxxxxxxxxxxxxxxxxxxxx
>>             07/24/2009 11:00
cc
>>             PM
>>
Subject
>>                                       Re:  Re: question on random
>>             Please respond to         numbers for browser XSLT
>>             xsl-list@xxxxxxxx
>>              lberrytech.com
>>
>>
>>
>>
>>
>>
>>
>>
>>> If you have decided to go with a service providing random numbers then
>>> xslt-ish way (set based) to do it would be a service receiving a number
>> and
>>> returning an xml with a specified number of random numbers.
>>>
>>
>> Using a service to provide a random sequence is much more unreliable
>> and inefficient than just doing this in pure XSLT, as this has been
>> done by FXSL for many years:
>>
>>
>>
http://fxsl.sourceforge.net/articles/Random/Casting%20the%20Dice%20with%20FXS
L-htm.htm

>>
>>
>>
>> --
>> Cheers,
>> Dimitre Novatchev
>> ---------------------------------------
>> Truly great madness cannot be achieved without significant intelligence.
>> ---------------------------------------
>> To invent, you need a good imagination and a pile of junk
>> -------------------------------------
>> Never fight an inanimate object
>> -------------------------------------
>> You've achieved success in your field when you don't know whether what
>> you're doing is work or play
>>
>>
>>
>> On Fri, Jul 24, 2009 at 1:48 PM, Vladimir
>> Nesterovsky<vladimir@xxxxxxxxxxxxxxxxxxxx> wrote:
>>> If you have decided to go with a service providing random numbers then
>>> xslt-ish way (set based) to do it would be a service receiving a number
>> and
>>> returning an xml with a specified number of random numbers.
>>> --
>>> Vladimir Nesterovsky
>>> http://www.nesterovsky-bros.com/
>>>
>>>
>>>> To Ben:
>>>> The cache-append idea was my first thought, but I couldn't think of a
>>>
>>> good
>>>>
>>>> way to pull together how to have each request be unique. It's possible
>>>> using node-set(), though:
>>>> ...
>>>> ...
>>>>    <xsl:choose>
>>>>      <xsl:when test="function-available('exsl:node-set')">
>>>>        <xsl:value-of select="document(concat('/cgi-bin/rand.pl?',
>>>
>>> $scale,
>>>>
>>>> '&amp;x=', generate-id(exsl:node-set($seed))))" />
>>>>      </xsl:when>
>>>>      <xsl:when test="function-available('msxsl:node-set')">
>>>>        <xsl:value-of select="document(concat('/cgi-bin/rand.pl?',
>>>
>>> $scale,
>>>>
>>>> '&amp;x=', generate-id(msxsl:node-set($seed))))" />
>>>>      </xsl:when>
>>>> ...
>>>
>>> I tried your solution and after replacing '&amp;x=' with '+' it
directly
>>> worked on my local web server!
>>> (I did not know that generate-id works in a browser)
>>>
>>> But as already posted it did not work after installed on my real
>> webserver
>>> because that does not have enough power to handle the six document
opens.
>>>
>>> Btw, I really like the solution of David Carlisle to provide
>> exslt:node-set
>>> for IE browsers (and not having to deal with exslt/msxml):
>>> http://dpcarlisle.blogspot.com/2007/05/exslt-node-set-function.html
>>
>>
>
>
>
> --
> Cheers,
> Dimitre Novatchev
> ---------------------------------------
> Truly great madness cannot be achieved without significant intelligence.
> ---------------------------------------
> To invent, you need a good imagination and a pile of junk
> -------------------------------------
> Never fight an inanimate object
> -------------------------------------
> You've achieved success in your field when you don't know whether what
> you're doing is work or play

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2011 All Rights Reserved.