< XQuery  
        
      This description of the data flow in the Timetable application (another page scraping application) is loosely based on XPL
<?xml version="1.0" encoding="UTF-8"?>
<Pipeline id="timetable">
        <process id="i1">
            <title>Input id</title>
        </process>
        <process id="i2">
            <title>input week number</title>
        </process>
        <process id="i3">
            <title>input role</title>
        </process>
        <process id="s1">
            <title>create url</title>
            <input>i1</input>
            <input>i2</input>
            <input>i3</input>
        </process>
         <process id="s2">
            <title>get html</title>
            <input>s1</input>
            <input>x1</input>
        </process>
        <process id="x1">
            <type>external</type>
            <input>s2</input>
            <title>Syllabus Plus</title>
        </process>
        <process id="s3">
            <title>convert to xhtml</title>
            <input>s2</input>
        </process>
        <process id="s4">
            <title>extract xml</title>
            <input>s3</input>
        </process>     
        <process id="s5">
            <title>transform to vcal</title>
            <input>s4</input>
        </process>
        <process id="s6">
            <title>transform to htm</title>
            <input>s4</input>
        </process>
  </Pipeline>
With a map from types to shapes:
<ProcessTypes>
    <type name="input" shape="invtriangle"/>
    <type name="process" shape="box"/>
    <type name="external" shape="house"/>
</ProcessTypes>
Conversion to dot format for onward conversion to a GIF image
declare option exist:serialize "method=text"; declare variable $nl := " "; declare variable $url := request:get-parameter("url","/db/Wiki/DataFlow/timetablexpl.xml"); declare variable $processTypes := /ProcessTypes; let $pipe := doc($url) return ( "digraph {" , for $process in $pipe//process let $type := if (exists($process/type)) then $process/type else if (empty($process/input)) then "input" else "process" let $shape := string($processTypes/type[@name=$type]/@shape) return ( concat ($process/@id, ' [shape=',$shape,',label="',$process/title, '"];',$nl), for $input in $process/input return concat($input, '->', $process/@id,";",$nl) ), "} ",$nl )
    This article is issued from Wikibooks. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.