xquery version "3.0"; (:~ : A set of helper functions to access the application context from : within a module. :) module namespace config="http://divvun.no/iskkan/config"; declare namespace templates="http://exist-db.org/xquery/templates"; declare namespace repo="http://exist-db.org/xquery/repo"; declare namespace expath="http://expath.org/ns/pkg"; (: Determine the application root collection from the current module load path. :) declare variable $config:app-root := let $rawPath := system:get-module-load-path() let $modulePath := (: strip the xmldb: part :) if (starts-with($rawPath, "xmldb:exist://")) then if (starts-with($rawPath, "xmldb:exist://embedded-eXist-server")) then substring($rawPath, 36) else substring($rawPath, 15) else $rawPath return substring-before($modulePath, "/modules") ; declare variable $config:data-root := $config:app-root || "/data"; declare variable $config:repo-descriptor := doc(concat($config:app-root, "/repo.xml"))/repo:meta; declare variable $config:expath-descriptor := doc(concat($config:app-root, "/expath-pkg.xml"))/expath:package; (:~ : Resolve the given path using the current application context. : If the app resides in the file system, :) declare function config:resolve($relPath as xs:string) { if (starts-with($config:app-root, "/db")) then doc(concat($config:app-root, "/", $relPath)) else doc(concat("file://", $config:app-root, "/", $relPath)) }; (:~ : Returns the repo.xml descriptor for the current application. :) declare function config:repo-descriptor() as element(repo:meta) { $config:repo-descriptor }; (:~ : Returns the expath-pkg.xml descriptor for the current application. :) declare function config:expath-descriptor() as element(expath:package) { $config:expath-descriptor }; declare %templates:wrap function config:app-title($node as node(), $model as map(*)) as text() { $config:expath-descriptor/expath:title/text() }; declare function config:app-meta($node as node(), $model as map(*)) as element()* { , for $author in $config:repo-descriptor/repo:author return }; (:~ : For debugging: generates a table showing all properties defined : in the application descriptors. :) declare function config:app-info($node as node(), $model as map(*)) { let $expath := config:expath-descriptor() let $repo := config:repo-descriptor() return { for $attr in ($expath/@*, $expath/*, $repo/*) return }
app collection: {$config:app-root}
{node-name($attr)}: {$attr/string()}
Controller: { request:get-attribute("$exist:controller") }
};