- From: <bugzilla@wiggum.w3.org>
- Date: Fri, 07 Jul 2006 16:32:49 +0000
- To: public-qt-comments@w3.org
- CC:
http://www.w3.org/Bugs/Public/show_bug.cgi?id=3439 Summary: MildNot using wrong position info and not extended to properly handle phrases Product: XPath / XQuery / XSLT Version: Working drafts Platform: PC URL: http://www.w3.org/TR/xquery-full-text/#ftmildnot OS/Version: Windows XP Status: NEW Severity: normal Priority: P2 Component: Full Text AssignedTo: jim.melton@acm.org ReportedBy: joaquin.delgado@oracle.com QAContact: public-qt-comments@w3.org In the following function (ApplyFTMildNot) all occurences of @queryPos, which is just the position of the token in the query, should be replaced by fts:tokenInfo/@startPos which corresponds to the match position because that is what is really being compared. However I would argue that comparing the starting position (verifying that all the matches "satisfies $pos1 ne $pos2") is not sufficient. Specially in cases where the word that matches in the first allmatches is not the first word of the phrase in the second allmatches or two phrases are the operands. For example: - FTSelection ("Ford" mildnot "Francis Ford Coppola") - FTSelection ("Ford Mustang" mildnot "Ford Mustang Special Edition") ----------------------------------------------------------------- declare function fts:ApplyFTMildNot ( $allMatches1 as element(fts:allMatches), $allMatches2 as element(fts:allMatches) ) as element(fts:allMatches) { if (fn:count($allMatches2//fts:stringExclude) gt 0) then fn:error("Invalid expression on the right-hand side of a not-in") else <fts:allMatches stokenNum="{$allMatches1/@stokenNum}"> { let $posSet2 := $allMatches2/fts:match/fts:stringInclude/@queryPos return $allMatches1/fts:match[ every $pos1 in ./fts:stringInclude/@queryPos, $pos2 in $posSet2 satisfies $pos1 ne $pos2] } </fts:allMatches> };
Received on Friday, 7 July 2006 16:33:07 UTC