- From: <bugzilla@jessica.w3.org>
- Date: Thu, 24 Feb 2011 16:09:38 +0000
- To: public-qt-comments@w3.org
http://www.w3.org/Bugs/Public/show_bug.cgi?id=12036
--- Comment #2 from Tim Mills <tim@cbcl.co.uk> 2011-02-24 16:09:38 UTC ---
The following XQuery functions offer a description as to how thesaurus option
levels could work. They assume the format of thesaurus used in XQFTTS.
Negative levels are normalized to 0.
Ranges from $n to $m where $n > $m is normalized to $n to $n.
declare namespace t = "http://www.w3.org/2007/xqftts/thesaurus";
(: Helper funciton. Expand each word in words exactly one level :)
declare function local:expand-one-level($words as xs:string*,
$thesaurus as node(),
$relationship as xs:string)
as xs:string*
{
distinct-values(
$thesaurus/t:thesaurus/t:entry[t:term = $words]/t:synonym[t:relationship eq
$relationship]/t:term)
};
(: Helper funciton. Expand each word in words exactly $n levels :)
declare function local:expand-n-levels($words as xs:string*,
$thesaurus as node(),
$relationship as xs:string,
$n as xs:integer)
as xs:string*
{
if ($n eq 0)
then $words
else let $expansions := local:expand-one-level($words,
$thesaurus,
$relationship)
return local:expand-n-levels($expansions,
$thesaurus,
$relationship,
$n - 1)
};
(: Helper funciton. Constrain level values to be non-negative integers :)
declare function local:constrain-level($level as xs:integer)
as xs:integer
{
if ($level lt 0)
then 0
else $level
};
(: Helper funciton. Repeatedly expand $words until a fixed point is reached :)
declare function local:expand-to-infinity($words as xs:string*,
$thesaurus as node(),
$relationship as xs:string)
as xs:string*
{
let $next-level := for $word in $words
return local:expand-exactly($word,
$thesaurus,
$relationship,
1)
let $expansion := distinct-values(($next-level, $words))
return if (count($words) eq count($expansion))
then $words
else local:expand-to-infinity($expansion,
$thesaurus,
$relationship)
};
(: Expand $word exactly $n levels :)
declare function local:expand-exactly($word as xs:string,
$thesaurus as node(),
$relationship as xs:string,
$n as xs:integer)
as xs:string*
{
let $level := local:constrain-level($n)
return local:expand-n-levels($word,
$thesaurus,
$relationship,
$level)
};
(: Expand $word from $from to $to levels :)
declare function local:expand-from-to($word as xs:string,
$thesaurus as node(),
$relationship as xs:string,
$from as xs:integer,
$to as xs:integer)
as xs:string*
{
let $lower := local:constrain-level($from)
let $upper := max(($lower, local:constrain-level($to)))
return distinct-values(for $level in $lower to $upper
return local:expand-exactly($word,
$thesaurus,
$relationship,
$level))
};
(: Expand $word at most $n levels :)
declare function local:expand-at-most($word as xs:string,
$thesaurus as node(),
$relationship as xs:string,
$n as xs:integer)
as xs:string*
{
local:expand-from-to($word,
$thesaurus,
$relationship,
0,
$n)
};
(: Expand $word at least $n levels :)
declare function local:expand-at-least($word as xs:string,
$thesaurus as node(),
$relationship as xs:string,
$n as xs:integer)
as xs:string*
{
let $initial := local:expand-exactly($word,
$thesaurus,
$relationship,
$n)
return local:expand-to-infinity($initial,
$thesaurus,
$relationship)
};
(: Expand $word when no range expression specified :)
declare function local:expand-default($word as xs:string,
$thesaurus as node(),
$relationship as xs:string)
as xs:string*
{
local:expand-at-least($word,
$thesaurus,
$relationship,
0)
};
--
Configure bugmail: http://www.w3.org/Bugs/Public/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
Received on Thursday, 24 February 2011 16:09:40 UTC