@@ -11,12 +11,17 @@ xquery version "4.0";
1111
1212module namespace del_coll = "backend/update/delete_collection" ;
1313
14+ import module namespace functx = 'http://www.functx.com' ;
1415import module namespace utils_dots = "utils_dots" ;
1516import module namespace G = "globals" ;
1617import module namespace del_doc = "backend/update/delete_document" ;
18+ import module namespace resources = "backend/resources_register_builder" ;
19+ import module namespace fragments = "backend/fragments_register_builder" ;
1720
1821declare default element namespace "https://github.com/chartes/dots/" ;
1922
23+ declare namespace tei = "http://www.tei-c.org/ns/1.0" ;
24+
2025(:~ This function allows deleting a collection from the DTS resource registry in the BaseX database.
2126: It removes the collection node, updates the parent collection's child count,
2227: handles child documents (deletion or reassignment), and updates the DoTS switcher.
@@ -26,14 +31,14 @@ declare default element namespace "https://github.com/chartes/dots/";
2631: if false, reassign them to the parent collection
2732: @return database updates (delete node, update attributes, trigger document deletion or reassignment)
2833:)
29- declare updating function del_coll:handleDeleteColl ($dbName as xs:string, $collectionId as xs:string, $option as xs:boolean ) {
34+ declare updating function del_coll:handleDeleteColl ($dbName as xs:string, $collectionId as xs:string, $option) {
3035 let $collection := db:get ($dbName, $G:resourcesRegister)//member/collection[@dtsResourceId = $collectionId]
3136 let $docInColl := db:get ($dbName, $G:resourcesRegister)//member/document [tokenize (@parentIds) = $collectionId]
3237 let $parentId := $collection/@parentIds
3338 return
3439 (
3540 delete node $collection,
36- del_coll:changeParentTotalChildren ($dbName, $parentId, count ($docInColl)),
41+ del_coll:changeParentTotalChildren ($dbName, $parentId, if ($option = "true" ) then 0 else count ($docInColl)),
3742 del_doc:updateSwitcherDots ($dbName, $collectionId)
3843 )
3944};
@@ -62,22 +67,52 @@ declare updating %private function del_coll:changeParentTotalChildren($dbName as
6267 : @param $option boolean: true = delete documents; false = reassign to parent
6368 : @return database updates (delete or reassign documents)
6469:)
65- declare updating function del_coll:handleDocInColl ($dbName as xs:string, $collectionId as xs:string, $option as xs:boolean) {
70+ declare updating function del_coll:handleDocInColl ($dbName as xs:string, $collectionId as xs:string, $option) {
71+ let $csv := resources:getCSV-map ($dbName, "fragment" )
6672 for $document in db:get ($dbName, $G:resourcesRegister)//document [tokenize (@parentIds) = $collectionId]
6773 let $resourceId := $document/@dtsResourceId
6874 let $pathDoc := utils_dots:findPath ($dbName, $resourceId)
6975 let $parentDoc := $document/@parentIds
7076 let $parentCollId := db:get ($dbName, $G:resourcesRegister)//collection[@dtsResourceId = $collectionId]/@parentIds
7177 return
72- (
73- replace value of node $parentDoc with replace ($parentDoc, $collectionId, $parentCollId),
74- db:delete ($dbName, $pathDoc),
75- db:put ($dbName, $document, replace ($pathDoc, concat ($collectionId, "/" ), "/" ))
76- )
78+ if ($option = "true" )
79+ then
80+ (
81+ delete node $document,
82+ delete nodes db:get ($dbName, $G:fragmentsRegister)//fragment[@resourceId = $resourceId],
83+ db:delete ($dbName, $pathDoc)
84+ )
85+ else
86+ (
87+ delete nodes db:get ($dbName, $G:fragmentsRegister)//fragment[@resourceId = $resourceId],
88+ replace value of node $parentDoc with replace ($parentDoc, $collectionId, $parentCollId),
89+ db:delete ($dbName, $pathDoc),
90+ db:put ($dbName, utils_dots:findPathDoc ($dbName, $resourceId), replace ($pathDoc, concat ($collectionId, "/" ), "/" )),
91+ del_coll:addFragInReg ($dbName, $resourceId, utils_dots:getDocument ($dbName, $resourceId), $csv)
92+ )
7793};
7894
79-
80-
95+ (:~ Update function to add `<fragment/>` nodes to the fragments register (`dots/fragments_register`).
96+ : @param $dbName db name
97+ : @param $docPath absolute path to the document to add
98+ : @return sequence of <fragment/> nodes
99+ :)
100+ declare updating %private function del_coll:addFragInReg ($dbName as xs:string, $resourceId as xs:string, $document, $csv) {
101+ let $maxCiteDepth := fragments:getMaxCiteDepth ($document//tei:refsDecl, 0 )
102+ for $citeStructurePosition in $document//tei:refsDecl/tei:citeStructure
103+ return
104+ let $fragments_register := db:get ($dbName, $G:fragmentsRegister)//member
105+ let $fragment := fragments:handleCiteStructure ($dbName, $document, "" , $citeStructurePosition, 1 , $resourceId, "" , "" , $maxCiteDepth, $csv)
106+ let $oldFragments := $fragments_register/fragment[@resourceId = $resourceId]
107+ return
108+ if ($oldFragments)
109+ then
110+ (
111+ delete nodes $oldFragments,
112+ insert node $fragment as last into $fragments_register
113+ )
114+ else insert node $fragment as last into $fragments_register
115+ };
81116
82117
83118
0 commit comments