Jeder App-Server ist in MarkLogic genau einer Content-Database zugeordnet. Darin sollten alle Daten vorhanden sein, auf die die Webapplikation zugreift.
Es ist jedoch über einen kleinen "Hack" möglich andere Datenbanken in derselben MarkLogic Webapp abzufragen. Dazu verwendet man die xdmp:eval-in Funktion.
Wie der Name schon sagt, wird damit ein Ausdruck in einer anderen Datenbank evaluiert.
Das Beispiel dazu auf der MarkLogic-Doku Seite sieht folgendermassen aus:
xquery version "0.9-ml" declare namespace my='http://mycompany.com/test' let $s := "xquery version '0.9-ml' declare namespace my='http://mycompany.com/test' define variable $my:x as xs:string external concat('hello ', $my:x)" return (: evaluate the query string $s using the variables supplied as the second parameter to xdmp:eval :) xdmp:eval-in($s, xdmp:database("Documents"), ("my:x"), "world")) => hello worldPlain Text
Ein Anwendungsbeispiel aus der Praxis würde demnach so aussehen:
declare function local:remove-sql-view($sql-view-name) { let $url := concat('/sql-views/', $sql-view-name) return xdmp:eval-in('xquery version "1.0-ml"; declare variable $url as xs:string external; xdmp:document-delete($url), xdmp:schema-database(), ('url'),$url) ) };Plain Text
Hier wird eine zuvor gesetzte SQL View, vgl. Kapitel SQL Views in MarkLogic , die per Default in der Schema-Datenbank untergebracht ist, wieder aus dem System gelöscht.