Project

General

Profile

metacat / docs / user / metacat / source / submitting.rst @ 8521

1
Accessing and Submitting Metadata and Data
2
==========================================
3

    
4
.. contents::
5

    
6
The Metacat repository can be accessed and updated using a number of tools, 
7
including: 
8

    
9
* the Registry, Metacat's optional Web interface
10
* user-created HTML forms 
11
* Metacat's EarthGrid API
12
* existing clients, such as KNB's Morpho application, designed to help 
13
  scientists create, edit, and manage metadata
14
* user-created desktop clients that take advantage of Metacat's Java API.
15

    
16
In this section, we will look at how to take advantage of these tools to 
17
customize Metacat for your user-base.
18

    
19
A Brief Note about How Information is Stored
20
--------------------------------------------
21
Metacat stores XML files as a hierarchy of nodes, where each node is stored as 
22
records in database tables. Because many XML data schemas are broken up into 
23
multiple DTDs requiring multiple XML files that are related but stored 
24
separately in the system, the system uses "packages" to link related but 
25
separate documents. Packaged documents contain information that shows how they 
26
are related to eachother, essentially stating that file A has a relationship 
27
to file B, etc. A package file also allows users to link metadata files to the 
28
data files they describe. For more information about the structure of data 
29
packages and how XML documents and data are stored in Metacat, please see the 
30
developer's documentation.
31

    
32
Using the Registry
33
------------------
34
Metacat's optional Registry provides a simple Web-based interface for creating, 
35
editing, and submitting metadata to the Metacat repository (screenshot below). The 
36
interface includes help documentation, and can be customized using Metacat's 
37
configuration settings. The Registry also includes an administrative interface 
38
for managing LDAP user accounts, which is useful if you are using LDAP as your 
39
Metacat authentication system. Note that you must be running your own LDAP 
40
server if you wish to use the LDAP Web interface. If you do not have your own 
41
LDAP server, you can create and manage new accounts on the KNB website 
42
(http://knb.ecoinformatics.org/). Please note that at this time, the Registry 
43
interface has only been tested on Linux systems.
44

    
45
.. figure:: images/screenshots/image033.jpg
46
   :align: center
47

    
48
   An example installation of the Register's web interface. Customize the 
49
   displayed and required modules with the Skins Configuration settings.
50
   
51
You can customize which modules (e.g., "Name of Submitter" or "Temporal 
52
Coverage of Data") are displayed and which are required using the Skins 
53
Configuration settings
54

    
55
Installing the Registry
56
~~~~~~~~~~~~~~~~~~~~~~~
57
In order to install and run the Registry, you must have Metacat installed and 
58
Tomcat must be running behind an Apache Web server (see previous sections for 
59
information about installing and configuring Apache to run with Tomcat).
60

    
61
To install and run the Registry:
62

    
63
1. Build the Metacat Perl client library:
64

    
65
  ::
66

    
67
    cd $METACAT/src/perl/Metacat
68
    perl Makefile.PL
69
    sudo make
70
    sudo make install
71

    
72
.. sidebar:: Instructions for Red Hat (Alternate Step 2)
73

    
74
  * Install the libraries
75

    
76
    ::
77
    
78
      sudo yum install gcc libxml2-devel libxslt-devel ant -y
79

    
80
  * Install CPAN, which allows us to install the Perl dependencies for the 
81
    registry and account management parts of Metacat. If asked to manually 
82
    configure cpan, type 'no' and CPAN will be setup with its default values.
83

    
84
    ::
85
    
86
      sudo yum install perl-CPAN
87
      sudo cpan
88

    
89
  * You should now see a prompt which looks like:
90

    
91
    ::
92
    
93
      cpan>
94

    
95
  * The rest of the commands assume you're inside of CPAN. Let's get the most 
96
    recent version of the CPAN software. Just press return after any prompts 
97
    you receive during this process.
98
    
99
    ::
100
    
101
      install Bundle::CPAN
102
      reload cpan
103

    
104
  * Install the required modules. Here we're installing an old LibXSLT, as the 
105
    current one requires a newer libxslt than is available on Redhat 4 & 5. 
106
    Again, just answer 'yes' to any questions.
107

    
108
    ::
109

    
110
      install AutoLoader
111
      install CGI
112
      install CGI::SEssion
113
      install LWP::UserAgent
114
      install Net::LDAP
115
      install Template 
116
      install URI
117
      install MSERGEANT/XML-LibXSLT-1.58.tar.gz
118
      install Captcha:reCAPTCHA
119
      install DateTime
120
      
121

    
122
2. Install the required system libraries using Ubuntu/Debian (instructions 
123
   Red Hat in sidebar)
124
         
125
  * Install the libraries
126

    
127
    ::
128

    
129
      sudo apt-get install ant libappconfig-perl libxml-libxml-perl \
130
      libxml-libxslt-perl libtemplate-perl libcgi-session-perl \
131
      libdigest-sha1-perl libnet-ldap-perl libterm-readkey-perl \
132
      libxml-dom-perl libsoap-lite-perl -y
133

    
134
  * Install two more package using cpan 
135

    
136
    ::
137
    
138
      sudo cpan -i Config::Properties
139
      sudo cpan -i Scalar::Util
140
      sudo cpan -i Captcha:reCAPTCHA
141
      sudo cpan -i DateTime
142
      
143

    
144
3. Double-check that Metacat's temporary folder, application.tempDir, is 
145
   writable by the apache user, usually www-data or apache. 
146

    
147
4. Make sure that the following scripts (found in ``<tomcat-home>/webapps/metacat/cgi-bin``) 
148
   are executable: register-dataset.cgi and ldapweb.cgi.
149

    
150
  ::
151
  
152
    sudo chmod +x <tomcat-home>/webapps/metacat/cgi-bin/*.cgi
153

    
154
5. Restart Apache.
155

    
156
  ::
157
  
158
    sudo /etc/init.d/apache2 restart
159

    
160
6. Visit the resulting URL: 
161
   http://<your_context_url>/cgi-bin/register-dataset.cgi?cfg=default
162
   Where ``<your_context_url>`` is the URL of the server hosting the Metacat 
163
   followed by the name of the WAR file (i.e., the application context) that 
164
   you installed. For instance, the context URL for the KNB Metacat is: 
165
   http://knb.ecoinformatics.org/knb.
166

    
167
If everything worked correctly, the registry home page will open (see figure).
168

    
169
.. figure:: images/screenshots/image035.jpg
170
   :align: center
171

    
172
   An example of the Registry home page (with the default skin).
173
   
174
Customizing the Registry
175
~~~~~~~~~~~~~~~~~~~~~~~~
176
Before using the registry, you may wish to customize the interface using the 
177
Skins Configuration settings. If you are using the default skin, you must 
178
disable the 'show site list' setting before you can submit the form without 
179
errors. You may also wish to remove (or modify) the list of NCEAS-specific 
180
projects that appear in the default registry. To remove these form fields, 
181
open Metacat's administrative interface (http://<your.context.url>/metacat/admin) 
182
and select the Skins Specific Properties Configuration option. On the skins 
183
configuration page, uncheck the boxes beside any form elements that you do not 
184
wish to appear in the registry.
185

    
186
Once you have saved your changes, you must restart Tomcat for them to come 
187
into effect. To restart Tomcat, type: ``sudo /etc/init.d/tomcat6 restart`` or an 
188
equivalent command appropriate to your operating system. 
189

    
190
.. figure:: images/screenshots/image037.jpg
191
   :align: center
192

    
193
   Uncheck the box beside any setting to remove it from the Registry form. In 
194
   the example, the "Show Site List" and "Show Work Group" form fields, 
195
   corresponding to the "Station Name" and "NCEAS Project" drop-down lists in 
196
   the registry form, have been removed.
197
   
198
LDAP account management
199
~~~~~~~~~~~~~~~~~~~~~~~~
200
If you intend to use Metacat's built-in LDAP account management feature, 
201
you will need public and private keys for the reCaptcha widget.
202

    
203
1. Get private and public recaptcha keys from Google using your Google account:
204
https://www.google.com/recaptcha/admin/create
205

    
206
2. Configure Metacat to use those keys in the metacat.properties file:
207

    
208
  ::
209
  
210
	ldap.recaptcha.publickey=<your public key>
211
	ldap.recaptcha.privatekey=<your private key>
212

    
213
3. Restart Tomcat
214

    
215
   
216
Using HTML Forms (the HTTP Interface)
217
-------------------------------------
218
Metacat's HTTP interface supports Get and Post requests and a variety of actions (Table 4.1) that facilitate information retrieval and storage. HTTP requests can be sent from any client application that communicates using the Web's HTTP protocol. 
219

    
220
* Supported Actions (API)
221
* Logging in
222
* Inserting, Updating, and Deleting XML and Data Documents
223
* Searching Metacat
224
* Paged Query Return
225
* Reading Data and Metadata
226

    
227
Supported Actions
228
~~~~~~~~~~~~~~~~~
229
Metacat supports get and post requests as well as actions for writing, querying, 
230
and reading stored XML. In addition, the HTTP interface includes functions for 
231
validating and transforming XML documents (see table). 
232

    
233
Note that if Replication is enabled, Metacat recognizes several additional 
234
actions, included in Table 4.2. For more information about replication, 
235
please see :doc:`replication`.
236

    
237
+--------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
238
| Action                   | Description and Parameters                                                                                                                                                                                                                                         |
239
+==========================+====================================================================================================================================================================================================================================================================+
240
| delete                   | Delete the specified document from the database. For an                                                                                                                                                                                                            |
241
|                          | example, please see Inserting, Updating, and                                                                                                                                                                                                                       |
242
|                          | Deleting XML and Data Documents.                                                                                                                                                                                                                                   |
243
|                          |                                                                                                                                                                                                                                                                    |
244
|                          | ``docid`` - the docid of the document to delete                                                                                                                                                                                                                    |
245
+--------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
246
| export                   | Export a data package in a zip file.                                                                                                                                                                                                                               |
247
|                          |                                                                                                                                                                                                                                                                    |
248
|                          | ``docid`` - the docid of the document to delete                                                                                                                                                                                                                    |
249
+--------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
250
| getaccesscontrol         | Get the access control list (ACL) for the                                                                                                                                                                                                                          |
251
|                          | specified document.                                                                                                                                                                                                                                                |
252
|                          |                                                                                                                                                                                                                                                                    |
253
|                          | ``docid`` - the docid of the document to delete                                                                                                                                                                                                                    |
254
+--------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
255
| getalldocids             | Retrieve a list of all docids registered with the system.                                                                                                                                                                                                          |
256
|                          |                                                                                                                                                                                                                                                                    |
257
|                          | ``scope`` - a string used to match a range of docids in a SQL LIKE statement                                                                                                                                                                                       |
258
+--------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
259
| getdataguide             | Read a data guide for the specified document type                                                                                                                                                                                                                  |
260
| DEPRECATED               |                                                                                                                                                                                                                                                                    |
261
| Use getdtdschema instead | ``doctype`` - the doctype for which to get the data guide                                                                                                                                                                                                          |
262
+--------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
263
| getdoctypes              | Get all doctypes currently available in the Metacat Catalog System. No parameters.                                                                                                                                                                                 |
264
+--------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
265
| getdtdschema             | Read the DTD or XMLSchema file for the specified doctype.                                                                                                                                                                                                          |
266
|                          |                                                                                                                                                                                                                                                                    |
267
|                          | ``doctype`` - the doctype for which DTD or XMLSchema files to read                                                                                                                                                                                                 |
268
+--------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
269
| getlastdocid             | Get the latest docid with revision number used by scope.                                                                                                                                                                                                           |
270
|                          |                                                                                                                                                                                                                                                                    |
271
|                          | ``scope`` - the scope to be queried                                                                                                                                                                                                                                |
272
+--------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
273
| getlog                   | Get the latest docid with revision number used by user.                                                                                                                                                                                                            |
274
|                          |                                                                                                                                                                                                                                                                    |
275
|                          | ``ipaddress`` - the internet protocol address for the event                                                                                                                                                                                                        |
276
|                          | ``principal`` - the principal for the event (a username, etc)                                                                                                                                                                                                      |
277
|                          | ``docid`` - the identifier of the document to which the event applies                                                                                                                                                                                              |
278
|                          | ``event`` - the string code for the event                                                                                                                                                                                                                          |
279
|                          | ``start`` - beginning of date-range for query                                                                                                                                                                                                                      |
280
|                          | ``end`` - end of date-range for query                                                                                                                                                                                                                              |
281
+--------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
282
| getloggedinuserinfo      | Get user info for the currently logged in user. No parameters.                                                                                                                                                                                                     |
283
+--------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
284
| getpricipals             | Get all users and groups in the current authentication schema. No parameters.                                                                                                                                                                                      |
285
+--------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
286
| getrevisionanddoctype    | Return the revision and doctype of a document.                                                                                                                                                                                                                     |
287
|                          | The output is String that looks like "rev;doctype"                                                                                                                                                                                                                 |
288
|                          |                                                                                                                                                                                                                                                                    |
289
|                          | ``docid`` - the docid of the document                                                                                                                                                                                                                              |
290
+--------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
291
| getversion               | Get Metacat version.   Return the current version of Metacat as XML. No parameters.                                                                                                                                                                                |
292
+--------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
293
| insert                   | Insert an XML document into the database. For an example, please see                                                                                                                                                                                               |
294
|                          | Inserting, Updating, and Deleting XML and Data Documents                                                                                                                                                                                                           |
295
|                          |                                                                                                                                                                                                                                                                    |
296
|                          | ``docid`` - the user-defined docid to assign to the new XML document                                                                                                                                                                                               |
297
|                          | ``doctext`` - the text of the XML document to insert                                                                                                                                                                                                               |
298
+--------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
299
| insertmultipart          | Insert an XML document using multipart encoding into the database.                                                                                                                                                                                                 |
300
|                          |                                                                                                                                                                                                                                                                    |
301
|                          | ``docid`` - the user-defined docid to assign to the new XML document                                                                                                                                                                                               |
302
|                          | ``doctext`` - the text of the XML document to insert                                                                                                                                                                                                               |
303
+--------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
304
| isregistered             | Check if an individual document exists in either the xml_documents or xml_revisions tables.                                                                                                                                                                        |
305
|                          | For more information about Metacat's database schema, please see the developer documentation.                                                                                                                                                                      |
306
|                          |                                                                                                                                                                                                                                                                    |
307
|                          | ``docid`` - the docid of the document                                                                                                                                                                                                                              |
308
+--------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
309
| login                    | Log the user in. You must log in using this action before you can perform                                                                                                                                                                                          |
310
|                          | many of the actions. For an example of the login action, see Logging In.                                                                                                                                                                                           |
311
|                          |                                                                                                                                                                                                                                                                    |
312
|                          | ``username`` - the user's login name                                                                                                                                                                                                                               |
313
|                          | ``password`` - the user's password                                                                                                                                                                                                                                 |
314
+--------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
315
| logout                   | Log the current user out and destroy the associated session. No parameters.                                                                                                                                                                                        |
316
+--------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
317
| query                    | Perform a free text query. For an example, please see Searching Metacat.                                                                                                                                                                                           |
318
|                          |                                                                                                                                                                                                                                                                    |
319
|                          | ``returndoctype`` - the doctype to use for your Package View. For more information about packages, see http://knb.ecoinformatics.org/software/metacat/packages.html                                                                                                |
320
|                          | ``qformat`` - the format of the returned result set. Possible values are html or xml or the name of your servlet's Metacat skin.                                                                                                                                   |
321
|                          | ``querytitle`` - OPTIONAL - the title of the query                                                                                                                                                                                                                 |
322
|                          | ``doctype`` - OPTIONAL - if doctype is specified, the search is limited only to the specified doctype(s). (e.g., eml://ecoinformatics.org/eml-2.0.1 and/or eml://ecoinformatics.org/eml-2.0.0) If no doctype element is specified, all document types are returned |
323
|                          | ``returnfield`` - a custom field to be returned by any hit document.                                                                                                                                                                                               |
324
|                          | ``operator`` - the Boolean operator to apply to the query. Possible values are: union or intersect                                                                                                                                                                 |
325
|                          | ``searchmode`` - the type of search to be performed. Possible values are: contains, starts-with, ends-with, equals, isnot-equal, greater-than, less-than, greater-than-equals, less-than-equals.                                                                   |
326
|                          | ``anyfield`` - a free-text search variable. The value placed in this parameter will be searched for in any document in any node.                                                                                                                                   |
327
|                          | ``pagesize`` – the number of search results to display on each search results page (e.g., 10). Used with pagestart. See section 4.3.4 for an example.                                                                                                              |
328
|                          | ``pagestart`` – the displayed search results page (e.g, 1). Used with pagesize. See section 4.3.4 for an example.                                                                                                                                                  |
329
+--------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
330
| read                     | Get a document from the database and return it in the specified format. See Searching Metacat for an example.                                                                                                                                                      |
331
|                          |                                                                                                                                                                                                                                                                    |
332
|                          | ``docid`` - the docid of the document to return                                                                                                                                                                                                                    |
333
|                          | ``qformat`` - the format to return the document in. Possible values are: ``html``, ``xml``,or, if your Metacat uses a skin, the name of the skin.                                                                                                                  |
334
+--------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
335
| readinlinedata           | Read inline data only.                                                                                                                                                                                                                                             |
336
|                          |                                                                                                                                                                                                                                                                    |
337
|                          | ``inlinedataid`` - the id of the inline data to read                                                                                                                                                                                                               |
338
+--------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
339
| setaccess                | Change access permissions for a user on a specified document.                                                                                                                                                                                                      |
340
|                          |                                                                                                                                                                                                                                                                    |
341
|                          | ``docid`` - the docid of the document to be modified.                                                                                                                                                                                                              |
342
|                          | ``principal`` - the user or group whose permissions will be modified                                                                                                                                                                                               |
343
|                          | ``permission`` - the permission  to set (read, write, all)                                                                                                                                                                                                         |
344
|                          | ``permType`` - the type of permission to set (allow, deny)                                                                                                                                                                                                         |
345
|                          | ``permOrder`` - the order in which to apply the permission (allowFirst, denyFirst)                                                                                                                                                                                 |
346
+--------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
347
| spatial_query            | Perform a spatial query. These queries may include any of the queries supported by the                                                                                                                                                                             |
348
|                          | WFS / WMS standards. For more information, see Spatial Queries.                                                                                                                                                                                                    |
349
|                          |                                                                                                                                                                                                                                                                    |
350
|                          | ``xmax`` - max x spatial coordinate                                                                                                                                                                                                                                |
351
|                          | ``ymax`` - max y spatial coordinate                                                                                                                                                                                                                                |
352
|                          | ``xmin`` - min x spatial coordinate                                                                                                                                                                                                                                |
353
|                          | ``ymin`` - min y spatial coordinate                                                                                                                                                                                                                                |
354
+--------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
355
| squery                   | Perform a structured query. For an example, please see Searching Metacat.                                                                                                                                                                                          |
356
|                          |                                                                                                                                                                                                                                                                    |
357
|                          | ``query`` - the text of the pathquery document sent to the server                                                                                                                                                                                                  |
358
|                          | ``qformat`` - the format to return the results in. Possible values are:  ``xml``, or the name of the a skin.                                                                                                                                                       |
359
+--------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
360
| update                   | Overwrite an XML document with a new one and give the new one the same docid but with                                                                                                                                                                              |
361
|                          | the next revision number. For an example, please see Inserting, Updating, and                                                                                                                                                                                      |
362
|                          | Deleting XML and Data Documents.                                                                                                                                                                                                                                   |
363
|                          |                                                                                                                                                                                                                                                                    |
364
|                          | ``docid`` - the docid of the document to update                                                                                                                                                                                                                    |
365
|                          | ``doctext`` - the text with which to update the XML document                                                                                                                                                                                                       |
366
+--------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
367
| upload                   | Upload (insert or update) a data file into Metacat. Data files are stored on Metacat and may be in any                                                                                                                                                             |
368
|                          | format (binary or text), but they are all treated as if they were binary.                                                                                                                                                                                          |
369
|                          |                                                                                                                                                                                                                                                                    |
370
|                          | ``docid`` - the docid of the data file to upload                                                                                                                                                                                                                   |
371
|                          | ``datafile`` - the data file to upload                                                                                                                                                                                                                             |
372
+--------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
373
| validate                 | Validate a specified document against its DTD.                                                                                                                                                                                                                     |
374
|                          |                                                                                                                                                                                                                                                                    |
375
|                          | ``docid`` - the docid of the document to validate                                                                                                                                                                                                                  |
376
|                          | ``valtext`` - the DTD by which to validate this document                                                                                                                                                                                                           |
377
+--------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
378

    
379

    
380
Metacat Replication Parameters
381

    
382
+----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
383
| Action         | Description and Parameters                                                                                                                                      |
384
+================+=================================================================================================================================================================+
385
| forcereplicate | Force the local server to get the specified document from the remote host.                                                                                      |
386
|                |                                                                                                                                                                 |
387
|                | ``server`` - The server to which this document is being sent                                                                                                    |
388
|                | ``docid`` - The docid of the document to send                                                                                                                   |
389
|                | ``dbaction`` - The action to perform on the document: insert or update (the default)                                                                            |
390
+----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
391
| getall         | Force the local server to check all known servers for updated documents. No parameters.                                                                         |
392
+----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
393
| getcatalog     | Send the contents of the xml_catalog table encoded in XML. No parameters.                                                                                       |
394
+----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
395
| getlock        | Request a lock on the specified document.                                                                                                                       |
396
|                |                                                                                                                                                                 |
397
|                | ``docid`` - the docid of the document                                                                                                                           |
398
|                | ``updaterev`` - the revision number of docid                                                                                                                    |
399
+----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
400
| gettime        | Return the local time on this server. No parameters.                                                                                                            |
401
+----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
402
| servercontrol  | Perform the specified replication control on the Replication daemon.                                                                                            |
403
|                |                                                                                                                                                                 |
404
|                | ``add`` - add a new server to the replication list                                                                                                              |
405
|                | ``delete`` - remove a server from the replication list                                                                                                          |
406
|                | ``list`` - list all of the servers currently in the server list                                                                                                 |
407
|                | ``replicate`` - a Boolean flag (1 or 0) which determines if this server should copy files from the newly added server.                                          |
408
|                | ``server`` - the server to add/delete                                                                                                                           |
409
+----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
410
| read           | Sends docid to the remote host.                                                                                                                                 |
411
|                |                                                                                                                                                                 |
412
|                | ``docid`` - the docid of the document to read                                                                                                                   |
413
+----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
414
| start          | Start the Replication daemon with a time interval of deltaT.                                                                                                    |
415
|                |                                                                                                                                                                 |
416
|                | ``rate`` - The rate (in seconds) at which you want the replication daemon to check for updated documents. The value cannot be less than 30. The default is 1000 |
417
+----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
418
| stop           | Stop the Replication daemon. No parameters.                                                                                                                     |
419
+----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
420
| update         | Send a list of all documents on the local server along with their revision numbers. No parameters.                                                              |
421
+----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
422

    
423
Logging In
424
~~~~~~~~~~
425
To log in to Metacat, use the ``login`` action.
426

    
427
The following is an example of a Web form (see figure) that logs a user into 
428
Metact. Example HTML code is included below the screenshot.
429

    
430
.. figure:: images/screenshots/image039.jpg
431
   :align: center
432
   
433
   Logging into Metacat using an HTML form.
434

    
435
::
436

    
437
  <html>
438
  <body>
439
  <form name="loginform" method="post"action="http://yourserver.com/yourcontext/servlet/metacat" 
440
  target="_top" onsubmit="return submitform(this);" id="loginform">
441
    <input type="hidden" name="action" value="login"> <input type=
442
    "hidden" name="username" value=""> <input type="hidden" name=
443
    "qformat" value="xml"> <input type="hidden" name=
444
    "enableediting" value="false">
445

    
446
    <table>
447
      <tr valign="middle">
448
        <td align="left" valign="middle" class="text_plain">
449
        username:</td>
450

    
451
        <td width="173" align="left" class="text_plain" style=
452
        "padding-top: 2px; padding-bottom: 2px;"><input name="uid"
453
        type="text" style="width: 140px;" value=""></td>
454
      </tr>
455

    
456
      <tr valign="middle">
457
        <td height="28" align="left" valign="middle" class=
458
        "text_plain">organization:</td>
459

    
460
        <td align="left" class="text_plain" style=
461
        "padding-top: 2px; padding-bottom: 2px;"><select name=
462
        "organization" style="width:140px;">
463
          <option value=""    selected>&#8212; choose one &#8212;</option>
464
          <option value="NCEAS">NCEAS</option>
465
          <option value="LTER">LTER</option>
466
          <option value="UCNRS">UCNRS</option>
467
          <option value="PISCO">PISCO</option>
468
          <option value="OBFS">OBFS</option>
469
          <option value="OSUBS">OSUBS</option>
470
          <option value="SAEON">SAEON</option>
471
          <option value="SANParks">SANParks</option>
472
          <option value="SDSC">SDSC</option>
473
          <option value="KU">KU</option>
474
          <option value="unaffiliated">unaffiliated</option>
475
        </select></td>
476
      </tr>
477

    
478
      <tr valign="middle">
479
        <td width="85" align="left" valign="middle" class=
480
        "text_plain">password:</td>
481

    
482
        <td colspan="2" align="left" class="text_plain" style=
483
        "padding-top: 2px; padding-bottom: 2px;">
484
          <table width="100%" border="0" cellpadding="0"
485
          cellspacing="0">
486
            <tr>
487
              <td width="150" align="left"><input name="password"
488
              type="password" maxlength="50" style="width:140px;"
489
              value=""></td>
490

    
491
              <td align="center" class="buttonBG_login">
492
              <input type="submit" name="loginAction" value="Login"
493
              class="button_login"></td>
494

    
495
              <td align="left">&nbsp;</td>
496
            </tr>
497
          </table>
498
        </td>
499
      </tr>
500
    </table>
501
  </form>
502
  </body>
503
  </html>
504

    
505
Inserting, Updating, and Deleting XML and Data Documents
506
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
507
Adding, editing, and deleting XML documents in Metacat can be accomplished 
508
using the insert, update, and delete actions, respectively. Before you can 
509
insert, delete, or update documents, you must log in to Metacat using the 
510
login action. See Logging in for an example.
511

    
512
``insert``
513
   Insert a new XML or data document into Metacat. You must specify a document ID.
514
   
515
``update``
516
   Update an existing Metacat document. The original document is archived, 
517
   then overwritten.
518

    
519
``delete``
520
   Archive a document and move the pointer in xml_documents to xml_revisions, 
521
   effectively "deleting" the document from public view, but preserving the 
522
   revision for the revision history. No further updates will be allowed for
523
   the Metacat document that was "deleted". All revisions of this identifier are no longer 
524
   public. 
525

    
526
.. warning::
527
   It is not possible to "delete" one revision without "deleting" all 
528
   revisions of a given identifier.
529

    
530
The following is an example of a Web form (see figure) that can perform all 
531
three tasks. Example HTML code is included in the sidebar.
532

    
533
.. figure:: images/screenshots/image041.jpg
534
   :align: center
535
   
536
   An example of a Web form used to insert, delete, or update XML documents in Metacat.
537

    
538
::
539

    
540
  <html>
541
    <head>
542
    <title>MetaCat</title>
543
    </head>
544
    <body class="emlbody">
545
    <b>MetaCat XML Loader</b>
546
    <p>
547
    Upload, Change, or Delete an XML document using this form.
548
    </p>
549
    <form action="http://yourserver.com/yourcontext/servlet/metacat" method="POST">
550
      <strong>1. Choose an action: </strong>
551
      <input type="radio" name="action" value="insert" checked> Insert
552
      <input type="radio" name="action" value="update"> Update
553
      <input type="radio" name="action" value="delete"> Delete
554
      <input type="submit" value="Process Action">
555
      <br />
556
      <strong>2. Provide a Document ID </strong>
557
      <input type="text" name="docid"> (optional for Insert)
558
         <input type="checkbox" name="public" value="yes" checked><strong>Public Document</strong>
559
      <br />
560
      <strong>3. Provide XML text </strong> (not needed for Delete)<br/>
561
      <textarea name="doctext" cols="65" rows="15"></textarea><br/>
562
      <strong>4. Provide DTD text for upload </strong> (optional; not needed for Delete)
563
      <textarea name="dtdtext" cols="65" rows="15"></textarea>
564
    </form>
565
    </body>
566
  </html>
567

    
568
Searching Metacat
569
~~~~~~~~~~~~~~~~~
570
To search Metacat use the ``query`` or ``squery`` actions. 
571

    
572
``query``:   
573
   Perform a free text query. Specify the returndoctype, qformat, returnfield, 
574
   operator, searchmode, anyfield, and (optionally) a querytitle and doctype. 
575

    
576
``squery``:
577
   Perform a structured query by submitting an XML pathquery document to the 
578
   Metacat server.
579
 
580

    
581
When Metacat receives a query via HTTP (screenshot below), the server creates a 
582
"pathquery" document, which is an XML document populated with the specified 
583
search criteria. The pathquery document is then translated into 
584
SQL statements that are executed against the database. Results are translated 
585
into an XML "resultset" document, which can be returned as XML or transformed 
586
into HTML and returned (specify which you would prefer with the returnfield 
587
parameter). You can also opt to submit a pathquery document directly, 
588
using an squery action.
589

    
590
.. figure:: images/screenshots/image043.jpg
591
   :align: center
592
   
593
   Example of a basic search form using a query action. The HTML code used to create the form is displayed below.
594

    
595
::
596

    
597
  <html>
598
  <head>
599
  <title>Search</title>
600
  </head>
601
  <body>
602
  <form method="POST" action="http://panucci.nceas.ucsb.edu/metacat/metacat">
603

    
604
  Search for:
605

    
606
  <input name="action" value="query" type="hidden">
607
  <input name="operator" value="INTERSECT" type="hidden">
608
  <input name="anyfield" type="text" value=" " size="40">
609
  <input name="qformat" value="html" type="hidden">
610
  
611
  <input name="returnfield" value="creator/individualName/surName" type="hidden">
612
  <input name="returnfield" value="creator/individualName/givenName" type="hidden">
613
  <input name="returnfield" value="creator/organizationName" type="hidden">
614
  <input name="returnfield" value="dataset/title" type="hidden">
615
  <input name="returnfield" value="keyword" type="hidden">
616

    
617
  <input name="returndoctype" value="eml://ecoinformatics.org/eml-2.0.1" type="hidden">
618

    
619
  <input value="Start Search" type="submit">
620

    
621
  </form>
622
  </body>
623
  </html>
624
  
625
Metacat's pathquery document can query specific fields of any XML document. 
626
The pathquery can also be used to specify which fields from each hit are 
627
returned and displayed in the search result set.
628

    
629
::
630

    
631
  <pathquery version="1.0">
632
      <meta_file_id>unspecified</meta_file_id>
633
      <querytitle>unspecified</querytitle>
634
      <returnfield>dataset/title</returnfield>
635
      <returnfield>keyword</returnfield>
636
      <returnfield>dataset/creator/individualName/surName</returnfield>
637
      <returndoctype>eml://ecoinformatics.org/eml-2.1.0</returndoctype>      
638
      <returndoctype>eml://ecoinformatics.org/eml-2.0.1</returndoctype>
639
      <returndoctype>eml://ecoinformatics.org/eml-2.0.0</returndoctype>
640
      <querygroup operator="UNION">
641
        <queryterm casesensitive="true" searchmode="contains">
642
          <value>Charismatic megafauna</value>
643
           <pathexpr>dataset/title</pathexpr>
644
         </queryterm>
645
        <queryterm casesensitive="false" searchmode="starts-with">
646
           <value>sea otter</value>
647
           <pathexpr>keyword</pathexpr>
648
        </queryterm>
649
        <queryterm casesensitive="false" searchmode="contains">
650
          <value>Enhydra</value>
651
          <pathexpr>abstract/para</pathexpr>
652
        </queryterm>
653
       </querygroup>
654
   </pathquery>
655
  </pathquery>
656
  
657
Each ``<returnfield>`` parameter specifies a field that the database will 
658
return (in addition to the fields Metacat returns by default) for each search 
659
result. 
660

    
661
The ``<returndoctype>`` field limits the type of returned documents 
662
(eg, eml://ecoinformatics.org/eml-2.0.1 and/or eml://ecoinformatics.org/eml-2.0.0). 
663
If no returndoctype element is specified, all document types are returned. 
664

    
665
A ``<querygroup>`` creates an AND or an OR statement that applies to the 
666
nested ``<queryterm>`` tags. The querygroup operator can be UNION or INTERSECT. 
667
A ``<queryterm>`` defines the actual field (contained in ``<pathexpr>`` tags) 
668
against which the query (contained in the ``<value>`` tags) is being performed. 
669

    
670
The ``<pathexpr>`` can also contain a document type keyword contained in 
671
``<returndoc>`` tags. The specified document type applies only to documents 
672
that are packaged together (e.g., a data set and its corresponding metadata file). 
673
If Metacat identifies the search term in a packaged document, the servlet will 
674
check to see if that document's type matches the specified one. If not, 
675
Metacat will check if one of the other documents in the package matches. If so, 
676
Metacat will return the matching document. For more information about packages, 
677
please see the developer documentation.
678

    
679
After Metacat has processed a Pathquery document, it returns a resultset document.
680

    
681
::
682

    
683
  <resultset>
684
        <query>
685
          <pathquery version="1.0">
686
             <meta_file_id>unspecified</meta_file_id>
687
             <querytitle>unspecified</querytitle>
688
             <returnfield>dataset/title</returnfield>
689
             <returnfield>keyword</returnfield>
690
             <returnfield>dataset/creator/individualName/surName</returnfield>
691
             <returndoctype>eml://ecoinformatics.org/eml-2.1.0</returndoctype>
692
             <returndoctype>eml://ecoinformatics.org/eml-2.0.1</returndoctype>
693
             <returndoctype>eml://ecoinformatics.org/eml-2.0.0</returndoctype>
694
             <querygroup operator="UNION">
695
                  <queryterm casesensitive="true" searchmode="contains">
696
                       <value>Charismatic megafauna</value>
697
                       <pathexpr>dataset/title</pathexpr>
698
                   </queryterm>
699
                   <queryterm casesensitive="false" searchmode="starts-with">
700
                      <value>sea otter</value>
701
                      <pathexpr>keyword</pathexpr>
702
                   </queryterm>
703
                   <queryterm casesensitive="false" searchmode="contains">
704
                      <value>Enhydra</value>
705
                      <pathexpr>abstract/para</pathexpr>
706
                   </queryterm>
707
            </querygroup>
708
          </pathquery>
709
         </query>  
710
       
711
         <document>
712
           <docid>nrs.569.3</docid>
713
           <docname>eml</docname>
714
           <doctype>eml://ecoinformatics.org/eml-2.0.0</doctype>
715
           <createdate>2012-06-06</createdate>
716
           <updatedate>2012-06-06</updatedate>
717
           <param name="dataset/title">Marine Mammal slides</param>
718
           <param name="creator/individualName/surName">Bancroft</param>
719
         </document>
720
 
721
         <document>
722
           <docid>knb-lter-sbc.61.1</docid>
723
           <docname>eml</docname>
724
           <doctype>eml://ecoinformatics.org/eml-2.1.0</doctype>
725
           <createdate>2012-06-06</createdate>
726
           <updatedate>2012-06-06</updatedate>
727
           <param name="dataset/creator/individualName/surName">Nelson</param>
728
           <param name="dataset/creator/individualName/surName">Harrer</param>
729
           <param name="dataset/creator/individualName/surName">Reed</param>
730
           <param name="dataset/title">SBC LTER: Reef: Sightings of Sea Otters (Enhydra lutris) near Santa Barbara and Channel Islands, ongoing since 2007</param>
731
         </document>
732
      .....  
733
  </resultset>
734

    
735
When Metacat returns a resultset document, the servlet always includes the 
736
pathquery used to create it. The pathquery XML is contained in the <query> tag, 
737
the first element in the resultset.
738

    
739
Each XML document returned by the query is represented by a ``<document>`` tag. By 
740
default, Metacat will return the docid, docname, doctype, doctitle, createdate 
741
and updatedate for each search result. If the user specified additional return 
742
fields in the pathquery using ``<returnfield>`` tags (e.g., dataset/title to return 
743
the document title), the additional fields are returned in ``<param>`` tags. 
744

    
745
Metacat can return the XML resultset to your client as either XML or HTML.
746

    
747
Paged Query Returns
748
~~~~~~~~~~~~~~~~~~~
749
Dividing large search result sets over a number of pages speeds load-time and 
750
makes the result sets more readable to users (Figure 4.12). To break your search 
751
results into pages, use the query action's optional pagestart and pagesize 
752
parameters. The pagesize parameter indicates how many results should be 
753
returned for a given page. The pagestart parameter indicates which page you 
754
are currently viewing.
755

    
756
.. figure:: images/screenshots/image045.jpg
757
   :align: center
758
   
759
   An example of paged search results. 
760

    
761
When a paged query is performed, the query's resultset contains four extra 
762
fields: pagestart, pagesize, nextpage, and previouspage (Figure 4.13).  The 
763
nextpage and previouspage fields help Metacat generate navigational links in 
764
the rendered resultset using XSLT to transform the XML to HTML. 
765

    
766
:: 
767

    
768
  <!-- An example of an XML resultset that include support for page breaks. 
769
       The pagestart parameter will always indicate the page you are currently viewing.
770
  -->
771
  <resultset>
772
      <pagestart>1</pagestart>
773
      <pagesize>10</pagesize>
774
      <nextpage>2</nextpage>
775
      <previouspage>0</previouspage>
776
      <query> ...</query>
777
      <document>...</document>
778
      <document>...</document>
779
    </resultset>
780

    
781
The HTML search results displayed in the figure were rendered using Kepler's XSLT, 
782
which can be found in lib/style/skins/kepler. Kepler's XSLT uses the four extra 
783
resultset fields to render the "Next" and "Previous" links.
784

    
785
::
786
  
787
  <a href="metacat?action=query&operator=INTERSECT&enableediting=false&anyfield=actor&qformat=kepler&pagestart=0&pagesize=10">Previous Page</a>
788
  <a href="metacat?action=query&operator=INTERSECT&enableediting=false&anyfield=actor&qformat=kepler&pagestart=2&pagesize=10">Next Page</a>
789
  
790
In the example above, the current page is 1, and the previous page (page 0) and next page (page 2) pages are indicated by the values of the pagestart parameters.
791

    
792
Reading Data and Metadata
793
~~~~~~~~~~~~~~~~~~~~~~~~~
794
To read data or metadata from Metacat, use the ``read`` action. The ``read`` action 
795
takes two parameters: ``docid``, which specifies the document ID of the document 
796
to return, and ``qformat``, which specifies the return format for the document 
797
(``html`` or ``xml`` or the name of a configured style-set, e.g., ``default``). If ``qformat`` 
798
is set to ``xml``, Metacat will return the XML document untransformed. If the 
799
return format is set to ``html``, Metacat will transform the XML document into 
800
HTML using the default XSLT style sheet (specified in the Metacat 
801
configuration). If the name of a style-set is specified, Metacat will use the 
802
XSLT styles specified in the set to transform the XML.
803

    
804
.. figure:: images/screenshots/image047.jpg
805
   :align: center
806
   
807
   The same document displayed using different qformat parameters (from left 
808
   to right: the default style-set, XML, and HTML). 
809

    
810
Note that the ``read`` action can be used to read both data files and metadata files. 
811
To read a data file, you could use the following request::
812

    
813
  http://yourserver.com/yourcontext/metacat?action=read&docid=nceas.55&qformat=default
814

    
815
Where ``nceas.55`` is the docid of the data file stored in the Metacat and 
816
``default`` is the name of the style (you could also use "html" or "xml" or the 
817
name of a customized skin).
818

    
819
::
820
  
821
  <html>
822
  <head>
823
    <title>Read Document</title>
824
  </head>
825
  <body>
826
    <form method="POST" action="http://your.server/your.context/servlet/metacat">
827
      <input name="action" value="read" type="hidden">
828
      <input name="docid" type="text" value="" size="40">
829
      <input name="qformat" value="default" type="hidden">
830
      <input value="Read" type="submit">
831
    </form>
832
  </body>
833
  </html>
834
  
835
Using the EarthGrid API (aka EcoGrid)
836
-------------------------------------
837

    
838
.. Note::
839

    
840
  The EarthGrid/EcoGrid web service API is *deprecated* as of Metacat 2.0.0 and 
841
  will be removed from a future version of Metacat.  Its functionality is being 
842
  replaced by the standardized DataONE REST service interface. The EarthGrid API
843
  will be completely removed by the end of 2013.
844
   
845
The EarthGrid (aka EcoGrid) provides access to disparate data on different 
846
networks (e.g., KNB, GBIF, GEON) and storage systems (e.g., Metacat and SRB), 
847
allowing scientists access to a wide variety of data and analytic resources 
848
(e.g., data, metadata, analytic workflows and processors) networked at different 
849
sites and at different organizations via the internet. 
850

    
851
Because Metacat supports the EarthGrid API (see table), it can query the 
852
distributed EarthGrid, retrieve metadata and data results, and write new and 
853
updated metadata and data back to the grid nodes.
854

    
855
For more information about each EarthGrid service and its WSDL file, navigate 
856
to the "services" page on your Metacat server 
857
(e.g., http://knb.ecoinformatics.org/metacat/services). 
858
Note that the AdminService and Version service that appear on this page are 
859
not part of EarthGrid.
860

    
861
EarthGrid/EcoGrid API Summary
862

    
863
+----------------------------+-----------------------------------------------------------------------------------------------------+
864
| Service                    | Description                                                                                         |
865
+============================+=====================================================================================================+
866
| AuthenticationQueryService | Search for and retrieve protected metadata and data from the EarthGrid as an authenticated user.    |
867
|                            |                                                                                                     |
868
|                            | Methods: ``query``, ``get``                                                                         |
869
+----------------------------+-----------------------------------------------------------------------------------------------------+
870
| AuthenticationService      | Log in and out of the EarthGrid                                                                     |
871
|                            |                                                                                                     |
872
|                            | Methods: ``login``, ``logout``                                                                      |
873
+----------------------------+-----------------------------------------------------------------------------------------------------+
874
| IdentifierService          | List, lookup, validate, and add Life Science Identifiers (LSIDs) to the EarthGrid                   |
875
|                            |                                                                                                     |
876
|                            | Methods: ``isRegistered``, ``addLSID``, ``getNextRevision``, ``getNextObject``, ``getAllIds``       |
877
+----------------------------+-----------------------------------------------------------------------------------------------------+
878
| PutService                 | Write metadata to the EarthGrid                                                                     |
879
|                            |                                                                                                     |
880
|                            | Methods: ``put``                                                                                    |
881
+----------------------------+-----------------------------------------------------------------------------------------------------+
882
| QueryService               | Search for and retrieve metadata from the EarthGrid                                                 |
883
|                            |                                                                                                     |
884
|                            | Methods: ``query``, ``get``                                                                         |
885
+----------------------------+-----------------------------------------------------------------------------------------------------+
886
| RegistryService            | Add, update, remove, and search for registered EarthGrid services.                                  |
887
|                            | Note: The WSDL for this  service is found under http://ecogrid.ecoinformatics.org/registry/services |
888
|                            |                                                                                                     |
889
|                            | Methods: ``add``, ``update``, ``remove``, ``list``, ``query``                                       |
890
+----------------------------+-----------------------------------------------------------------------------------------------------+
891

    
892
Using Morpho
893
------------
894
Morpho is a desktop tool created to facilitate the creation, storage, and 
895
retrieval of metadata. Morpho interfaces with any Metacat server, allowing 
896
users to upload, download, store, query and view relevant metadata and data 
897
using the network. Users can authorize the public or only selected colleagues 
898
to view their data files. 
899

    
900
Morpho is part of the Knowledge Network for Biocomplexity (KNB), a national 
901
network intended to facilitate ecological and environmental research on 
902
biocomplexity. To use Morpho with your Metacat, set the Metacat URL in the 
903
Morpho Preferences to point to your Metacat server.
904

    
905
.. figure:: images/screenshots/image049.png
906
   :align: center
907
   
908
   Set the Metacat URL in the Morpho preferences to point to your Metacat.
909

    
910
For more information about Morpho, please see: http://knb.ecoinformatics.org/
911

    
912
Creating Your Own Client
913
------------------------
914

    
915
.. Note::
916

    
917
  NOTE: The Client API (and underlying servlet implementation) has been 
918
  deprecated as of Metacat 2.0.0. Future development should utilize the DataONE 
919
  REST service methods. The Client API will be completely removed by the end of 2013.
920
  
921
Metacat's client API is available in Java and Perl (the Java interface is 
922
described in this section and further detailed in the appendix). Some of the 
923
API is also available in Python and Ruby. The API allows client applications 
924
to easily authenticate users and perform basic Metacat operations such as 
925
reading metadata and data files; inserting, updating, and deleting files; and 
926
searching for packages based on metadata matches. 
927

    
928
The Client API is defined by the interface edu.ucsb.nceas.metacat.client.Metacat, 
929
and all operations are fully defined in the javadoc_ documentation. To use the 
930
client API, include the ``metacat-client.jar``, ``utilities.jar``, ``commons-io-2.0.jar``, and 
931
``httpclient.jar`` in your classpath. After including these classes, you can 
932
begin using the API methods (see the next table). 
933

    
934
.. _javadoc: http://knb.ecoinformatics.org/software/metacat/dev/api/index.html
935

    
936
The following code block displays a typical session for reading a document 
937
from Metacat using the Java client API.
938

    
939
::
940
  
941
  String metacatUrl = "http://foo.com/context/metacat";
942
  String username = "uid=jones,o=NCEAS,dc=ecoinformatics,dc=org";
943
  String password = "neverHarcodeAPasswordInCode";
944
  try {
945
      Metacat m = MetacatFactory.createMetacatConnection(metacatUrl);
946
      m.login(username, password);
947
      Reader r = m.read("testdocument.1.1");
948
      // Do whatever you want with Reader r
949
  } catch (MetacatAuthException mae) {
950
      handleError("Authorization failed:\n" + mae.getMessage());
951
  } catch (MetacatInaccessibleException mie) {
952
      handleError("Metacat Inaccessible:\n" + mie.getMessage());
953
  } catch (Exception e) {
954
      handleError("General exception:\n" + e.getMessage());
955
  }
956
  
957
  Operations provided by Client API  (Metacat.java class)
958
  
959
+----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
960
| Method               | Parameters and Throws                                                                                                                                                                                       | Description                                                                                                                               |
961
+======================+=============================================================================================================================================================================================================+===========================================================================================================================================+
962
| delete               | ``public String delete(String docid) throws InsufficientKarmaException, MetacatException, MetacatInaccessibleException;``                                                                                   | Delete an XML document in the repository.                                                                                                 |
963
+----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
964
| getAllDocids         | ``public Vector getAllDocids(String scope) throws MetacatException;``                                                                                                                                       | Return a list of all docids that match a given scope. If scope is null, return all docids registered in the system.                       |
965
+----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
966
| getLastDocid         | ``public String getLastDocid(String scope) throws MetacatException;``                                                                                                                                       | Return the highest document ID for a given scope.  Used by clients to determine the next free identifier in a sequence for a given scope. |
967
+----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
968
| getloggedinuserinfo  | ``public String getloggedinuserinfo() throws MetacatInaccessibleException;``                                                                                                                                | Return the logged in user for this session.                                                                                               |
969
+----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
970
| getNewestDocRevision | ``public int getNewestDocRevision(String docId) throws MetacatException;``                                                                                                                                  | Return the latest revision of specified the document from Metacat                                                                         |
971
+----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
972
| getSessonId          | ``public String getSessionId();``                                                                                                                                                                           | Return the session identifier for this session.                                                                                           |
973
+----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
974
| insert               | ``public String insert(String docid, Reader xmlDocument, Reader schema) throws InsufficientKarmaException, MetacatException, IOException, MetacatInaccessibleException;``                                   | Insert an XML document into the repository.                                                                                               |
975
+----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
976
| isRegistered         | ``public boolean isRegistered(String docid) throws MetacatException;``                                                                                                                                      | Return true if given docid is registered; false if not.                                                                                   |
977
+----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
978
| login                | ``public String login(String username, String password) throws MetacatAuthException, MetacatInaccessibleException;``                                                                                        | Log in to a Metacat server.                                                                                                               |
979
+----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
980
| logout               | ``public String logout() throws MetacatInaccessibleException, MetacatException;``                                                                                                                           | Log out of a Metacat server.                                                                                                              |
981
+----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
982
| query                | ``public Reader query(Reader xmlQuery) throws MetacatInaccessibleException, IOException;``                                                                                                                  | Query the Metacat repository and return the result set as a Reader.                                                                       |
983
+----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
984
| query                | ``public Reader query(Reader xmlQuery, String qformat) throws MetacatInaccessibleException, IOException;``                                                                                                  | Query the Metacat repository with the given metacat-compatible query format and return the result set as a Reader.                        |
985
+----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
986
| read                 | ``public Reader read(String docid) throws InsufficientKarmaException, MetacatInaccessibleException, DocumentNotFoundException, MetacatException;``                                                          | Read an XML document from the Metacat server.                                                                                             |
987
+----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
988
| readInlineData       | ``public Reader readInlineData(String inlinedataid) throws InsufficientKarmaException, MetacatInaccessibleException, MetacatException;``                                                                    | Read inline data from the Metacat server session.                                                                                         |
989
+----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
990
| setAccess            | ``public String setAccess(String _docid, String _principal, String _permission, String _permType, String _permOrder ); throws InsufficientKarmaException, MetacatException, MetacatInaccessibleException;`` | Set permissions for an XML document in the Metacat repository.                                                                            |
991
+----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
992
| setMetacatUrl        | ``public void setMetacatUrl(String metacatUrl);``                                                                                                                                                           | Set the MetacatUrl to which connections should be made.                                                                                   |
993
+----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
994
| setSessionId         | ``public void setSessionId(String sessionId);``                                                                                                                                                             | Set the session identifier for this session.                                                                                              |
995
+----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
996
| update               | ``public String update(String docid, Reader xmlDocument, Reader schema) throws InsufficientKarmaException, MetacatException, IOException, MetacatInaccessibleException;``                                   | Update an XML document in the repository by providing a new version of the XML document.                                                  |
997
+----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
998
| upload               | ``public String upload(String docid, File file) throws InsufficientKarmaException, MetacatException, IOException, MetacatInaccessibleException;``                                                           | Upload a data document into the repository.                                                                                               |
999
+----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
1000
| upload               | ``public String publicupload(String docid, String fileName, InputStream fileData, int size) throws InsufficientKarmaException, MetacatException, IOException, MetacatInaccessibleException;``               | Upload a data document into the repository.                                                                                               |
1001
+----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
1002