- From: <bugzilla@wiggum.w3.org>
- Date: Tue, 03 Jan 2006 18:06:23 +0000
- To: public-qt-comments@w3.org
- Cc:
http://www.w3.org/Bugs/Public/show_bug.cgi?id=2634 Summary: [XPath] Comparing QNames Product: XPath / XQuery / XSLT Version: Candidate Recommendation Platform: PC OS/Version: Windows XP Status: NEW Severity: normal Priority: P2 Component: XPath AssignedTo: chamberl@almaden.ibm.com ReportedBy: mike@saxonica.com QAContact: public-qt-comments@w3.org There are many places in the language where we compare QNames. We have two different ways of comparing QNames: by codepoint-comparison, and using the default collation. We either need to converge on a single way of comparing QNames, or we need to be very explicit which method is used on every occasion that the need for comparison arises. Where a QName is used as a NameTest in a path expression, we are explicit that codepoint comparison is used. Where the eq operator is used to compare two values of type xs:QName, we are explicit that the default collation is used. In many other cases we are imprecise. Here are some examples from XPath; there are many more examples of similarly fuzzy language in XSLT and XQuery: XPath 3.1.2: "Two variable references are equivalent if their local names are the same..." XPath 3.1.5: "If the expanded QName and number of arguments in a function call do not match the name and arity of a function signature..." XPath 2.5.4: "As usual, two expanded QNames are equal if their local parts are the same and their namespace URI's are the same. " (!) XPath 2.5.4.4: "the name of the candidate node is customer " XPath 2.5.4.5: "attribute(AttributeName) matches any attribute node whose name is AttributeName," It's my belief that in all the above cases, the intent is actually to use codepoint comparison on both the URI and the local-name. So the real question that arises is, why do we have an "eq" operator on QNames that does something different? What purpose does it serve? If we defined "eq" to use codepoint comparison, then all the comparisons we perform in the language could be specified to use the semantics of "eq"; and moreover, people doing queries on stylesheets or schemas that make extensive use of QNames-in-content would get the right answer. Michael Kay
Received on Tuesday, 3 January 2006 18:06:34 UTC