4.3.3.5.3  XSLT Transformation

Die Streaming Transformation mit dem Iterator Konzept sieht so aus:

template name="main">
  <xsl:source-document href="{$input-file}" streamable='yes'>
    <result>
      <xsl:iterate select="page/title">
        <xsl:variable name="json-call" select="json-to-xml(
                                               unparsed-text(
                                               concat($server-url,'/scrap-title.xqy?',
                                                      'title=',encode-for-uri(.))))"/>
        <state>
          <xsl:sequence select="$json-call/descendant::*[@key='state']/text()"/>
        </state>
      </xsl:iterate>
    </result>
  </xsl:source-document> 
</xsl:template>
Plain Text

Hier werden in einer Ergebnis Struktur mit einem <result> Element einzelne <state> Elemente ausgegeben.

Der Inhalt dieser Elemente ist Rückgabewert eines Webrequests über die Funktion fn:unparsed-text() .

An das Skript scrap-title.xqy wird ein Parameter title übergeben:

xquery version "1.0-ml";

import module namespace json = "http://marklogic.com/xdmp/json" 
                            at "/MarkLogic/json/json.xqy";

declare namespace local = 'local:';
declare variable $title := xdmp:get-request-field('title');

declare function local:render-response($response)
{
  xdmp:add-response-header("Pragma", "no-cache"),
  xdmp:add-response-header("Cache-Control", "no-cache"),
  xdmp:add-response-header("Expires", "0"),
  xdmp:set-response-content-type('text/json; charset=utf-8'),
  xdmp:unquote($response)
};

let $root := <title>{ $title }</title>,
$options :=
<options xmlns="xdmp:document-insert">  
  <permissions>{ xdmp:default-permissions() }</permissions>
  <collections>
    <collection>/wikimedia-titles</collection>
  </collections>
</options>,
$fname := concat('/wikimedia-titles/', xdmp:md5($title), ".xml"),
$td := xdmp:document-insert($fname, $root, $options)
return 
  local:render-response(concat('{"state":"success","title":"',$title,'"}'))
Plain Text

Wenn alles gut läuft, sollte die Transformation nach einer halben Stunde abgeschlossen sein. Es sollten sich in der

Collection /wikimedia-titles viele Einträge befinden, mit Dateinamen wie:

<fname>/wikimedia-titles/b00bb36cf9dd18f12141f463f59947e6.xml</fname>
Plain Text