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