teacup/tile-search.xqm

41 lines
2.7 KiB
Plaintext

import module namespace config = 'http://www.rave-tech.com/bloomsbury/config' at './module/config.xqm';
let $title := ''
let $ctype := 'monograph'
let $dbname := string-join((
if(fn:contains($ctype,$config:Audio) or fn:contains($ctype,$config:Video) or
fn:contains($ctype,$config:Person) or fn:contains($ctype,$config:Publisher) or
fn:contains($ctype,$config:Organisation) or fn:contains($ctype,$config:Series) or
fn:contains($ctype,$config:Image))
then $config:MetadataOnlyContentDatabase else(),
if(fn:contains($ctype,$config:playDatabase)) then $config:playDatabase else(),
if(fn:contains($ctype,$config:MonographDatabase)) then $config:MonographDatabase else(),
if(fn:contains($ctype,$config:LooseleafDatabase)) then $config:LooseleafDatabase else(),
if(fn:contains($ctype,$config:screenplayDatabase)) then $config:screenplayDatabase else()
),'|')
for $db in db:list()[if($ctype!='') then fn:matches(.,fn:concat('^',$dbname,'$'),'i') else fn:not(fn:contains(.,'bloomsbury') or fn:contains(.,$config:OnixDB) or fn:contains(.,$config:ContentManagementDatabase) or fn:contains(.,$config:AuditDatabase) or fn:contains(.,$config:ContentMetadataDatabse))]
for $uri in db:open($db)[not(name(/*)='info')]
[fn:not( fn:contains(.,$config:InfoXml)
or fn:contains(.,$config:VersionDir)
or fn:contains(.,$config:VersionControlFileName)
)
] /*[if($title!='')
then(
if(fn:starts-with($title,'"'))
then
if(/*:TEI/*:text/*:body//*:div[@type="play"]/*:head//text())
then (/*:TEI/*:text/*:body//*:div[@type="play"]/*:head//text()[. contains text {$title} phrase])
else if(/*/*:item_title)
then (/*/*:item_title)//text()[. contains text {$title} phrase]
else (/*:book/*:info/*:title)//text()[. contains text {$title} phrase]
else(
if(/*:TEI/*:text/*:body//*:div[@type="play"]/*:head//text())
then (/*:TEI/*:text/*:body//*:div[@type="play"]/*:head//text()[. contains text {$title} all words])
else if(/*/*:item_title)
then (/*/*:item_title)//text()[. contains text {$title} all words]
else (/*:book/*:info/*:title)//text()[. contains text {$title} all words]
))
else *
]/base-uri()[if(fn:contains(.,$config:MetadataOnlyContentDatabase)) then fn:matches(fn:tokenize(.,'/')[3],$ctype,'i') else fn:matches(fn:tokenize(.,'/')[2],$ctype,'i')]
return $uri