2009-08-03 3 views
1

Ich verwende Oxygen XML, um mit einer XML-Datei zu arbeiten, die Verweise auf andere XML-Dateien enthält. Diese anderen XML-Dateien werden in einem Unterverzeichnis des Verzeichnisses gespeichert, das die XML-Hauptdatei enthält.Abrufen des XML-Dokuments in XQuery

Die Speicherorte der anderen XML-Dateien werden als relative Verknüpfungen in der Hauptdatei gespeichert. Meine Abfrage sieht aus wie etwas so:

for $df in /clldata/DiscussionForums/DiscussionForum 
    let $href := replace(data($df/@href),"\\","/") 
    for $p in doc($href) 
return $p 

Das Problem, das ich in laufen habe ist, dass Sauerstoff den Pfad der XQuery-Datei als Basis für den relativen Pfad verwendet, offensichtlich in Datei führt nicht gefunden Fehler. Wie kann ich den Pfad zum XML-Dokument in meiner Abfrage abrufen?

Im Moment benutze ich nur concat(), um den richtigen Pfad vorzugeben, aber ich möchte, dass es leicht wiederverwendbar ist.

Antwort

1

Sie müssen den URI relativ zum URI des XML-Hauptdokuments auflösen. In Ihrem Fall möchten Sie wahrscheinlich tun, so etwas wie:

let $href = resolve-uri($d/@href, base-uri($d))

Hier wird die Basis-uri ($ d) Funktion ist immer die absolute URI des Quelldokuments die entsprechende Diskussionsforum Knoten enthält, und die Entschlossenheit -uri löst den neuen URI relativ dazu auf.

Dies funktioniert für mich mit SAXON auf dem Jedit XQuery Plugin. YMMV, ich habe noch nie Oxygen XML verwendet.