Home
Über mich
Veröffentlichungen

XML XML-Schema XPath XSL-T XSL-FO XQuery XProc SVG

XPath / XPath-Funktionen / XPath: Sequenz-Funktionen / XPath 3.1: Map, xsl:map / random-number-generator

random-number-generator

random-number-generator

➪ random-number-generator() generiert eine Map, deren Schlüssel ein xs:string ist: Die zulässigen Werte dieses Schlüssels sind "number", "next" und "permute".

Auf dieser Seite:

Signaturen:


random-number-generator() 
    as map(xs:string, item())
fn:random-number-generator(
    $seed as xs:anyAtomicType?) 
    as map(xs:string, item())

Siehe https://www.w3.org/TR/xpath-functions-31/func-random-number-generator

Siehe map.

Der Aufruf von random-number-generator() bringt beispielsweise folgendes Ergebnis:


map {
  "number": 3.091013594396578e-1,
  "next": (anonymous-function)#0,
  "permute": (anonymous-function)#1
}

Bei Aufruf von


declare namespace map = "http://www.w3.org/2005/xpath-functions/map";
map:for-each(random-number-generator(), function ($k, $v){$k})

... erhalten Sie dieses Ergebnis:


number
next
permute

Generierung einzelner Zufallszahlen

Das Resultat:


<xsl:variable name="vngen" 
     as="map(xs:string, item())" 
     select="random-number-generator()"/>

Rufen Sie die Map-Variable vngen über den Schlüssel "number" auf,


<number>
  <xsl:value-of select="map:get($vngen, 'number')"/>
</number>

so generiert das System eine Zufallszahl, die zwischen 0 und 1 liegt.


<number>0.020134109105953035</number>

Rufen Sie die map-Variable vngen über den Schlüssel permute auf und übergeben eine Zahlensequenz, z.B. 1 to 5,


<permute>
  <xsl:for-each select="map:get($vngen, 'permute')(1 to 5)">
    <nr>
      <xsl:value-of select="."/>
    </nr>
  </xsl:for-each>
</permute>

so generiert das System eine zufällige Folge der vorgegebenen Zahlen.


  <permute>
   <nr>3</nr>
   <nr>5</nr>
   <nr>1</nr>
   <nr>4</nr>
   <nr>2</nr>
  </permute>

Ähnlich können Sie auch in XQuery verfahren:


map:get(random-number-generator(19), 'permute')(1 to 5)

ergibt dann beispielsweise


5
3
4
1
2

Generierung mehrerer Zufallszahlen


for $w in (1 to 5) return 
     map:get( random-number-generator($w), 'number')

Das Ergebnis dieses XQuery-Aufrufs lautet beispielsweise:


0.00008958178688845
0.00017916355909342
0.00026874533129839
0.00035832710350336
0.00044790887570834

Alternative:


random-number-generator()?permute(1 to 5)

Resultat:


4
5
3
2
1

wg / 23. März 2020



Fragen? Anmerkungen? Tipps?

Bitte nehmen Sie Kontakt zu mir auf.






Vielen Dank für Ihr Interesse an meiner Arbeit.



V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de

www.wilfried-grupe.de/random_number_generator.html