- 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