2016-11-21 3 views
1
for tumbling window $w in (2, 4, 6, 8, 10, 12, 14) 
    start at $s when fn:true() 
    only end at $e when $e - $s eq 2 
return <window>{ $w }</window> 

Ergebnis der obigen Abfrage:XQUERY Tumbling Fenster

<window>2 4 6</window> 
<window>8 10 12</window> 

jemand erklären kann, warum ist es < 2 4 6>, < 8 10 12>? Warum nur 3 Werte < 2 4 6>, < 8 10 12> und wie funktioniert es, 2 4 6 oder 8 10 12 zu bekommen?

Antwort

3

Das Beispiel

for tumbling window $w in (2, 4, 6, 8, 10, 12, 14) 
    start at $s when fn:true() 
    only end at $e when $e - $s eq 2 
return <window>{ $w }</window> 

scheint direkt aus der Spezifikation genommen zu werden https://www.w3.org/TR/xquery-30/#id-tumbling-windows und hat einige gute Erklärung des Ergebnisses:

Windows sind durch Iteration über die Elemente in der Bindung erstellt Sequenz, in der Reihenfolge, Identifizieren des Startelements und des Endelements von jedes Fenster durch Auswerten der WindowStartCondition und der WindowEndCondition. Jede dieser Bedingungen ist erfüllt, wenn der effektive boolesche Wert des Ausdrucks, der auf das Schlüsselwort when folgt, wahr ist. Das Startelement des Fensters ist ein Element, das die WindowStartCondition erfüllt (siehe 3.10.4.1 Tumbling Windows und 3.10.4.2 Sliding Windows für eine ausführlichere Erläuterung.) Das Endelement des Fensters ist das erste Element in der Bindungssequenz , beginnend mit dem Startelement , das die WindowEndCondition erfüllt (siehe auch 3.10.4.1 Tumbling Windows und 3.10.4.2 Sliding Windows für weitere Details.) Jedes Fenster enthält sein Startelement, sein Endelement und alle auftretenden Elemente zwischen ihnen in der Bindungssequenz.

Wenn der Fenstertyp taumelt, überlappen sich die Fenster nie. Die Suche für den Start des ersten Fensters beginnt am Anfang der Bindungssequenz . Nachdem jedes Fenster generiert wurde, beginnt die Suche nach dem Start des nächsten Fensters mit dem Element in der Bindungssequenz , das nach dem Endelement des zuletzt generierten Fensters auftritt. So kann kein Element, das in einem Fenster auftritt, in einem anderen Fenster aus der gleichen Bindesequenz auftreten (außer die Sequenz enthält denselben Artikel mehr als einmal).

So mit der Bindungssequenz 2, 4, 6, 8, 10, 12, 14 wobei die definierten Variablen start at $s und only end at $e verwenden, sind Positions:

Startpunkt-Position: (Optional) an die Ordnungsposition des erste Element Fenster Bound in die Bindungssequenz. Startpositionsposition ist eine Positionsvariable ; daher ist sein Typ xs: integer End-item-position: (Optional) Gebunden an die Ordinalposition des letzten Fensterelements in die Bindungssequenz.End-Item-Position ist eine Positionsvariable; daher ist ihre Art xs: integer

und für den ersten Punkt 2 und dem dritten Element 6 die Positionswerte 3 - 1 sind 2 so das erste Fenster enthält 2, 4, 6, dann ist die Suche nach einem neuen Fenster beginnt mit 8 an Position 4 und endet mit 12 an Position 6 als 6 - 4 ist auch 2.