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 8407 - [XQFTTS] MildNot test cases
Summary: [XQFTTS] MildNot test cases
Status: CLOSED FIXED
Alias: None
Product: XPath / XQuery / XSLT
Classification: Unclassified
Component: Full Text 1.0 (show other bugs)
Version: Candidate Recommendation
Hardware: PC Windows NT
: P2 normal
Target Milestone: ---
Assignee: Jim Melton
QA Contact: Mailing list for public feedback on specs from XSL and XML Query WGs
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2009-12-01 08:51 UTC by Peter M. Fischer
Modified: 2009-12-21 07:36 UTC (History)
1 user (show)

See Also:


Attachments

Description Peter M. Fischer 2009-12-01 08:51:29 UTC
The following cases might be errors in the test suite, related to mildNot:

- FTMildNot-q2/FTMildNot-unconstrained-q2:
$input-context/books/book[para contains text "usability studies" not in "usability"]/title

(against ftbookexample)

The expected result is "Ninja Coder", but I think that the correct result should be empty. "usability studies" is indeed found in the "ninja coder" book, but one of the matches of "usability" is found inside "usability studies", therefore fulfilling the FTMildNot requirement for removing this match from the result.
(I reported this problem in a private mail to Jim Melton before, the answer might have been lost)

- FTMildNot-bad3: The intent of the query seems to generate a StringExclude by using a FTTimes, triggering an error in FTMildNot. 

If I understand the semantics of FTTimes and FTUnaryNot correctly, in this specific case no StringExclude will be generated:
- The FTTimes is applied on the Matches for "ninja", within the search context of $input-context/books/book/para there is only a single Match with a single StringInclude (in the "para" element in the "Ninja Coder" book)

- According to the FTTimes semantics (4.2.6.10 FTTimes),
fts:FormRange((M(S("Ninja"))), 1, 1, $allMatches/@stokenNum) is invoked,

- In FormRange, fts:FormCombinationsAtLeast() is invoked for $times values of 1 and 2, the result of the latter is then negated using FTUnaryNot

- The invocation (denoted as $am1) with $times eq 1 yields M(S("Ninja"))
- The invocation (denoted as $am2) with $times eq 2 yields (), since the number of elements in the match sequence is smaller than $times (and the for clause in FormCombinationsAtLeast will therefore not produce anything)

- FTUnaryNot is applied on $am2 (with the an () value), resulting in an AllMatch containing a match without any StringExcludes or StringIncludes (see 
UnaryNotHelper: if (fn:empty($matches)) then <fts:match/>
Comment 1 Pat Case 2009-12-09 20:35:56 UTC
Hi Peter,

Again, thanks for your help. 

Again, please mark the bug closed or let us know that you remain unsatisfied.

--Responses follow inline:

- FTMildNot-q2/FTMildNot-unconstrained-q2:
$input-context/books/book[para contains text "usability studies" not in
"usability"]/title

(against ftbookexample)

The expected result is "Ninja Coder", but I think that the correct result
should be empty. "usability studies" is indeed found in the "ninja coder" book,
but one of the matches of "usability" is found inside "usability studies",
therefore fulfilling the FTMildNot requirement for removing this match from the
result.
(I reported this problem in a private mail to Jim Melton before, the answer
might have been lost)

--No change. We believe your evaluation is correct for "usability" not in "usability studies", but not for this example "usability studies" not in "usability".  In the latter, "usability studies" must be a part of the match for "usabiity" to exclude the match. That can never be, so Ninja Coder is returned. The MildNot only excludes matches where the first operand is a subset of the second. 

- FTMildNot-bad3: The intent of the query seems to generate a StringExclude by
using a FTTimes, triggering an error in FTMildNot. 

If I understand the semantics of FTTimes and FTUnaryNot correctly, in this
specific case no StringExclude will be generated:
- The FTTimes is applied on the Matches for "ninja", within the search context
of $input-context/books/book/para there is only a single Match with a single
StringInclude (in the "para" element in the "Ninja Coder" book)

- According to the FTTimes semantics (4.2.6.10 FTTimes),
fts:FormRange((M(S("Ninja"))), 1, 1, $allMatches/@stokenNum) is invoked,

- In FormRange, fts:FormCombinationsAtLeast() is invoked for $times values of 1
and 2, the result of the latter is then negated using FTUnaryNot

- The invocation (denoted as $am1) with $times eq 1 yields M(S("Ninja"))
- The invocation (denoted as $am2) with $times eq 2 yields (), since the number
of elements in the match sequence is smaller than $times (and the for clause in
FormCombinationsAtLeast will therefore not produce anything)

- FTUnaryNot is applied on $am2 (with the an () value), resulting in an
AllMatch containing a match without any StringExcludes or StringIncludes (see 
UnaryNotHelper: if (fn:empty($matches)) then <fts:match/>

--Agreed. Thinking the test case was supposed to illustrate this statement in section 3.5.3 [Mild-Not Selection]:
     Operands of a mild-not selection may not contain a full-text
     selection that evaluates to an AllMatches that contains a
     StringExclude. Such full-text selections are not-selection and
     FTWords with a cardinality constraint using 'at most', 'from ... to',
     and 'exactly' occurrences ranges. If such an expression is
     encountered, an error [err:FTDY0017] is raised.
--We replaced the test suite query with:
(: FTMildNot-bad3: mild not with bad argument :)

(: insert-start :)
declare variable $input-context external;
(: insert-end :)

$input-context/books/book[para contains text "blues" occurs exactly 1 times not in "oxford blues""]/title


Pat Case, Library of Congress, for the Full Text Task Force

Comment 2 Peter M. Fischer 2009-12-21 07:36:53 UTC
Dear Pat,

thanks for the clarification. 

Regards,
Peter