[xquery-talk] xs:error and AbstractTypes

Michael Kay mike at saxonica.com
Sun Jan 13 02:41:00 PST 2019


xs:error is defined in XSD 1.1 part 1:

[Definition:]   <>A special simple type definition, whose name is error in the XSD namespace, is also present in each ·XSD schema· <https://www.w3.org/TR/xmlschema11-1/#key-schema>. The XSD error type has no valid instances. It can be used in any place where other types are normally used; in particular, it can be used in conditional type assignment to cause elements which satisfy certain conditions to be invalid.

In §3.16.7.3 it is defined as a union type with no member types.

I think that this call should fail on the grounds that () is not a valid instance of xs:error.

What's happening is apparently that when xs:error is used as a SequenceType, it is given a required cardinality of 0, and the type matching, when it sees a required cardinality of 0, allows an empty sequence to appear. I think the correct handling would be to have a required cardinality of 1.

Raised at https://saxonica.plan.io/issues/4091

Michael Kay
Saxonica

> On 12 Jan 2019, at 09:22, Adam Retter <adam.retter at googlemail.com> wrote:
> 
> Whilst looking for a type which is declarable in XQuery but that
> cannot be constructed, I wrote a strange query, well to me anyway,
> which evaluates on Saxon 9.8.0.12 PE, and returns <hello/>.
> 
> declare function local:test1($x as xs:error) {
>  <hello/>
> };
> local:test1(())
> 
> You can also modify the query so the parameter has one-or-mode
> cardinality e.g. "$x as xs:error+", and it will still evaluate with an
> empty sequence as the argument. I believe that this is because
> xs:error is always an empty type.
> 
> BaseX and eXist-db both refuse to evaluate the query, saying that the
> type xs:error is unknown.
> 
> Am I right in thinking that Saxon evaluates this because it supports
> [Schema 1.1 Part 2], whereas eXist-db and BaseX do not?
> 
> Also if anyone has any bright ideas, about a type that I could
> explicitly declare for a function argument, but that CANNOT be
> constructed within XQuery, I would be interested to know. I think
> Union types are out as I want to support all processors (i.e. not
> require Schema support).
> 
> So far I haven't seen anything...
> 
> -- 
> Adam Retter
> 
> skype: adam.retter
> tweet: adamretter
> http://www.adamretter.org.uk
> _______________________________________________
> talk at x-query.com
> http://x-query.com/mailman/listinfo/talk

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://x-query.com/pipermail/talk/attachments/20190113/849f4bd4/attachment.html>


More information about the talk mailing list