- From: <bugzilla@wiggum.w3.org>
- Date: Fri, 17 Aug 2007 21:27:37 +0000
- To: public-qt-comments@w3.org
- CC:
http://www.w3.org/Bugs/Public/show_bug.cgi?id=3578
------- Comment #11 from simeon@us.ibm.com 2007-08-17 21:27 -------
Thanks. I think there is still a problem. The local function is defined as
taking
elements of type env:Envelop as input, but it's passed an env:Body.
You may want to remove '//env:Body' in the function call.
- Jerome
(In reply to comment #2)
> I believe this fixes the errors in Use Case "SOAP":
>
> <pre>
> declare namespace env="http://www.w3.org/2003/05/soap-envelope"; declare
> namespace m="http://travelcompany.example.org/reservation"; declare
> namespace n="http://mycompany.example.com/employees"; declare namespace
> p="http://travelcompany.example.org/reservation/travel"; (: A clarification
> is needed only if there are no : airports or more than one for a given city.
> If : there is precisely one, there is no need to : ask for information on
> that city. :) declare function local:airportChoices($city as xs:string) {
> let $airports := collection("airports")[CITY = $city] return if
> (count($airports) = 0) then <error> No airports found for
> {$city}!</error> else if (count($airports) > 1) then
> <airportChoices> { for $c in $airports/CODE return
> (string( $c ), " ") } </airportChoices> else () }; (: Make
> sure that each airport is unambiguous. If there is : more than one airport
> for a city, ask for clarification. : : The primer only shows the error
> condition, so it is not : clear what to do if there are no errors. Here, we
> simply : return the airports in the itinerary. :) declare function
> local:airports($in as element(env:Envelope)) { let $departureDeparting :=
> $in//p:departure/p:departing let $departureDepartingAirports :=
> collection("airports")[CITY = $departureDeparting] let $departureArriving
> := $in//p:departure/p:arriving let $departureArrivingAirports :=
> collection("airports")[CITY = $departureArriving] let $returnDeparting
> := $in//p:return/p:departing let $returnDepartingAirports :=
> collection("airports")[CITY = $returnDeparting] let $returnArriving :=
> $in//p:return/p:arriving let $returnArrivingAirports :=
> collection("airports")[CITY = $returnArriving] return if (
> count($departureDepartingAirports)=0 or
> count($departureDepartingAirports)>1 or
> count($departureArrivingAirports)=0 or
> count($departureArrivingAirports)>1 or
> count($returnDepartingAirports)=0 or
> count($returnDepartingAirports)>1 or
> count($returnArrivingAirports)=0 or
> count($returnArrivingAirports)>1 ) then
> <p:itineraryClarification> <p:departure>
> <p:departing> { local:airportChoices($departureDeparting) }
> </p:departing> <p:arriving> {
> local:airportChoices($departureArriving) } </p:arriving>
> </p:departure> <p:return> <p:departing>
> { local:airportChoices($returnDeparting) } </p:departing>
> <p:arriving> {
> local:airportChoices($returnArriving) } </p:arriving>
> </p:return> </p:itineraryClarification> else
> <p:itinerary> <p:departure>
> <p:departing>{$departureDeparting}</p:departing>
> <p:arriving>{$departureArriving}</p:arriving> </p:departure>
> <p:return> <p:departing>{$returnDeparting}</p:departing>
> <p:arriving>{$returnArriving}</p:arriving> </p:return>
> </p:itinerary> }; declare variable $msg external; copy $out :=
> $msg/env:Envelope modify ( replace value of node $out//m:dateAndTime
> with fn:current-dateTime(), replace node $out//env:Body with
> <env:Body> { local:airports($out//env:Body) } </env:Body> )
> return $out
> </pre>
>
Received on Friday, 17 August 2007 21:27:41 UTC