- From: Jonathan Robie <jwrobie@mindspring.com>
- Date: Mon, 16 Feb 2004 13:50:48 -0500
- To: Michael Kay <mhk@mhk.me.uk>
- Cc: 'Jonathan Robie' <jonathan.robie@datadirect.com>, 'Michael Rys' <mrys@microsoft.com>, 'XML Query Comments' <public-qt-comments@w3.org>
Michael Kay wrote:
>>Now I want to do the following query:
>>
>>    let $people := doc('people.xml')
>>    return contains($people, "Rys")
>>
>>When the query attempts to cast $people to a string, it will try to 
>>atomize the element using dm:typed-value(), and the following 
>>rule applies:
>>
>>     If the node has a complex type with complex content, raises a
>>     type error, which may be handled by the host language.
>>
>>We should see if there are other functions/operators that 
>>have this same problem.
>>
>>    
>>
>
>All string functions potentially have this problem, there is no reason
>to special-case contains. For example, it applies just as much to
>concat().
>  
>
I think there are two consistent ways to approach this.
One way is to say that elements with child elements do not have a typed 
value, and to use string-value() when you want the string value. 
<xslt:value-of/> and contains() would then be defined in terms of string 
value, which seems more appropriate to their function. Personally, I see 
no problem with concat() raising an error when you try to treat an 
element with complex content as a string.
Another approach is to say that every element has a type value. Your 
proposal is a reasonable way to do that, and I find it less 
objectionable than the status quo.
A third approach is to say that elements with child elements do not have 
a typed value, but any element can be implicitly cast to a string.
I prefer all three of these approaches to the status quo. Of these three 
approaches, I prefer the first and the third.
Jonathan
Received on Monday, 16 February 2004 13:53:25 UTC