diff --git a/modules/registers.xql b/modules/registers.xql
index 9cd8eae7..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
};
@@ -116,10 +121,7 @@ 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
- typeswitch($node)
- case element(tei:person)
- return
- element {node-name($node)} {
+ element {node-name($node)} {
(: copy attributes :)
for $att in $node/@* except ($node/@xml:id, $node/@resp, $node/@when)
return
@@ -134,27 +136,6 @@ declare function rapi:prepare-record($node as item()*, $resp, $type) {
for $child in $node/node()
return $child
}
- case element(tei:place)
- return
- element {node-name($node)} {
- (: copy attributes :)
- for $att in $node/@* except ($node/@xml:id, $node/@resp, $node/@when)
- return
- $att
- ,
- attribute xml:id {$id}
- ,
- attribute when {format-date(current-date(), '[Y]-[M,2]-[D,2]')}
- ,
- attribute resp {$resp}
- ,
- for $child in $node/node()
- return $child
- }
- (: all the rest pass it through :)
- default
- return $node
-
};
(:~
@@ -171,6 +152,12 @@ declare function rapi:next($type) {
switch ($type)
case 'place'
return collection($config:register-root)/id($config?id)//tei:place[starts-with(@xml:id, $config?prefix)]/substring-after(@xml:id, $config?prefix)
+ case 'organization'
+ 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)
@@ -179,7 +166,7 @@ declare function rapi:next($type) {
try {
xs:integer($last) + 1
} catch * {
- '_error'
+ 1
}
return $config?prefix || rapi:pad($next, 6)
@@ -250,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 * {
@@ -337,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
()
};
@@ -379,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()
};