W3C home > Mailing lists > Public > public-qt-comments@w3.org > October 2002

SequenceTyping matching of 'element QName'

From: Per Bothner <per@bothner.com>
Date: Wed, 16 Oct 2002 19:31:34 -0400 (EDT)
Message-ID: <3DADF6C6.90203@bothner.com>
To: public-qt-comments@w3.org
CC: per@bothner.com




The draft spec (2.4.2) says that to match a SequenceType
of form ("element" |  "attribute") ElemOrAttrType? when
ElemOrAttrType is a QName:

   The QName must be an element or attribute name that is
   found in the   in-scope schema definitions. The match is
   successful only if the given element or attribute has the
   required name and also conforms to the schema definition
   for the required name.

And Conformance section 2.5.2.1 Basic XQuery says:

   If any SequenceType contains an ElemOrAttrType, a Basic XQuery
   implementation raises a static error.

This is very unfortunate, since it is very useful to be able to
match a node against a specific element tag in a typeswitch.  I'd
go so far as to say that this guts most of the usefulness of
typeswitch.  The alternatives seem to be a lot more tedious and verbose.

It is especially unfortunate for me since the examples I use in
my article "Generating XML and HTML using XQuery" (available as
http://www.gnu.org/software/qexo/XQ-Gen-XML.html) now suddenly
because non-conforming without a matching Schema.

Please revisit this.

A suggestion, which has the advantage that it provides much of the
power of XSLT's template processing:  Add a pseudo-type for matching
against a PATTERN:
   "matching" PathExpr
I don't know if I'd go so far as to allow this everywheer that
SequenceType is currently allowed, but I'd certainly allow it in
the context of typeswitch:

typeswitch ($node)
   case matching meta/title return "saw title inside a meta-tag"
   case matching title[@id] return "saw a title with an 'id' attribute"
   case matching title return "saw title not in a meta-tag
   default return "saw some other tag"

Perhaps allow "match" as a synonym for "case "matching" to make it
less verbose:

typeswitch ($node)
   match meta/title return "saw title inside a meta-tag"
   match title[@id] return "saw a title with an 'id' attribute"
   match title return "saw title not in a meta-tag
   default return "saw some other tag"

With this feature XQuery can do most of what XSLT can do, and much
less verbosely.

Perhaps adding the full PathExpr may be a bit much for Basic XQuery 1.0,
but allowing 'matching NodeTest' may be a good start
-- 
	--Per Bothner
per@bothner.com   http://www.bothner.com/per/
Received on Thursday, 17 October 2002 03:26:11 UTC

This archive was generated by hypermail 2.4.0 : Friday, 17 January 2020 16:56:43 UTC