4.2.5 XQuery als Programmiersprache
Erste Schritte in XQuery gehen sehr schön
mit der Query Konsole auf dem Marklogic Server (Port 8000).
Hat man parallel auch noch oXygen Editor offen, kann man die Testergebnisse aus der Konsole direkt in ein XQuery Server Skript
packen.
4.2.5.1 Schleifen
Die ersten 10 Dokumente auf dem Server bekommt man z.B. mit:
(doc())[position() lt 11]
Die Zahlen von 1 bis 100 mit:
(for $i in (1 to 100) return $i)
Wenn man diese beide Anweisungen untereinander in die Konsole
schreibt bekommt man einen Fehler. Trennt man sie mit einem
Komma - ein Tupel wird erzeugt - dann klappt es.
4.2.5.2 Dokumente in der DB anlegen
Der Befehl zum Anlegen eines Dokuments in der Marklogic DB sieht
folgendermassen aus (Doku) ↗↗:
xdmp:document-insert( "/alex-test/example-alex.xml", <root>Hier steht der Content</root>, <options xmlns="xdmp:document-insert"> <metadata>{ map:map() => map:with("valid-start", "2014-06-03T14:13:05.472585-07:00") => map:with("valid-end", "9999-12-31T11:59:59Z") }</metadata> </options>)
Packt man diese Instruktion in die for-Schleife oben, dann sieht das Konstrukt so aus:
(for $i in (1 to 10) return xdmp:document-insert( concat("/alex-test/example-alex-",$i,".xml"), <root>Hier steht der Content {$i}</root>, <options xmlns="xdmp:document-insert"> <metadata>{ map:map() => map:with("valid-start", "2014-06-03T14:13:05.472585-07:00") => map:with("valid-end", "9999-12-31T11:59:59Z") }</metadata> </options>) )
Dokumente kann man einer Collection zuweisen, um sie leichter finden und auswerten
zu können. Das geht mit dem folgenden Befehl (Doku) ↗↗ und diesem Schnippsel:
let $root := <mein-test> <id>{$id}</id> <content>Hallo Welt!</content> </mein-test>, $options := <options xmlns="xdmp:document-insert"> <permissions>{xdmp:default-permissions()}</permissions> <collections> <collection>/alex-test</collection> </collections> </options>, $fname := concat('/',$id,'_','.xml'), $td := xdmp:document-insert($fname,$root,$options) return [...]
Die Dokumente, die mit der Collection
alex-test
getaggt wurden, kann man sich mit der folgenden Schleife ausgeben lassen:
for $x in collection("/alex-test") return fn:document-uri($x)