- From: <bugzilla@wiggum.w3.org>
- Date: Mon, 26 Feb 2007 12:19:33 +0000
- To: public-qt-comments@w3.org
- CC:
http://www.w3.org/Bugs/Public/show_bug.cgi?id=4273 ------- Comment #7 from tim@cbcl.co.uk 2007-02-26 12:19 ------- This leads me to the conclusion that, when constructing nodes with construction mode preserve, the associated type-name should not be element(). Rather it should be a type I've named "xs:typed" (for want of anything better), defined as: define type xs:typed restricts xs:anyType { attribute * of type xs:anySimpleType, ( element * of type xs:anyType | text | comment | processing-instruction )* } I believe this to be correct because, 1. Any copied attributes will retain their type annotations, therefore their most specific common type is attribute() = attribute * of type xs:anySimpleType. 2. Any copied elements will retain their type annotations, therefore their most specific common type is element() = element * of type xs:anyType. 3. Text, comment and processing instructions nodes are copied through. 4. Enclosed expressions which are a subtype of xs:anySimpleType are converted into text nodes. i.e. <a>{1}</a> is an element containing a text node, not an integer. i.e. fn:data() on any constructed node (regardless of construction mode) will can never return a value of any atomic type other than xs:untypedAtomic. e.g. In the query 1 + <a>2</a>, fn:data(<a>2</a>) is of type xs:untypedAtomic, regardless of construction mode. In my original example, fn:data($y) is of xs:anySimpleType. Since xs:integer is a subtype of xs:anySimpleType, treat as type assertions (explicit if static typing is required, otherwise implicit) will work. I've now implemented this, together with: ------------------------------------------------------- data on element * of type xs:anyType : xs:anySimpleType and it appears to work in all XQTS tests.
Received on Monday, 26 February 2007 12:19:40 UTC