2016-03-23 14 views
1

XQuery 3.0'ı destekleyen BaseX kullanıyorum.XQuery'de ÖNCE TARAFINDAN BİR BAĞLANTI var mı?

en Böyle bir veri kümesi var diyelim, <start> değerine emretti:

<element> 
<start>1</start> 
<end>2</end> 
</element> 
<element> 
<start>2</start> 
<end>4</end> 
</element> 
<element> 
<start>5</start> 
<end>6</end> 
</element> 

Onların sonuna kadar bu öğeleri bağlamak ve değerleri başlatın ve istediğiniz grup bağlayan unsurlar bir araya:

<block> 
    <start>1</start> 
    <end>4</end> 
</block> 
<block> 
    <start>5</start> 
    <end>6</end> 
</block> 

Oracle'da, CONNECT BY PRIOR ile böyle bir şey yapabiliriz. Bunu XQuery'de nasıl yapabiliriz?

+0

Zaten XQuery 3.0 [Pencere Madde] bir göz var mı (http://docs.basex.org/wiki/XQuery_3.0#window)? –

+0

@ ChristianGrün, hayır yapmadım. Bahşiş için teşekkürler, şuna bir bakacağım. – wvdz

cevap

2

Bu davranışı, öğelerin açıklığına göre koşullara göre gruplandırmanıza izin veren bir açılır pencere kullanarak gerçekleştirebilirsiniz. Kayan ve yuvarlanan pencereler, BaseX tarafından desteklenen XQuery 3.0 gerektirir.

let $items := (
    <element> 
    <start>1</start> 
    <end>2</end> 
    </element>, 
    <element> 
    <start>2</start> 
    <end>4</end> 
    </element>, 
    <element> 
    <start>5</start> 
    <end>6</end> 
    </element> 
) 
for tumbling window $window in $items 
    start $start when fn:true() 
    only end $end next $next when not(
    $end/end eq $next/start 
) 
return <block>{ 
    $start/start, 
    $end/end 
}</block> 
+0

Bu mükemmel. Tekrar teşekkürler. – wvdz

+0

Sadece küçük bir ekleme… Bu da işe yarıyor: '$ başlangıç ​​/ bitiş eq $ end/start' olduğunda fn: true() end $ end olduğunda $ start'ı başlatın –

İlgili konular