Skip to content
Draft

26 q2 #631

Show file tree
Hide file tree
Changes from 75 commits
Commits
Show all changes
78 commits
Select commit Hold shift + click to select a range
50d01f9
small code improvements
dariok Apr 20, 2026
d037dd4
minor errors
dariok Apr 21, 2026
4de7afe
remove XString
dariok Apr 21, 2026
670ec66
Support versions of REST URLs
dariok Apr 22, 2026
0bc767f
[REST2] search: search in collection (1st pass)
dariok Apr 22, 2026
6827042
[REST2] search: JS from search.html uses new endpoint for collection …
dariok Apr 22, 2026
ac63d7c
[REST2] make API definition more consistent
dariok Apr 22, 2026
6257d3b
[REST2] resources byPid now returns HTTP 303
dariok Apr 22, 2026
82223f5
[REST"] fts search within a file
dariok Apr 25, 2026
926747f
[REST2] wrapper function to return a uniform result element
dariok Apr 25, 2026
bf04a20
[REST2] search Store results in session and re-use
dariok Apr 25, 2026
879024d
[REST2] search include KWIC and path info in file results
dariok Apr 25, 2026
8045aed
[REST2] search simplfied index defintion
dariok Apr 25, 2026
0c3a617
wdbFiles: “kind” → “type”
dariok Apr 26, 2026
5fab5ba
simple call graph
dariok Apr 26, 2026
d5b4aec
[REST2] search uniform creation of results for both stored and new
dariok Apr 27, 2026
d3d9ec7
[REST2] search search page makes use of new API
dariok Apr 27, 2026
c3fac08
a full recreation of the project+file indexes required re-indexing
dariok May 7, 2026
9d33b3c
[REST2] must explicitly call authorization in routing definition
dariok May 7, 2026
a15d13a
fix multiple errors introduced by an S+R operation
dariok May 7, 2026
486d0bc
wdb.report: always print trace to console (except for success messages)
dariok May 7, 2026
eac9e4a
explicitly set headers for CORS-Preflight as Jetty will not pass OPTI…
dariok May 10, 2026
27ff9ac
[REST2] admin uploads now use the new API
dariok May 10, 2026
65c04d1
[REST2] check project creation and all uploads work as expected
dariok May 10, 2026
64cce3a
[REST2] upload: when creating a collection, set owner
dariok May 10, 2026
cc24531
[Install] set owner of `data` as wdb:wdbusers
dariok May 10, 2026
2a595b0
some refactoring on post-install.xql
dariok May 10, 2026
05c3ca1
model.xqm: map kex "mainEd" must contain the ID of the main ed
dariok May 10, 2026
fe2b221
[REST2] search now uses new API via AJAX
dariok May 11, 2026
d51c6ff
app:applySpecificXsl must use main project’s resources
dariok May 11, 2026
84c9aa1
nav.xsl: additional way of parsing numbering to order entries
dariok May 11, 2026
20d5671
bump node dependencies
dariok May 11, 2026
790a85f
some code maintenance
dariok May 11, 2026
cbcc44f
some cleaning in controller
dariok May 12, 2026
86ae54c
installation dependency of roaster updated to v. 1.11.0
dariok May 12, 2026
8e324ec
cleanup post-install.xql: XString has been removed
dariok May 12, 2026
46e8269
index definitions: simplify defintions
dariok May 12, 2026
c837619
wdb:getXslFromWdbMeta(): do not throw error if no process is found
dariok May 12, 2026
c4ebecd
function.xqm: adjust error message
dariok May 13, 2026
d5cc3b9
wdb-process.xqm: add a missing return statement
dariok May 13, 2026
ba55dab
[REST2] resources: list of views must include ancestor wdbmeta
dariok May 13, 2026
7c34874
[REST2] projects adjustments for process inheritance
dariok May 13, 2026
d8e0f1e
typos
dariok May 13, 2026
498b549
use new API to load navigation
dariok May 13, 2026
4818e82
make names for API meta files uniform
dariok May 13, 2026
edbe9cb
[REST2] uniform URL creation via map
dariok May 18, 2026
3af2434
[REST2] list of resources is only available as XML or JSON
dariok May 18, 2026
e02c0f4
[REST2] cleanup in media type handling
dariok May 18, 2026
da5cda7
Use URLSearchParams()
dariok May 18, 2026
1eeb4d5
[REST2] build URL only once in function.js
dariok May 19, 2026
881f7fd
use URL() API to construct URLs
dariok May 19, 2026
be3c2b5
toggleNavigation now uses new API
dariok May 19, 2026
4f39efc
admin.js uses URL() API and wdb.restUrl
dariok May 19, 2026
2a2b84f
Bump Mocha to 11.7.6
dariok May 19, 2026
e7a473f
login via roaster does not need Basic Auth headers
dariok May 19, 2026
245bb43
admin.js: assume we’re not proxied
dariok May 19, 2026
7d39040
set owner and permissions only in a file is newly created
dariok May 19, 2026
ba1724d
update licence in repo.xml to match the one stated in the git repo
dariok May 19, 2026
05df0aa
Create group "wdbadmin" in post-install
dariok May 19, 2026
7bdb949
support to process a sequence of meta:commands
dariok May 20, 2026
c041696
remove scaffolding
dariok May 20, 2026
176411c
process selection now makes use of process/command/steps
dariok May 20, 2026
f75499e
extend generic wdbmeta files to match multistep-processing requirements
dariok May 20, 2026
88e5809
remove unused util:log() with undeclared var
dariok May 20, 2026
bcb658d
use correct model keys for Accept header
dariok May 20, 2026
78a444e
[REST2] projects Fix evaluation of paths for file uploads
dariok May 20, 2026
9ec4fe3
[REST2] resources fix tests
dariok May 20, 2026
3ccfcad
adjust creation of filename and path to changed endpoint
dariok May 20, 2026
1be8530
additional tests
dariok May 20, 2026
7324afd
fix wrong comparison
dariok May 20, 2026
f3bb637
more general headers for OPTIONS requests
dariok May 20, 2026
6613294
remove inline-JS
dariok May 21, 2026
2223588
change REST2 base to simply `.../edoc`
dariok May 21, 2026
b23b008
resource views: traverse up to data withou imports
dariok May 21, 2026
dfffb12
[REST2] resources views: show views only once
dariok May 21, 2026
8db248d
apiv2.html has been renamed to v2.html
dariok May 21, 2026
0bbece7
use 'numberingTitle' when adding a view element
dariok May 21, 2026
c3501d6
remove always-on error logging
dariok May 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,4 @@ edoc/rest2/v2.json
# node-reladted stuff
node_modules/

.codex
3 changes: 0 additions & 3 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
[submodule "edoc/include/xstring"]
path = edoc/include/xstring
url = https://github.com/dariok/XStringUtils
[submodule "edoc/include/wdbmeta"]
path = edoc/include/wdbmeta
url = https://github.com/dariok/wdbmeta
File renamed without changes.
2 changes: 1 addition & 1 deletion edoc/admin/global.xqm
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ declare namespace meta = "https://github.com/dariok/wdbplus/wdbmeta";
declare namespace system = "http://exist-db.org/xquery/system";

declare function wdbGS:getRest ( $node as node(), $model as map(*) ) as element(meta) {
<meta name="rest" content="{ $config:restURL }" />
$config:restMetaElement
};

declare function wdbGS:body ( $node as node(), $model as map(*) ) {
Expand Down
6 changes: 4 additions & 2 deletions edoc/admin/project-template/wdbmeta.xml
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,12 @@
<files></files>
<processes>
<process target="html">
<command type="xsl">resources/xsl/tei-transcript.xsl</command>
<command>
<step type="xsl">resources/xsl/tei-transcript.xsl</step>
</command>
</process>
</processes>
<struct>
<import path="../wdbmeta.xml" />
</struct>
</projectMD>
</projectMD>
22 changes: 13 additions & 9 deletions edoc/admin/projects.xqm
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import module namespace config = "https://github.com/dariok/wdbplus/config" at
import module namespace sm = "http://exist-db.org/xquery/securitymanager";
import module namespace wdbFiles = "https://github.com/dariok/wdbplus/files" at "../modules/wdb-files.xqm";
import module namespace wdbs = "https://github.com/dariok/wdbplus/stats" at "../modules/stats.xqm";
import module namespace xstring = "https://github.com/dariok/XStringUtils" at "../include/xstring/string-pack.xql";

declare namespace meta = "https://github.com/dariok/wdbplus/wdbmeta";
declare namespace tei = "http://www.tei-c.org/ns/1.0";
Expand All @@ -29,8 +28,10 @@ declare function wdbPL:body ( $node as node(), $model as map(*) ) {
let $metaFile := doc($metaPath)

let $relativePath := substring-after($file, $model?pathToEd || '/')
let $subColl := xstring:substring-before-last($file, '/')
let $resource := xstring:substring-after-last($file, '/')
let $subColl := if (starts-with($file, '/'))
then '/' || string-join(tokenize(normalize-space($file), '/')[position() lt last()], '/')
else string-join(tokenize(normalize-space($file), '/')[position() lt last()], '/')
let $resource := tokenize(normalize-space($file), '/')[last()]
let $fileEntry := $metaFile//meta:file[@path = $relativePath]
let $xml := doc($file)

Expand Down Expand Up @@ -187,7 +188,7 @@ declare %private function wdbPL:getFileStat( $model as map(*), $id as xs:string
<td>Eintrag in <i>wdbmeta.xml</i> vorhanden?</td>
{if ($entry/@path != '')
then <td>OK</td>
else <td>fehlt <a href="javascript:job('add', '{$id}')">hinzufügen</a></td>
else <td>fehlt <button data-job="add" data-id="{$id}">hinzufügen</button></td>
}
</tr>
{if ($entry/@path != '')
Expand All @@ -196,28 +197,31 @@ declare %private function wdbPL:getFileStat( $model as map(*), $id as xs:string
<td style="border-top: 1px solid black;">UUID in wdbMeta</td>
{if ($entry/@uuid = $uuid)
then <td>OK: {$uuid}</td>
else <td>{normalize-space($entry/@uuid)}<br/><a href="javascript:job('uuid', '{$id}')">UUID aktualisieren</a></td>
else <td>{normalize-space($entry/@uuid)}
<br/><button data-job="uuid" data-id="{$id}">UUID aktualisieren</button></td>
}
</tr>,
<tr>
<td>externe PID</td>
<td>{if ($entry/@pid = $pid)
then "OK: " || string($entry/@pid)
else <a href="javascript:job('pid', '{$id}'">PID aus Datei übernehmen</a>
else <button data-job="pid" data-id="{$id}">PID aus Datei übernehmen</button>
}</td>
</tr>,
<tr>
<td>Timestamp in wdbMeta</td>
{if ($entry/@date = $date)
then <td>OK: {$date}</td>
else <td>{normalize-space($entry/@date)}<br/><a href="javascript:job('date', '{$id}')">Timestamp aktualisieren</a></td>
else <td>{normalize-space($entry/@date)}
<br/><button data-job="date" data-id="{$id}">Timestamp aktualisieren</button></td>
}
</tr>,
<tr>
<td><code>@xml:id</code> in wdbMeta</td>
{if ($entry/@xml:id = $doc/tei:TEI/@xml:id)
then <td>OK: {$entry/@xml:id/string()}</td>
else <td>{normalize-space($entry/@xml:id)}<br/><a href="javascript:job('id', '{$id}')">ID aktualisieren</a></td>
else <td>{normalize-space($entry/@xml:id)}
<br/><button data-job="id" data-id="{$id}">ID aktualisieren</button></td>
}
</tr>
)
Expand Down Expand Up @@ -303,7 +307,7 @@ declare %private function wdbPL:getFileStat( $model as map(*), $id as xs:string
if ($status = 'Kein Struktureintrag') then
$status
else
let $link := <a href="javascript:job('private', '{ $id }')">umschalten</a>
let $link := <button data-job="private" data-id="{ $id }">umschalten</button>
return ($status, <br/>, $link)
}</td>
</tr>
Expand Down
2 changes: 1 addition & 1 deletion edoc/config.xml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@

<!-- Full path for the instance’s REST base URL -->
<rest version="1">http://localhost:8080/exist/restxq/edoc/</rest>
<rest version="2">https://localhost/exist/apps/edoc/api/v2/</rest>
<rest version="2">https://localhost/exist/apps/edoc</rest>

<!-- the collection that will hold all the projects. Adjust if you decide to put your projects elsewhere
default: /db/apps/edoc/data -->
Expand Down
64 changes: 30 additions & 34 deletions edoc/config/edoc/data/collection.xconf
Original file line number Diff line number Diff line change
Expand Up @@ -3,44 +3,32 @@
<!-- Lucene index is configured below -->
<lucene>
<analyzer id="std" class="org.apache.lucene.analysis.standard.StandardAnalyzer"/>
<!-- This index configuration is likely to be revised in later releases of wdb+ -->

<!-- index files and standOff: index main name parts but not whole lists -->
<text qname="tei:persName"/>
<text qname="tei:placeName"/>
<text qname="tei:orgName"/>
<text qname="tei:title"/>

<!-- main text -->
<!-- tei:text for fast first step, cf. rest-search.xql: /edoc/search/collection/{$id}.xml -->
<!-- main index – information for filtering is provided when results are prepared per file -->
<text qname="tei:text"/>

<!-- notes usually contain text that is outside the main text’s flow; hence, they must be
handled separately -->
<ignore qname="tei:note"/>
<text qname="tei:note"/>
<!-- notes usually contain text that is outside the main text’s flow; hence, they must be handled separately. -->
<ignore qname="tei:note" />
<text qname="tei:note" />

<!-- main structure types that contain relevant text -->
<text qname="tei:p"/>
<text qname="tei:ab"/>
<text qname="tei:opener"/>
<text qname="tei:closer"/>
<text qname="tei:postscript"/>
<text qname="tei:cell"/>
<text qname="tei:label"/>
<text qname="tei:item"/>
<text qname="tei:quote"/>
<text qname="tei:head"/>
<text qname="tei:l"/>
<!-- headings will often be used for filtering and thus an additional index is created; unlike notes, however,
they are still part of the general text index -->
<text qname="tei:head" />

<!-- index w for fast queries for single words if text is tokenized -->
<!--<text qname="tei:w"/>-->

<!-- lists are not indexed, only the main entry head -->
<!-- lists of entities are not indexed, only the main entry head is added as a range index below -->
<ignore qname="tei:listPerson"/>
<!-- <text qname="tei:persName"/> -->
<ignore qname="tei:listPlace"/>
<!-- <text qname="tei:placeName"/> -->
<ignore qname="tei:listOrg"/>
<!-- <text qname="tei:orgName"/> -->
<ignore qname="tei:listBibl"/>
<!-- <text qname="tei:title"/> -->

<!-- contemporary changes: only the intended for, with tei:add, is to be indexed -->
<inline qname="tei:subst"/>
<ignore qname="tei:del"/>

<!-- modern intervention, choice[orig+reg] and choice[sic+corr], must occur at word level !! → documentation -->

<!-- elements that may appear within a word -->
<inline qname="tei:unclear"/>
Expand All @@ -51,15 +39,23 @@

<!-- things to ignore -->
<ignore qname="tei:pb"/>
<ignore qname="tei:fw"/>
<ignore qname="tei:cb"/>
<ignore qname="tei:lb"/>
<ignore qname="tei:fw"/>
<ignore qname="tei:pc"/>
</lucene>
<range>
<!-- configuration for metadata files -->
<create qname="meta:file">
<!-- configuration for metadata files – should be rewritten to match agains out index of ID → path -->
<!-- <create qname="meta:file">
<field name="file-path" match="@path" type="xs:string"/>
</create>
</create> -->

<!-- entities -->
<create qname="tei:persName" type="xs:string" />
<create qname="tei:placeName" type="xs:string" />
<create qname="tei:orgName" type="xs:string" />
<create qname="tei:eventName" type="xs:string" />
<create qname="tei:title" type="xs:string" />

<!-- attributes for semantic elements -->
<create qname="@ref" type="xs:string"/>
Expand Down
87 changes: 54 additions & 33 deletions edoc/controller.xql
Original file line number Diff line number Diff line change
Expand Up @@ -5,30 +5,30 @@
:)
xquery version "3.1";

import module namespace login = "http://exist-db.org/xquery/login" at "resource:org/exist/xquery/modules/persistentlogin/login.xql";
import module namespace request = "http://exist-db.org/xquery/request" at "java:org.exist.xquery.functions.request.RequestModule";
import module namespace request = "http://exist-db.org/xquery/request" at "java:org.exist.xquery.functions.request.RequestModule";

declare namespace config = "https://github.com/dariok/wdbplus/config";
declare namespace exist = "http://exist.sourceforge.net/NS/exist";
declare namespace meta = "https://github.com/dariok/wdbplus/wdbmeta";

declare variable $exist:path external;
declare variable $exist:resource external;
declare variable $exist:controller external;
declare variable $exist:prefix external;
(: declare variable $exist:root external; :)
declare variable $exist:root external;

declare variable $local:isget := request:get-method() = ("GET","get");
declare variable $local:config := doc("/db/apps/edoc/config.xml")/config:config;

util:log("info", request:get-method() || " " || request:get-url() || ' ? ' || request:get-query-string() || " -> resource: " || $exist:resource),
(: util:log("info", "Request-Path: " || $exist:path || "; Resource: " || $exist:resource || "; Controller: " || $exist:controller || "; Prefix: " || $exist:prefix || "; Root: " || $exist:root), :)
util:log("info", request:get-method() || " " || request:get-url() || ' ? ' || request:get-query-string() || " → resource: " || $exist:resource),

(: static HTML page for API documentation should be served directly to make sure it is always accessible :)
if (
( $local:isget and $exist:resource = ('v2.json', 'apiv2.html') )
) then
if ( $local:isget and $exist:resource = ('v2.json', 'apiv2.html') ) then
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Serve renamed OpenAPI HTML file through controller

This route guard still whitelists apiv2.html, but the commit renamed the documentation page to v2.html. Requests for /rest2/v2.html now miss this static forward and fall through to the generic HTML branch, which routes through the app view pipeline instead of serving the docs file directly, so the API documentation page becomes inaccessible.

Useful? React with 👍 / 👎.

<dispatch xmlns="http://exist.sourceforge.net/NS/exist">
<forward url="{$exist:controller}/rest2/{$exist:resource}"/>
</dispatch>

(: login :)
else if ( $exist:resource = 'login' ) then
<dispatch xmlns="http://exist.sourceforge.net/NS/exist">
Expand All @@ -41,23 +41,37 @@ else if ( $exist:resource = 'logout' ) then
<add-parameter name="logout" value="logout" />
</forward>
</dispatch>

(: REST API :)
else if ( contains($exist:path, 'api/v2') ) then
<dispatch xmlns="http://exist.sourceforge.net/NS/exist">
<forward url="{$exist:controller}/rest2/api.xq"/>
<forward url="{$exist:controller}/rest2/api.xq">
{
(: we currently need this workaround here as Jetty snatches all OPTIONS requests before they can be parsed by roaster :)
if ( request:get-method() = ('options', 'OPTIONS') and $local:config//config:origin = request:get-header('origin') )
then (
<set-header name="Access-Control-Allow-Origin" value="{ request:get-header('origin') }" />,
<set-header name="Access-Control-Allow-Methods" value="GET, PUT, POST, PATCH, OPTIONS, HEAD" />,
<set-header name="Access-Control-Allow-Headers" value="Authorization, Content-Type" />,
<set-header name="Access-Control-Allow-Credentials" value="true" />
)
else ()
}
</forward>
</dispatch>

(: global index.html :)
else if ( $exist:resource eq '' or $exist:resource eq 'index.html' ) then
<dispatch xmlns="http://exist.sourceforge.net/NS/exist">
<forward url="{$exist:controller}/global/index.html"/>
</dispatch>

(: admin pages :)
else if ( ends-with($exist:resource, ".html") and contains($exist:path, '/admin/') ) then
<dispatch xmlns="http://exist.sourceforge.net/NS/exist">
{ login:set-user("wd", substring-before(request:get-uri(), $exist:path), xs:dayTimeDuration("P2D"), false()) }
<view>
<set-header name="Cache-Control" value="no-cache"/>
<forward url="{$exist:controller}/admin/view.xql">
</forward>
<forward url="{$exist:controller}/admin/view.xql"/>
</view>
<error-handler>
<forward url="{$exist:controller}/templates/error-page.html" method="get"/>
Expand All @@ -75,34 +89,41 @@ else if ( ends-with($exist:resource, ".html") ) then
}
</forward>
</view>
<error-handler>
<forward url="{$exist:controller}/templates/error-page.html" method="get"/>
<forward url="{$exist:controller}/modules/view.xql"/>
</error-handler>
</dispatch>
(: generic resources :)
else if ( contains($exist:path, "/$shared/") ) then
<dispatch xmlns="http://exist.sourceforge.net/NS/exist">
<forward url="{$exist:controller}/resources/{substring-after($exist:path, '/$shared/')}">
{
for $header in $local:config//config:header
return <set-header>{ $header/@* }</set-header>
}
</forward>
</dispatch>
(: instance specific resources :)
else if ( contains($exist:path, "/$global/") ) then
<dispatch xmlns="http://exist.sourceforge.net/NS/exist">
<forward url="{$exist:controller}/data/resources/{substring-after($exist:path, '/$global/')}">
{
for $header in $local:config//config:header
return <set-header>{ $header/@* }</set-header>
}
</forward>
</dispatch>
else if ( ends-with($exist:path, ".xql") ) then

(: generic resources :)
else if ( contains($exist:path, "/$shared/") ) then
<dispatch xmlns="http://exist.sourceforge.net/NS/exist">
<forward url="{$exist:controller}/resources/{substring-after($exist:path, '/$shared/')}">
{
for $header in $local:config//config:header
return <set-header>{ $header/@* }</set-header>
}
</forward>
</dispatch>
(: instance specific resources :)
else if ( contains($exist:path, "/$global/") ) then
<dispatch xmlns="http://exist.sourceforge.net/NS/exist">
<forward url="{$exist:controller}/data/resources/{substring-after($exist:path, '/$global/')}">
{
for $header in $local:config//config:header
return <set-header>{ $header/@* }</set-header>
}
</forward>
</dispatch>

else if ( ends-with($exist:path, ".xql") or ends-with($exist:path, ".xq") ) then
<dispatch xmlns="http://exist.sourceforge.net/NS/exist">
<set-header name="Cache-Control" value="no-cache"/>
<set-attribute name="app-root" value="{$exist:prefix}{$exist:controller}"/>
</dispatch>
else

(: everything else is passed through :)
else
<dispatch xmlns="http://exist.sourceforge.net/NS/exist">
<cache-control cache="yes"/>
<set-header name="Cache-Control" value="max-age=604800, must-revalidate"/>
Expand Down
4 changes: 3 additions & 1 deletion edoc/data/wdbmeta.xml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,9 @@
<files></files>
<processes>
<process target="">
<command type=""></command>
<command>
<step type=""/>
</command>
</process>
</processes>
<struct></struct>
Expand Down
2 changes: 1 addition & 1 deletion edoc/expath-pkg.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@
<title>W. Digitale Bibliothek</title>
<dependency processor="http://exist-db.org" semver-min="6.0.0" />
<dependency package="http://exist-db.org/html-templating" semver-min="1.1.0"/>
<dependency package="http://e-editiones.org/roaster" semver-min="1.10.0"/>
<dependency package="http://e-editiones.org/roaster" semver-min="1.11.0"/>
</package>
1 change: 0 additions & 1 deletion edoc/include/xstring
Submodule xstring deleted from 161fa5
3 changes: 2 additions & 1 deletion edoc/index/index-projects.xq
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,5 @@ for $project in collection('/db/apps/edoc/data')//meta:projectMD
if ( not(empty($file-entries)) )
then update insert $file-entries into doc("/db/apps/edoc/index/file-index.xml")/index:index
else ()
)
),
xmldb:reindex("/db/apps/edoc/index")
Loading