diff --git a/modules/registers.xql b/modules/registers.xql index 7b998965..015dd6aa 100644 --- a/modules/registers.xql +++ b/modules/registers.xql @@ -60,7 +60,10 @@ declare function rapi:save($request as map(*)) { let $body := $request?body/*[1] let $type := local-name($body) - let $type := if ($type = 'org') then "organization" else $type + let $type := switch($type) + case "org" return "organization" + case "bibl" return "work" + default return $type let $id := ($body/@xml:id, $request?parameters?id)[1] let $data := rapi:prepare-record($body, $user, $type) @@ -101,6 +104,8 @@ declare function rapi:insert-point($type as xs:string) { collection($config:register-root)/id($root)//tei:listOrg case "term" return collection($config:register-root)/id($root)//tei:taxonomy + case "work" return + collection($config:register-root)/id($root)//tei:listBibl default return collection($config:register-root)/id($root)//tei:listPerson }; @@ -115,8 +120,8 @@ declare function rapi:prepare-record($node as item()*, $resp, $type) { let $id := if ($node/@xml:id=$new) then rapi:next($type) else $node/@xml:id - return - element {node-name($node)} { + return + element {node-name($node)} { (: copy attributes :) for $att in $node/@* except ($node/@xml:id, $node/@resp, $node/@when) return @@ -151,6 +156,8 @@ declare function rapi:next($type) { return collection($config:register-root)/id($config?id)//tei:org[starts-with(@xml:id, $config?prefix)]/substring-after(@xml:id, $config?prefix) case 'term' return collection($config:register-root)/id($config?id)//tei:category[starts-with(@xml:id, $config?prefix)]/substring-after(@xml:id, $config?prefix) + case 'work' + return collection($config:register-root)/id($config?id)//(tei:bibl|tei:biblStruct)[starts-with(@xml:id, $config?prefix)]/substring-after(@xml:id, $config?prefix) default return collection($config:register-root)/id($config?id)//tei:person[starts-with(@xml:id, $config?prefix)]/substring-after(@xml:id, $config?prefix) @@ -230,6 +237,15 @@ declare function rapi:query($type as xs:string, $query as xs:string?) { "id": $term/@xml:id/string(), "label": $term/tei:catDesc/string() } + case "work" return + for $bibl in collection($config:register-root)//tei:bibl[ft:query(tei:title, $query)] + return + map { + "id": $bibl/@xml:id/string(), + "label": $bibl/tei:title[@type="main"]/string(), + "details": ``[`{$bibl/tei:author}`; `{$bibl/tei:note/string()}`]``, + "link": $bibl/tei:ptr/@target/string() + } default return () } catch * { @@ -317,6 +333,16 @@ declare function rapi:create-record($type as xs:string, $id as xs:string, $data {$data?name} + case "work" return + + {$data?name} + { + rapi:process-array($data?firstAuthor, function($item) { + {$item?label} + }) + } + {$data?note} + default return () }; @@ -359,6 +385,7 @@ declare function rapi:local-search-strings($type as xs:string, $entry as element case "place" return $entry/tei:placeName/string() case "organization" return $entry/tei:orgName/string() case "term" return $entry/tei:catDesc/string() + case "work" return $entry/tei:title/string() default return $entry/tei:persName/string() };