- From: Mary Fernandez <mff@research.att.com>
- Date: 11 Mar 2004 14:13:40 -0500
- To: public comments <public-qt-comments@w3.org>, stijn.vansummeren@luc.ac.be
- Cc: www-ql@w3.org
This is a last-call comment on the formal semantics document.
The message to www-ql from Stijn Vansummeren below revealed
errors in the formal semantics
of the child axis. Suggested correction is below.
==========================================================
Hi Stijn,
Sorry for the delay in answering your question.
As usual, a simple question has revealed several bugs!
Thanks, I think!
Currently, the dynamic semantics of axes is defined in
"7.2.2.2 Dynamic semantics of axes"
(http://www.w3.org/TR/2004/WD-xquery-semantics-20040220/#N20773)
You'll notice that the definition of child:: simply returns the
ElementValue content of an element:
________________________________________________________________________
dynEnv |- axis Axis child:: of element ElementName {
AttributeValue,ElementValue } => ElementValue
This rule has several errors. First, the content of an element
always has two parts: a sequence of attribute values followed
by a sequence of non-attribute nodes (i.e., element, text, comment, processing-instruction).
The required corrections are:
1. A production for attribute values:
-------------------------------------
AttributeValues ::= AttributeValue
| (AttributeValues "," AttributeValues)
| ("(" ")")
2. A production for non-attribute element content:
--------------------------------------------------
ElementContent ::= ElementValue
| TextValue
| CommentValue
| ProcessingInstructionValue
| (ElementContent "," Elementcontent)
| ("(" ")")
The FS document once had productions like these, but they have
somehow disappeared. In any case, given these productions, the correct
rule for the child axis is:
________________________________________________________________________
dynEnv |- axis Axis child:: of element ElementName {
AttributeValues,ElementContent } => ElementContent
3. Changes to examples in "2.2.2 Examples of values"
----------------------------------------------------
The examples in this section are out of date.
In particular, they do not reflect the semantics
of elements in the data model, which _always_ contain
other nodes, i.e., they _never_ contain atomic values.
Older versions of the formal semantics, blurred this distinction,
but the final document should not.
The atomic-valued content of an element is a function
of the element's text content and its type annotation
(which is determined during validation). So to illustrate,
the second example in this section should be:
"... After validation, this element is represented as:
element weight of type xs:integer {
attribute xsi:type of type xs:QName {
"xs:integer" of type xdt:untypedAtomic
},
text { "42" }
}
And the typed value of this element is '42 of type xs:integer'
and the typed value of the xsi:type attribute is '"xs:integer" of type xs:QName'.
"
Note that the content of the validated document is still
a text node, but its type annotation is now xs:integer.
Now, finally, back to your original question. Given the above rule,
axis child:: of
element weight of type xs:integer {
text {"42" }
}
==> text {"42"}
Trivially, by the above rule and:
fn:data(
element weight of type xs:integer {
text {"42" }
}
)
==> 42 of type xs:integer
Thanks for reporting the problem.
Mary
> Could someone please enlighten me what the result of the following "axis ...
> of ..." judgement should be?
>
> axis child:: of
> element weight of type xs:integer {
> 42 of type xs:integer
> }
> => ?
>
> My intuition is that this should be text {"42"}. If this is so, could someone
> please point me to the part of the formal semantics where this conversion is
> defined?
>
> Thanks,
> --Stijn Vansummeren
> University of Limburg
> Belgium
--
Mary Fernandez <mff@research.att.com>
AT&T Labs - Research
Received on Thursday, 11 March 2004 14:11:27 UTC