Query.exe is the implementation of the Saxon XQuery command/engine. It’s a command line program that I’m running from the Windows command prompt.

Issue

C:\XMLClass\XQuery>c:\Saxonica\bin\Query.exe -q:Flight3_Xquery.txt -o:flight3_xquery_out.xml
Error on line 2 column 20 of Flight3_Xquery.txt:
  XPDY0002: The context item for axis step root/descendant::FlightLeg is absent
Query failed with dynamic error: The context item for axis step root/descendant::FlightLeg is absent

The above is a very confusing error for a simple mistake.
I didn’t pass an input file to the query.exe program with the -s: parameter ((source?), which indicates the xml data file on which to run the query. The -q: parameters (query) specifies the name of the query files itself. And the -o: parameter (output) specifies the output filename for the results of running the XQuery.

Corrected Parameters

c:\XMLClass\XQuery>c:\Saxonica\bin\Query.exe -q:Flight3_Xquery.txt -s:c:\XMLClass\IntroSamples\Flight03.xml -o:flight3_xquery_out.xml

Sample XQuery

The Flight3.XQuery.txt contains the following sample XQuery:

(:  FLWOR = For Let Where Order-by Return   :) 
for $flightLeg in //FlightLeg
where $flightLeg/DepartureAirport = 'OKC' or $flightLeg/ArrivalAirport = 'OKC' 
order by $flightLeg/ArrivalDate[1] descending  
return $flightLeg

Second Solution

Instead of passing the input filename on the -s parameter on the command line, the file could be embedded in the XQuery itself with a “doc(filename)” statement, as shown below:

(:  FLWOR = For Let Where Order-by Return   :) 
for $flightLeg in doc("c:\XMLClass\IntroSamples\Flight03.xml")//FlightLeg 
where $flightLeg/DepartureAirport = 'OKC' or $flightLeg/ArrivalAirport = 'OKC' 
order by $flightLeg/ArrivalDate[1] descending  
return $flightLeg