This is an archived snapshot of W3C's public bugzilla bug tracker, decommissioned in April 2019. Please see the home page for more details.

Bug 7177 - CVS: is-XPath2 in catalog
Summary: CVS: is-XPath2 in catalog
Status: CLOSED FIXED
Alias: None
Product: XML Query Test Suite
Classification: Unclassified
Component: XML Query Test Suite (show other bugs)
Version: unspecified
Hardware: PC Windows NT
: P2 normal
Target Milestone: ---
Assignee: Oliver Hallam
QA Contact: Mailing list for public feedback on specs from XSL and XML Query WGs
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2009-07-30 13:59 UTC by Tim Mills
Modified: 2011-06-14 13:47 UTC (History)
1 user (show)

See Also:


Attachments

Description Tim Mills 2009-07-30 13:59:38 UTC
I have been trying to run those tests marked as is-XPath2 = 'true' in the
XQTS catalog with an XPath 2.0 processor.  Before parsing, I remove variable declarations (and other XQuery prolog statements) between insert-start and insert-end comments.

Unforunately the is-XPath2 flag does not always appear to be correct.  There are
4859 tests marked as is-XPath2 = 'false' which appear to give the same results as if they were run with an XQuery 1.0 processor.  There are also 694 tests which are marked as is-XPath2 = 'true' which don't give the same result, details of which are given below.

Using an XPath 2.0 processor, the following queries give a result different from that given by an XQuery 1.0 processor due to the differences in the StringLiteral grammar between the two languages.

Literals056
Literals057
Literals058 
Literals059
Literals060 
fn-normalize-unicode1args-3
fn-normalize-unicode1args-4
fn-normalize-unicode1args-5
fn-normalize-unicode1args-6
fn-normalize-unicode-1
fn-translate3args-2
surrogates01
surrogates02
surrogates03
surrogates06
surrogates07
surrogates10
surrogates12
surrogates13
surrogates14
surrogates15
fn-iri-to-uri-18
fn-escape-html-uri-20
fn-escape-html-uri-21
fn-matches-27
fn-matches-28
caselessmatch06
caselessmatch07

The following queries give a different error code because XPath 2.0 does not require explicit declaration of variables.

ReturnExpr014 - wrong result for XPath 2.0 (XPDY0002)
ForExpr009 - wrong result for XPath 2.0 (XPDY0002)

The following queries give XPST0081 (undefined namespace prefix).

fn-union-node-args-015
fn-union-node-args-016
fn-union-node-args-017
fn-union-node-args-018
fn-union-node-args-019
fn-union-node-args-020
fn-union-node-args-021
fn-union-node-args-022
fn-intersect-node-args-015
fn-intersect-node-args-016
fn-intersect-node-args-017
fn-intersect-node-args-018
fn-intersect-node-args-019
fn-intersect-node-args-020
fn-intersect-node-args-021
fn-intersect-node-args-022
fn-except-node-args-015
fn-except-node-args-016
fn-except-node-args-017
fn-except-node-args-018
fn-except-node-args-019
fn-except-node-args-020
fn-except-node-args-021
fn-id-5
fn-id-6
fn-id-7
fn-id-8
fn-id-9
fn-id-10
fn-id-11
fn-id-12
fn-id-13
fn-id-14
fn-id-15
fn-id-16
fn-id-17
fn-id-18
fn-id-19
fn-id-20
fn-id-21
fn-data-1
notation-cast-3
casthcds1
casthcds2
casthcds3
casthcds4
casthcds5
casthcds6
casthcds7
casthcds8
casthcds9
casthcds10
casthcds11
casthcds12
casthcds13
casthcds14
casthcds15
casthcds16
casthcds17
casthcds18
casthcds19
casthcds20
casthcds21
casthcds22
casthcds23
casthcds24
casthcds25
casthcds26
casthcds27
casthcds28
casthcds29
casthcds30
casthcds31
casthcds32
casthcds33
casthcds34
casthcds35
casthcds36
casthcds37
casthcds38
casthcds39
casthcds40
casthcds41
casthcds42
value-comparison-3
value-comparison-4
user-defined-5
user-defined-6
user-defined-7
user-defined-8
user-defined-9
user-defined-10

The following queries give XPTY0019 because the implicitly defined variables have type item()* rather than node()* (following the stripping of the XQuery prolog).

ST-Axes001
ST-Axes002
ST-Axes003
ST-Axes004
ST-Axes005
ST-Axes006
ST-Axes007
ST-Axes008
ST-Axes009
ST-Axes010
ST-Axes011
ST-Axes012
ST-Axes013
ST-Axes014
ST-Axes015

The following queries give XPST0003 (syntax error).  Causes include use of node constructors, let expressions, validate expressions and prolog declarations.

Literals005
Literals066
Literals068
Literals069
Parenexpr-15
Parenexpr-16
Parenexpr-20
externalcontextitem-1
internalcontextitem-1
Axes085
Axes086
Axes087
Axes089
axis-err-1
NodeTest006
NodeTest007-1
NodeTest007-2
NodeTest008-1
NodeTest008-2
NodeTest009-1
NodeTest009-2
NodeTest010-1
NodeTest010-2
NodeTest011-1
NodeTest011-2
NodeTest012-1
NodeTest012-2
NodeTest013-1
NodeTesthc-1
NodeTesthc-2
NodeTesthc-3
NodeTesthc-4
NodeTesthc-5
NodeTesthc-6
NodeTesthc-7
NodeTesthc-8
nametest-1
nametest-2
nametest-3
nametest-4
nametest-5
nametest-6
nametest-7
nametest-8
nametest-9
nametest-10
nametest-11
nametest-12
nametest-13
nametest-14
nametest-15
nametest-16
nametest-17
nametest-18
predicates-29
op-boolean-equal-17
fn-prefix-from-qname-5
fn-prefix-from-qname-6
fn-prefix-from-qname-9
fn-prefix-from-qname-10
fn-prefix-from-qname-11
fn-prefix-from-qname-12
fn-prefix-from-qname-13
fn-prefix-from-qname-14
fn-prefix-from-qname-15
fn-prefix-from-qname-16
fn-prefix-from-qname-17
fn-prefix-from-qname-18
fn-prefix-from-qname-19
fn-prefix-from-qname-20
op-logical-and-001
op-logical-and-002
op-logical-and-003
op-logical-and-004
op-logical-and-005
op-logical-and-006
op-logical-and-007
op-logical-and-008
op-logical-and-009
op-logical-and-010
op-logical-and-011
op-logical-and-012
op-logical-and-013
op-logical-and-014
op-logical-and-015
op-logical-and-016
op-logical-and-017
op-logical-and-018
op-logical-and-019
op-logical-and-020
op-logical-and-021
op-logical-and-022
op-logical-and-023
op-logical-and-024
op-logical-and-025
op-logical-and-026
op-logical-and-027
op-logical-and-028
op-logical-and-029
op-logical-and-030
op-logical-and-031
op-logical-and-032
op-logical-and-033
op-logical-and-034
op-logical-and-035
op-logical-and-036
op-logical-and-037
op-logical-and-038
op-logical-and-039
op-logical-and-040
op-logical-and-041
op-logical-and-042
op-logical-and-043
op-logical-and-044
op-logical-and-045
op-logical-and-046
op-logical-and-047
op-logical-and-048
op-logical-and-049
op-logical-and-050
op-logical-and-051
op-logical-and-052
op-logical-and-053
op-logical-and-054
op-logical-and-055
op-logical-and-056
op-logical-and-057
op-logical-and-058
op-logical-and-059
op-logical-and-060
op-logical-and-061
op-logical-and-062
op-logical-and-063
op-logical-and-064
op-logical-and-065
op-logical-and-066
op-logical-and-067
op-logical-and-068
op-logical-and-069
op-logical-and-070
op-logical-and-071
op-logical-and-072
op-logical-and-073
op-logical-and-074
op-logical-and-075
op-logical-and-076
op-logical-and-077
op-logical-and-078
op-logical-and-079
op-logical-and-080
op-logical-and-081
op-logical-and-082
op-logical-and-083
op-logical-and-084
op-logical-and-085
op-logical-and-086
op-logical-and-087
op-logical-and-088
op-logical-and-089
op-logical-and-090
op-logical-and-091
op-logical-and-092
op-logical-and-093
op-logical-and-094
op-logical-and-095
op-logical-and-096
op-logical-and-097
op-logical-and-098
op-logical-and-099
op-logical-and-100
op-logical-and-101
op-logical-and-102
op-logical-and-103
op-logical-and-104
op-logical-and-105
op-logical-and-106
op-logical-and-107
op-logical-and-108
op-logical-and-109
op-logical-and-110
op-logical-and-111
op-logical-and-112
op-logical-and-113
op-logical-and-114
op-logical-and-115
op-logical-and-116
op-logical-and-117
op-logical-and-118
op-logical-and-119
op-logical-and-120
op-logical-and-121
op-logical-and-122
op-logical-and-123
op-logical-and-124
op-logical-and-125
op-logical-and-126
op-logical-and-127
op-logical-and-128
op-logical-and-129
op-logical-and-130
op-logical-and-131
op-logical-and-132
op-logical-and-133
op-logical-and-134
op-logical-and-135
op-logical-and-136
op-logical-and-137
op-logical-and-138
op-logical-and-139
op-logical-and-140
op-logical-and-141
op-logical-and-142
op-logical-and-143
op-logical-and-144
op-logical-and-145
op-logical-and-146
op-logical-and-147
op-logical-and-148
op-logical-and-149
op-logical-and-150
op-logical-and-151
op-logical-and-152
op-logical-and-153
op-logical-and-154
op-logical-and-155
op-logical-and-156
op-logical-and-157
op-logical-and-158
op-logical-and-159
op-logical-or-001
op-logical-or-002
op-logical-or-003
op-logical-or-004
op-logical-or-005
op-logical-or-006
op-logical-or-007
op-logical-or-008
op-logical-or-009
op-logical-or-010
op-logical-or-011
op-logical-or-012
op-logical-or-013
op-logical-or-014
op-logical-or-015
op-logical-or-016
op-logical-or-017
op-logical-or-018
op-logical-or-019
op-logical-or-020
op-logical-or-021
op-logical-or-022
op-logical-or-023
op-logical-or-024
op-logical-or-025
op-logical-or-026
op-logical-or-027
op-logical-or-028
op-logical-or-029
op-logical-or-030
op-logical-or-031
op-logical-or-032
op-logical-or-033
op-logical-or-034
op-logical-or-035
op-logical-or-036
op-logical-or-037
op-logical-or-038
op-logical-or-039
op-logical-or-040
op-logical-or-041
op-logical-or-042
op-logical-or-043
op-logical-or-044
op-logical-or-045
op-logical-or-046
op-logical-or-047
op-logical-or-048
op-logical-or-049
op-logical-or-050
op-logical-or-051
op-logical-or-052
op-logical-or-053
op-logical-or-054
op-logical-or-055
op-logical-or-056
op-logical-or-057
op-logical-or-058
op-logical-or-059
op-logical-or-060
op-logical-or-061
op-logical-or-062
op-logical-or-063
op-logical-or-064
op-logical-or-065
op-logical-or-066
op-logical-or-067
op-logical-or-068
op-logical-or-069
op-logical-or-070
op-logical-or-071
op-logical-or-072
op-logical-or-073
op-logical-or-074
op-logical-or-075
op-logical-or-076
op-logical-or-077
op-logical-or-078
op-logical-or-079
op-logical-or-080
op-logical-or-081
op-logical-or-082
op-logical-or-083
op-logical-or-084
op-logical-or-085
op-logical-or-086
op-logical-or-087
op-logical-or-088
op-logical-or-089
op-logical-or-090
op-logical-or-091
op-logical-or-092
op-logical-or-093
op-logical-or-094
op-logical-or-095
op-logical-or-096
op-logical-or-097
op-logical-or-098
op-logical-or-099
op-logical-or-100
op-logical-or-101
op-logical-or-102
op-logical-or-103
op-logical-or-104
op-logical-or-105
op-logical-or-106
op-logical-or-107
op-logical-or-108
op-logical-or-109
op-logical-or-110
op-logical-or-111
op-logical-or-112
op-logical-or-113
op-logical-or-114
op-logical-or-115
op-logical-or-116
op-logical-or-117
op-logical-or-118
op-logical-or-119
op-logical-or-120
op-logical-or-121
op-logical-or-122
op-logical-or-123
op-logical-or-124
op-logical-or-125
op-logical-or-126
op-logical-or-127
op-logical-or-128
op-logical-or-129
op-logical-or-130
op-logical-or-131
op-logical-or-132
op-logical-or-133
op-logical-or-134
op-logical-or-135
op-logical-or-136
op-logical-or-137
op-logical-or-138
op-logical-or-139
op-logical-or-140
op-logical-or-141
op-logical-or-142
op-logical-or-143
op-logical-or-144
op-logical-or-145
op-logical-or-146
op-logical-or-147
op-logical-or-148
op-logical-or-149
op-logical-or-150
op-logical-or-151
op-logical-or-152
op-logical-or-153
op-logical-or-154
op-logical-or-155
op-logical-or-156
op-logical-or-157
op-logical-or-158
op-logical-or-159
ReturnExpr010
CondExpr006
CondExpr010
CondExpr011
CondExpr012
CondExpr013
CondExpr014
CondExpr015
quantexpr-61
quantexpr-62
quantexpr-63
quantexpr-64
quantexpr-65
CastAs660
CastAs661
CastAs662
CastAs663
CastAs664
CastAs665
CastAs666
CastAs667
CastAs668
CastAs669
CastAs670
CastAs671
CastAs672
CastableAs648
XQueryComment002
XQueryComment009
XQueryComment011
fn-string-1
fn-string-3
fn-base-uri-1
fn-base-uri-22
fn-static-base-2
fn-static-base-3
fn-static-base-4
fn-static-base-5
fn-static-base-6
fn-static-base-7
fn-static-base-8
fn-static-base-9
fn-static-base-10
fn-static-base-11
fn-static-base-12
fn-static-base-13
fn-static-base-14
fn-trace-2
fn-trace-9
fn-string-length-18
fn-normalize-space-2
fn-resolve-uri-2
LocalNameFromQNameFunc006
LocalNameFromQNameFunc007
NamespaceURIFromQNameFunc006
NamespaceURIFromQNameFunc007
fn-name-7
fn-name-23
fn-local-name-1
fn-local-name-23
fn-namespace-uri-1
fn-namespace-uri-26
fn-number-3
fn-number-4
fn-lang-1
fn-root-1
fn-boolean-mixed-args-001
fn-boolean-mixed-args-002
fn-boolean-mixed-args-003
fn-boolean-mixed-args-004
fn-boolean-mixed-args-005
fn-boolean-mixed-args-006
fn-boolean-mixed-args-007
fn-boolean-mixed-args-008
fn-boolean-mixed-args-009
fn-boolean-mixed-args-010
fn-boolean-mixed-args-011
fn-boolean-mixed-args-012
fn-boolean-mixed-args-013
fn-boolean-mixed-args-014
fn-boolean-mixed-args-015
fn-boolean-mixed-args-016
fn-boolean-mixed-args-017
fn-boolean-mixed-args-018
fn-boolean-mixed-args-019
fn-boolean-mixed-args-020
fn-boolean-mixed-args-021
fn-boolean-mixed-args-022
fn-boolean-mixed-args-023
fn-boolean-mixed-args-024
fn-boolean-mixed-args-025
fn-boolean-mixed-args-026
fn-boolean-mixed-args-027
fn-boolean-mixed-args-028
fn-boolean-mixed-args-029
fn-boolean-mixed-args-030
fn-boolean-mixed-args-031
fn-boolean-mixed-args-032
fn-boolean-mixed-args-033
fn-boolean-mixed-args-034
fn-boolean-mixed-args-035
fn-boolean-mixed-args-036
fn-boolean-mixed-args-037
fn-boolean-mixed-args-038
fn-boolean-mixed-args-039
fn-boolean-mixed-args-040
fn-boolean-mixed-args-041
fn-boolean-mixed-args-042
fn-boolean-mixed-args-043
fn-boolean-mixed-args-044
fn-boolean-mixed-args-045
fn-boolean-mixed-args-046
fn-boolean-mixed-args-047
fn-boolean-mixed-args-048
context-item-1
fn-max-3
fn-min-3
fn-id-2
fn-id-22
fn-id-dtd-23
fn-idref-2
fn-idref-22
fn-doc-33
fn-doc-37
position-2
last-2
fn-id-23
qname-cast-2
qname-cast-3
qname-cast-4
user-defined-1
user-defined-2
user-defined-3
user-defined-4
validateexpr-1
validateexpr-2
validateexpr-3
validateexpr-4
validateexpr-5
validateexpr-6
validateexpr-7
validateexpr-8
validateexpr-9
validateexpr-10
validateexpr-11
validateexpr-12
validateexpr-13
validateexpr-14
validateexpr-15
validateexpr-16
validateexpr-16
validateexpr-18
validateexpr-19
validateexpr-20
validateexpr-21
validateexpr-23
tree-queries-results-q4
sgml-queries-results-q1
sgml-queries-results-q2
sgml-queries-results-q4
sgml-queries-results-q5
sgml-queries-results-q8a
sgml-queries-results-q8b
sgml-queries-results-q9
ns-queries-results-q2
ns-queries-results-q3
Catalog001
Catalog002
Catalog003
Comment 1 Oliver Hallam 2009-09-22 12:55:54 UTC
I have started work on reviewing the is-XPath2 attribute on the tests, but there are some cases I where I am not sure what the correct value is.

consider fn-union-node-args-015:

(: insert-start :)
declare namespace atomic="http://www.w3.org/XQueryTest";
declare variable $input-context external;
(: insert-end :)

($input-context/atomic:root/atomic:integer) union ($input-context/atomic:root/atomic:integer)

If we merely strip the prolog then this is a valid XPath2 expression, but in order to evaluate the query then the namespace declaration must be added as an in-scope namespace.

The three options I can see are:
 1.  Set is-XPath2 to false
 2.  Require an XPath2 test harness to parse the (XQuery) prolog that appears between (: insert-start :) and (: insert-end :) - Is this a resonable burden to place on an XPath2 test runner?
 3.  Add the required namespace declarations and so on to the catalog. (This would just be duplicating the information - will this cause more trouble than it is worth?

(Is it even valid to have a namespace declaration in the insert-start/insert-end section? - this is not mentioned in the guidelines for running the test suite.)


The other case that I am unsure how to mark up is the tests that are valid XPath2 but return different results, for example literals056 ("&").  I would argue that this is an important test and so should be marked as is-XPath2.  However there is no standard way of recording these alternate results.  I would suggest adding the is-XPath2 attribute to output-file as well and mark it up as such:

   <test-case is-XPath2="true" name="Literals056"
              FilePath="Expressions/PrimaryExpr/Literals/"
              scenario="standard"
              Creator="Mike Rorke">
      <description>Test for string literal containing the predefined entity reference '&amp;amp;'.</description>
      <spec-citation spec="XQuery" section-number="3.1.1" section-title="Literals"
                     section-pointer="id-literals"/>
      <query name="Literals056" date="2005-02-03"/>
      <input-file role="principal-data" variable="input-context">emptydoc</input-file>
      <output-file is-XPath2="false" role="principal" compare="Text">Literals056.txt</output-file>
      <output-file is-XPath2="true" role="principal" compare="Text">Literals056-XPath.txt</output-file>
   </test-case>


Does anyone else have an opinion on which resolution is best?
Comment 2 Oliver Hallam 2010-02-26 18:43:12 UTC
I have updated all the is-XPath2 attributes, marking tests as true that are valid XPath 2.0 tests (when stripping the content between (: insert-start :) and (: insert-end :)) and that give the same result under XPath and XQuery.

The tests that could be made XPath compatible have for the moment been marked as false.

I am marking this bug closed.
Comment 3 Tim Mills 2011-06-09 07:43:01 UTC
abbreviatedSyntax-26, which includes a 'let' expression is incorrectly marked as is-XPath2 = "true".
Comment 4 Oliver Hallam 2011-06-13 14:42:49 UTC
I have made this change
Comment 5 Tim Mills 2011-06-14 13:47:15 UTC
Confixed fixed.