[xquery-talk] best practice for function design with many optional params

Jakob Fix jakob.fix at gmail.com
Thu Jan 26 14:26:54 PST 2012


Ronald,

that was my initial approach that I quite liked because as you said
- it allows for complex values
- the element name and its contents are nice vehicles for key and value
- it's easy to evaluate optional elements (if the child element
exists, the parameter has been supllied, otherwise, we don't care)
- in some scenarios, one could supplement each parameter with
attributes indicating default values and types
  <start type="xs:integer" default="1">11</start>

drawbacks:
- verbosity (which is why I did take a liking to the attribute on the
single element approach)
- all the "baggage" as mentioned by Michael Kay in his message,
although I think I could live with that for now

All in all, it seems there's no perfect solution, so I'll have to
figure out what the most acceptable approach is for me until maps come
along.

Thanks for everybody's input,
Jakob.



On Thu, Jan 26, 2012 at 21:07, Ronald Bourret <rpbourret at rpbourret.com> wrote:
> The other obvious variation is to pass a single node with children
> representing the optional variables. This is similar to the attribute
> approach Michael suggests, but allows for complex arguments. It also handles
> sequences, as these can be wrapped in a child.
>
> For example:
>
> <OptionalArgs>
>   <Name>Ron</Name>
>   <Address>
>      <Street>123123 Main</Street>
>      <City>Mainville</City>
>      <State>CA</State>
>   </Address>
>   <!-- Optional Email child not available and so is missing -->
>   <PhoneNumbers>
>      <!-- Sequence here -->
>      <PhoneNumber>333-333-3333</PhoneNumber>
>      <PhoneNumber>444-444-4444</PhoneNumber>
>   </PhoneNumber>
> </OptionalArgs>
>
> -- Ron
>
> Florent Georges wrote:
>>
>> David Lee wrote:
>>
>>  Hi,
>>
>>> Another common practice is to pass a sequence as the options.
>>
>>
>>  The main drawback I see with this approach is that it copes very
>> badly with empty values (where the value is the empty sequence)
>> and with sequences (where a value can be a sequence).  And the
>> behaviour can be very surprising (and hard to debug) when one
>> passes an empty sequence or a sequence of more than one items by
>> mistake.
>>
>>  As Mike said, maps would be perfect here...
>>
>>  Regards,
>>
>> --
>> Florent Georges
>> http://fgeorges.org/
>> http://h2oconsulting.be/
>>
>> _______________________________________________
>> talk at x-query.com
>> http://x-query.com/mailman/listinfo/talk
>>
>>
>>
>> -----
>> No virus found in this message.
>> Checked by AVG - www.avg.com
>> Version: 10.0.1416 / Virus Database: 2109/4766 - Release Date: 01/25/12
>>
>>
>>
> _______________________________________________
> talk at x-query.com
> http://x-query.com/mailman/listinfo/talk



More information about the talk mailing list