[Home] [By Thread] [By Date] [Recent Entries]
At 2012-09-20 12:02 +0100, Ihe Onwuka wrote:
On Thu, Sep 20, 2012 at 11:47 AM, Michael Kay <mike@xxxxxxxxxxxx> wrote: > > On 20/09/2012 07:13, Ihe Onwuka wrote: >> >> It would seem (somewhat paradoxically) that given the definition of >> position() and last() they could be applied to @* which is >> intrinsically unordered. >> > > Actually, there is a total ordering relation (document order) over all > nodes. It's just that for two attributes of the same element (and indeed, > say, for two elements in different documents) the ordering relation is > implementation-dependent. So it's not correct to say that they are > "intrinsically unordered". They are ordered, but not in a predictable way. > Waking up in North America to find such a long discussion is fascinating ... I think this could have been nipped in the bud early on. Would it not have helped to cite a specification? http://www.w3.org/TR/2004/REC-xml-infoset-20040204/#omitted Appendix D: What is not in the Information Set (normative) The following information is not represented in the current version of the XML Information Set (this list is not intended to be exhaustive): ... 10.The order of attributes within a start-tag. So, the specification on which XPath is based normatively specifies that attributes are not ordered ... it isn't something that you have to "believe". The building of the XPath data model then allows any implementation to build the XPath node tree in any order it wants for the attributes of an element, thus the attribute nodes attached to an element node are built in an arbitrary order. I saw a lot of comments talking about "[1]" and "[last()]" talking about attributes, and I think that is the problem regarding the discussion: The predicate "[1]" and "[last()]" is *not* based on the markup (attributes), but rather is based on the order of nodes in the XPath data model (attribute nodes). An XDM tree is read-only once it is created, thus, the order of nodes in the data model is reliable once the data model is built. And nowhere in the discussion did I see anyone mention that defaulted attributes from the DTD or schema are included in the building of attribute nodes attached to an element ... would that not have messed up any discussion of "[1]" and "[last()]" with respect to specified attributes? If the start tag has three attribute specifications and the schema declaration of the element has an additional two attribute default values, there are five attribute nodes attached to the element. "last()" returns "5", not "3", and "[1]" thus "[last()]" cannot be discussed based only on start tag attribute specifications. I hope this is regarded as helpful, and I apologize in advance if I've missed something already addressing this in the long thread of messages. . . . . . . . . . . Ken -- Contact us for world-wide XML consulting and instructor-led training Free 5-hour lecture: http://www.CraneSoftwrights.com/links/udemy.htm Crane Softwrights Ltd. http://www.CraneSoftwrights.com/s/ G. Ken Holman mailto:gkholman@xxxxxxxxxxxxxxxxxxxx Google+ profile: https://plus.google.com/116832879756988317389/about Legal business disclaimers: http://www.CraneSoftwrights.com/legal
|

Cart



