- From: Michael Kay <mhk@mhk.me.uk>
- Date: Thu, 20 May 2004 09:46:10 +0100
- To: "'Per Bothner'" <per@bothner.com>, <public-qt-comments@w3.org>
We made a decision a couple of weeks ago to allow text nodes to be
zero-length so long as they have no parent. I think this is essentially what
you are recommending.
Michael Kay
> -----Original Message-----
> From: public-qt-comments-request@w3.org
> [mailto:public-qt-comments-request@w3.org] On Behalf Of Per Bothner
> Sent: 19 May 2004 23:40
> To: public-qt-comments@w3.org
> Subject: [FS] [XQuery] empty text nodes
>
>
> Both the Formal Semantics and the internal XQuery
> specification seem to
> allow empty text nodes, but this conflicts with the Data Model:
>
> 6.7 Text Nodes
> 6.7.1 Overview
> Text nodes must satisfy the following constraint:
> 1. A text node must not contain the empty string as its content.
>
> The formal semantics uses empty text nodes so it can suppress spaces
> between adjacent enclosed expressions:
>
> 4.7.1 Direct Element Constructors
> Normalization
> [ElementContent1 ..., ElementContentn]ElementContent-unit, n > 1
> ==
> fs:item-sequence-to-node-sequence([ ElementContent1
> ]ElementContent ,
> text { "" }, ..., text { "" }, [ ElementContentn]ElementContent
>
> 4.7.1.1 Attributes
> Normalization
> [ AttributeValueContent1 ...,
> AttributeValueContentn]AttributeContent-unit, n > 1
> ==
> fs:item-sequence-to-untypedAtomic(
> [AttributeValueContent1]]AttributeContent , text { "" }, ...,
> text {""}, [ AttributeValueContentn]AttributeContent
>
> Note also that the rule for Dynamic Evaluation of Text Node
> Constructors does not check for an empty string. Only the
> static typing consider this by returning 'text?'.
>
> Also, the informal XQuery specification has a problem here:
>
> 3.7.3.4 Text Node Constructors
> 2. If the result of atomization is an empty sequence, no text node
> is constructed. ...
>
> However, it says nothing about a content expression that consists of
> a single empty string. I suggest removing the above sentence, and
> modifying the 3rd rule:
> 3. The individual strings resulting from the previous step
> are merged
> into a single string by concatenating them with a single space
> character between each pair. If the resulting string is the empty
> string, no text node is constructed (and the expressions returns an
> empty sequence). Otherwise, the resulting string becomes
> the content
> of the constructed text node.
>
> Alternatively, change the data model to allow empty text
> nodes. I don't
> see any particular reason to prohibit them, even if they're not in the
> XML infoset. Just replace the sentence "In addition, document and
> element nodes impose the constraint that two consecutive text
> nodes can
> never occur as adjacent siblings" by adding "nor can any of their text
> node children have the empty string as the content".
>
> My recommendation:
> 1. Change the Data Model to allow empty text nodes.
> 2. Change the Text Node Constructor to allow empty string content.
> 3. Change element and ocument constructor normalization so that they
> remove empty text nodes *and* combine adjacent text nodes.
> --
> --Per Bothner
> per@bothner.com http://per.bothner.com/
>
Received on Thursday, 20 May 2004 04:46:48 UTC