- From: <bugzilla@jessica.w3.org>
- Date: Thu, 03 Jun 2010 08:56:42 +0000
- To: public-qt-comments@w3.org
http://www.w3.org/Bugs/Public/show_bug.cgi?id=9838
Summary: Axes as functions
Product: XPath / XQuery / XSLT
Version: Working drafts
Platform: PC
OS/Version: Windows NT
Status: NEW
Severity: enhancement
Priority: P2
Component: XPath 2.1
AssignedTo: jonathan.robie@redhat.com
ReportedBy: mike@saxonica.com
QAContact: public-qt-comments@w3.org
In meeting 427 there was some discussion about the equivalence of axes and
functions, and I was actioned (A-427-23) to summarize the discussion in a new
Bugzilla entry so that it could be considered as a basis for enhancements for a
future release. The discussion at meeting 427 is minuted at
http://lists.w3.org/Archives/Member/w3c-xsl-query/2010Feb/0189.html
(member-only link): see agendum J4.2.5.
First, we observe that the semantics of axes could be defined in terms of
functions of the form fn:child(node()) -> node()* (for some of the axes, the
cardinality of the return type can be given more precisely than this). Making
the axes available explicitly as functions would have a number of benefits:
(a) semantic clarity: it makes it clear that there's nothing magic about the
semantics of axes
(b) it would make them available for use as function items that could be passed
as parameters to higher-order functions or returned by higher-order functions.
(c) function composition involving axes would no longer require use of the "/"
operator, which has reordering side-effects. For example one could write
map(child#1, descendant(.)) to get the children of the descendants without
reordering. Using function composition rather than path syntax might also be an
attractive option for code generators.
Conversely the path notation a/b/c is attractive from a usability point of view
in comparison with map(c, map(b, a)). It is already possible to use a function
call as a step in a path expression of the form
customer/f:cust-orders(.)/product-code/f:product-for-code(.)/price
However, the asymmetry here between built-in navigational functions (the 13
axes) and user-defined navigational functions is striking. Allowing axis
notation (including node tests) for user-defined navigational steps would add
symmetry. The above could then be written
customer/f:cust-orders::*/product-code/f:product-for-code::*/price
Here I have used a node-test of "*", but of course any node test could be used.
--
Configure bugmail: http://www.w3.org/Bugs/Public/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
Received on Thursday, 3 June 2010 08:56:44 UTC