source: TI02-CSML/trunk/services/3rdParty/pywps-1.0.0/doc/install.html @ 2194

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI02-CSML/trunk/services/3rdParty/pywps-1.0.0/doc/install.html@2194
Revision 2194, 71.5 KB checked in by lawrence, 13 years ago (diff)

Adding various specs and 3rd party code of interest for the CSML
services development.

Line 
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
2
3<!--Converted with LaTeX2HTML 2002-2-1 (1.71)
4original version by:  Nikos Drakos, CBLU, University of Leeds
5* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
6* with significant contributions from:
7  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
8<HTML>
9<HEAD>
10<TITLE>Implementation of OGC's WPS standard: PyWPS</TITLE>
11<META NAME="description" CONTENT="Implementation of OGC's WPS standard: PyWPS">
12<META NAME="keywords" CONTENT="install">
13<META NAME="resource-type" CONTENT="document">
14<META NAME="distribution" CONTENT="global">
15
16<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
17<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
18<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
19
20<LINK REL="STYLESHEET" HREF="install.css">
21
22</HEAD>
23
24<BODY >
25
26<DIV CLASS="navigation"><!--Navigation Panel-->
27<IMG WIDTH="81" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next_inactive"
28 SRC="/usr/share/latex2html/icons/nx_grp_g.png"> 
29<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
30 SRC="/usr/share/latex2html/icons/up_g.png"> 
31<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
32 SRC="/usr/share/latex2html/icons/prev_g.png">   
33<BR>
34<BR>
35<BR></DIV>
36<!--End of Navigation Panel-->
37<H1 ALIGN="CENTER">Implementation of OGC's WPS standard: PyWPS</H1>
38<DIV CLASS="author_info">
39
40<P ALIGN="CENTER"><STRONG>J&#195;&#161;chym &#196;&#140;epick&#195;&#189;</STRONG></P>
41</DIV>
42
43<P>
44
45<P><P>
46<BR>
47<BLOCKQUOTE>
48Copyright &#169;2006 J&#195;&#161;chym &#196;&#140;epick&#195;&#189;
49    Permission is granted to copy, distribute and/or modify this document
50    under the terms of the GNU Free Documentation License, Version 1.2
51    or any later version published by the Free Software Foundation;
52    with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
53    A copy of the license is included in the section entitled "GNU
54    Free Documentation License".
55
56</BLOCKQUOTE>
57
58<P><P>
59<BR>
60
61<P>
62In this file, you can found the description of installation and
63    configuration of PyWPS script. At the and, you can learn, how to add
64    your own process to the list of processes.
65
66<P>
67PyPWS project has been started on April 2006 with support of DBU - Deutsche Bundesstiftung Umwelt (<TT>http://dbu.de</TT>) and with help of GDF-Hannover (<TT>http://gdf-hannover.de</TT>) and Help Service Remote Sensing (<TT>http:/bnhelp.cz</TT>) companies.
68
69<P>
70Source code can be found at <TT>http://Les-e(2,11)[t]35j315k?cat=pywps</TT>
71     <BR>
72
73<H2><A NAME="SECTION00010000000000000000">
74Contents</A>
75</H2>
76<!--Table of Contents-->
77
78<UL CLASS="TofC">
79<LI><A NAME="tex2html28"
80  HREF="install.html#SECTION00020000000000000000">Bugs</A>
81<LI><A NAME="tex2html29"
82  HREF="install.html#SECTION00030000000000000000">Installation</A>
83<UL>
84<LI><A NAME="tex2html30"
85  HREF="install.html#SECTION00031000000000000000">Installation the quick 'n' dirty way</A>
86<LI><A NAME="tex2html31"
87  HREF="install.html#SECTION00032000000000000000">Installation the 'clean' way</A>
88<LI><A NAME="tex2html32"
89  HREF="install.html#SECTION00033000000000000000">Testing after installation</A>
90</UL>
91<BR>
92<LI><A NAME="tex2html33"
93  HREF="install.html#SECTION00040000000000000000">Configuration</A>
94<UL>
95<LI><A NAME="tex2html34"
96  HREF="install.html#SECTION00041000000000000000">etc/settings.py</A>
97<LI><A NAME="tex2html35"
98  HREF="install.html#SECTION00042000000000000000">etc/grass.py</A>
99</UL>
100<BR>
101<LI><A NAME="tex2html36"
102  HREF="install.html#SECTION00050000000000000000">Add your own processes</A>
103<UL>
104<LI><A NAME="tex2html37"
105  HREF="install.html#SECTION00051000000000000000">Process Configuration</A>
106<LI><A NAME="tex2html38"
107  HREF="install.html#SECTION00052000000000000000">Process Programming</A>
108</UL>
109<BR>
110<LI><A NAME="tex2html39"
111  HREF="install.html#SECTION00060000000000000000">Note to grass programming</A>
112<LI><A NAME="tex2html40"
113  HREF="install.html#SECTION00070000000000000000">Testing your new process</A>
114<LI><A NAME="tex2html41"
115  HREF="install.html#SECTION00080000000000000000">Using the PyWPS</A>
116<UL>
117<LI><A NAME="tex2html42"
118  HREF="install.html#SECTION00081000000000000000">Input</A>
119<LI><A NAME="tex2html43"
120  HREF="install.html#SECTION00082000000000000000">Output</A>
121</UL>
122<BR>
123<LI><A NAME="tex2html44"
124  HREF="install.html#SECTION00090000000000000000">Sample process: addvalue</A>
125<LI><A NAME="tex2html45"
126  HREF="install.html#SECTION000100000000000000000">KVP request encoding of addvalue</A>
127<LI><A NAME="tex2html46"
128  HREF="install.html#SECTION000110000000000000000">XML request encoding addvalue</A>
129<LI><A NAME="tex2html47"
130  HREF="install.html#SECTION000120000000000000000">Licence of PyWPS</A>
131<LI><A NAME="tex2html48"
132  HREF="install.html#SECTION000130000000000000000">Licence of this document</A>
133</UL>
134<!--End of Table of Contents-->
135<P>
136
137<P>
138
139<H1><A NAME="SECTION00020000000000000000">
140Bugs</A>
141</H1>
142    Known bugs and limitations to 14.8.2006
143   
144<UL>
145<LI>Process Inputs definition is made on very primitive way. But it works.
146</LI>
147<LI>Sometimes, when there is e.g. SyntaxError in the process, teporary file <TT>/tmp/pywps*</TT> is not deleted, which ledts to <TT>ServerBussy</TT> exception and the files have to be removed by hand.
148   
149</LI>
150</UL>
151
152<P>
153Please report all problems or unexpected handeling.
154
155<P>
156
157<H1><A NAME="SECTION00030000000000000000">
158Installation</A>
159</H1>
160
161<P>
162Required packages:
163
164<P>
165
166<UL>
167<LI>Web Server (e.g. Apache)
168</LI>
169<LI>python
170</LI>
171<LI>python-xml
172   
173</LI>
174</UL>
175
176<P>
177Recommended packages:
178
179<P>
180
181<UL>
182<LI>GIS GRASS
183</LI>
184<LI>PROJ.4
185</LI>
186<LI>GDAL/OGR
187   
188</LI>
189</UL>
190
191<P>
192
193<H2><A NAME="SECTION00031000000000000000">
194Installation the quick 'n' dirty way</A>
195</H2>
196    For installing pywps to your server simply unzip the archive to the
197    directory, where cgi programs are allowed to run.
198
199<P>
200
201<H2><A NAME="SECTION00032000000000000000">
202Installation the 'clean' way</A>
203</H2>
204    Unzip the package
205    <PRE>
206 $ tar -xzf pywps-VERSION.tar.gz
207</PRE>
208    and run
209    <PRE>
210$ python setup.py install
211</PRE>
212
213<P>
214
215<H2><A NAME="SECTION00033000000000000000">
216Testing after installation</A>
217</H2>
218    For test, just run
219    <TT>wps.py</TT> in your command line:
220
221<P>
222<PRE>
223\$ ./wps.py
224Content-type: text/xml
225
226&lt;?xml version="1.0" ?&gt;
227&lt;ExceptionReport version="1.0.0" xmlns="http://www.opengis.net/ows"
228        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt;
229        &lt;Exception exceptionCode="MissingParameterValue" locator="request"/&gt;
230&lt;/ExceptionReport&gt;
231</PRE>
232
233<P>
234If you got some other message, like e.g.:
235
236<P>
237<PRE>
238Traceback (most recent call last):
239  File "trunk/index.py", line 53, in ?
240    from Wps import wpsexceptions
241  File "/home/jachym/prog/pywps/trunk/Wps/wpsexceptions.py", line 8, in ?
242    from xml.dom.minidom import Document
243ImportError: No module named xml.dom.minidom
244</PRE>
245
246<P>
247Than something is wrong with your Python installation or with the program.
248    This message means, that the xml.dom.minidom package is not installed in
249    your system.
250
251<P>
252
253<H1><A NAME="SECTION00040000000000000000">
254Configuration</A>
255</H1>
256
257<P>
258Before you start to tune your pywps program, you should get your copy of
259    OpenGIS(R) Web Processing Service document (OGC 05-007r4) version 0.4.0
260    from http://www.opengeospatial.org/specs/?page=specs
261
262<P>
263NOTE: Note, that the configuration option are CASE SENSITIVE
264
265<P>
266Pywps configuration takes places in two files. The files are actually python
267    scripts, so it does not harm, if you have some experience in python
268    programming language. But you should be able to setup the program without
269    any python knowledge.
270
271<P>
272The first file is in <TT>etcsettings.py</TT> and (optional) the second file is
273    <TT>etcgrass.py</TT>. Some special "tuning" can be done in <TT>processes/__init__.py</TT>
274    file
275
276<P>
277
278<H2><A NAME="SECTION00041000000000000000">
279<TT>etc/settings.py</TT></A>
280</H2>
281
282<P>
283This file has got two sections: WPS and serverSettings
284
285<P>
286In the <TT>WPS</TT> section, the main configuration is set, which appears mostly in
287    GetCapabilities request. The <SPAN  CLASS="textit">mandatory</SPAN> parameters, which should be set up
288    are (with default/recommend values):
289
290<P>
291<PRE>
292    'version': "0.4.0",
293    'ServiceIdentification': {
294        'Title':"Jachym's WPS server",
295        'ServiceType':"WPS",
296        'ServiceTypeVersion':"0.1.0",
297        'Abstract':'Abstract to this WPS',
298    },
299    'ServiceProvider': {
300            'ProviderName' : "Your Company",
301            'IndividualName':"Your Name",
302            'PositionName':"Your Position",
303            'Role':"your role",
304            'DeliveryPoint': "Street",
305            'City': "City",
306            'PostalCode':"00000",
307            'Country': "Your country",
308            'ElectronicMailAddress':"your.email@address",
309    },
310
311    'OperationsMetadata': {
312        'ServerAddress' : "http://localhost/cgi-bin/wps/wps.py",
313    },
314    'Keywords' : ['GRASS','GIS','WPS'],
315</PRE>
316
317<P>
318In the <TT>ServerSettings</TT> section, the variables are set, which have impact on
319    the whole server.
320
321<P>
322<PRE>
323# NOTE: You have to create this directory manually and set rights, so
324#       the program is able to store data in there
325'outputPath': '/var/www/wpsoutputs',
326
327#
328# 'outputUrl' - URL of the directory, where the outputs will be stored
329'outputUrl':  'http://192.168.1.31/wpsoutputs',
330
331#
332# tempPath - path to directory, where temporary data will be stored.
333# NOTE: the pywps has to have rights, to create directories and files
334#       in this directory
335'tempPath': '/tmp',
336
337#
338# maxOperations - maximum number of operations, which is allowed to low
339# on this server at ones
340# default = 1
341'maxOperations':1,
342
343#
344# maxSize: maximum input file size in bytes
345# NOTE: maximum file size is 5MB, no care, if this number is higher
346'maxSize':5242880, # 5 MB
347
348#
349# maxInputParamLength: maximal length of input values
350# NOTE: maximum length of input parameters is 256, no matter, how height
351#       is this number
352'maxInputParamLength':256,
353</PRE>
354
355<P>
356
357<H2><A NAME="SECTION00042000000000000000">
358<TT>etc/grass.py</TT></A>
359</H2>
360
361<P>
362This file servers for configuration of GRASS GIS environment (if your
363    processes need one). Everything is stored in <TT>grassenv</TT> structure.
364
365<P>
366<PRE>
367# PATH in which your modules (processes) should be able the search.
368# Default value:
369'PATH': "/usr/local/grass-6.1.cvs/bin/:/usr/local/grass-6.1.cvs/scripts/:\
370/usr/bin/:/bin/:",
371
372# Add eventually some other path, in which should GRASS search for modules
373'GRASS_ADDON_PATH': "",
374
375# Version of GRASS, you are using
376'GRASS_VERSION': "6.1.cvs",
377
378# GRASS_PERL, where is your PERL bin installed
379'GRASS_PERL': "/usr/bin/perl",
380
381# GRASS_GUI should be always "text" unless you know, what you are doing
382'GRASS_GUI': "text",
383
384# GISBASE is place, where your GRASS installation is
385'GISBASE': "/usr/local/grass-6.1.cvs",
386
387# LD_LIBRARY_PATH
388'LD_LIBRARY_PATH':"/usr/local/grass-6.1.cvs/lib",
389
390# HOME has to be set
391'HOME':"/var/www",
392</PRE>
393
394<P>
395
396<H1><A NAME="SECTION00050000000000000000">
397Add your own processes</A>
398</H1>
399
400<P>
401All processes are stored in the processes directory. Put your file
402    e.g. myprocess.py in there.
403
404<P>
405Process is python class with two functions: <TT>__init__(self)</TT>
406    and <TT>execute(self)</TT>.
407    In the <TT>__init__(self)</TT> function, inputs, outputs and other configuration values are set. The GIS operations
408    are called in <TT>execute(self)</TT>  function. It is possible also to add as many your functions, as you wish.
409
410<P>
411
412<H2><A NAME="SECTION00051000000000000000">
413Process Configuration</A>
414</H2>
415
416<P>
417The configuration part belongs to the <TT>__init__</TT> function of the <TT>Process</TT> class.
418
419<P>
420Mandatory variables are
421
422<P>
423<PRE>
424# Myprocess name
425self.Identifier = "spearpath"
426
427# Myprocess version
428self.processVersion = "0.1"
429
430# Is it allowed, store the data on the server?
431self.storeSupported = "true"
432
433# Do not wait, till the calculation is done -&gt; return XML with status
434# immediately
435self.statusSupported = "true"
436
437# Myprocess Title
438self.Title="Find the shortest path on the roads map on Spearfish dataset"
439</PRE>
440
441<P>
442Eventually optional attributes can be found in the table 38 - "Parts of
443    ExecuteResponse data structure"
444
445<P>
446If your process should happen in existing GRASS-Location, and you just need
447    the input parameters for GRASS modules, you can specify it's name by
448    <TT>grassLocation</TT> variable:
449
450<P>
451<PRE>
452grassLocation="/var/grassdata/spearfish57/"
453</PRE>
454
455<P>
456If this variable is not set, new temporary GRASS Location &amp;&amp; mapset will be
457generated and you can work in there. The projection of the location will be
458XY.
459
460<P>
461
462<H3><A NAME="SECTION00051100000000000000">
463Data Inputs</A>
464</H3>
465
466<P>
467Data inputs are defined in <TT>self.Inputs</TT> array. Each input is an dictionary with
468    several (mostly mandatory) parameters. Each input type
469    (<TT>LiteralValue, ComplexValue, ComplexValueReference,
470    BoundingBoxValue</TT>) <SPAN  CLASS="textbf">must</SPAN> be a Python's dictionary
471    ("<TT>{}</TT>") structure, which <SPAN  CLASS="textit">can</SPAN> be filled with aditional
472    attributes.
473
474<P>
475
476<UL>
477<LI>Example of <TT>LiteralInput</TT>:
478        <TT>LiteralValue</TT>s are used for individual text entry. Your
479        process can either support any text entry or the entry must be from
480        list of allowed values. <TT>LiteralValue</TT>s of types <TT>AnyValue</TT> and
481        <TT>AllowedValues</TT> are supported. Range of values is not yet
482        implemented.
483
484<P>
485Allowed values are set by array of values. If there is no
486        <TT>values</TT> arry or it contains <TT>"*"</TT>
487        in the array, <TT>AnyValue</TT> is assumed:
488
489<P>
490<PRE>
491    {   # example of "AnyValue" case with centimeters as default unit
492
493        'Identifier': 'my_input_value',
494        'Title': 'This is my input value',
495        'LiteralValue': {'UOMs':["cm"]},
496        # alternative for any value:
497        # 'LiteralValue': {'values':["*"]},
498        'dataType': type(0.0)
499    },
500    {   # example of "AllowedValues case with default units (meters)
501
502        'Identifier': 'my_input_value',
503        'Title': 'This is my input value',
504        'LiteralValue': {values:[250, "300", '40', "a"]},
505        # the default value:
506        'value': 250,
507    },
508</PRE>
509
510<P>
511</LI>
512<LI>Example of <TT>ComplexValueReference</TT> input:
513        <TT>ComplexValueReference</TT> is URL to some raster/vector/text
514        file, which can be later imported (e.g. to GRASS) and processed.
515        PyWPS will be dowload the file for you and store it's name to
516        <TT>self.Inputs[NUMBER]['value']</TT> variable.
517
518<P>
519<PRE>
520    {
521        'Identifier':'input_map_file',
522        'Title': 'Input raster map',
523        'ComplexValueReference': {
524                'Formats': [ "image/tiff" ]
525            },
526    },
527</PRE>
528
529<P>
530</LI>
531<LI>Example of <TT>ComplexValue</TT> input:
532        <TT>ComplexValue</TT> provides possibility to embed input (XML)
533        file (e.g. GML) to input <TT>ExecuteResponce</TT> XML file. PyWPS
534        will store this input in file on server's harddisk, so you can
535        later handle it just like <TT>ComplexValueReference</TT>.
536
537<P>
538<PRE>
539    {
540        'Identifier':'vector',
541        'Title': 'Input vector map',
542        'Abstract':
543            "This vector map must be part of the input XML document",
544        'ComplexValue': {
545            'Formats': [ "text/xml" ]
546        },
547    },
548</PRE>
549
550<P>
551</LI>
552<LI>Example of <TT>BoundingBoxValue</TT> input:
553        <TT>BoundingBoxValue</TT> provides possibility define your region
554        borders. You can input this only to your Execute responce XML file.
555
556<P>
557<PRE>
558    {
559        'Identifier':'bbox',
560        'Title': 'Bounding box',
561        'Abstract':
562            "Bounding box",
563        'BoundingBoxValue': {},
564    },
565</PRE>
566
567<P>
568Resulting value in your <TT>self.Input[NUMBER]['value']</TT> will be
569    array of four values in form <TT>[Lower East, Lower North, Upper
570    East, Upper North]</TT>.
571
572<P>
573</LI>
574</UL>
575
576<P>
577Default values can be set like follows: <TT>'value':"Default value",</TT>
578
579<P>
580NOTE: If the 'dataType' attribute is not set, control of the input value
581    will not be possible, which could endanger your system
582
583<P>
584For more details look in the table 33 "Parts of ValueFormChoice data
585    structure"
586
587<P>
588
589<H3><A NAME="SECTION00051200000000000000">
590Data Outputs</A>
591</H3>
592
593<P>
594The <TT>self.Outputs</TT> structure defines the look of the outputs from your process.
595    The definition is not much different from the Input structure:
596
597<P>
598<PRE>
599    {
600        'Identifier': 'output',
601        'Title': 'Resulting output map',
602        'ComplexValue': {
603            'Formats':["text/xml"],
604            }
605    },
606    {
607        'Identifier': 'text',
608        'Title': 'Some text',
609        'Abstract': 'Some informative text',
610        'LiteralValue': {
611             {'UOMs':["none"]},
612        }
613    }
614</PRE>
615
616<P>
617
618<H4><A NAME="SECTION00051210000000000000">
619BoundingBox Output</A>
620</H4>
621    <TT>BoundingBoxValue</TT> is defined by two coordinates pairs:
622    <TT>LowerCorner</TT> and <TT>UpperCorner</TT>. For creating
623    <TT>BoundingBoxValue</TT>    output, you have to make output array with this
624    values:
625    <PRE>
626    {
627        'Identifier': 'mybbox',
628        'Title': 'Bounding Box of resulting map',
629        'BoundingBoxValue': {},
630         'value' : [0, 0, 10, 10],
631    },
632</PRE>
633
634<P>
635
636<H2><A NAME="SECTION00052000000000000000">
637Process Programming</A>
638</H2>
639
640<P>
641The process must be defined in the <TT>execute(self)</TT> function. To
642    each element in self.Inputs array, <TT>'value'</TT> option will be added.
643    Input variables are accessible via <TT>'value'</TT> attribute of each element of the
644    <TT>self.Inputs</TT> array.
645
646<P>
647Another way, how to access input values it to do so via new hash <TT>self.DataInputs</TT>. This way is
648    more intiutive and less confusing. If order of <TT>Input</TT>s will change, their identificators in <TT>DataInputs</TT> structure remain same.
649
650<P>
651Also new variable <TT>self.grassenv</TT> will be in your process at your service.
652
653<P>
654Output values can be stored either directly to <TT>self.Outputs[index]['value']</TT> variable or to <TT>self.DataOutputs['identifier']</TT> hash on similar way, how <TT>DataInputs</TT> are used. This makes the usage again more intuitive.
655
656<P>
657<PRE>
658    def execute(self):
659        if os.system("""g.region -d &gt;&amp;2"""):
660            return "Could not set region to default"
661
662        os.system("r.in.gdal -o in=%s out=my_map &gt;&amp;2" %\
663                                    (self.Inputs[0]['value']))
664        os.system("r.mapcalc my_output=my_map+%d &gt;&amp;2" %\
665                                    (self.DataInputs['value']))
666       
667        if os.system("r.out.gdal type=Float32 out=map.tif in=my_output &gt;&amp;2"):
668            return "Could not export resulting raster map [map.tif]"
669
670        self.Outputs[0]['value'] = "map.tif"
671        self.DataOutputs['location'] = self.grassenv['LOCATION_NAME']
672        return
673</PRE>
674
675<P>
676That is all, folks!
677
678<P>
679
680<H3><A NAME="SECTION00052100000000000000">
681Error handling</A>
682</H3>
683
684<P>
685At the end of the <TT>execute</TT> function, <TT>None</TT> value should be returned. Any other
686    value means, that the calculation will be stopped and error report will be returned back to the client.
687
688<P>
689
690<H1><A NAME="SECTION00060000000000000000">
691Note to grass programming</A>
692</H1>
693
694<P>
695The simplest way, how to call GRASS's (and other shell) commands is via
696    python's <TT>os.system()</TT> or <TT>os.popen()</TT> function.
697    Before you do so, it is important to import
698    the <TT>os</TT> python package (usually one of the first lines in the file). This
699    approach might not be the best, but it is the simplest one. Feel free to use any other low-end functions.
700
701<P>
702Unfortunately, the GRASS modules are very verbose. Some messages are
703    written to STDOUT, some to STDERR. The STDERR will be stored in the error
704    file of your web server. But you have to "catch" the messages, sent to
705    STDOUT. This can be done e.g. by using "1&gt;&amp;2" statement (redirecting STDOUT
706    to STDERR in shell):
707
708<P>
709<PRE>
710    os.system("""
711        echo "Rekni jim drazi, tatko, za to nic nedas."  &gt;&amp;2
712    """)
713</PRE>
714
715<P>
716
717<H1><A NAME="SECTION00070000000000000000">
718Testing your new process</A>
719</H1>
720
721<P>
722
723<UL>
724<LI>GetCapabilities request:
725<PRE>
726    wget -nv -q -O - --post-data="version=0.4.0&amp;service=Wps&amp;\
727        request=getcapabilities" "http://localhost/cgi-bin/wps.py"
728</PRE>
729
730<P>
731</LI>
732<LI>DescribeProcess request:
733<PRE>
734    wget -nv -q -O - --post-data="version=0.4.0&amp;service=Wps&amp;\
735        request=DescribeProcess&amp;Identifier=your_process" \
736        "http://localhost/cgi-bin/wps.py"
737</PRE>
738
739<P>
740</LI>
741<LI>Execute request:
742<PRE>
743    wget -nv -q -O - --post-data="version=0.4.0&amp;service=Wps&amp;\
744        request=Execute&amp;Identifier=your_process&amp;\
745        datainputs=input1,value1,input2,value2" \
746        "http://localhost/cgi-bin/wps.py"
747</PRE>
748
749<P>
750</LI>
751</UL>
752
753<P>
754
755<H1><A NAME="SECTION00080000000000000000">
756Using the PyWPS</A>
757</H1>
758   
759<H2><A NAME="SECTION00081000000000000000">
760Input</A>
761</H2>
762
763<P>
764To get response from PyWPS you have to formulate appropriate query string first. You can use HTTP GET style or HTTP POST style.
765
766<P>
767HTTP GET style is standard URL, with all parameters in one line. You can not set any <TT>ComplexValue</TT> data in your process via HTTP GET. Example:
768
769<P>
770<PRE>
771    wget -nv -q -O - --post-data="version=0.4.0&amp;service=Wps&amp;\
772            request=Execute&amp;Identifier=your_process&amp;\
773            datainputs=input1,value1,input2,value2"\
774            "http://localhost/cgi-bin/wps.py"
775</PRE>
776
777<P>
778In HTTP POST style, you send one "request" parameter, which contains XML input. The XML file can contain also included ComplexValue data, e.g. GML file. Example:
779
780<P>
781<PRE>
782    wget --post-file=execute-post.txt \
783            "http://localhost/pywps/wps.py" -O - -nv -q
784</PRE>
785
786<P>
787The <TT>execute-post.txt</TT> file can look like follows:
788    <PRE>
789request=&lt;?xml version="1.0" encoding="utf-8"?&gt;
790&lt;Execute service="WPS" version="0.4.0" store="false" status="false"
791xmlns="http://www.opengeospatial.net/wps"
792xmlns:ows="http://www.opengeospatial.net/ows"
793xmlns:xlink="http://www.w3.org/1999/xlink"
794xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
795xsi:schemaLocation="http://www.opengeospatial.net/wps/wpsDescribeProcess.xsd"&gt;
796    &lt;ows:Identifier&gt;searchpath&lt;/ows:Identifier&gt;
797    &lt;DataInputs&gt;
798        &lt;Input&gt;
799            &lt;ows:Identifier&gt;streetmap&lt;/ows:Identifier&gt;
800            &lt;ows:Title&gt;The map&lt;/ows:Title&gt;
801            &lt;ows:ComplexValue&gt;
802                &lt;Value&gt;
803&lt;ogr:FeatureCollection
804     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
805     xsi:schemaLocation="http://ogr.maptools.org/ donut.xsd"
806     xmlns:ogr="http://ogr.maptools.org/"
807     xmlns:gml="http://www.opengis.net/gml"&gt;
808  &lt;gml:boundedBy&gt;
809    &lt;gml:Box&gt;
810      &lt;gml:coord&gt;&lt;gml:X&gt;4.263256414560601e-14&lt;/gml:X&gt;
811        &lt;gml:Y&gt;-70.71067811865474&lt;/gml:Y&gt;&lt;/gml:coord&gt;
812      &lt;gml:coord&gt;&lt;gml:X&gt;141.4213562373095&lt;/gml:X&gt;
813      &lt;gml:Y&gt;70.71067811865474&lt;/gml:Y&gt;&lt;/gml:coord&gt;
814    &lt;/gml:Box&gt;
815  &lt;/gml:boundedBy&gt;                     
816  &lt;gml:featureMember&gt;
817    &lt;ogr:donut fid="F0"&gt;
818      &lt;ogr:geometryProperty&gt;&lt;gml:LineString&gt;&lt;gml:coordinates&gt;
819      70.710678118654755,70.710678118654741,0 141.42135623730951,0.0,
820      0 70.710678118654741,-70.710678118654741,0 0.000000000000043,
821      0.000000000000057,0 70.710678118654755,
822      70.710678118654741,0&lt;/gml:coordinates&gt;
823      &lt;/gml:LineString&gt;&lt;/ogr:geometryProperty&gt;
824    &lt;/ogr:donut&gt;
825  &lt;/gml:featureMember&gt;
826  &lt;gml:featureMember&gt;
827    &lt;ogr:donut fid="F0"&gt;
828      &lt;ogr:geometryProperty&gt;&lt;gml:LineString&gt;&lt;gml:coordinates&gt;50.000000000000014,
829      0.000000000000021,0 71.213203435596427,-21.213203435596419,0
830      92.426406871192853,0.0,0 71.213203435596427,21.213203435596423,0
831      50.000000000000014,0.000000000000021,0&lt;/gml:coordinates&gt;
832      &lt;/gml:LineString&gt;&lt;/ogr:geometryProperty&gt;
833    &lt;/ogr:donut&gt;
834  &lt;/gml:featureMember&gt;
835&lt;/ogr:FeatureCollection&gt;
836                &lt;/Value&gt;
837            &lt;/ows:ComplexValue&gt;
838        &lt;/Input&gt;
839
840        &lt;Input&gt;
841            &lt;ows:Identifier&gt;x1&lt;/ows:Identifier&gt;
842            &lt;ows:LiteralValue&gt;591679.31&lt;/ows:LiteralValue&gt;
843        &lt;/Input&gt;
844        &lt;Input&gt;
845            &lt;ows:Identifier&gt;y1&lt;/ows:Identifier&gt;
846            &lt;ows:LiteralValue&gt;4927205.07&lt;/ows:LiteralValue&gt;
847        &lt;/Input&gt;
848        &lt;Input&gt;
849            &lt;ows:Identifier&gt;x2&lt;/ows:Identifier&gt;
850            &lt;ows:LiteralValue&gt;608642.625&lt;/ows:LiteralValue&gt;
851        &lt;/Input&gt;
852        &lt;Input&gt;
853            &lt;ows:Identifier&gt;y2&lt;/ows:Identifier&gt;
854            &lt;ows:LiteralValue&gt;4915876.31&lt;/ows:LiteralValue&gt;
855        &lt;/Input&gt;
856    &lt;/DataInputs&gt;
857&lt;/Execute&gt;
858</PRE>
859
860<P>
861You can see, that there are 4 inputs in this process:
862
863<P>
864
865<OL>
866<LI>ComplexValue GML File
867</LI>
868<LI>x1 coordinate
869</LI>
870<LI>y1 coordinate
871</LI>
872<LI>x2 coordinate
873</LI>
874<LI>y2 coordinate
875   
876</LI>
877</OL>
878<H2><A NAME="SECTION00082000000000000000">
879Output</A>
880</H2>
881
882<P>
883The output from PyWPS can be either XML file or results of processes directly. In default configuration, no files are stored on the server, resulting values (maps) are
884    returned to the client. If you want to return XML file with outputs
885    encoding, you have to enable it in you process configuration with
886    option <TT>storeSupported</TT>:
887
888<P>
889<PRE>
890    self.storeSupported = "true"
891</PRE>
892
893<P>
894And you have to call the PyWPS with "store=true" option:
895
896<P>
897<PRE>
898    version=0.4.0&amp;service=Wps&amp;request=Execute&amp;Identifier=your_process&amp;\
899                    datainputs=input1,value1,input2,value2&amp;store=true
900</PRE>
901
902<P>
903Or in XML input:
904
905<P>
906<PRE>
907request=&lt;?xml version="1.0" encoding="utf-8"?&gt;
908&lt;Execute service="WPS" version="0.4.0" store="true" status="false"
909xmlns="http://www.opengeospatial.net/wps"
910xmlns:ows="http://www.opengeospatial.net/ows"
911xmlns:xlink="http://www.w3.org/1999/xlink"
912xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
913xsi:schemaLocation="http://www.opengeospatial.net/wps/wpsDescribeProcess.xsd"&gt;
914
915...
916</PRE>
917
918<P>
919This will cause PyWPS to look after <TT>self.status</TT> array in your process in form form
920    <PRE>
921    self.status = ["Message", Percent_Done]
922</PRE>
923    and generate XML file in statusLocation with this embed message. E.g.
924    <PRE>
925    self.status = ["Generating raster map", 50]
926</PRE>
927    will become
928
929<P>
930<PRE>
931    ...
932     &lt;Status&gt;
933                &lt;ProcessStarted message="Generating raster map" percentCompleted="50"/&gt;
934    &lt;/Status&gt;
935    ...
936</PRE>
937
938<P>
939
940<H1><A NAME="SECTION00090000000000000000">
941Sample process: <TT>addvalue</TT></A>
942</H1>
943    This sample process describes how to made your own WPS processes. Purpose of this process is:
944   
945<UL>
946<LI>Download input raster map from some server
947</LI>
948<LI>Convert it to integer values
949</LI>
950<LI>Add input value to each raster cell
951</LI>
952<LI>Convert raster to vector
953</LI>
954<LI>Export raster to TIFF and vector to GML. Vector file will be embed ot output XML file.
955   
956</LI>
957</UL>
958    <PRE>
959"""
960pywps process example:
961
962addvalue: Adds some value to raster map
963"""
964# Author:       Jachym Cepicky
965#               http://les-ejk.cz
966
967import os,time,string,sys
968
969class Process:
970    def __init__(self):
971
972        #
973        # Mandatory parameters
974        #
975
976        # Identifier - name of this process
977        self.Identifier = "addvalue"
978
979        # processVersion - version of this process
980        self.processVersion = "0.1"
981
982        # Title - title for this process
983        self.Title="Add some value to raster map"
984
985        #
986        # Inputs
987        # Inputs = [ {input1},{input2},{...} ]
988        #
989        self.Inputs = [
990                # This module has 2 inputs:
991                # 1) Input raster map
992                # 2) Value to be added
993
994                # 0
995                    {
996                        'Identifier':'input',
997                        'Title': 'Input raster map',
998                        'ComplexValueReference': {
999                            'Formats': [ "image/tiff" ]
1000                        },
1001                        'value':None
1002                    },
1003
1004                # 1
1005                    {
1006                        'Identifier': 'value',
1007                        'Title': 'Value to be added',
1008                        'LiteralValue': {"values":["*"]}, # will cause "AnyValue"
1009                        'dataType' : type(0.0),
1010                        'value':None
1011                    },
1012                ]
1013
1014        #
1015        # Output
1016        # The structure is not much different from the input structure
1017        #
1018        self.Outputs = [
1019                # 0
1020                {
1021                    'Identifier': 'vector',
1022                    'Title': 'Resulting vector map',
1023                    'ComplexValue': {
1024                        'Formats':["text/xml"],
1025                        },
1026                    'value':None
1027                },
1028                # 1
1029                {
1030                    'Identifier': 'raster',
1031                    'Title': 'Resulting raster map',
1032                    'ComplexValueReference': {
1033                        'Formats':["image/tiff"],
1034                        },
1035                    'value':None
1036                }
1037                # 2
1038                {
1039                    'Identifier': 'bbox',
1040                    'Title': 'Resulting map bbox',
1041                    'BoundingBoxValue': {}
1042                }
1043
1044
1045            ]
1046
1047        #
1048        # Optional attributes
1049        #
1050        #
1051        # storeSupported = "true" or "false"
1052        # should the resulting map be stored on our disk?
1053        self.storeSupported = "true"
1054
1055        #
1056        # statusSupported = "true" or "false" - run asynchronous
1057        self.statusSupported = "true"
1058
1059    ##############################################################
1060    # Execute part of the process
1061    def execute(self):
1062        """
1063        This function
1064            1) Imports the raster map
1065            2) runs r.mapcalc out=in+value
1066            3) Exports the raster map
1067            4) Sets the bounding box of resulting map
1068            5) runs r.to.vect
1069            6) Exports the vector map
1070        """
1071
1072        # for asynchronous process:
1073        self.status=["Importing the raster map", 5]
1074
1075        # 1) import
1076        if os.system("r.in.gdal -o in=%s out=input &gt;&amp;2" %\
1077                (self.DataInputs['input'])):
1078            return "Could not import raster map
1079
1080        # check for more than one channel
1081        for gdalinfoln in os.popen("gdalinfo %s" % \
1082                (self.DataInputs['input'])):
1083            if gdalinfoln.split()[0] == "Band" and gdalinfoln.split()[1] == "3":
1084                return "This module can work only with ONE channel raster maps"
1085
1086        # set right region
1087        os.system("""g.region rast=input &gt;&amp;2""")
1088
1089        # for asynchronous process:
1090        self.status=["Adding input value to raster map", 30]
1091
1092        # 2) add the value, convert to int
1093        os.system("""r.mapcalc output="int(input+%f)" """ % \
1094                (float(self.DataInputs['value'])))
1095
1096        # for asynchronous process:
1097        self.status=["Exporting TIFF image", 50]
1098
1099        # 3) export the tiff
1100        if os.system("r.out.gdal type=Int32 in=output out=%s 1&gt;&amp;2" %\
1101            "output.tif"):
1102            return "Could not export raster map"
1103
1104        # for asynchronous process:
1105        self.status=["Converting raster to vector", 75]
1106
1107        # 4) seting the bounding box
1108        region = {}
1109        for b in os.popen("g.region -g"):
1110            b = b.strip()
1111            key,val = b.split("=")
1112            region[key] = val
1113        self.DataOutputs['bbox'] = [region['s'],region['e'],region['n'],region['w']]
1114
1115        # 5) convert to vector
1116        if os.system("r.to.vect in=output out=output feature=area &gt;&amp;2"):
1117            return "Could not convert raster to vector"
1118
1119        # for asynchronous process:
1120        self.status=["Exporting GML file", 95]
1121
1122        # 6) export of vector map to GML
1123        if os.system(
1124            """v.out.ogr format=GML  in=output dsn=output.gml olayer=output &gt;&amp;2"""):
1125            return "Could not export vector to GML"
1126
1127        # setting output variables
1128        self.DataOutputs['vector'] = "output.gml"
1129        self.DataOutputs['raster'] = "output.tif"
1130
1131        # end
1132        return
1133</PRE>
1134
1135<P>
1136
1137<H1><A NAME="SECTION000100000000000000000">
1138KVP request encoding of <TT>addvalue</TT></A>
1139</H1>
1140    This process can be lunched with URL:
1141<BR>
1142http://localhost/cgi-bin/wps.py?service=wps&amp;version=0.4.0&amp;identifier=addvalue&amp;request=execute&amp;<SPAN CLASS="MATH"><IMG
1143 WIDTH="13" HEIGHT="36" ALIGN="MIDDLE" BORDER="0"
1144 SRC="img1.png"
1145 ALT="$\backslash$"></SPAN>
1146<BR>
1147datainputs=input,http://localhost/data/raster.tif,value,250&amp;status=true&amp;store=true
1148
1149<P>
1150
1151<H1><A NAME="SECTION000110000000000000000">
1152XML request encoding <TT>addvalue</TT></A>
1153</H1>
1154<PRE>
1155request=&lt;?xml version='1.0' encoding='UTF-8' standalone='yes'?&gt;
1156&lt;Execute service='wps' version='0.4.0' store='true' status='false'
1157    xmlns="http://www.opengeospatial.net/wps"
1158    xmlns:ows="http://www.opengeospatial.net/ows"&gt;
1159&lt;ows:Identifier&gt;addvalue&lt;/ows:Identifier&gt;
1160&lt;DataInputs&gt;
1161    &lt;Input&gt;
1162        &lt;ows:Identifier&gt;input&lt;/ows:Identifier&gt;
1163        &lt;ComplexValueReference reference='http://localhost/wps/data/soils.tif' /&gt;
1164    &lt;/Input&gt;
1165    &lt;Input&gt;
1166        &lt;ows:Identifier&gt;value&lt;/ows:Identifier&gt;
1167        &lt;LiteralValue&gt;250&lt;/LiteralValue&gt;
1168    &lt;/Input&gt;
1169    &lt;!-- Input&gt;
1170        &lt;ows:Identifier&gt;bbox&lt;/ows:Identifier&gt;
1171        &lt;BoundingBoxValue&gt;
1172            &lt;BoundingBox&gt;
1173                &lt;LowerCorner&gt;-1 -1&lt;/LowerCorner&gt;
1174                &lt;UpperCorner&gt;10 10&lt;/UpperCorner&gt;
1175            &lt;/BoundingBox&gt;
1176        &lt;/BoundingBoxValue&gt;
1177    &lt;/Input --&gt;
1178&lt;/DataInputs&gt;
1179&lt;/Execute&gt;
1180</PRE>
1181
1182<P>
1183
1184<H1><A NAME="SECTION000120000000000000000">
1185Licence of PyWPS</A>
1186</H1>
1187
1188<P>
1189<DIV ALIGN="CENTER">
1190<BIG CLASS="XLARGE">The GNU General Public License</BIG>
1191</DIV>
1192<P>
1193<DIV ALIGN="CENTER"></DIV>
1194<P>
1195<DIV ALIGN="CENTER">Version 2, June 1991
1196</DIV>
1197<P>
1198<DIV ALIGN="CENTER">Copyright &#169; 1989, 1991 Free Software Foundation, Inc.
1199</DIV>
1200<P>
1201<DIV ALIGN="CENTER"></DIV>
1202<P><P>
1203<BR>
1204<DIV ALIGN="CENTER"></DIV>
1205<P>
1206<DIV ALIGN="CENTER">51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA
1207</DIV>
1208<P>
1209<DIV ALIGN="CENTER"></DIV>
1210<P><P>
1211<BR>
1212<DIV ALIGN="CENTER"></DIV>
1213<P>
1214<DIV ALIGN="CENTER">Everyone is permitted to copy and distribute verbatim copies
1215of this license document, but changing it is not allowed.
1216
1217
1218</DIV>
1219
1220<P>
1221
1222<H3>Preamble:</H3>
1223<DIV CLASS="ABSTRACT">
1224The licenses for most software are designed to take away your freedom to
1225share and change it.  By contrast, the GNU General Public License is
1226intended to guarantee your freedom to share and change free software--to
1227make sure the software is free for all its users.  This General Public
1228License applies to most of the Free Software Foundation's software and to
1229any other program whose authors commit to using it.  (Some other Free
1230Software Foundation software is covered by the GNU Library General Public
1231License instead.)  You can apply it to your programs, too.
1232
1233<P>
1234When we speak of free software, we are referring to freedom, not price.
1235Our General Public Licenses are designed to make sure that you have the
1236freedom to distribute copies of free software (and charge for this service
1237if you wish), that you receive source code or can get it if you want it,
1238that you can change the software or use pieces of it in new free programs;
1239and that you know you can do these things.
1240
1241<P>
1242To protect your rights, we need to make restrictions that forbid anyone to
1243deny you these rights or to ask you to surrender the rights.  These
1244restrictions translate to certain responsibilities for you if you
1245distribute copies of the software, or if you modify it.
1246
1247<P>
1248For example, if you distribute copies of such a program, whether gratis or
1249for a fee, you must give the recipients all the rights that you have.  You
1250must make sure that they, too, receive or can get the source code.  And
1251you must show them these terms so they know their rights.
1252
1253<P>
1254We protect your rights with two steps: (1) copyright the software, and (2)
1255offer you this license which gives you legal permission to copy,
1256distribute and/or modify the software.
1257
1258<P>
1259Also, for each author's protection and ours, we want to make certain that
1260everyone understands that there is no warranty for this free software.  If
1261the software is modified by someone else and passed on, we want its
1262recipients to know that what they have is not the original, so that any
1263problems introduced by others will not reflect on the original authors'
1264reputations.
1265
1266<P>
1267Finally, any free program is threatened constantly by software patents.
1268We wish to avoid the danger that redistributors of a free program will
1269individually obtain patent licenses, in effect making the program
1270proprietary.  To prevent this, we have made it clear that any patent must
1271be licensed for everyone's free use or not licensed at all.
1272
1273<P>
1274The precise terms and conditions for copying, distribution and
1275modification follow.
1276</DIV>
1277<P>
1278
1279<P>
1280<DIV ALIGN="CENTER">
1281<BIG CLASS="XLARGE">GNU G<SMALL>ENERAL </SMALL>P<SMALL>UBLIC </SMALL>L<SMALL>ICENSE
1282
1283<BR></SMALL>
1284<BR>
1285T<SMALL>ERMS AND </SMALL>C<SMALL>ONDITIONS </SMALL>F<SMALL>OR </SMALL>C<SMALL>OPYING, </SMALL>D<SMALL>ISTRIBUTION AND </SMALL>M<SMALL>ODIFICATION</SMALL></BIG>
1286
1287</DIV>
1288
1289<P>
1290
1291<OL>
1292<LI><P>
1293This License applies to any program or other work which contains a notice
1294placed by the copyright holder saying it may be distributed under the
1295terms of this General Public License.  The ``Program'', below, refers to
1296any such program or work, and a ``work based on the Program'' means either
1297the Program or any derivative work under copyright law: that is to say, a
1298work containing the Program or a portion of it, either verbatim or with
1299modifications and/or translated into another language.  (Hereinafter,
1300translation is included without limitation in the term ``modification''.)
1301Each licensee is addressed as ``you''.
1302
1303<P>
1304Activities other than copying, distribution and modification are not
1305covered by this License; they are outside its scope.  The act of
1306running the Program is not restricted, and the output from the Program
1307is covered only if its contents constitute a work based on the
1308Program (independent of having been made by running the Program).
1309Whether that is true depends on what the Program does.
1310
1311<P>
1312</LI>
1313<LI>You may copy and distribute verbatim copies of the Program's source
1314  code as you receive it, in any medium, provided that you conspicuously
1315  and appropriately publish on each copy an appropriate copyright notice
1316  and disclaimer of warranty; keep intact all the notices that refer to
1317  this License and to the absence of any warranty; and give any other
1318  recipients of the Program a copy of this License along with the Program.
1319
1320<P>
1321You may charge a fee for the physical act of transferring a copy, and you
1322may at your option offer warranty protection in exchange for a fee.
1323
1324<P>
1325</LI>
1326<LI><P>
1327You may modify your copy or copies of the Program or any portion
1328of it, thus forming a work based on the Program, and copy and
1329distribute such modifications or work under the terms of Section 1
1330above, provided that you also meet all of these conditions:
1331
1332<P>
1333
1334<OL>
1335<LI><P>
1336You must cause the modified files to carry prominent notices stating that
1337you changed the files and the date of any change.
1338
1339<P>
1340</LI>
1341<LI><P>
1342You must cause any work that you distribute or publish, that in
1343whole or in part contains or is derived from the Program or any
1344part thereof, to be licensed as a whole at no charge to all third
1345parties under the terms of this License.
1346
1347<P>
1348</LI>
1349<LI>If the modified program normally reads commands interactively
1350when run, you must cause it, when started running for such
1351interactive use in the most ordinary way, to print or display an
1352announcement including an appropriate copyright notice and a
1353notice that there is no warranty (or else, saying that you provide
1354a warranty) and that users may redistribute the program under
1355these conditions, and telling the user how to view a copy of this
1356License.  (Exception: if the Program itself is interactive but
1357does not normally print such an announcement, your work based on
1358the Program is not required to print an announcement.)
1359
1360<P>
1361</LI>
1362</OL>
1363
1364<P>
1365These requirements apply to the modified work as a whole.  If
1366identifiable sections of that work are not derived from the Program,
1367and can be reasonably considered independent and separate works in
1368themselves, then this License, and its terms, do not apply to those
1369sections when you distribute them as separate works.  But when you
1370distribute the same sections as part of a whole which is a work based
1371on the Program, the distribution of the whole must be on the terms of
1372this License, whose permissions for other licensees extend to the
1373entire whole, and thus to each and every part regardless of who wrote it.
1374
1375<P>
1376Thus, it is not the intent of this section to claim rights or contest
1377your rights to work written entirely by you; rather, the intent is to
1378exercise the right to control the distribution of derivative or
1379collective works based on the Program.
1380
1381<P>
1382In addition, mere aggregation of another work not based on the Program
1383with the Program (or with a work based on the Program) on a volume of
1384a storage or distribution medium does not bring the other work under
1385the scope of this License.
1386
1387<P>
1388</LI>
1389<LI>You may copy and distribute the Program (or a work based on it,
1390under Section 2) in object code or executable form under the terms of
1391Sections 1 and 2 above provided that you also do one of the following:
1392
1393<P>
1394
1395<OL>
1396<LI><P>
1397Accompany it with the complete corresponding machine-readable
1398source code, which must be distributed under the terms of Sections
13991 and 2 above on a medium customarily used for software interchange; or,
1400
1401<P>
1402</LI>
1403<LI><P>
1404Accompany it with a written offer, valid for at least three
1405years, to give any third party, for a charge no more than your
1406cost of physically performing source distribution, a complete
1407machine-readable copy of the corresponding source code, to be
1408distributed under the terms of Sections 1 and 2 above on a medium
1409customarily used for software interchange; or,
1410
1411<P>
1412</LI>
1413<LI><P>
1414Accompany it with the information you received as to the offer
1415to distribute corresponding source code.  (This alternative is
1416allowed only for noncommercial distribution and only if you
1417received the program in object code or executable form with such
1418an offer, in accord with Subsection b above.)
1419
1420<P>
1421</LI>
1422</OL>
1423
1424<P>
1425The source code for a work means the preferred form of the work for
1426making modifications to it.  For an executable work, complete source
1427code means all the source code for all modules it contains, plus any
1428associated interface definition files, plus the scripts used to
1429control compilation and installation of the executable.  However, as a
1430special exception, the source code distributed need not include
1431anything that is normally distributed (in either source or binary
1432form) with the major components (compiler, kernel, and so on) of the
1433operating system on which the executable runs, unless that component
1434itself accompanies the executable.
1435
1436<P>
1437If distribution of executable or object code is made by offering
1438access to copy from a designated place, then offering equivalent
1439access to copy the source code from the same place counts as
1440distribution of the source code, even though third parties are not
1441compelled to copy the source along with the object code.
1442
1443<P>
1444</LI>
1445<LI>You may not copy, modify, sublicense, or distribute the Program
1446except as expressly provided under this License.  Any attempt
1447otherwise to copy, modify, sublicense or distribute the Program is
1448void, and will automatically terminate your rights under this License.
1449However, parties who have received copies, or rights, from you under
1450this License will not have their licenses terminated so long as such
1451parties remain in full compliance.
1452
1453<P>
1454</LI>
1455<LI>You are not required to accept this License, since you have not
1456signed it.  However, nothing else grants you permission to modify or
1457distribute the Program or its derivative works.  These actions are
1458prohibited by law if you do not accept this License.  Therefore, by
1459modifying or distributing the Program (or any work based on the
1460Program), you indicate your acceptance of this License to do so, and
1461all its terms and conditions for copying, distributing or modifying
1462the Program or works based on it.
1463
1464<P>
1465</LI>
1466<LI>Each time you redistribute the Program (or any work based on the
1467Program), the recipient automatically receives a license from the
1468original licensor to copy, distribute or modify the Program subject to
1469these terms and conditions.  You may not impose any further
1470restrictions on the recipients' exercise of the rights granted herein.
1471You are not responsible for enforcing compliance by third parties to
1472this License.
1473
1474<P>
1475</LI>
1476<LI>If, as a consequence of a court judgment or allegation of patent
1477infringement or for any other reason (not limited to patent issues),
1478conditions are imposed on you (whether by court order, agreement or
1479otherwise) that contradict the conditions of this License, they do not
1480excuse you from the conditions of this License.  If you cannot
1481distribute so as to satisfy simultaneously your obligations under this
1482License and any other pertinent obligations, then as a consequence you
1483may not distribute the Program at all.  For example, if a patent
1484license would not permit royalty-free redistribution of the Program by
1485all those who receive copies directly or indirectly through you, then
1486the only way you could satisfy both it and this License would be to
1487refrain entirely from distribution of the Program.
1488
1489<P>
1490If any portion of this section is held invalid or unenforceable under
1491any particular circumstance, the balance of the section is intended to
1492apply and the section as a whole is intended to apply in other
1493circumstances.
1494
1495<P>
1496It is not the purpose of this section to induce you to infringe any
1497patents or other property right claims or to contest validity of any
1498such claims; this section has the sole purpose of protecting the
1499integrity of the free software distribution system, which is
1500implemented by public license practices.  Many people have made
1501generous contributions to the wide range of software distributed
1502through that system in reliance on consistent application of that
1503system; it is up to the author/donor to decide if he or she is willing
1504to distribute software through any other system and a licensee cannot
1505impose that choice.
1506
1507<P>
1508This section is intended to make thoroughly clear what is believed to
1509be a consequence of the rest of this License.
1510
1511<P>
1512</LI>
1513<LI>If the distribution and/or use of the Program is restricted in
1514certain countries either by patents or by copyrighted interfaces, the
1515original copyright holder who places the Program under this License
1516may add an explicit geographical distribution limitation excluding
1517those countries, so that distribution is permitted only in or among
1518countries not thus excluded.  In such case, this License incorporates
1519the limitation as if written in the body of this License.
1520
1521<P>
1522</LI>
1523<LI>The Free Software Foundation may publish revised and/or new versions
1524of the General Public License from time to time.  Such new versions will
1525be similar in spirit to the present version, but may differ in detail to
1526address new problems or concerns.
1527
1528<P>
1529Each version is given a distinguishing version number.  If the Program
1530specifies a version number of this License which applies to it and ``any
1531later version'', you have the option of following the terms and conditions
1532either of that version or of any later version published by the Free
1533Software Foundation.  If the Program does not specify a version number of
1534this License, you may choose any version ever published by the Free Software
1535Foundation.
1536
1537<P>
1538</LI>
1539<LI>If you wish to incorporate parts of the Program into other free
1540programs whose distribution conditions are different, write to the author
1541to ask for permission.  For software which is copyrighted by the Free
1542Software Foundation, write to the Free Software Foundation; we sometimes
1543make exceptions for this.  Our decision will be guided by the two goals
1544of preserving the free status of all derivatives of our free software and
1545of promoting the sharing and reuse of software generally.
1546
1547<P>
1548<DIV ALIGN="CENTER">
1549<BIG CLASS="XLARGE">
1550N<SMALL>O </SMALL>W<SMALL>ARRANTY
1551</SMALL></BIG>
1552
1553</DIV>
1554
1555<P>
1556</LI>
1557<LI>B<SMALL>ECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
1558FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  </SMALL>E<SMALL>XCEPT WHEN
1559OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
1560PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
1561OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
1562MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  </SMALL>T<SMALL>HE ENTIRE RISK AS
1563TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  </SMALL>S<SMALL>HOULD THE
1564PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
1565REPAIR OR CORRECTION.</SMALL>
1566
1567<P>
1568</LI>
1569<LI>I<SMALL>N NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
1570WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
1571REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
1572INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
1573OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
1574TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
1575YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
1576PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
1577POSSIBILITY OF SUCH DAMAGES.</SMALL>
1578
1579<P>
1580</LI>
1581</OL>
1582
1583<P>
1584<DIV ALIGN="CENTER">
1585<BIG CLASS="XLARGE">E<SMALL>ND OF </SMALL>T<SMALL>ERMS AND </SMALL>C<SMALL>ONDITIONS</SMALL></BIG>
1586
1587</DIV>
1588
1589<P>
1590
1591<H1><A NAME="SECTION000130000000000000000">
1592Licence of this document</A>
1593</H1>
1594
1595<P>
1596<DIV ALIGN="CENTER">
1597</DIV>
1598<P>
1599<DIV ALIGN="CENTER"><BIG CLASS="XLARGE">GNU Free Documentation License</BIG>
1600</DIV>
1601<P>
1602<DIV ALIGN="CENTER">Version 1.2, November 2002
1603</DIV>
1604<P>
1605<DIV ALIGN="CENTER">Copyright &#169;2000,2001,2002  Free Software Foundation, Inc.
1606</DIV>
1607<P>
1608<DIV ALIGN="CENTER"></DIV>
1609<P><P>
1610<BR>
1611<DIV ALIGN="CENTER"></DIV>
1612<P>
1613<DIV ALIGN="CENTER">51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
1614</DIV>
1615<P>
1616<DIV ALIGN="CENTER"></DIV>
1617<P><P>
1618<BR>
1619<DIV ALIGN="CENTER"></DIV>
1620<P>
1621<DIV ALIGN="CENTER">Everyone is permitted to copy and distribute verbatim copies
1622 of this license document, but changing it is not allowed.
1623
1624</DIV>
1625
1626<P>
1627<DIV ALIGN="CENTER">
1628<B><BIG CLASS="LARGE">Preamble</BIG></B>
1629
1630</DIV>
1631
1632<P>
1633The purpose of this License is to make a manual, textbook, or other
1634functional and useful document "free" in the sense of freedom: to
1635assure everyone the effective freedom to copy and redistribute it,
1636with or without modifying it, either commercially or noncommercially.
1637Secondarily, this License preserves for the author and publisher a way
1638to get credit for their work, while not being considered responsible
1639for modifications made by others.
1640
1641<P>
1642This License is a kind of "copyleft", which means that derivative
1643works of the document must themselves be free in the same sense.  It
1644complements the GNU General Public License, which is a copyleft
1645license designed for free software.
1646
1647<P>
1648We have designed this License in order to use it for manuals for free
1649software, because free software needs free documentation: a free
1650program should come with manuals providing the same freedoms that the
1651software does.  But this License is not limited to software manuals;
1652it can be used for any textual work, regardless of subject matter or
1653whether it is published as a printed book.  We recommend this License
1654principally for works whose purpose is instruction or reference.
1655
1656<P>
1657<DIV ALIGN="CENTER">
1658<BIG CLASS="XLARGE"><B>1. APPLICABILITY AND DEFINITIONS</B></BIG>
1659
1660</DIV>
1661
1662<P>
1663This License applies to any manual or other work, in any medium, that
1664contains a notice placed by the copyright holder saying it can be
1665distributed under the terms of this License.  Such a notice grants a
1666world-wide, royalty-free license, unlimited in duration, to use that
1667work under the conditions stated herein.  The <SPAN  CLASS="textbf">"Document"</SPAN>, below,
1668refers to any such manual or work.  Any member of the public is a
1669licensee, and is addressed as <SPAN  CLASS="textbf">"you"</SPAN>.  You accept the license if you
1670copy, modify or distribute the work in a way requiring permission
1671under copyright law.
1672
1673<P>
1674A <SPAN  CLASS="textbf">"Modified Version"</SPAN> of the Document means any work containing the
1675Document or a portion of it, either copied verbatim, or with
1676modifications and/or translated into another language.
1677
1678<P>
1679A <SPAN  CLASS="textbf">"Secondary Section"</SPAN> is a named appendix or a front-matter section of
1680the Document that deals exclusively with the relationship of the
1681publishers or authors of the Document to the Document's overall subject
1682(or to related matters) and contains nothing that could fall directly
1683within that overall subject.  (Thus, if the Document is in part a
1684textbook of mathematics, a Secondary Section may not explain any
1685mathematics.)  The relationship could be a matter of historical
1686connection with the subject or with related matters, or of legal,
1687commercial, philosophical, ethical or political position regarding
1688them.
1689
1690<P>
1691The <SPAN  CLASS="textbf">"Invariant Sections"</SPAN> are certain Secondary Sections whose titles
1692are designated, as being those of Invariant Sections, in the notice
1693that says that the Document is released under this License.  If a
1694section does not fit the above definition of Secondary then it is not
1695allowed to be designated as Invariant.  The Document may contain zero
1696Invariant Sections.  If the Document does not identify any Invariant
1697Sections then there are none.
1698
1699<P>
1700The <SPAN  CLASS="textbf">"Cover Texts"</SPAN> are certain short passages of text that are listed,
1701as Front-Cover Texts or Back-Cover Texts, in the notice that says that
1702the Document is released under this License.  A Front-Cover Text may
1703be at most 5 words, and a Back-Cover Text may be at most 25 words.
1704
1705<P>
1706A <SPAN  CLASS="textbf">"Transparent"</SPAN> copy of the Document means a machine-readable copy,
1707represented in a format whose specification is available to the
1708general public, that is suitable for revising the document
1709straightforwardly with generic text editors or (for images composed of
1710pixels) generic paint programs or (for drawings) some widely available
1711drawing editor, and that is suitable for input to text formatters or
1712for automatic translation to a variety of formats suitable for input
1713to text formatters.  A copy made in an otherwise Transparent file
1714format whose markup, or absence of markup, has been arranged to thwart
1715or discourage subsequent modification by readers is not Transparent.
1716An image format is not Transparent if used for any substantial amount
1717of text.  A copy that is not "Transparent" is called <SPAN  CLASS="textbf">"Opaque"</SPAN>.
1718
1719<P>
1720Examples of suitable formats for Transparent copies include plain
1721ASCII without markup, Texinfo input format, LaTeX input format, SGML
1722or XML using a publicly available DTD, and standard-conforming simple
1723HTML, PostScript or PDF designed for human modification.  Examples of
1724transparent image formats include PNG, XCF and JPG.  Opaque formats
1725include proprietary formats that can be read and edited only by
1726proprietary word processors, SGML or XML for which the DTD and/or
1727processing tools are not generally available, and the
1728machine-generated HTML, PostScript or PDF produced by some word
1729processors for output purposes only.
1730
1731<P>
1732The <SPAN  CLASS="textbf">"Title Page"</SPAN> means, for a printed book, the title page itself,
1733plus such following pages as are needed to hold, legibly, the material
1734this License requires to appear in the title page.  For works in
1735formats which do not have any title page as such, "Title Page" means
1736the text near the most prominent appearance of the work's title,
1737preceding the beginning of the body of the text.
1738
1739<P>
1740A section <SPAN  CLASS="textbf">"Entitled XYZ"</SPAN> means a named subunit of the Document whose
1741title either is precisely XYZ or contains XYZ in parentheses following
1742text that translates XYZ in another language.  (Here XYZ stands for a
1743specific section name mentioned below, such as <SPAN  CLASS="textbf">"Acknowledgements"</SPAN>,
1744<SPAN  CLASS="textbf">"Dedications"</SPAN>, <SPAN  CLASS="textbf">"Endorsements"</SPAN>, or <SPAN  CLASS="textbf">"History"</SPAN>.) 
1745To <SPAN  CLASS="textbf">"Preserve the Title"</SPAN>
1746of such a section when you modify the Document means that it remains a
1747section "Entitled XYZ" according to this definition.
1748
1749<P>
1750The Document may include Warranty Disclaimers next to the notice which
1751states that this License applies to the Document.  These Warranty
1752Disclaimers are considered to be included by reference in this
1753License, but only as regards disclaiming warranties: any other
1754implication that these Warranty Disclaimers may have is void and has
1755no effect on the meaning of this License.
1756
1757<P>
1758<DIV ALIGN="CENTER">
1759<BIG CLASS="XLARGE"><B>2. VERBATIM COPYING</B></BIG>
1760
1761</DIV>
1762
1763<P>
1764You may copy and distribute the Document in any medium, either
1765commercially or noncommercially, provided that this License, the
1766copyright notices, and the license notice saying this License applies
1767to the Document are reproduced in all copies, and that you add no other
1768conditions whatsoever to those of this License.  You may not use
1769technical measures to obstruct or control the reading or further
1770copying of the copies you make or distribute.  However, you may accept
1771compensation in exchange for copies.  If you distribute a large enough
1772number of copies you must also follow the conditions in section 3.
1773
1774<P>
1775You may also lend copies, under the same conditions stated above, and
1776you may publicly display copies.
1777
1778<P>
1779<DIV ALIGN="CENTER">
1780<BIG CLASS="XLARGE"><B>3. COPYING IN QUANTITY</B></BIG>
1781
1782</DIV>
1783
1784<P>
1785If you publish printed copies (or copies in media that commonly have
1786printed covers) of the Document, numbering more than 100, and the
1787Document's license notice requires Cover Texts, you must enclose the
1788copies in covers that carry, clearly and legibly, all these Cover
1789Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
1790the back cover.  Both covers must also clearly and legibly identify
1791you as the publisher of these copies.  The front cover must present
1792the full title with all words of the title equally prominent and
1793visible.  You may add other material on the covers in addition.
1794Copying with changes limited to the covers, as long as they preserve
1795the title of the Document and satisfy these conditions, can be treated
1796as verbatim copying in other respects.
1797
1798<P>
1799If the required texts for either cover are too voluminous to fit
1800legibly, you should put the first ones listed (as many as fit
1801reasonably) on the actual cover, and continue the rest onto adjacent
1802pages.
1803
1804<P>
1805If you publish or distribute Opaque copies of the Document numbering
1806more than 100, you must either include a machine-readable Transparent
1807copy along with each Opaque copy, or state in or with each Opaque copy
1808a computer-network location from which the general network-using
1809public has access to download using public-standard network protocols
1810a complete Transparent copy of the Document, free of added material.
1811If you use the latter option, you must take reasonably prudent steps,
1812when you begin distribution of Opaque copies in quantity, to ensure
1813that this Transparent copy will remain thus accessible at the stated
1814location until at least one year after the last time you distribute an
1815Opaque copy (directly or through your agents or retailers) of that
1816edition to the public.
1817
1818<P>
1819It is requested, but not required, that you contact the authors of the
1820Document well before redistributing any large number of copies, to give
1821them a chance to provide you with an updated version of the Document.
1822
1823<P>
1824<DIV ALIGN="CENTER">
1825<BIG CLASS="XLARGE"><B>4. MODIFICATIONS</B></BIG>
1826
1827</DIV>
1828
1829<P>
1830You may copy and distribute a Modified Version of the Document under
1831the conditions of sections 2 and 3 above, provided that you release
1832the Modified Version under precisely this License, with the Modified
1833Version filling the role of the Document, thus licensing distribution
1834and modification of the Modified Version to whoever possesses a copy
1835of it.  In addition, you must do these things in the Modified Version:
1836
1837<P>
1838<DL COMPACT>
1839<DT>A.</DT>
1840<DD>Use in the Title Page (and on the covers, if any) a title distinct
1841   from that of the Document, and from those of previous versions
1842   (which should, if there were any, be listed in the History section
1843   of the Document).  You may use the same title as a previous version
1844   if the original publisher of that version gives permission.
1845
1846<P>
1847</DD>
1848<DT>B.</DT>
1849<DD>List on the Title Page, as authors, one or more persons or entities
1850   responsible for authorship of the modifications in the Modified
1851   Version, together with at least five of the principal authors of the
1852   Document (all of its principal authors, if it has fewer than five),
1853   unless they release you from this requirement.
1854
1855<P>
1856</DD>
1857<DT>C.</DT>
1858<DD>State on the Title page the name of the publisher of the
1859   Modified Version, as the publisher.
1860
1861<P>
1862</DD>
1863<DT>D.</DT>
1864<DD>Preserve all the copyright notices of the Document.
1865
1866<P>
1867</DD>
1868<DT>E.</DT>
1869<DD>Add an appropriate copyright notice for your modifications
1870   adjacent to the other copyright notices.
1871
1872<P>
1873</DD>
1874<DT>F.</DT>
1875<DD>Include, immediately after the copyright notices, a license notice
1876   giving the public permission to use the Modified Version under the
1877   terms of this License, in the form shown in the Addendum below.
1878
1879<P>
1880</DD>
1881<DT>G.</DT>
1882<DD>Preserve in that license notice the full lists of Invariant Sections
1883   and required Cover Texts given in the Document's license notice.
1884
1885<P>
1886</DD>
1887<DT>H.</DT>
1888<DD>Include an unaltered copy of this License.
1889
1890<P>
1891</DD>
1892<DT>I.</DT>
1893<DD>Preserve the section Entitled "History", Preserve its Title, and add
1894   to it an item stating at least the title, year, new authors, and
1895   publisher of the Modified Version as given on the Title Page.  If
1896   there is no section Entitled "History" in the Document, create one
1897   stating the title, year, authors, and publisher of the Document as
1898   given on its Title Page, then add an item describing the Modified
1899   Version as stated in the previous sentence.
1900
1901<P>
1902</DD>
1903<DT>J.</DT>
1904<DD>Preserve the network location, if any, given in the Document for
1905   public access to a Transparent copy of the Document, and likewise
1906   the network locations given in the Document for previous versions
1907   it was based on.  These may be placed in the "History" section.
1908   You may omit a network location for a work that was published at
1909   least four years before the Document itself, or if the original
1910   publisher of the version it refers to gives permission.
1911
1912<P>
1913</DD>
1914<DT>K.</DT>
1915<DD>For any section Entitled "Acknowledgements" or "Dedications",
1916   Preserve the Title of the section, and preserve in the section all
1917   the substance and tone of each of the contributor acknowledgements
1918   and/or dedications given therein.
1919
1920<P>
1921</DD>
1922<DT>L.</DT>
1923<DD>Preserve all the Invariant Sections of the Document,
1924   unaltered in their text and in their titles.  Section numbers
1925   or the equivalent are not considered part of the section titles.
1926
1927<P>
1928</DD>
1929<DT>M.</DT>
1930<DD>Delete any section Entitled "Endorsements".  Such a section
1931   may not be included in the Modified Version.
1932
1933<P>
1934</DD>
1935<DT>N.</DT>
1936<DD>Do not retitle any existing section to be Entitled "Endorsements"
1937   or to conflict in title with any Invariant Section.
1938
1939<P>
1940</DD>
1941<DT>O.</DT>
1942<DD>Preserve any Warranty Disclaimers.
1943</DD>
1944</DL>
1945
1946<P>
1947If the Modified Version includes new front-matter sections or
1948appendices that qualify as Secondary Sections and contain no material
1949copied from the Document, you may at your option designate some or all
1950of these sections as invariant.  To do this, add their titles to the
1951list of Invariant Sections in the Modified Version's license notice.
1952These titles must be distinct from any other section titles.
1953
1954<P>
1955You may add a section Entitled "Endorsements", provided it contains
1956nothing but endorsements of your Modified Version by various
1957parties-for example, statements of peer review or that the text has
1958been approved by an organization as the authoritative definition of a
1959standard.
1960
1961<P>
1962You may add a passage of up to five words as a Front-Cover Text, and a
1963passage of up to 25 words as a Back-Cover Text, to the end of the list
1964of Cover Texts in the Modified Version.  Only one passage of
1965Front-Cover Text and one of Back-Cover Text may be added by (or
1966through arrangements made by) any one entity.  If the Document already
1967includes a cover text for the same cover, previously added by you or
1968by arrangement made by the same entity you are acting on behalf of,
1969you may not add another; but you may replace the old one, on explicit
1970permission from the previous publisher that added the old one.
1971
1972<P>
1973The author(s) and publisher(s) of the Document do not by this License
1974give permission to use their names for publicity for or to assert or
1975imply endorsement of any Modified Version.
1976
1977<P>
1978<DIV ALIGN="CENTER">
1979<BIG CLASS="XLARGE"><B>5. COMBINING DOCUMENTS</B></BIG>
1980
1981</DIV>
1982
1983<P>
1984You may combine the Document with other documents released under this
1985License, under the terms defined in section 4 above for modified
1986versions, provided that you include in the combination all of the
1987Invariant Sections of all of the original documents, unmodified, and
1988list them all as Invariant Sections of your combined work in its
1989license notice, and that you preserve all their Warranty Disclaimers.
1990
1991<P>
1992The combined work need only contain one copy of this License, and
1993multiple identical Invariant Sections may be replaced with a single
1994copy.  If there are multiple Invariant Sections with the same name but
1995different contents, make the title of each such section unique by
1996adding at the end of it, in parentheses, the name of the original
1997author or publisher of that section if known, or else a unique number.
1998Make the same adjustment to the section titles in the list of
1999Invariant Sections in the license notice of the combined work.
2000
2001<P>
2002In the combination, you must combine any sections Entitled "History"
2003in the various original documents, forming one section Entitled
2004"History"; likewise combine any sections Entitled "Acknowledgements",
2005and any sections Entitled "Dedications".  You must delete all sections
2006Entitled "Endorsements".
2007
2008<P>
2009<DIV ALIGN="CENTER">
2010<BIG CLASS="XLARGE"><B>6. COLLECTIONS OF DOCUMENTS</B></BIG>
2011
2012</DIV>
2013
2014<P>
2015You may make a collection consisting of the Document and other documents
2016released under this License, and replace the individual copies of this
2017License in the various documents with a single copy that is included in
2018the collection, provided that you follow the rules of this License for
2019verbatim copying of each of the documents in all other respects.
2020
2021<P>
2022You may extract a single document from such a collection, and distribute
2023it individually under this License, provided you insert a copy of this
2024License into the extracted document, and follow this License in all
2025other respects regarding verbatim copying of that document.
2026
2027<P>
2028<DIV ALIGN="CENTER">
2029<BIG CLASS="XLARGE"><B>7. AGGREGATION WITH INDEPENDENT WORKS</B></BIG>
2030
2031</DIV>
2032
2033<P>
2034A compilation of the Document or its derivatives with other separate
2035and independent documents or works, in or on a volume of a storage or
2036distribution medium, is called an "aggregate" if the copyright
2037resulting from the compilation is not used to limit the legal rights
2038of the compilation's users beyond what the individual works permit.
2039When the Document is included in an aggregate, this License does not
2040apply to the other works in the aggregate which are not themselves
2041derivative works of the Document.
2042
2043<P>
2044If the Cover Text requirement of section 3 is applicable to these
2045copies of the Document, then if the Document is less than one half of
2046the entire aggregate, the Document's Cover Texts may be placed on
2047covers that bracket the Document within the aggregate, or the
2048electronic equivalent of covers if the Document is in electronic form.
2049Otherwise they must appear on printed covers that bracket the whole
2050aggregate.
2051
2052<P>
2053<DIV ALIGN="CENTER">
2054<BIG CLASS="XLARGE"><B>8. TRANSLATION</B></BIG>
2055
2056</DIV>
2057
2058<P>
2059Translation is considered a kind of modification, so you may
2060distribute translations of the Document under the terms of section 4.
2061Replacing Invariant Sections with translations requires special
2062permission from their copyright holders, but you may include
2063translations of some or all Invariant Sections in addition to the
2064original versions of these Invariant Sections.  You may include a
2065translation of this License, and all the license notices in the
2066Document, and any Warranty Disclaimers, provided that you also include
2067the original English version of this License and the original versions
2068of those notices and disclaimers.  In case of a disagreement between
2069the translation and the original version of this License or a notice
2070or disclaimer, the original version will prevail.
2071
2072<P>
2073If a section in the Document is Entitled "Acknowledgements",
2074"Dedications", or "History", the requirement (section 4) to Preserve
2075its Title (section 1) will typically require changing the actual
2076title.
2077
2078<P>
2079<DIV ALIGN="CENTER">
2080<BIG CLASS="XLARGE"><B>9. TERMINATION</B></BIG>
2081
2082</DIV>
2083
2084<P>
2085You may not copy, modify, sublicense, or distribute the Document except
2086as expressly provided for under this License.  Any other attempt to
2087copy, modify, sublicense or distribute the Document is void, and will
2088automatically terminate your rights under this License.  However,
2089parties who have received copies, or rights, from you under this
2090License will not have their licenses terminated so long as such
2091parties remain in full compliance.
2092
2093<P>
2094<DIV ALIGN="CENTER">
2095<BIG CLASS="XLARGE"><B>10. FUTURE REVISIONS OF THIS LICENSE</B></BIG>
2096
2097</DIV>
2098
2099<P>
2100The Free Software Foundation may publish new, revised versions
2101of the GNU Free Documentation License from time to time.  Such new
2102versions will be similar in spirit to the present version, but may
2103differ in detail to address new problems or concerns.  See
2104http://www.gnu.org/copyleft/.
2105
2106<P>
2107Each version of the License is given a distinguishing version number.
2108If the Document specifies that a particular numbered version of this
2109License "or any later version" applies to it, you have the option of
2110following the terms and conditions either of that specified version or
2111of any later version that has been published (not as a draft) by the
2112Free Software Foundation.  If the Document does not specify a version
2113number of this License, you may choose any version ever published (not
2114as a draft) by the Free Software Foundation.
2115
2116<P>
2117
2118<H1><A NAME="SECTION000140000000000000000">
2119About this document ...</A>
2120</H1>
2121 <STRONG>Implementation of OGC's WPS standard: PyWPS</STRONG><P>
2122This document was generated using the
2123<A HREF="http://www.latex2html.org/"><STRONG>LaTeX</STRONG>2<tt>HTML</tt></A> translator Version 2002-2-1 (1.71)
2124<P>
2125Copyright &#169; 1993, 1994, 1995, 1996,
2126<A HREF="http://cbl.leeds.ac.uk/nikos/personal.html">Nikos Drakos</A>,
2127Computer Based Learning Unit, University of Leeds.
2128<BR>
2129Copyright &#169; 1997, 1998, 1999,
2130<A HREF="http://www.maths.mq.edu.au/~ross/">Ross Moore</A>,
2131Mathematics Department, Macquarie University, Sydney.
2132<P>
2133The command line arguments were: <BR>
2134 <STRONG>latex2html</STRONG> <TT>-split 0 install.tex</TT>
2135<P>
2136The translation was initiated by Jachym Cepicky on 2006-10-11
2137<DIV CLASS="navigation"><HR>
2138<!--Navigation Panel-->
2139<IMG WIDTH="81" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next_inactive"
2140 SRC="/usr/share/latex2html/icons/nx_grp_g.png"> 
2141<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
2142 SRC="/usr/share/latex2html/icons/up_g.png"> 
2143<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
2144 SRC="/usr/share/latex2html/icons/prev_g.png">   
2145<BR></DIV>
2146<!--End of Navigation Panel-->
2147<ADDRESS>
2148Jachym Cepicky
21492006-10-11
2150</ADDRESS>
2151</BODY>
2152</HTML>
Note: See TracBrowser for help on using the repository browser.