<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://training-course-material.com/index.php?action=history&amp;feed=atom&amp;title=XQuery_Exercises</id>
	<title>XQuery Exercises - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://training-course-material.com/index.php?action=history&amp;feed=atom&amp;title=XQuery_Exercises"/>
	<link rel="alternate" type="text/html" href="https://training-course-material.com/index.php?title=XQuery_Exercises&amp;action=history"/>
	<updated>2026-04-22T22:22:04Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://training-course-material.com/index.php?title=XQuery_Exercises&amp;diff=87552&amp;oldid=prev</id>
		<title>Lsokolowski1: /* Good practices */</title>
		<link rel="alternate" type="text/html" href="https://training-course-material.com/index.php?title=XQuery_Exercises&amp;diff=87552&amp;oldid=prev"/>
		<updated>2023-03-08T07:28:17Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Good practices&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Category:XML]]&lt;br /&gt;
{{Cat| XQuery}}&lt;br /&gt;
&lt;br /&gt;
== Good practices ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xquery&amp;quot;&amp;gt;&lt;br /&gt;
(: GOLDEN RULES&lt;br /&gt;
-1. KYDB - Know Your Database&lt;br /&gt;
0. Divide issue into smaller parts&lt;br /&gt;
1. Do one part at a time, step by step&lt;br /&gt;
2. KISS (Keep It Simple Stupid)&lt;br /&gt;
3. Choose proper source(s) from the context&lt;br /&gt;
4. If something can be solved with Xpath only, then don&amp;#039;t use FLOWR (or even no XQuery at all)&lt;br /&gt;
5. One change at a time, then test it&lt;br /&gt;
6. When you&amp;#039;re stuck - use documentation (main original source first, then stackoverflow, etc)&lt;br /&gt;
7. Do not invent the wheel - custom function as the last resort, first look for the built-in or ready solution&lt;br /&gt;
:)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XQuery Exercises ==&lt;br /&gt;
# Paths, Constructors&lt;br /&gt;
#* exerciseBooks.xq&lt;br /&gt;
#* exercisePredicates1.xq&lt;br /&gt;
# Constructors, sub-expressions, sequences, quantified&lt;br /&gt;
#* exercise7.3.xq&lt;br /&gt;
#* exercise7.3_1.xq&lt;br /&gt;
#* exercise7.5.xq (some ... satisfies)&lt;br /&gt;
#* exercise7.6.xq (every ... satisfies)&lt;br /&gt;
#* exercise7.7.xq (nested loop)&lt;br /&gt;
#* exercise7.8.xq (order by, union)&lt;br /&gt;
#* exercise7.9.xq&lt;br /&gt;
# Joins, Constructors, Html&lt;br /&gt;
#* 3wJoinExercise.xq&lt;br /&gt;
#* exercise3.xq&lt;br /&gt;
#* exercise3html.xq&lt;br /&gt;
#* exercise4.xq&lt;br /&gt;
#* exercise7.4.xq&lt;br /&gt;
# Average&lt;br /&gt;
#* exercise7.10.xq&lt;br /&gt;
#* exercise7.10a.xq&lt;br /&gt;
#* exercise7.10b.xq&lt;br /&gt;
# Functions&lt;br /&gt;
#* exercise5_1.xq&lt;br /&gt;
#* exercise5_2.xq&lt;br /&gt;
#* exercise6.xq&lt;br /&gt;
#* exercise7.11.xq (some ... satisfies)&lt;br /&gt;
#* exercise7.9b.xq&lt;br /&gt;
#* empty and absent (exercises, library)&lt;br /&gt;
# Group by (Xquery 1.0)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xquery&amp;quot;&amp;gt;&lt;br /&gt;
(: Example :)&lt;br /&gt;
(: &amp;lt;!-- Order input document --&amp;gt;&lt;br /&gt;
&amp;lt;order num=&amp;quot;00299432&amp;quot; date=&amp;quot;2006-09-15&amp;quot; cust=&amp;quot;0221A&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;item dept=&amp;quot;WMN&amp;quot; num=&amp;quot;557&amp;quot; quantity=&amp;quot;1&amp;quot; color=&amp;quot;navy&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;item dept=&amp;quot;ACC&amp;quot; num=&amp;quot;563&amp;quot; quantity=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;item dept=&amp;quot;ACC&amp;quot; num=&amp;quot;443&amp;quot; quantity=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;item dept=&amp;quot;MEN&amp;quot; num=&amp;quot;784&amp;quot; quantity=&amp;quot;1&amp;quot; color=&amp;quot;white&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;item dept=&amp;quot;MEN&amp;quot; num=&amp;quot;784&amp;quot; quantity=&amp;quot;1&amp;quot; color=&amp;quot;gray&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;item dept=&amp;quot;WMN&amp;quot; num=&amp;quot;557&amp;quot; quantity=&amp;quot;1&amp;quot; color=&amp;quot;black&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/order&amp;gt; :)&lt;br /&gt;
&lt;br /&gt;
(: Group by &amp;#039;dept&amp;#039; :)&lt;br /&gt;
(: for $d in distinct-values(doc(&amp;quot;order.xml&amp;quot;)//item/@dept)&lt;br /&gt;
let $items := doc(&amp;quot;order.xml&amp;quot;)//item[@dept = $d]&lt;br /&gt;
order by $d&lt;br /&gt;
return &amp;lt;department code=&amp;quot;{$d}&amp;quot;&amp;gt;{&lt;br /&gt;
         for $i in $items&lt;br /&gt;
         order by $i/@num&lt;br /&gt;
         return $i&lt;br /&gt;
       }&amp;lt;/department&amp;gt; :)&lt;br /&gt;
&lt;br /&gt;
(: Exercise :)&lt;br /&gt;
(: Src file - &amp;#039;exercises.xml&amp;#039; :)&lt;br /&gt;
(: Group by &amp;#039;difficulty&amp;#039; :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(: Expecting result&lt;br /&gt;
&lt;br /&gt;
&amp;lt;difficulty kind=&amp;quot;advanced&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;answer&amp;gt;Me (-;&amp;lt;/answer&amp;gt;&lt;br /&gt;
&amp;lt;/difficulty&amp;gt;&lt;br /&gt;
&amp;lt;difficulty kind=&amp;quot;guru&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;answer&amp;gt;Everything&amp;lt;/answer&amp;gt;&lt;br /&gt;
&amp;lt;/difficulty&amp;gt;&lt;br /&gt;
&amp;lt;difficulty kind=&amp;quot;medium&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;answer&amp;gt;Alan Turing&amp;lt;/answer&amp;gt;&lt;br /&gt;
  &amp;lt;answer/&amp;gt;&lt;br /&gt;
&amp;lt;/difficulty&amp;gt;&lt;br /&gt;
&amp;lt;difficulty kind=&amp;quot;standard&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;answer&amp;gt;30&amp;lt;/answer&amp;gt;&lt;br /&gt;
  &amp;lt;answer&amp;gt;7&amp;lt;/answer&amp;gt;&lt;br /&gt;
&amp;lt;/difficulty&amp;gt; :)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== More exercises ==&lt;br /&gt;
* Regexp&lt;br /&gt;
* Date and time&lt;br /&gt;
&lt;br /&gt;
=== Regexp ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xquery&amp;quot;&amp;gt;&lt;br /&gt;
(: Example :)&lt;br /&gt;
(: let $input := &amp;#039;Hello World&amp;#039;&lt;br /&gt;
return&lt;br /&gt;
&amp;lt;result&amp;gt;{&lt;br /&gt;
  (matches($input, &amp;#039;Hello World&amp;#039;) =  true(),&lt;br /&gt;
   matches($input, &amp;#039;Hi&amp;#039;) =  false(),&lt;br /&gt;
   matches($input, &amp;#039;H.*&amp;#039;) = true(),&lt;br /&gt;
   matches($input, &amp;#039;H.*o W.*d&amp;#039;) =  true(),&lt;br /&gt;
   matches($input, &amp;#039;Hel+o? W.+d&amp;#039;) = true(),&lt;br /&gt;
   matches($input, &amp;#039;Hel?o+&amp;#039;) = false(),&lt;br /&gt;
   matches($input, &amp;#039;hello&amp;#039;, &amp;quot;i&amp;quot;) = true(), &lt;br /&gt;
   matches($input, &amp;#039;he l lo&amp;#039;, &amp;quot;ix&amp;quot;) = true() ,&lt;br /&gt;
   matches($input, &amp;#039;^Hello$&amp;#039;) = false(), &lt;br /&gt;
   matches($input, &amp;#039;^Hello&amp;#039;) = true()&lt;br /&gt;
    )}&lt;br /&gt;
&amp;lt;/result&amp;gt; :)&lt;br /&gt;
&lt;br /&gt;
(: EXERCISE - file &amp;#039;svnlist.xml&amp;#039; :)&lt;br /&gt;
(: Find all entries, which have no &amp;#039;logo&amp;#039; in their names :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(: Result&lt;br /&gt;
&amp;lt;result&amp;gt;&lt;br /&gt;
  &amp;lt;entry kind=&amp;quot;file&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;jquery-1.9.1.js&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;size&amp;gt;268381&amp;lt;/size&amp;gt;&lt;br /&gt;
    &amp;lt;commit revision=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;author&amp;gt;lsokolowski&amp;lt;/author&amp;gt;&lt;br /&gt;
      &amp;lt;date&amp;gt;2015-07-01T23:50:07.421903Z&amp;lt;/date&amp;gt;&lt;br /&gt;
    &amp;lt;/commit&amp;gt;&lt;br /&gt;
  &amp;lt;/entry&amp;gt;&lt;br /&gt;
  &amp;lt;entry kind=&amp;quot;file&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;jquery.cycle.all.js&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;size&amp;gt;51734&amp;lt;/size&amp;gt;&lt;br /&gt;
    &amp;lt;commit revision=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;author&amp;gt;lsokolowski&amp;lt;/author&amp;gt;&lt;br /&gt;
      &amp;lt;date&amp;gt;2015-07-01T23:50:07.421903Z&amp;lt;/date&amp;gt;&lt;br /&gt;
    &amp;lt;/commit&amp;gt;&lt;br /&gt;
  &amp;lt;/entry&amp;gt;&lt;br /&gt;
&amp;lt;/result&amp;gt;&lt;br /&gt;
:)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dates and time ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xquery&amp;quot;&amp;gt;&lt;br /&gt;
(: Example :)&lt;br /&gt;
(: xs:dateTime(&amp;quot;2015-04-11T09:23:30.5&amp;quot;) - xs:dateTime(&amp;quot;2015-04-04T02:15:10.2&amp;quot;) :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(: Exercise :)&lt;br /&gt;
(: Get dates from &amp;#039;svnlist.xml&amp;#039; and find out how old are the entries. :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(: Result&lt;br /&gt;
P2023DT14H32M29.416097S&lt;br /&gt;
P2023DT14H32M29.416097S&lt;br /&gt;
P2023DT14H32M29.416097S&lt;br /&gt;
(...)&lt;br /&gt;
:)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Miscelaneous ===&lt;br /&gt;
# exerciseUSplcodes.xq&lt;br /&gt;
# oraclExercise2.xq&lt;br /&gt;
# exercisesElkomtech.xq&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
# Advanced&lt;br /&gt;
#* advExercises.txt&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!-- Some Solutions&lt;br /&gt;
for $d in distinct-values(doc(&amp;quot;../source_files/exercises.xml&amp;quot;)//exercise/@difficulty)&lt;br /&gt;
let $exercs := doc(&amp;quot;../source_files/exercises.xml&amp;quot;)//exercise[@difficulty = $d]&lt;br /&gt;
order by $d&lt;br /&gt;
return &amp;lt;difficulty kind=&amp;quot;{$d}&amp;quot;&amp;gt;{&lt;br /&gt;
         for $e in $exercs&lt;br /&gt;
         order by $e/points&lt;br /&gt;
         return $e/answer&lt;br /&gt;
       }&amp;lt;/difficulty&amp;gt;&lt;br /&gt;
(:&lt;br /&gt;
(: aggregated :)&lt;br /&gt;
return &amp;lt;difficulty kind=&amp;quot;{$d}&amp;quot;&lt;br /&gt;
          numItems=&amp;quot;{count($exercs)}&amp;quot;&lt;br /&gt;
          distinctItemNums=&amp;quot;{count(distinct-values($exercs/points))}&amp;quot;&lt;br /&gt;
          totQuant=&amp;quot;{sum($exercs/points)}&amp;quot;/&amp;gt; &lt;br /&gt;
:)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
declare variable $z := doc(&amp;quot;../source_files/svnlist.xml&amp;quot;)//entry;&lt;br /&gt;
&amp;lt;result&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  for $e in $z&lt;br /&gt;
  where&lt;br /&gt;
    matches($e, &amp;#039;logo.*&amp;#039;) = not(true())&lt;br /&gt;
  return&lt;br /&gt;
    $e&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/result&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for $dt in $z&lt;br /&gt;
let $date := $dt/commit/date&lt;br /&gt;
return&lt;br /&gt;
  current-dateTime() - xs:dateTime($date)&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lsokolowski1</name></author>
	</entry>
</feed>