Frage

Ich bin mit Oxygen XML 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, die die Haupt-XML-Datei enthält.

Downloads/
directory1/
  main.xml
  subdirectory1/
    other1.xml
    other2.xml

Die Positionen der anderen XML-Dateien werden als relative Links in der Hauptdatei gespeichert. Meine Abfrage sieht aus wie etwas so aus:

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 der Datei nicht gefunden Fehler führten. Wie kann ich den Pfad zum XML-Dokument in meiner Anfrage bekommen?

Im Moment bin ich nur mit concat (), um den richtigen Pfad vorangestellt wird, aber ich mag diese leicht wiederverwendbar sein.

War es hilfreich?

Lösung

Sie müssen den URI in Bezug auf die URI des Haupt XML-Dokuments lösen. In Ihrem Fall möchten Sie wahrscheinlich etwas tun:

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

Hier wird die Basis-uri ($ d) Funktion, um die absolute URI des Quelldokuments wird immer die entsprechende Diskussionsforum Knoten enthält, und die Auflösungs-uri die neue URI in Bezug auf diese aufgelöst wird.

Dies funktioniert für mich SAXON auf der jedit XQuery-Plugin. YMMV, ich habe noch nie verwendet, Oxygen XML.

Andere Tipps

Ich denke, der folgende XPath-Ausdruck sollte alle verknüpften Dokumente auswählen:

/clldata/DiscussionForums/DiscussionForum/@href/doc(resolve-uri(., base-uri(.))

So sollten Sie in der Lage sein, einem XML-Element, einen Drilldown über alle gefundenen Dokumente wie folgt aus:

/clldata/DiscussionForums/DiscussionForum/@href/doc(resolve-uri(., base-uri(.))
/path/to/the/element/you/want/to/find/in/all/documents/@name

Wenn Sie FLOWR Stil Ausdrücke bevorzugen, dann so etwas wie dies sollte es tun:

for $doc in /clldata/DiscussionForums/DiscussionForum/@href/doc(resolve-uri(., base-uri(.))
where $doc/some/criteria='select'
return $doc/path/to/the/element/you/want/to/find/in/all/documents/@name
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top