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)
Previous Page Next Page
Version: 93
Jan 25 2021