This is an archived snapshot of W3C's public bugzilla bug tracker, decommissioned in April 2019. Please see the home page for more details.
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/>
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
Dear Pat, thanks for the clarification. Regards, Peter