Während XSLT dazu dienen sollte, XML Daten in andere (XML-) Formate zu transformieren, dient XQuery z.B. dazu auf einer NoSQL Datenbank Daten aus unterschiedlichen Quellen zu selektieren, zu harmonisieren und an verarbeitende Prozesse weiterzugeben.
Deshalb ist es für mich nicht so erstaunlich, dass das Namespace Konzept in XQuery irgendwie besser funktioniert.
Damit man überhaupt Daten auf einem mit Namespaces versehenen XML Dokument selektieren kann, müssen alle Namspaces am Anfang des XQuery Ausdrucks angegeben werden, das sieht so aus:
xquery version "1.0-ml"; import module namespace tektur = "http://www.teturcms.de/xquery/common" at "common.xqy"; import module namespace mem = "http://xqdev.com/in-mem-update" at '/MarkLogic/appservices/utils/in-mem-update.xqy'; declare namespace local = "https://tekturcms.de/code/alex-sandbox/1.0"; declare namespace weiredns = "https://weired-ns-in-input-data.com/weired/ns"; declare namespace xs = "http://www.w3.org/2001/XMLSchema";Plain Text
Hier werden zuerst Funktionen aus anderen Modulen eingebunden. Diejenigen in einer eigenen Datei common.xqy , sowie aus der Bibliothek mem in der MarkLogic Umgebung. Danach wird ein Namespace local für eigene Funktionen innerhalb der Quelldatei deklariert, sowie der Namespace weiredns , der in den Eingabedaten vorhanden ist. Der Namespace xs ist analog zum XSLT Beispiel gesetzt.