Re: elements with children vs typed-value

Per,

The data model specifies only one kind of element node.
The reason for the two constructors is the following:
Element-complex-node could be used to create a data model
representation of a source document or elements constructed
by XQuery that have no enclosed expressions.
Element-simple-node can be used to create a representation
of a constructed element containing enclosed expressions.

E.g. assuming that price is declared to be an element of type
xs:decimal, the first constructor would be used to create a
representation of the fragment <price>95.99</price> in a source
document, but the second constructor would be used to deal
with the XQuery constructor <price>{95.99}</price>.
In both cases the element constructed has
 typed-value:  simple-typed-value(95.99,xs:decimal)
 children:     text("95.99")
 string-value: "95.99"

The first examples of 2.8.1 and 2.8.2 both use constants, i.e.
there is no expression enclosed in the xml tags. Hence they
can both be mapped to element-complex-node, although that
mapping is not spelled out precisely.
We plan to include a more precise mapping to the appropriate
constructors in the next version of the XQuery document, including
some resolutions to the currently open issues mentioned in the
Ed Notes.

children(<foo>{(3,4,5)}</foo>) returns text("3 4 5").
(Children can only return nodes, never simple typed values.)
This foo element can be constructed with element-simple-node,
since it contains enclosed expressions. Consequently the children
accessor returns a single text node containing the string
representation of the sequence of simple typed values, i.e.
"3 4 5". Supposedly the user plans to use something like this
with a schema that declares foo to be an element whose type is
list of integers.

I hope this explanation helps.

Best regards,
Marton Nagy
XML Query WG


> From: Per Bothner [mailto:per@bothner.com] 
> Sent: Wednesday, February 27, 2002 12:39 AM 
> To: www-xml-query-comments@w3.org 
> Subject: elements with children vs typed-value 
> 
> [I gather, from the Ed Notes in 2.8.1 the Query Language draft of 12/20 
> that these are known issue, but I'm hoping to get a feel for current 
> thinking - and perhaps suggest my own.) 
> 
>  From my reading of the XQuery Data Model document, there seems to be 
> two 
> distict non-overlapping kinds of element:  Nodes that have children and 
> nodes that have a typed-value.  Specifically, the 'children' propery can 
> never include a SimpleTypedValue and the 'typed-value' property can 
> never include a Node.  Correspondingly, the Data Model specifies two 
> differet constructors:  element-complex-node (takes a sequence of Nodes) 
> and element-simple-node (takes a sequence of SimpleTypedValue). 
> 
> However, this seems inconsistent with the Language specification, where 
> the specification of element constructors is unclear and does not 
> indicate which of element-complex-node and element-simple-node is 
> used when.  Specifically, the first example in 2.8.2 uses "Crockett" 
> and the content, which is a string, whlle the earlier example it claims 
> to be the same presumably has Crockett as a text node. 
> 
> Specifically, what is the result of evaluating the following: 
> children(<foo>{3,4,5}</foo>) 
> The intuitive answer is that it should evaluate to the sequence 
> (3,4,5) 
> However, that is not allowed by the specification.  It would require 
> us to change the children property to a be an arbitrary sequence 
> of simple values, or comment, element, process-instruction, or 
> text nodes.  I must confess that I don't have a good picture of 
> the complications, including compatibility issues, but it does seem 
> to be the most natural model.  Altenatively, the result could be: 
> text("3 4 5") 
> or it could be the empty sequence (if element-simple-node is used 
> to construct the node). 
> -- 
>         --Per Bothner 
> per@bothner.com   http://www.bothner.com/per/ 
>

Received on Friday, 1 March 2002 02:52:14 UTC