[xquery-talk] The value does not conform to the lexical constraints defined for the xs:anyURI type
Michael Kay
mike at saxonica.com
Wed Dec 19 01:31:29 PST 2012
The validation rules for xs:anyURI in the XSD 1.0 specification are
notoriously troublesome, and it is not surprising that different
implementors interpret them differently.
This is what XSD 1.0 says:
<quote>
The ·lexical space· of anyURI is finite-length character sequences
which, when the algorithm defined in Section 5.4 of [XML Linking
Language] is applied to them, result in strings which are legal URIs
according to [RFC 2396], as amended by [RFC 2732].
Note: Spaces are, in principle, allowed in the ·lexical space· of
anyURI, however, their use is highly discouraged (unless they are
encoded by %20).
</quote>
The "Note" here suggests that Sedna is wrong to reject the value (it
also suggests that your query is wrong to supply it, but that you should
be able to get away with it).
The "algorithm" referred to in this rule is basically the escaping of
special characters such as space.
Note that in XSD 1.1, the spec gives up trying to define what's valid in
an xs:anyURI and what isn't - all strings are now valid in the lexical
space of xs:anyURI.
Michael Kay
Saxonica
On 19/12/2012 09:11, Robby Pelssers wrote:
> Hi all,
>
>
> I tested following Xquery with Sedna and Zorba:
>
> declare function local:getPipUri($id as xs:string) as xs:anyURI {
> xs:anyURI(concat("http://www.nxp.com/pip/", $id))
> };
>
> local:getPipUri("CX24483 14LZ")
>
>
> Sedna throws an exception:
> 2012/12/19 10:07:09 database query/update failed (SEDNA Message: ERROR FORG0001
> Invalid value for cast/constructor.
> Details: The value does not conform to the lexical constraints defined for the xs:anyURI type.
> Query line: 6, column:4
> )
>
>
> http://www.zorba-xquery.com/html/demo happy returns "http://www.nxp.com/pip/CX24483 14LZ"
>
> So how does the xs:anyURI cast work? Is the developer supposed to encode the String before passing it to xs:anyURI or is the anyURI function supposed to do this?
>
> Thx in advance,
> Robby
>
> _______________________________________________
> talk at x-query.com
> http://x-query.com/mailman/listinfo/talk
>
More information about the talk
mailing list