FLWOR

Język programowania XQuery definiuje FLWOR (wymawiane jako „kwiat”) jako wyrażenie obsługujące iterację i wiązanie zmiennych z wynikami pośrednimi. FLWOR to akronim: FOR , LET , WHERE, ORDER BY, RETURN. FLWOR jest luźno analogiczny do SELECT-FROM-WHERE języka SQL i może być używany do zapewniania funkcji podobnych do łączenia do dokumentów XML .

  • for tworzy sekwencję węzłów
  • let wiąże sekwencję ze zmienną
  • gdzie filtruje węzły na podstawie wyrażenia boolowskiego
  • order by sortuje węzły
  • return jest oceniany raz dla każdego węzła

Przykład

      
        
      
     
   
     
         
           
           
        
      for  $  d  in  doc  (  "depts.xml"  )//  deptno  let  $  e  :=  doc  (  "emps.xml"  )//  pracownik  [  deptno  =  $  d  ]  gdzie  liczba  (  $  e  )  >=  10  zamów według  średniej  (  $  e  /  pensja  )  malejąco  powrót  <duży-dział>  {  $  d  ,  <headcount>  {  count  (  $  e  )}  </headcount>  ,  <avgsal>  {  śr.  (  $  e  /  pensja  )}  </avgsal>  }  </ duży dział> 

Pierwsza kolumna żądania XQuery zawiera słowa kluczowe for , let , where , order by i return paradygmatu FLWOR. W prostym języku angielskim można to odczytać jako „Zbierz wszystkie działy, które mają więcej niż dziesięciu pracowników, uporządkuj te działy, zmniejszając średnią pensję, i prześlij raport z numerami działów, liczbą osób i średnią pensją w każdym dużym dziale” . Wynik może wyglądać następująco:


    
    
    


    
    
    


    
    
    
 <big-dept>  <deptno>  17  </deptno>  <headcount>  25  </headcount>  <avgsal>  12500  </avgsal>  </big-dept> <big-dept>  <deptno>  24  </deptno>  <  headcount >  18  </liczba osób>  <śr.  > 11327  </avgsal>  </big-dept>  <big-dept>  < wydział   > 3  </deptno>  <liczba osób  >  32 </   liczba osób > <śr.   > 10725  </avgsal>  < /duży-dział> 

Przykład użycia Microsoft SQL Server

  

   











 
		  
		  
	    DECLARE  @xml  XML  SET  @xml  =  '<element_główny>  <element_branch>  <item_1>42</item_1>  <item_2>27</item_2>  </element_branch>  <element_branch>  <item_1>a</item_1>  <item_2>b </item_2>  </branch_element>  </element_główny>'  WYBIERZ  x  .  y  .  zapytanie  (  'dla $s w self::node() return $s//item_1/text()'  )  jako  i  ,  x  .  y  .  zapytanie  (  'dla $s w self::node() return $s//item_2/text()'  )  jako  j  FROM  @xml  .  węzły  (  '/ element_root'  )  AS  x  (  y  ); 

Linki zewnętrzne