Project

General

Profile

1
<?xml version="1.0" encoding="UTF-8"?>
2
<xs:schema  targetNamespace="http://ns.dataone.org/service/types/v1"
3
    xmlns:d1="http://ns.dataone.org/service/types/v1"
4
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
5
    version="1.0.3"
6
    elementFormDefault="unqualified" attributeFormDefault="unqualified">
7

    
8
<!-- 
9
$HeadURL$
10
$Id$
11

    
12
About this document:
13

    
14
  This XML Schema document defines the common data structures that are used
15
  to support messaging between the major components of the DataONE
16
  infrastructure and to guide structure design for storage of information
17
  required for normal operations.
18

    
19
License:
20

    
21
  This work was created by participants in the DataONE project, and is
22
  jointly copyrighted by participating institutions in DataONE. For
23
  more information on DataONE, see our web site at http://dataone.org.
24

    
25
    Copyright 2011
26

    
27
  Licensed under the Apache License, Version 2.0 (the "License");
28
  you may not use this file except in compliance with the License.
29
  You may obtain a copy of the License at
30

    
31
    http://www.apache.org/licenses/LICENSE-2.0
32

    
33
  Unless required by applicable law or agreed to in writing, software
34
  distributed under the License is distributed on an "AS IS" BASIS,
35
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
36
  See the License for the specific language governing permissions and
37
  limitations under the License.
38

    
39
Formatting: 
40

    
41
  - This document should be saved as a UTF-8 encoded file.
42

    
43
  - Indent using spaces, not tabs, with two spaces per indent level.
44

    
45
  - Line wrapping should be set to 80 chars, adjusted as necessary
46

    
47
  - Documentation entries contain formatting instructions for integration with
48
    the DataONE architecture documentation, available at:
49

    
50
      http://mule1.dataone.org/ArchitectureDocs-current
51

    
52
-->
53

    
54
<!-- ************************************
55
        DEFINE REUSABLE SIMPLE TYPES HERE 
56
        ************************************ -->
57

    
58
  <!-- ChecksumAlgorithm -->
59
  <xs:simpleType name="ChecksumAlgorithm">
60
    <xs:annotation>
61
      <xs:documentation>The cryptographic hash algorithm used to calculate a
62
      checksum. DataONE recognizes the Library of Congress list of
63
      cryptographic hash algorithms that can be used as names in this field,
64
      and specifically uses the *madsrdf:authoritativeLabel* field as the name
65
      of the algorithm in this field. See: `Library of Congress Cryptographic
66
      Algorithm Vocabulary`_. All compliant implementations must support at
67
      least SHA-1 and MD5, but may support other algorithms as well.</xs:documentation>
68
      <xs:documentation>Valid entries include: SHA-1, MD5</xs:documentation>
69
      <xs:documentation>The default checksum is *SHA-1*.</xs:documentation>
70
      <xs:documentation>.. _Library of Congress Cryptographic Algorithm Vocabulary: http://id.loc.gov/vocabulary/cryptographicHashFunctions.rdf
71
      </xs:documentation>
72
    </xs:annotation>
73
    <xs:restriction base="xs:string">
74
    </xs:restriction>
75
  </xs:simpleType> 
76

    
77
  <!-- CrontabEntry -->
78
  <xs:simpleType name="CrontabEntry">
79
    <xs:annotation>
80
      <xs:documentation>A single value in the series of values that together 
81
      form a single crontab entry. The format follows the syntax conventions 
82
      defined by the `Quartz Scheduler`_, as excerpted here under the Apache 2 license:</xs:documentation>
83
      <xs:documentation>.. _Quartz Scheduler: http://www.quartz-scheduler.org/api/2.1.0/org/quartz/CronExpression.html</xs:documentation>
84
      <xs:documentation>.. include:: Types_crontabentry.txt</xs:documentation>
85
        </xs:annotation> <xs:restriction base="xs:token">
86
      <xs:pattern value="([\?\*\d/#,\-a-zA-Z])+"/> </xs:restriction>
87
      </xs:simpleType>
88

    
89
  <!-- CrontabEntrySeconds -->
90
  <xs:simpleType name="CrontabEntrySeconds">
91
    <xs:annotation>
92
      <xs:documentation>A restriction on the seconds field in a single 
93
      Schedule entry, following the syntax conventions defined by the `Quartz
94
      Scheduler`_.</xs:documentation>
95
      <xs:documentation>The wildcard character value is not allowed in this
96
      (seconds) field as this would create an impractical synchronization
97
      schedule</xs:documentation>
98
      <xs:documentation>.. _Quartz Scheduler: http://www.quartz-scheduler.org/api/2.1.0/org/quartz/CronExpression.html</xs:documentation>
99
    </xs:annotation>
100
    <xs:restriction base="xs:token">
101
      <xs:pattern value="[0-5]?\d"/>
102
    </xs:restriction>
103
  </xs:simpleType> 
104

    
105
  <!-- Event Enumeration -->
106
  <xs:simpleType name="Event">
107
    <xs:annotation>
108
      <xs:documentation>The controlled list of events that are logged, which
109
      will include *create*, *update*, *delete*, *read*, *replicate*,
110
      *synchronization_failed* and *replication_failed*
111
      events.</xs:documentation>
112
    </xs:annotation>
113
    <xs:restriction base="xs:string">
114
      <xs:enumeration value="create"/>
115
      <xs:enumeration value="read"/>
116
      <xs:enumeration value="update"/>
117
      <xs:enumeration value="delete"/>
118
      <xs:enumeration value="replicate"/>
119
      <xs:enumeration value="synchronization_failed"/>
120
      <xs:enumeration value="replication_failed"/>
121
    </xs:restriction>
122
  </xs:simpleType>
123

    
124
  <!-- NodeState -->
125
  <xs:simpleType name="NodeState">
126
    <xs:annotation>
127
      <xs:documentation>An indicator of the current node accessibility. Nodes
128
      that are marked *down* are inaccessible for service operations, those
129
      that are *up* are in the normal accessible state, and *unknown*
130
      indicates that the state has not been determined yet.</xs:documentation>
131
    </xs:annotation>
132
    <xs:restriction base="xs:NMTOKEN">
133
      <xs:enumeration value="up"/>
134
      <xs:enumeration value="down"/>
135
      <xs:enumeration value="unknown"/>
136
    </xs:restriction>
137
  </xs:simpleType>
138

    
139
  <!-- NodeType Enumeration -->
140
  <xs:simpleType name="NodeType">
141
    <xs:annotation>
142
      <xs:documentation>The type of this node, which is either *mn* for
143
      Member Nodes, or *cn* for Coordinating Nodes.</xs:documentation>
144
    </xs:annotation>
145
    <xs:restriction base="xs:NMTOKEN">
146
      <xs:enumeration value="mn"/>
147
      <xs:enumeration value="cn"/>
148
      <xs:enumeration value="Monitor"/>
149
    </xs:restriction>
150
  </xs:simpleType>
151

    
152
  <!-- NonEmptyString -->
153
  <xs:simpleType name="NonEmptyString">
154
    <xs:annotation>
155
      <xs:documentation>A derived string type with at least length 1 and it
156
      must contain non-whitespace.</xs:documentation>
157
    </xs:annotation>
158
      <xs:restriction base="xs:string">
159
        <xs:minLength value="1"/>
160
        <xs:pattern value="[\s]*[\S][\s\S]*"/>
161
      </xs:restriction>
162
  </xs:simpleType>
163

    
164
  <!-- ObjectFormatIdentifier -->
165
  <xs:simpleType name="ObjectFormatIdentifier">
166
    <xs:annotation>
167
      <xs:documentation>A string used to identify an instance of
168
      :class:`Types.ObjectFormat` and MUST be unique within an instance of
169
      :class:`Types.ObjectFormatList`. </xs:documentation>
170
    </xs:annotation>
171
    <xs:restriction base="d1:NonEmptyString"></xs:restriction>
172
  </xs:simpleType>
173

    
174
  <!-- NonEmptyString800 -->
175
  <xs:simpleType name="NonEmptyString800">
176
    <xs:annotation>
177
      <xs:documentation> An NonEmptyString800 is a NonEmptyString string with
178
      a maximum length of 800 characters.</xs:documentation>
179
    </xs:annotation>
180
    <xs:restriction base="d1:NonEmptyString">
181
      <xs:maxLength value="800"></xs:maxLength>
182
    </xs:restriction>
183
  </xs:simpleType>
184

    
185
  <!-- NonEmptyNowhitespaceString800 -->
186
  <xs:simpleType name="NonEmptyNoWhitespaceString800">
187
    <xs:annotation>
188
      <xs:documentation>A NonEmptyNoWhitespaceString800 is a NonEmptyString800
189
      string that doesn't allow whitespace characters (space, tab, newline,
190
      carriage return). Unicode whitespace characters outside of the ASCII
191
      character set need to be checked programmatically.</xs:documentation>
192
    </xs:annotation>
193
    <xs:restriction base="d1:NonEmptyString800">
194
      <xs:pattern value="\S+"/>
195
    </xs:restriction>
196
  </xs:simpleType>
197

    
198
  <!-- Permission = permitted action -->
199
  <xs:simpleType name="Permission">
200
    <xs:annotation>
201
      <xs:documentation>A string value indicating the set of actions that can
202
      be performed on a resource as specified in an access policy. The set of
203
      permissions include the ability to read a resource (*read*), modify a
204
      resource (*write*), and to change the set of access control policies for
205
      a resource (*changePermission*). Permission levels are cumulative, in
206
      that write permission implicitly grants read access, and
207
      changePermission permission implicitly grants write access (and
208
      therefore read as well). If a subject is granted multiple permissions,
209
      the highest level of access applies.</xs:documentation>
210
    </xs:annotation>
211
    <xs:restriction base="xs:string">
212
      <xs:enumeration value="read" />
213
      <xs:enumeration value="write" />
214
      <xs:enumeration value="changePermission" />
215
    </xs:restriction>
216
  </xs:simpleType>
217

    
218
  <!-- ReplicationStatus -->
219
  <xs:simpleType name="ReplicationStatus">
220
    <xs:annotation>
221
      <xs:documentation>An enumerated string value indicating the current
222
      state of a replica of an object. When an object identified needs to be
223
      replicated, it is added to the replication task queue and is marked as
224
      *queued*; a CN will pick up that task and request that it be replicated
225
      to a MN and marks that it as *requested*; when a MN finishes replicating
226
      the object, it informs the CN that it is finished and it is marked as
227
      *completed*.</xs:documentation>
228
      <xs:documentation> If an MN is unable to complete replication, the
229
      replication status is marked as *failed*.</xs:documentation>
230
      <xs:documentation>Periodically a CN checks each replica to be sure it is
231
      both available and valid (matching checksum with original), and if it is
232
      either inaccessible or invalid then it marks it as *invalidated*, which
233
      indicates that the object replication needs to be invoked
234
      again.</xs:documentation>
235
      <xs:documentation>The replication process is described in Use Case 09 
236
      (:doc:`/design/UseCases/09_uc`).</xs:documentation>
237
    </xs:annotation>
238
    <xs:restriction base="xs:string">
239
      <xs:enumeration value="queued" />
240
      <xs:enumeration value="requested" />
241
      <xs:enumeration value="completed" />
242
      <xs:enumeration value="failed" />
243
      <xs:enumeration value="invalidated" />
244
    </xs:restriction>
245
  </xs:simpleType>
246

    
247
  <!-- ServiceName -->
248
  <xs:simpleType name="ServiceName">
249
    <xs:annotation>
250
      <xs:documentation>The name of a service that is available on a
251
      Node.</xs:documentation>
252
    </xs:annotation>
253
    <xs:restriction base="d1:NonEmptyString"/>
254
  </xs:simpleType>
255

    
256
  <!-- ServiceVersion -->
257
  <xs:simpleType name="ServiceVersion">
258
    <xs:annotation>
259
      <xs:documentation>The version of a service provided by a Node. Service
260
      versions are expressed as version labels such as "v1", "v2". DataONE
261
      services are released only as major service versions; patches to
262
      services are not indicated in this version label.</xs:documentation>
263
    </xs:annotation>
264
    <xs:restriction base="d1:NonEmptyString"/>
265
  </xs:simpleType>
266

    
267
  <!-- ***************************************
268
          DEFINE REUSABLE COMPLEX  TYPES HERE 
269
          *************************************** -->
270

    
271
  <!-- NOTE THAT ALL SERIALIZEABLE ROOT ELEMENTS FOR MESSAGES SHOULD BE OF A
272
       COMPLEX TYPE -->
273

    
274
  <!-- AccessPolicy -->
275
  <xs:complexType name="AccessPolicy">
276
    <xs:annotation>
277
      <xs:documentation>A set of rules that specifies as a whole the allowable
278
      permissions that a given user, group, or system has for accessing a
279
      resource, including data, metadata, resource map, and service resources.
280
      An access policy consists of a sequence of allow rules that grant
281
      permissions to principals, which can be individual users, groups of
282
      users, symbolic users, or systems and services.</xs:documentation>
283
    </xs:annotation>
284
    <xs:sequence>
285
      <xs:element name="allow" type="d1:AccessRule" minOccurs="1" 
286
        maxOccurs="unbounded" />
287
    </xs:sequence>
288
  </xs:complexType>
289

    
290
  <!-- AccessRule -->
291
  <xs:complexType name="AccessRule">
292
    <xs:annotation>
293
      <xs:documentation>A rule that is used to allow a :term:`subject` to
294
      perform an action (such as read or write) on an object in DataONE. Rules
295
      are tuples (subject, permission) specifying which permissions are
296
      allowed for the subjects(s). If a subject is granted multiple
297
      permissions, the highest level of access applies. The resource on which
298
      the access control rules are being applied is determined by the
299
      containing :term:`SystemMetadata` document, or in the case of methods
300
      such as :func:`CNAuthorization.setAccessPolicy`, by the :term:`pid` in
301
      the method parameters.</xs:documentation>
302
      <xs:documentation>Access control rules are specified by the
303
      :term:`Origin Member Node` when the object is first registered in
304
      DataONE. If no rules are specified at that time, then the object is
305
      deemed to be private and the only user with access to the object (read,
306
      write, or otherwise) is the :term:`Rights Holder`.</xs:documentation>
307
    </xs:annotation>
308
    <xs:sequence>
309
      <xs:element name="subject" type="d1:Subject" 
310
                  minOccurs="1" maxOccurs="unbounded" />
311
      <xs:element name="permission" type="d1:Permission" 
312
                  minOccurs="1" maxOccurs="unbounded" />
313
    </xs:sequence>
314
  </xs:complexType>
315

    
316
  <!-- Checksum -->
317
  <xs:complexType name="Checksum">
318
    <xs:annotation>
319
      <xs:documentation>Represents the value of a computed :term:`checksum`
320
      expressed as a hexadecimal formatted version of the message digest. Note
321
      that these hex values should be treated as case-insensitive strings, in
322
      that leading zeros must be preserved, and digests can use a mixture of
323
      upper and lower case letters to represent the hex values. Comparison
324
      algorithms MUST be able to handle any variant of these representations
325
      (e.g., by performing a case-insensitive string match on hex digests from
326
      the same algorithm).</xs:documentation>
327
    </xs:annotation>
328
    <xs:simpleContent>
329
      <xs:extension base="xs:string">
330
        <xs:attribute name="algorithm" type="d1:ChecksumAlgorithm"
331
            use="required"/>
332
      </xs:extension>
333
    </xs:simpleContent>
334
  </xs:complexType>
335

    
336
  <!-- ChecksumAlgorithmList -->
337
  <xs:complexType name="ChecksumAlgorithmList">
338
    <xs:annotation>
339
      <xs:documentation>Represents a list of :term:`checksum`
340
      algorithms.</xs:documentation>
341
    </xs:annotation>
342
    <xs:sequence>
343
      <xs:element name ="algorithm" type="d1:ChecksumAlgorithm" 
344
                  minOccurs="1" maxOccurs="unbounded"/>
345
    </xs:sequence>
346
  </xs:complexType>
347

    
348
  <!-- Group -->
349
  <xs:complexType name="Group">
350
    <xs:annotation>
351
      <xs:documentation>Group represents metadata about a :term:`Subject` that
352
      represents a collection of other Subjects. Groups provide a convenient
353
      mechanism to express access rules for certain roles that are not
354
      necessarily tied to particular :term:`principals` over
355
      time.</xs:documentation>
356
    </xs:annotation>
357
    <xs:sequence>
358
      <xs:element name="subject" type="d1:Subject" minOccurs="1" maxOccurs="1" >
359
        <xs:annotation>
360
          <xs:documentation>The unique, immutable identifier of the
361
          :term:`group`. Group subjects must not be reused, and so they are
362
          both immutable and can not be deleted from the DataONE
363
          system.</xs:documentation>
364
        </xs:annotation>
365
      </xs:element>
366
      <xs:element name="groupName" type="d1:NonEmptyString" 
367
          minOccurs="1" maxOccurs="1" >
368
          <xs:annotation>
369
            <xs:documentation>The name of the Group.</xs:documentation>
370
          </xs:annotation>
371
      </xs:element>
372
      <xs:element name="hasMember" type="d1:Subject" minOccurs="0"
373
         maxOccurs="unbounded" >
374
          <xs:annotation>
375
            <xs:documentation>A :term:`Subject` that is a member of this
376
            group, expressed using the unique identifier for that
377
            Subject.</xs:documentation>
378
          </xs:annotation>
379
      </xs:element>
380
    <xs:element name="rightsHolder" type="d1:Subject" minOccurs="1" 
381
                maxOccurs="unbounded">
382
      <xs:annotation>
383
        <xs:documentation>Represents the list of owners of this :term:`group`.
384
        All groups are readable by anyone in the DataONE system, but can only
385
        be modified by subjects listed in *rightsHolder* fields. Designation
386
        as a :term:`rightsHolder` allows the subject, or their equivalent
387
        identities, to make changes to the mutable properties of the group,
388
        including its name, membership list and rights holder list. The
389
        subject of the group itself is immutable. </xs:documentation>
390
      </xs:annotation>
391
    </xs:element>
392
      </xs:sequence>
393
  </xs:complexType>
394

    
395
  <!-- Identifier  -->
396
  <xs:complexType name="Identifier">
397
    <xs:annotation>
398
      <xs:documentation>An :term:`identifier` (:term:`PID`) in the DataONE
399
      system that is used to uniquely and globally identify an object.
400
      Identifiers can not be reused once assigned. Identifiers can not be 
401
      deleted from the DataONE system.Identifiers are represented by a Unicode 
402
      string of printable characters, excluding :term:`whitespace`. All 
403
      representations of identifiers must be encoded in 7-bit ASCII or 
404
      UTF-8.</xs:documentation>
405
      <xs:documentation>Identifiers have a maximum length of 800 characters,
406
      and a variety of other properties designed for preservation and
407
      longevity. Some discussion on this is described in the `PID
408
      documentation`_ and in decision `ticket 577`_. </xs:documentation>
409
      <xs:documentation>.. _ticket 577: https://redmine.dataone.org/issues/577
410
      </xs:documentation>
411
      <xs:documentation>.. _PID documentation: http://mule1.dataone.org/ArchitectureDocs-current/design/PIDs.html
412
      </xs:documentation>
413
    </xs:annotation>
414
    <xs:simpleContent>
415
      <xs:extension base="d1:NonEmptyNoWhitespaceString800" />
416
    </xs:simpleContent>
417
  </xs:complexType>
418

    
419
  <!--  Log -->
420
  <xs:complexType name="Log">
421
    <xs:annotation>
422
      <xs:documentation>Represents a collection of :class:`Types.LogEntry`
423
      elements, used to transfer log information between DataONE
424
      components.</xs:documentation>
425
    </xs:annotation>
426
    <xs:complexContent>
427
      <xs:extension base="d1:Slice">
428
        <xs:sequence>
429
          <xs:element name="logEntry" type="d1:LogEntry" minOccurs="0"
430
            maxOccurs="unbounded" />
431
        </xs:sequence>
432
      </xs:extension>
433
    </xs:complexContent>
434
  </xs:complexType>
435

    
436
  <!-- LogEntry -->
437
  <xs:complexType name="LogEntry">
438
    <xs:annotation>
439
      <xs:documentation>A single log entry as reported by a Member Node or
440
      Coordinating Node through the :func:`MNCore.getLogRecords` or
441
      :func:`CNCore.getLogRecords` methods.</xs:documentation>
442
    </xs:annotation>
443
    <xs:sequence>
444
      <xs:element name="entryId" type="d1:NonEmptyString" 
445
          minOccurs="1" maxOccurs="1">
446
        <xs:annotation>
447
          <xs:documentation>A unique identifier for this log entry. The
448
          identifier should be unique for a particular node; This is not drawn
449
          from the same value space as other identifiers in DataONE, and so is
450
          not subjec to the same restrictions.</xs:documentation>
451
        </xs:annotation>
452
      </xs:element>
453
      <xs:element name="identifier" type="d1:Identifier" 
454
          minOccurs="1" maxOccurs="1">
455
        <xs:annotation>
456
          <xs:documentation>The :term:`identifier` of the object that was the
457
          target of the operation which generated this log entry.</xs:documentation>
458
        </xs:annotation>
459
      </xs:element>
460
      <xs:element name="ipAddress" type="xs:string"
461
          minOccurs="1" maxOccurs="1">
462
        <xs:annotation>
463
          <xs:documentation>The IP address, as reported by the service receiving
464
          the request, of the request origin.</xs:documentation>
465
        </xs:annotation>
466
      </xs:element>
467
      <xs:element name="userAgent" type="xs:string"
468
          minOccurs="1" maxOccurs="1">
469
        <xs:annotation>
470
          <xs:documentation>The user agent of the client making the request, as
471
          reported in the User-Agent HTTP header.</xs:documentation>
472
        </xs:annotation>
473
      </xs:element>
474
      <xs:element name="subject" type="d1:Subject"
475
          minOccurs="1" maxOccurs="1">
476
        <xs:annotation>
477
          <xs:documentation>The :term:`Subject` used for making the request.
478
          This may be the DataONE :term:`public` user if the request is not
479
          authenticated, otherwise it will be the *Subject* of the certificate
480
          used for authenticating the request.</xs:documentation>
481
        </xs:annotation>
482
      </xs:element>
483
      <xs:element name="event" type="d1:Event"
484
          minOccurs="1" maxOccurs="1">
485
        <xs:annotation>
486
          <xs:documentation>An entry from the :class:`Types.Event` enumeration
487
          indicating the type of operation that triggered the log message.</xs:documentation>
488
        </xs:annotation>
489
      </xs:element>
490
      <xs:element name="dateLogged" type="xs:dateTime"
491
          minOccurs="1" maxOccurs="1">
492
        <xs:annotation>
493
          <xs:documentation>A :class:`Types.DateTime` time stamp indicating when
494
          the event triggering the log message ocurred. Note that all time
495
          stamps in DataONE are in UTC.</xs:documentation>
496
        </xs:annotation>
497
      </xs:element>
498
      <xs:element name="nodeIdentifier" type="d1:NodeReference"
499
          minOccurs="1" maxOccurs="1">
500
        <xs:annotation>
501
          <xs:documentation>The unique identifier for the node where the log
502
          message was generated.</xs:documentation>
503
        </xs:annotation>
504
      </xs:element>
505
    </xs:sequence>
506
  </xs:complexType>
507

    
508
  <!-- Node -->
509
  <xs:complexType name="Node">
510
    <xs:annotation>
511
      <xs:documentation>A set of values that describe a member or coordinating
512
      node, its Internet location, and the services it supports. Several nodes
513
      may exist on a single physical device or hostname. </xs:documentation>
514
    </xs:annotation>
515
    <xs:sequence>
516
      <xs:element name="identifier" type="d1:NodeReference" minOccurs="1" 
517
                  maxOccurs="1">
518
        <xs:annotation>
519
          <xs:documentation>A unique identifier for the node of the form 
520
          ``urn:node:NODEID`` where NODEID is the node specific identifier. 
521
          This value MUST NOT change for future implementations of the 
522
          same node, whereas the *baseURL* may change in the future. 
523
          </xs:documentation>
524
        </xs:annotation>
525
      </xs:element>
526
      <xs:element name="name" type="d1:NonEmptyString" minOccurs="1" maxOccurs="1" >
527
        <xs:annotation>
528
          <xs:documentation>A human readable name of the Node. This name can
529
          be used as a label in many systems to represent the node, and thus
530
          should be short, but understandable. </xs:documentation>
531
        </xs:annotation>
532
      </xs:element>
533
      <xs:element name="description" type="d1:NonEmptyString" minOccurs="1" 
534
                  maxOccurs="1">
535
        <xs:annotation>
536
          <xs:documentation>Description of a Node, explaining the community it
537
          serves and other relevant information about the node, such as what
538
          content is maintained by this node and any other free style notes.
539
          </xs:documentation>
540
        </xs:annotation>
541
      </xs:element>
542
      <xs:element name="baseURL" type="xs:anyURI" minOccurs="1" maxOccurs="1">        
543
        <xs:annotation>
544
           <xs:documentation>The base URL of the node, indicating the
545
           protocol, fully qualified domain name, and path to the implementing
546
           service, excluding the version of the API. e.g.
547
           ``https://server.example.edu/app/d1/mn`` rather than
548
           ``https://server.example.edu/app/d1/mn/v1``</xs:documentation>
549
        </xs:annotation>                        
550
      </xs:element>
551
      <xs:element name="services" type="d1:Services" minOccurs="0" maxOccurs="1">
552
        <xs:annotation>
553
          <xs:documentation>A list of services that are provided by this node.
554
          Used in node descriptions so that nodes can provide metadata about
555
          each service they implement and support.</xs:documentation>
556
        </xs:annotation>      
557
      </xs:element>            
558
      <xs:element name="synchronization" type="d1:Synchronization" minOccurs="0"
559
        maxOccurs="1">
560
        <xs:annotation>
561
          <xs:documentation>Configuration information for the process by which
562
            content is harvested from Member Nodes to Coordinating Nodes. This
563
            includes the schedule on which harvesting should occur, and metadata
564
            about the last synchronization attempts for the
565
            node.</xs:documentation>
566
        </xs:annotation>
567
      </xs:element>
568
      <xs:element name="nodeReplicationPolicy" type="d1:NodeReplicationPolicy"
569
        minOccurs="0" maxOccurs="1">
570
        <xs:annotation>
571
          <xs:documentation>The replication policy for this node that expresses
572
            constraints on object size, total objects, source nodes, and object
573
            format types. A node may want to restrict replication from only
574
            certain peer nodes, may have file size limits, total allocated size
575
            limits, or may want to focus on being a replica target for
576
            domain-specific object formats.</xs:documentation>
577
        </xs:annotation>
578
      </xs:element>
579
      <xs:element name="ping" type="d1:Ping" minOccurs="0" maxOccurs="1">
580
         <xs:annotation>
581
           <xs:documentation>Stored results from the :func:`MNCore.ping` and
582
           :func:`CNCore.ping` methods.</xs:documentation>
583
         </xs:annotation>
584
      </xs:element>
585
      <xs:element name="subject" type="d1:Subject" minOccurs="0" 
586
                  maxOccurs="unbounded">
587
        <xs:annotation>
588
          <xs:documentation>The :term:`Subject` of this node, which can be
589
          repeated as needed. The *Node.subject* represents the identifier of
590
          the node that would be found in X.509 certificates used to securely
591
          communicate with this node. Thus, it is an :term:`X.509
592
          Distinguished Name` that applies to the host on which the Node is
593
          operating. When (and if) this hostname changes the new subject for
594
          the node would be added to the Node to track the subject that has
595
          been used in various access control rules over time.
596
          </xs:documentation>
597
        </xs:annotation>
598
      </xs:element>
599
      <xs:element name="contactSubject" type="d1:Subject" minOccurs="1" 
600
                  maxOccurs="unbounded">
601
        <xs:annotation>
602
          <xs:documentation>The appropriate person or group to contact
603
          regarding the disposition, management, and status of this Member
604
          Node. The *Node.contactSubject* is an :term:`X.509 Distinguished
605
          Name` for a person or group that can be used to look up current
606
          contact details (e.g., name, email address) for the contact in the
607
          DataONE Identity service. DataONE uses the *contactSubject* to
608
          provide notices of interest to DataONE nodes, including information
609
          such as policy changes, maintenance updates, node outage
610
          notifications, among other information useful for administering a
611
          node. Each node that is registered with DataONE must provide at
612
          least one *contactSubject* that has been :term:`verified` with
613
          DataONE. </xs:documentation>
614
        </xs:annotation>
615
      </xs:element>
616
    </xs:sequence>
617
    <xs:attribute name="replicate" use="required" type="xs:boolean">
618
      <xs:annotation>
619
        <xs:documentation>Set to *true* if the node is willing to be a
620
        :term:`replication target`, otherwise *false*.</xs:documentation>
621
      </xs:annotation>
622
    </xs:attribute>
623
    <xs:attribute name="synchronize" use="required" type="xs:boolean">
624
      <xs:annotation>
625
        <xs:documentation>Set to *true* if the node should be
626
        :term:`synchronized` by a Coordinating Node, otherwise
627
        *false*.</xs:documentation>
628
     </xs:annotation>
629
    </xs:attribute>
630
    <xs:attribute name="type" use="required" type="d1:NodeType">
631
      <xs:annotation>
632
        <xs:documentation>The type of the node (Coordinating, Member), chosen 
633
        from the :class:`Types.NodeType` type.</xs:documentation>
634
      </xs:annotation>
635
    </xs:attribute>
636
    <xs:attribute name="state" use="required" type="d1:NodeState" >
637
      <xs:annotation>
638
        <xs:documentation>The state of the node (*up*, *down*), chosen from
639
        the :class:`Types.NodeState` type.</xs:documentation>
640
      </xs:annotation>
641
    </xs:attribute>
642
  </xs:complexType>
643

    
644
  <!--  NodeReplicationPolicy -->
645
  <xs:complexType name="NodeReplicationPolicy">
646
    <xs:annotation>
647
      <xs:documentation>The overall replication policy for the node that
648
      expresses constraints on object size, total objects, source nodes, and
649
      object format types. A node may choose to restrict replication from only
650
      certain peer nodes, may have file size limits, total allocated size
651
      limits, or may want to focus on being a :term:`replication target` for
652
      domain-specific object formats.</xs:documentation>
653
    </xs:annotation>
654
    <xs:sequence>
655
      <xs:element name="maxObjectSize" type="xs:unsignedLong" minOccurs="0" 
656
                  maxOccurs="1">
657
        <xs:annotation>
658
          <xs:documentation>An optional statement of the maximum size in octets 
659
          (8-bit bytes) of objects this node is willing to accept for
660
          replication.</xs:documentation>
661
        </xs:annotation>
662
      </xs:element>
663
      <xs:element name="spaceAllocated" type="xs:unsignedLong" minOccurs="0" 
664
                  maxOccurs="1">
665
        <xs:annotation>
666
          <xs:documentation>An optional statement of the total space in bytes
667
          allocated for replication object storage on this
668
          node.</xs:documentation>
669
        </xs:annotation>
670
      </xs:element>
671
      <xs:element name="allowedNode" type="d1:NodeReference" minOccurs="0" 
672
                  maxOccurs="unbounded">
673
        <xs:annotation>
674
          <xs:documentation>An optional, repeatable statement of a peer source
675
          node from which this node is willing to replicate content, expressed
676
          as a :class:`Types.NodeReference`.</xs:documentation>
677
        </xs:annotation>
678
      </xs:element>
679
      <xs:element name="allowedObjectFormat" type="d1:ObjectFormatIdentifier" 
680
                  minOccurs="0" maxOccurs="unbounded">
681
        <xs:annotation>
682
          <xs:documentation>An optional, repeatable statement of an object
683
          format that this node is willing to replicate, expressed as a
684
          :class:`Types.ObjectFormatIdentifier`.</xs:documentation>
685
        </xs:annotation>
686
      </xs:element>
687
    </xs:sequence>
688
  </xs:complexType>
689

    
690
  <!-- Node List -->  
691
  <xs:complexType name="NodeList">
692
    <xs:annotation>
693
      <xs:documentation> A list of :class:`Types.Node` entries returned by
694
      :func:`CNCore.listNodes()`.</xs:documentation>
695
       <xs:documentation>NodeList is described in
696
       :mod:`NodeList`.</xs:documentation>
697
    </xs:annotation>
698
    <xs:sequence>
699
      <xs:element maxOccurs="unbounded" name="node" type="d1:Node" 
700
                  minOccurs="1"/>
701
    </xs:sequence>
702
  </xs:complexType>
703

    
704
  <!-- NodeReference -->
705
  <xs:complexType name="NodeReference">
706
    <xs:annotation>
707
      <xs:documentation>A unique identifier for a DataONE Node. The
708
      *NodeReference* must be unique across nodes, and must always be
709
      assigned to one Member or Coordinating Node instance even in the event of 
710
      the *BaseURL* or other characteristics changing.</xs:documentation>
711
    </xs:annotation>
712
    <xs:simpleContent>
713
      <xs:extension base="d1:NonEmptyString">
714
      </xs:extension>
715
    </xs:simpleContent>
716
  </xs:complexType>
717

    
718
  <!-- ObjectFormat -->
719
  <xs:complexType name="ObjectFormat">
720
    <xs:annotation>
721
      <xs:documentation>One value from the DataONE Object Format Vocabulary
722
      which is returned by :func:`CNCore.getFormat()`.</xs:documentation>
723
      <xs:documentation>An *ObjectFormat* is the structure returned from the
724
      :func:`CNCore.getFormat()` method of the CN REST interface. It provides
725
      the unique identifier and the name associated with the object format.
726
      Future versions may contain additional structured content from external
727
      common typing systems. </xs:documentation>
728
    </xs:annotation>
729
    <xs:sequence>
730
      <xs:element name="formatId" type="d1:ObjectFormatIdentifier" 
731
                  minOccurs="1" maxOccurs="1">
732
        <xs:annotation>
733
          <xs:documentation> The unique identifier of the object format in the
734
          DataONE Object Format Vocabulary. The identifier should comply with
735
          DataONE Identifier rules, i.e. no whitespace, only UTF-8 or US-ASCII
736
          printable characters.</xs:documentation>
737
        </xs:annotation>
738
      </xs:element>
739
      <xs:element name="formatName" type="xs:string" minOccurs="1" 
740
                  maxOccurs="1">
741
        <xs:annotation>
742
          <xs:documentation>For objects that are typed using a Document Type
743
          Definition, this lists the well-known and accepted named version of
744
          the DTD. In other cases, an appropriately unambiguous descriptive
745
          name should be chosen.</xs:documentation>
746
        </xs:annotation>
747
      </xs:element>
748
      <xs:element name="formatType" type="xs:string" minOccurs="1" 
749
                  maxOccurs="1">
750
        <xs:annotation>
751
          <xs:documentation>A string field indicating whether or not this
752
          format is :term:`science data` (*DATA*), :term:`science metadata`
753
          (*METADATA*) or a :term:`resource map` (*RESOURCE*). If the format
754
          is a self-describing data format that includes science metadata,
755
          then the field should also be set to science metadata.
756
          </xs:documentation>
757
        </xs:annotation>
758
      </xs:element>
759
    </xs:sequence>
760
  </xs:complexType>
761

    
762
  <!--  ObjectFormatList -->
763
  <xs:complexType name="ObjectFormatList">
764
    <xs:annotation>  
765
      <xs:documentation>An ObjectFormatList is the structure returned from the
766
      :func:`CNCore.listFormats()` method of the CN REST interface. It
767
      provides a list of named object formats defined in the DataONE system.
768
      Each :class:`Types.ObjectFormat` returned in the list describes the
769
      object format via its name, and future versions may contain additional
770
      structured content from common external typing systems.
771
      </xs:documentation>
772
    </xs:annotation>
773
    <xs:complexContent>
774
      <xs:extension base="d1:Slice">
775
        <xs:sequence>
776
          <xs:element name="objectFormat" type="d1:ObjectFormat" minOccurs="1" 
777
                      maxOccurs="unbounded" />
778
        </xs:sequence>
779
      </xs:extension>
780
    </xs:complexContent>
781
  </xs:complexType>
782

    
783
  <!-- ObjectInfo -->
784
  <xs:complexType name="ObjectInfo">
785
    <xs:annotation>
786
      <xs:documentation>Metadata about an object, representing a subset of the
787
      metadata found in :class:`Types.SystemMetadata`.</xs:documentation>
788
    </xs:annotation>
789
    <xs:sequence>
790
        <xs:element name="identifier"  type="d1:Identifier" minOccurs="1" 
791
                    maxOccurs="1"/>
792
        <xs:element name="formatId" type="d1:ObjectFormatIdentifier"/>
793
        <xs:element name="checksum" type="d1:Checksum" minOccurs="1" 
794
                    maxOccurs="1" />
795
        <xs:element name="dateSysMetadataModified" type="xs:dateTime"/>
796
        <xs:element name="size" type="xs:unsignedLong"/>
797
    </xs:sequence>
798
  </xs:complexType>
799

    
800
  <!-- ObjectList -->
801
  <xs:complexType name="ObjectList" >
802
    <xs:annotation>
803
      <xs:documentation>A list of object locations (nodes) from which the
804
      object can be retrieved. </xs:documentation>
805
    </xs:annotation>
806
    <xs:complexContent>
807
      <xs:extension base="d1:Slice">
808
        <xs:sequence>
809
          <xs:element name="objectInfo" type="d1:ObjectInfo" minOccurs="0" 
810
                      maxOccurs="unbounded" />
811
        </xs:sequence>
812
      </xs:extension>
813
    </xs:complexContent>
814
  </xs:complexType>
815

    
816
  <!-- ObjectLocation -->
817
  <xs:complexType name="ObjectLocation">
818
    <xs:annotation>
819
      <xs:documentation>Portion of an :class:`Types.ObjectLocationList`
820
      indicating the node from which the object can be retrieved. The
821
      principal information on each location is found in the *nodeIdentifier*,
822
      all other fields are provided for convenience, but could also be looked
823
      up from the :class:`Types.NodeList` information obtained from 
824
      :func:`CNCore.listNodes`.</xs:documentation>
825
    </xs:annotation>
826
    <xs:sequence>
827
      <xs:element name="nodeIdentifier" type="d1:NodeReference"
828
                  minOccurs="1" maxOccurs="1">
829
        <xs:annotation>
830
          <xs:documentation>Identifier of the :class:`Types.Node` (the same
831
          identifier used in the node registry for identifying the node).
832
          </xs:documentation>
833
        </xs:annotation>
834
      </xs:element>
835
      <xs:element name="baseURL" type="xs:anyURI" minOccurs="1" maxOccurs="1">
836
        <xs:annotation>
837
          <xs:documentation>The current base URL (the *baseURL* element from
838
          the :class:`Types.Node` record) for services implemented on the
839
          target node. Used with service version to construct a URL for
840
          service calls to this node. Note that complete information on
841
          services available on a Node is available from the
842
          :func:`CNCore.listNodes` service. </xs:documentation>
843
        </xs:annotation>
844
      </xs:element>
845
      <xs:element name="version" type="d1:ServiceVersion" minOccurs="1" 
846
                  maxOccurs="unbounded">
847
        <xs:annotation>
848
          <xs:documentation>The version of services implemented on the node.
849
          Used with base url to construct a URL for service calls to this
850
          node. Note that complete information on services available on a Node
851
          is available from the :func:`CNCore.listNodes` service.
852
          </xs:documentation>
853
        </xs:annotation>
854
      </xs:element>
855
      <xs:element name="url" type="xs:anyURI" minOccurs="1" maxOccurs="1">
856
        <xs:annotation>
857
          <xs:documentation>The full (absolute) URL that can be used to
858
          retrieve the object using the get() method of the rest
859
          interface.</xs:documentation>
860
          <xs:documentation>For example, if identifier was "ABX154", and the
861
          node had a base URL of ``http://mn1.dataone.org/mn`` then the value
862
          would be 
863
          ``http://mn1.dataone.org/mn/v1/object/ABX154``</xs:documentation>
864
        </xs:annotation>
865
      </xs:element>
866
      <xs:element name="preference" type="xs:int" minOccurs="0" maxOccurs="1">
867
        <xs:annotation>
868
          <xs:documentation>A weighting parameter that provides a hint to the
869
          caller for the relative preference for nodes from which the content
870
          should be retrieved. Higher values have higher preference.
871
          </xs:documentation>
872
        </xs:annotation>
873
      </xs:element>
874
    </xs:sequence>
875
  </xs:complexType>
876

    
877
  <!-- Object Location List -->
878
  <xs:complexType name="ObjectLocationList">
879
    <xs:annotation>
880
      <xs:documentation>An *ObjectLocationList* is the structure returned from
881
      the :func:`CNRead.resolve` method of the CN REST interface. It provides
882
      a list of locations from which the specified object can be retrieved.
883
      </xs:documentation>
884
    </xs:annotation>
885
    <xs:sequence>
886
    <xs:element name="identifier" type="d1:Identifier" minOccurs="1" 
887
                maxOccurs="1">
888
      <xs:annotation>
889
        <xs:documentation>The :term:`identifier` of the object being
890
        resolved.</xs:documentation>
891
      </xs:annotation>
892
    </xs:element>
893
    <xs:element name="objectLocation" type="d1:ObjectLocation" minOccurs="0" 
894
                maxOccurs="unbounded">
895
      <xs:annotation>
896
        <xs:documentation>List of nodes from which the object can be
897
        retrieved</xs:documentation>
898
      </xs:annotation>
899
    </xs:element>
900
    </xs:sequence>
901
  </xs:complexType>
902

    
903
  <!-- Person -->
904
  <xs:complexType name="Person">
905
    <xs:annotation>
906
      <xs:documentation>*Person* represents metadata about a :term:`Principal`
907
      that is a person and that can be used by clients and nodes for
908
      :class:`Types.AccessPolicy` information. The mutable properties of a
909
      *Person* instance can only be changed by itself (i.e., the Subject
910
      identifying the Person instance) and by the Coordinating Node identity,
911
      but can be read by any identity in the DataONE system.
912
      </xs:documentation>
913
    </xs:annotation>
914
    <xs:sequence>
915
      <xs:element name="subject" type="d1:Subject" minOccurs="1"
916
                  maxOccurs="1">
917
        <xs:annotation>
918
          <xs:documentation>The unique, immutable identifier for the
919
          *Person*.</xs:documentation>
920
        </xs:annotation>
921
      </xs:element>
922
      <xs:element name="givenName" type="d1:NonEmptyString" minOccurs="1" 
923
                  maxOccurs="unbounded">
924
        <xs:annotation>
925
          <xs:documentation>The given name of the *Person*, repeatable if they
926
          have more than one given name.</xs:documentation>
927
        </xs:annotation>
928
      </xs:element>
929
      <xs:element name="familyName" type="d1:NonEmptyString" minOccurs="1" 
930
                  maxOccurs="1">
931
        <xs:annotation>
932
          <xs:documentation>The family name of the *Person*.</xs:documentation>
933
        </xs:annotation>
934
      </xs:element>
935
      <xs:element name="email" type="d1:NonEmptyString" minOccurs="0" 
936
                  maxOccurs="unbounded">
937
        <xs:annotation>
938
          <xs:documentation>The email address of the *Person*, repeatable if
939
          they have more than one email address. </xs:documentation>
940
        </xs:annotation>
941
      </xs:element>
942
      <xs:element name="isMemberOf" type="d1:Subject" minOccurs="0" 
943
                  maxOccurs="unbounded">
944
        <xs:annotation>
945
          <xs:documentation>A *group* or role in which the *Person* is a member,
946
          expressed using the unique :class:`Types.Subject` identifier for
947
          that :class:`Types.Group`, and repeatable if they are a member of
948
          more than one group. </xs:documentation>
949
        </xs:annotation>
950
      </xs:element>
951
      <xs:element name="equivalentIdentity" type="d1:Subject" minOccurs="0" 
952
                  maxOccurs="unbounded">
953
        <xs:annotation>
954
          <xs:documentation>An alternative but equivalent identity for the
955
          :term:`principal` that has been used in alternate identity systems,
956
          repeatable if more than one equivalent identity applies.
957
          </xs:documentation>
958
        </xs:annotation>
959
      </xs:element>
960
      <xs:element name="verified" type="xs:boolean" minOccurs="0"
961
                  maxOccurs="1">
962
        <xs:annotation>
963
          <xs:documentation>*true* if the name and email address of the
964
          *Person* have been :term:`verified` to ensure that the *givenName*
965
          and *familyName* represent the real person's legal name, and that
966
          the email address is correct for that person and is in the control
967
          of the indicated individual. Verification occurs through an
968
          established procedure within DataONE as part of the Identity
969
          Management system. A Person can not change their own *verified*
970
          field, but rather must be verified and changed through this DataONE
971
          established process. </xs:documentation>
972
        </xs:annotation>
973
      </xs:element>
974
      <!-- Do we need further Person metadata? <xs:element name="institution" 
975
        type="d1:NonEmptyString" minOccurs="0" maxOccurs="unbounded"/> <xs:element 
976
        name="department" type="d1:NonEmptyString" minOccurs="0" maxOccurs="unbounded"/> 
977
        <xs:element name="address1" type="d1:NonEmptyString" minOccurs="0" maxOccurs="unbounded"/> 
978
        <xs:element name="address2" type="d1:NonEmptyString" minOccurs="0" maxOccurs="unbounded"/> 
979
        <xs:element name="city" type="d1:NonEmptyString" minOccurs="0" maxOccurs="unbounded"/> 
980
        <xs:element name="state" type="d1:NonEmptyString" minOccurs="0" maxOccurs="unbounded"/> 
981
        <xs:element name="zip" type="d1:NonEmptyString" minOccurs="0" maxOccurs="unbounded"/> -->
982
    </xs:sequence>
983
  </xs:complexType>
984

    
985
  <!-- Ping -->
986
  <xs:complexType name="Ping">
987
    <xs:annotation>
988
      <xs:documentation>Store results from the :func:`MNCore.ping`
989
      method.</xs:documentation>
990
    </xs:annotation>
991
    <xs:attribute name="success" type="xs:boolean" >
992
      <xs:annotation>
993
        <xs:documentation>A boolean flag indicating *true* if the node was
994
        reached by the last :func:`MNCore.ping` or :func:`CNCore.ping` call,
995
        otherwise *false*.</xs:documentation>
996
      </xs:annotation>
997
    </xs:attribute>
998
    <xs:attribute name="lastSuccess" type="xs:dateTime" >
999
      <xs:annotation>
1000
        <xs:documentation>The date time value (UTC) of the last time a
1001
        successful ping was performed.</xs:documentation>
1002
      </xs:annotation>
1003
    </xs:attribute>
1004
  </xs:complexType>
1005

    
1006
  <!-- Replica -->
1007
  <xs:complexType name="Replica">
1008
    <xs:annotation>
1009
      <xs:documentation>Replica information that describes the existence of a
1010
      replica of some object managed by the DataONE infrastructure, and its 
1011
      status.</xs:documentation>
1012
    </xs:annotation>
1013
    <xs:sequence>
1014
      <xs:element name="replicaMemberNode" type="d1:NodeReference">
1015
        <xs:annotation>
1016
          <xs:documentation>A reference to the Member Node that houses this
1017
          replica, regardless of whether it has arrived at the Member Node or
1018
          not. See *replicationStatus* to determine if the replica is
1019
          completely transferred. </xs:documentation>
1020
        </xs:annotation>
1021
      </xs:element>
1022
      <xs:element name="replicationStatus" type="d1:ReplicationStatus">
1023
        <xs:annotation>
1024
          <xs:documentation> The current status of this replica, indicating
1025
          the stage of replication process for the object. Only *completed*
1026
          replicas should be considered as available. </xs:documentation>
1027
        </xs:annotation>
1028
      </xs:element>
1029
      <xs:element name="replicaVerified" type="xs:dateTime">
1030
        <xs:annotation>
1031
          <xs:documentation> The last date and time on which the integrity of
1032
          a replica was verified by the coordinating node. Verification occurs
1033
          by checking that the checksum of the stored object matches the
1034
          checksum recorded for the object in the system
1035
          metadata.</xs:documentation>
1036
        </xs:annotation>
1037
      </xs:element> 
1038
    </xs:sequence>
1039
  </xs:complexType>
1040

    
1041
  <!-- Replication Policy -->
1042
  <xs:complexType name="ReplicationPolicy">
1043
    <xs:annotation>
1044
      <xs:documentation>The *ReplicationPolicy* for an object defines if
1045
      replication should be attempted for this object, and if so, how many
1046
      replicas should be maintained. It also permits specification of
1047
      preferred and blocked nodes as potential replication targets.
1048
      </xs:documentation>
1049
    </xs:annotation>
1050
    <xs:sequence>
1051
      <xs:element name="preferredMemberNode" type="d1:NodeReference"
1052
                  minOccurs="0" maxOccurs="unbounded">
1053
        <xs:annotation>
1054
          <xs:documentation>Preferred Nodes are utilized over other nodes as
1055
          replication targets, up to the number of replicas requested. If
1056
          preferred nodes are unavailable, or if insufficient nodes are listed
1057
          as preferred to meet the requested number of replicas, then the
1058
          Coordinating Nodes will pick additional replica nodes for the
1059
          content. </xs:documentation>
1060
        </xs:annotation>    
1061
      </xs:element>
1062
      <xs:element name="blockedMemberNode" type="d1:NodeReference"
1063
                  minOccurs="0" maxOccurs="unbounded">
1064
        <xs:annotation>
1065
          <xs:documentation>The object MUST never be replicated to nodes
1066
          listed as *blockedMemberNodes*. Where there is a conflict between a
1067
          *preferredMemberNode* and a *blockedMemberNode* entry, the
1068
          *blockedMemberNode* entry prevails. </xs:documentation>
1069
        </xs:annotation>                
1070
      </xs:element>
1071
    </xs:sequence>
1072
    <xs:attribute name="replicationAllowed" type="xs:boolean">
1073
      <xs:annotation>
1074
        <xs:documentation>A boolean flag indicating if the object should be
1075
        replicated (*true*, default) or not (*false*).</xs:documentation>
1076
      </xs:annotation>
1077
    </xs:attribute>
1078
    <xs:attribute name="numberReplicas" type="xs:int">
1079
      <xs:annotation>
1080
        <xs:documentation>An integer indicating the number of replicas
1081
        targeted for this object. Defaults to 3.</xs:documentation>
1082
      </xs:annotation>
1083
    </xs:attribute>
1084
  </xs:complexType>
1085

    
1086
  <!-- Service -->
1087
  <xs:complexType  name="Service">
1088
    <xs:annotation>
1089
      <xs:documentation>The available Dataone Service APIs that are exposed on
1090
      a Node. Without a restriction, all service methods are available to all
1091
      callers. Restrictions may be placed on individual methods of the service
1092
      to limit the service to a certain set of :term:`Subjects`. Enforcement
1093
      of these service restrictions is incumbent on the Node service
1094
      implementation.</xs:documentation>
1095
    </xs:annotation>
1096
    <xs:sequence>
1097
      <xs:element name="restriction" type="d1:ServiceMethodRestriction" 
1098
                  minOccurs="0" maxOccurs="unbounded">
1099
        <xs:annotation>
1100
          <xs:documentation>A list of method names and :term:`Subjects` with
1101
          permission to invoke those methods.</xs:documentation>
1102
        </xs:annotation>
1103
      </xs:element>
1104
    </xs:sequence>    
1105
    <xs:attribute name="name" type="d1:ServiceName" use="required">
1106
      <xs:annotation>
1107
        <xs:documentation>The name of the service. The valid list of entries
1108
        for Member Nodes includes: *MNCore*, *MNRead*, *MNAuthorization*,
1109
        *MNStorage*, and *MNReplication*. The valid list of entries for
1110
        Coordinating Nodes includes: *CNCore*, *CNRead*, *CNAuthorization*,
1111
        *CNIdentity*, *CNReplication*, and *CNRegister*.</xs:documentation>
1112
      </xs:annotation>
1113
    </xs:attribute>
1114
    <xs:attribute name="version" type="d1:ServiceVersion" use="required">
1115
      <xs:annotation>
1116
        <xs:documentation>Version of the service supported by the node.
1117
        Version is expressed in whole steps, no minor version identifiers are
1118
        used. For example, the version 1.0.0 API would be indicated by the
1119
        value "v1"</xs:documentation>
1120
      </xs:annotation>
1121
    </xs:attribute>
1122
    <xs:attribute name="available" type="xs:boolean">
1123
      <xs:annotation>
1124
        <xs:documentation>A boolean flag indicating if the service is
1125
        available (*true*, default) or otherwise (*false*).
1126
        </xs:documentation>
1127
      </xs:annotation>
1128
    </xs:attribute>
1129
  </xs:complexType>
1130

    
1131
  <!-- Service Method Restriction -->
1132
  <xs:complexType name="ServiceMethodRestriction">
1133
    <xs:annotation>
1134
      <xs:documentation>Describes an optional restriction policy for a given
1135
      method. If this element exists for a service method, its use is
1136
      restricted, and only :term:`Subjects` listed in the list are allowed to
1137
      invoke the method named in the *methodName*
1138
      attribute.</xs:documentation>
1139
    </xs:annotation>
1140
  <xs:complexContent>
1141
    <xs:extension base="d1:SubjectList">
1142
      <xs:attribute name="methodName" use="required" type="xs:string">
1143
        <xs:annotation>
1144
          <xs:documentation>The formal name of the method in this *Service*
1145
          which is to be restricted.</xs:documentation>
1146
        </xs:annotation>
1147
      </xs:attribute>
1148
    </xs:extension>
1149
  </xs:complexContent>
1150
  </xs:complexType>
1151

    
1152
  <!-- Services -->
1153
  <xs:complexType  name="Services">
1154
    <xs:annotation>
1155
      <xs:documentation>A list of services that are provided by a node. Used
1156
      in Node descriptions so that Nodes can provide metadata about each
1157
      service they implement and support. </xs:documentation>
1158
    </xs:annotation>
1159
    <xs:sequence>
1160
      <xs:element name="service" type="d1:Service" minOccurs="1" 
1161
                  maxOccurs="unbounded" />
1162
    </xs:sequence>
1163
  </xs:complexType>
1164

    
1165
  <!-- Session -->
1166
  <xs:complexType  name="Session">
1167
    <xs:annotation>
1168
      <xs:documentation>Information about the authenticated session for a
1169
      service transaction. Session data is retrieved from the SSL client
1170
      certificate and populated in the *Session* object. The subject
1171
      represents the person or system that authenticated successfully, and the
1172
      *subjectInfo* contains a listing of alternate identities (both Persons
1173
      and Groups) that are also valid identities for this user. The
1174
      *subjectInfo* should include at least one :class:`Types.Person` or
1175
      :class:`Types.Group` entry that provides the attributes of the subject
1176
      that was authenticated.</xs:documentation>
1177
    </xs:annotation>
1178
    <xs:sequence>
1179
      <xs:element name="subject" type="d1:Subject" minOccurs="1" 
1180
                  maxOccurs="1" />
1181
      <xs:element name="subjectInfo" type="d1:SubjectInfo" minOccurs="0" 
1182
                  maxOccurs="1" />
1183
    </xs:sequence>
1184
  </xs:complexType>
1185
    
1186
  <!-- Schedule -->
1187
  <xs:complexType name="Schedule">
1188
    <xs:annotation>
1189
      <xs:documentation>The schedule on which :term:`synchronization` will run
1190
      for a particular node. Syntax for each time slot follows the syntax
1191
      conventions defined by the Quartz Scheduler
1192
      (http://www.quartz-scheduler.org/api/2.1.0/org/quartz/CronExpression.html)
1193
      </xs:documentation>
1194
    </xs:annotation>
1195
    <xs:attribute name="hour" use="required" type="d1:CrontabEntry"/>
1196
    <xs:attribute name="mday" use="required" type="d1:CrontabEntry"/>
1197
    <xs:attribute name="min"  use="required" type="d1:CrontabEntry"/>
1198
    <xs:attribute name="mon"  use="required" type="d1:CrontabEntry"/>
1199
    <xs:attribute name="sec"  use="required" type="d1:CrontabEntrySeconds"/>
1200
    <xs:attribute name="wday" use="required" type="d1:CrontabEntry"/>
1201
    <xs:attribute name="year" use="required" type="d1:CrontabEntry"/>
1202
  </xs:complexType>
1203

    
1204
  <!-- Slice -->
1205
  <xs:complexType name="Slice">
1206
    <xs:annotation>
1207
      <xs:documentation>An abstract type used as a common base for other types
1208
      that need to include *count*, *start*, and *total* attributes to
1209
      indicate which slice of a list is represented by a set of
1210
      records.</xs:documentation>
1211
      <xs:documentation>The first element in a list is always index 0, i.e.
1212
      list indexes are zero-based.</xs:documentation>
1213
    </xs:annotation>
1214
    <xs:attribute name="count" use="required" type="xs:int">
1215
      <xs:annotation>
1216
        <xs:documentation>The number of entries in the
1217
        slice.</xs:documentation>
1218
      </xs:annotation>
1219
    </xs:attribute>
1220
    <xs:attribute name="start" use="required" type="xs:int">
1221
      <xs:annotation>
1222
        <xs:documentation>The zero-based index of the first element in the
1223
        slice.</xs:documentation>
1224
      </xs:annotation>
1225
    </xs:attribute>
1226
    <xs:attribute name="total" use="required" type="xs:int">
1227
      <xs:annotation>
1228
        <xs:documentation>The total number of entries in the source list from
1229
        which the slice was extracted.</xs:documentation>
1230
      </xs:annotation>        
1231
    </xs:attribute>
1232
  </xs:complexType>
1233
    
1234
  <!-- Synchronization -->
1235
  <xs:complexType name="Synchronization">
1236
    <xs:annotation>
1237
      <xs:documentation>Configuration information for the process by which
1238
      metadata is harvested from Member Nodes to Coordinating Nodes, including
1239
      the schedule on which harvesting should occur, and information about the
1240
      last :term:`synchronization` attempts for the node. Member Nodes
1241
      providing *Synchronization* information only need to provide the
1242
      *schedule*. Coordinating Nodes must set values for the *lastHarvested*
1243
      and *lastCompleteHarvest* fields.</xs:documentation>
1244
    </xs:annotation>
1245
    <xs:sequence>
1246
      <xs:element name="schedule" type="d1:Schedule" minOccurs="1" 
1247
                  maxOccurs="1">
1248
        <xs:annotation>
1249
          <xs:documentation>An entry set by the Member Node indicating the
1250
          frequency for which synchronization should occur. This setting will
1251
          be influenced by the frequency with which content is updated on the
1252
          Member Node and the acceptable latency for detection and subsequent
1253
          processing of new content.</xs:documentation>
1254
        </xs:annotation>
1255
      </xs:element>
1256
      <xs:element name="lastHarvested" type="xs:dateTime" minOccurs="0" 
1257
                  maxOccurs="1">
1258
        <xs:annotation>
1259
          <xs:documentation>The most recent modification date (UTC) of objects
1260
          checked during the last harvest of the node.</xs:documentation>
1261
        </xs:annotation>
1262
      </xs:element>
1263
      <xs:element name="lastCompleteHarvest" type="xs:dateTime" minOccurs="0" 
1264
                  maxOccurs="1">
1265
        <xs:annotation>
1266
          <xs:documentation>The last time (UTC) all the data from a node was
1267
          pulled from a member node during a complete synchronization
1268
          process.</xs:documentation>
1269
        </xs:annotation>
1270
      </xs:element>
1271
    </xs:sequence>
1272
  </xs:complexType>
1273

    
1274
  <!-- Subject = user identity -->
1275
  <xs:complexType name="Subject">
1276
    <xs:annotation>
1277
      <xs:documentation>An identifier for a Person (user), Group,
1278
      Organization, or System.</xs:documentation>
1279
      <xs:documentation>The :term:`Subject` is a string that provides a formal
1280
      name to identify a user or group in the DataONE Identity Management
1281
      Service. The *subject* is represented by a unique, persistent,
1282
      non-reassignable identifier string that follows the same constraints as
1283
      :class:`Types.Identifier`. Subjects are immutable and can not be 
1284
      deleted.</xs:documentation>
1285
    </xs:annotation>
1286
    <xs:simpleContent>
1287
        <xs:extension base="d1:NonEmptyString">
1288
        <!-- Note: Can also be special symbolic principals: verifiedUser:
1289
        anyone with checked credentials for whom their real name and email has
1290
        been verified authenticatedUser: anyone with checked credentials
1291
        public: anyone, whether authenticated or not -->
1292
        </xs:extension>
1293
    </xs:simpleContent>
1294
  </xs:complexType>
1295

    
1296
  <!-- SubjectInfo -->
1297
  <xs:complexType name="SubjectInfo">
1298
    <xs:annotation>
1299
      <xs:documentation>A list of :term:`Subjects`, including both
1300
      :class:`Types.Person` and :class:`Types.Group` entries returned from
1301
      the :func:`CNIdentity.getSubjectInfo` service and
1302
      :func:`CNIdentity.listSubjects` services.</xs:documentation>
1303
    </xs:annotation>
1304
    <xs:sequence>
1305
      <xs:element name="person" type="d1:Person" minOccurs="0" maxOccurs="unbounded"/>
1306
      <xs:element name="group" type="d1:Group" minOccurs="0" maxOccurs="unbounded"/>
1307
    </xs:sequence>
1308
  </xs:complexType>
1309

    
1310
  <!-- SubjectList -->  
1311
  <xs:complexType name="SubjectList">
1312
    <xs:annotation>
1313
      <xs:documentation> A list of :term:`Subjects` used for identity/group
1314
      management</xs:documentation>
1315
    </xs:annotation>
1316
    <xs:sequence>
1317
      <xs:element name="subject" type="d1:Subject" minOccurs="0" 
1318
                  maxOccurs="unbounded"/>
1319
    </xs:sequence>
1320
  </xs:complexType>
1321

    
1322
  <!-- Definition of the SystemMetdata element -->
1323
  <xs:complexType name="SystemMetadata">
1324
    <xs:annotation>
1325
      <xs:documentation> System metadata (often referred to as
1326
      :term:`sysmeta`) is the information used by DataONE to track and manage
1327
      objects across the distributed Coordinating and Member Nodes of the
1328
      network. System metadata documents contain low level information (e.g.
1329
      size, type, owner, access control rules) about managed objects such as
1330
      science data, science metadata, and resource map objects and the
1331
      relationships between objects (e.g. *obsoletes* and
1332
      *obsoletedBy*).</xs:documentation>
1333
      <xs:documentation> The information is maintained dynamically by
1334
      Coordinating Nodes and is mutable in that it reflects the current state
1335
      of an object in the system. Initial properties of system metadata are
1336
      generated by clients and Member Nodes. After object synchronization, the
1337
      Coordinating Nodes hold authoritative copies of system metadata. Mirror
1338
      copies of system metadata are maintained at each of the Coordinating
1339
      nodes. </xs:documentation>
1340
      <xs:documentation> System metadata are considered operational
1341
      information needed to run DataONE, and can be read by all Coordinating
1342
      Nodes and Member Nodes in the course of service provision. In order to
1343
      reduce issues with third-party tracking of data status information,
1344
      users can read system metadata for an object if they have the access
1345
      rights to read the corresponding object which a system metadata record
1346
      describes. </xs:documentation>
1347
      <xs:documentation> System Metadata elements are partitioned into two
1348
      classes: metadata elements that must be provided by client software to
1349
      the DataONE system, and elements that are generated by DataONE itself in
1350
      the course of managing objects. </xs:documentation>
1351
    </xs:annotation>
1352
    <xs:sequence>
1353
      <!-- Client Provided system metadata fields -->
1354
      <xs:element name="serialVersion" type="xs:unsignedLong" minOccurs="0"
1355
                  maxOccurs="1">
1356
        <xs:annotation>
1357
          <xs:documentation> A serial number maintained by the coordinating node
1358
            to indicate when changes have occurred to *SystemMetadata* to avoid
1359
            update conflicts. Clients should ensure that they have the most
1360
            recent version of a *SystemMetadata* document before attempting to
1361
            update, otherwise an error will be thrown to prevent conflicts. The
1362
            Coordinating Node must set this optional field when it receives the
1363
            system metadata document. </xs:documentation>
1364
        </xs:annotation>
1365
      </xs:element>
1366
      <xs:element name="identifier" type="d1:Identifier">
1367
        <xs:annotation>
1368
          <xs:documentation>The :term:`identifier` is a unique Unicode string
1369
          that is used to canonically name and identify the object in DataONE.
1370
          Each object in DataONE is immutable, and therefore all objects must
1371
          have a unique Identifier. If two objects are related to one another
1372
          (such as one object is a more recent version of another object),
1373
          each of these two objects will have unique identifiers. The
1374
          relationship among the objects is specified in other metadata fields
1375
          (see *Obsoletes* and *ObsoletedBy*), but this does not preclude the
1376
          inclusion of version information in the identifier string. However,
1377
          DataONE treats all Identifiers as opaque and will not try to infer
1378
          versioning semantics based on the content of the Identifiers --
1379
          rather, this information is found in the *Obsoletes* and
1380
          *ObsoletedBy* fields. Note that identifiers are used in a number of
1381
          REST API calls as parts of the URL path. As such, all special
1382
          characters such as "/", " ", "+", "\", "%" must be properly encoded,
1383
          e.g. "%2F", "%20", "%2B", "%5C", "%25" respectively when used in
1384
          REST method calls. See RFC3896_ for more details. For example, the
1385
          :func:`MNRead.get()` call for an object with identifier:</xs:documentation>
1386
          <xs:documentation>``http://some.location.name/mydata.cgi?id=2088``</xs:documentation>
1387
          <xs:documentation>would be:</xs:documentation>
1388
          <xs:documentation>``http://mn1.server.name/mn/v1/object/http:%2F%2Fsome.location.name%2Fmydata.cgi%3Fid%3D2088``</xs:documentation>
1389
          <xs:documentation>.. _RFC3896: http://www.ietf.org/rfc/rfc3896.txt </xs:documentation>
1390
        </xs:annotation>
1391
      </xs:element>
1392
      <xs:element name="formatId" type="d1:ObjectFormatIdentifier">
1393
        <xs:annotation>
1394
          <xs:documentation> Designation of the standard or format that should
1395
          be used to interpret the contents of the object, drawn from
1396
          controlled list of formats that are provided by the DataONE
1397
          :class:`Types.ObjectFormat` service. DataONE maintains a list of
1398
          formats in use and their canonical FormatIdentifiers. The format
1399
          identifier for an object should imply its mime type for data objects
1400
          and metadata type and serialization format for metadata objects.
1401
          Examples include the namespace of the EML 2.1 metadata
1402
          specification, the DOCTYPE of the Biological Data Profile, the mime
1403
          type of ``text/csv`` files, and the canonical name of the NetCDF
1404
          specification. </xs:documentation>
1405
        </xs:annotation>
1406
      </xs:element>
1407
      <xs:element name="size" type="xs:unsignedLong">
1408
        <xs:annotation>
1409
          <xs:documentation> The size of the object in octets (8-bit bytes).
1410
          </xs:documentation>
1411
        </xs:annotation>
1412
      </xs:element>
1413
      <xs:element name="checksum" type="d1:Checksum">
1414
        <xs:annotation>
1415
          <xs:documentation> A calculated hash value used to validate object
1416
          integrity over time and after network transfers. The value is
1417
          calculated using a standard hashing algorithm that is accepted by
1418
          DataONE and that is indicated in the included *ChecksumAlgorithm*
1419
          attribute. </xs:documentation>
1420
        </xs:annotation>
1421
      </xs:element>
1422
      <xs:element name="submitter" type="d1:Subject" minOccurs="0" maxOccurs="1">
1423
        <xs:annotation>
1424
          <xs:documentation>:term:`Subject` who submitted the associated
1425
          abject to the DataONE Member Node. The Member Node must set this
1426
          field when it receives the system metadata document from a client
1427
          (the field is optional from the client perspective, but is required
1428
          when a MN creates an object). By default, the submitter lacks any
1429
          rights to modify an object, so care must be taken to set
1430
          *rightsHolder* and *accessPolicy* correctly with a reference to the
1431
          subject of the submitter if the submitter is to be able to make
1432
          further changes to the object.</xs:documentation>
1433
        </xs:annotation>
1434
      </xs:element>
1435
      <xs:element name="rightsHolder" type="d1:Subject">
1436
        <xs:annotation>
1437
          <xs:documentation>:term:`Subject` that has ultimate authority for
1438
          the object and is authorized to make all decisions regarding the
1439
          disposition and accessibility of the object. The *rightsHolder* has
1440
          all rights to access the object, update the object, and grant
1441
          permissions for the object, even if additional access control rules
1442
          are not specified for the object. Typically, the *rightsHolder*
1443
          field would be set to the name of the subject submitting an object,
1444
          so that the person can make further changes later. By default, the
1445
          *submitter* lacks any rights to modify an object, so care must be
1446
          taken to set *rightsHolder* and *accessPolicy* correctly with a
1447
          reference to the subject of the *submitter* if the *submitter* is to
1448
          be able to make further changes to the object. </xs:documentation>
1449
        </xs:annotation>
1450
      </xs:element>
1451
      <xs:element name="accessPolicy" type="d1:AccessPolicy" minOccurs="0"
1452
                  maxOccurs="1">
1453
        <xs:annotation>
1454
          <xs:documentation>The *accessPolicy* determines which
1455
          :term:`Subjects` are allowed to make changes to an object in
1456
          addition to the *rightsHolder* and *authoritativeMemberNode*. The
1457
          *accessPolicy* is set for an object during a
1458
          :func:`MNStorage.create` or :func:`MNStorage.update` call, or when
1459
          *SystemMetadata* is updated on the Coordinating Node via various
1460
          mechanisms. This policy replaces any existing policies that might
1461
          exist for the object. Member Nodes that house an object are
1462
          obligated to enforce the *accessPolicy* for that
1463
          object.</xs:documentation>
1464
        </xs:annotation>
1465
      </xs:element>
1466
      <xs:element name="replicationPolicy" type="d1:ReplicationPolicy"
1467
                  minOccurs="0" maxOccurs="1">
1468
        <xs:annotation>
1469
          <xs:documentation>A controlled list of policy choices that determine
1470
          how many replicas should be maintained for a given object and any
1471
          preferences or requirements as to which Member Nodes should be
1472
          allowed to house the replicas. The policy determines whether
1473
          replication is allowed, the number of replicas desired, the list of
1474
          preferred nodes to hold the replicas, and a list of blocked nodes on
1475
          which replicas must not exist.</xs:documentation>
1476
        </xs:annotation>
1477
      </xs:element>
1478
      <xs:element name="obsoletes" type="d1:Identifier" minOccurs="0"
1479
                  maxOccurs="1">
1480
        <xs:annotation>
1481
          <xs:documentation>The :term:`Identifier` of an object that is a
1482
          prior version of the object described in this system metadata record
1483
          and that is obsoleted by this object. When an object is obsoleted,
1484
          it is removed from all DataONE search indices but is still
1485
          accessible from the :func:`CNRead.get` service. </xs:documentation>
1486
        </xs:annotation>
1487
      </xs:element>
1488
      <xs:element name="obsoletedBy" type="d1:Identifier" minOccurs="0"
1489
                  maxOccurs="1">
1490
        <xs:annotation>
1491
          <xs:documentation>The :term:`Identifier` of an object that is a
1492
          subsequent version of the object described in this system metadata
1493
          record and that therefore obsoletes this object. When an object is
1494
          obsoleted, it is removed from all DataONE search indices but is
1495
          still accessible from the :func:`CNRead.get` service.
1496
          </xs:documentation>
1497
        </xs:annotation>
1498
      </xs:element>
1499
      <xs:element name="archived" type="xs:boolean" minOccurs="0" maxOccurs="1">
1500
        <xs:annotation>
1501
          <xs:documentation>A boolean flag, set to *true* if the object has
1502
          been classified as archived. An archived object does not show up in
1503
          search indexes in DataONE, but is still accessible via the CNRead
1504
          and MNRead services if associated access polices allow. The field is
1505
          optional, and if absent, then objects are implied to not be
1506
          archived, which is the same as setting archived to
1507
          *false*.</xs:documentation>
1508
        </xs:annotation>
1509
      </xs:element>
1510
      <xs:element name="dateUploaded" type="xs:dateTime" minOccurs="0"
1511
                  maxOccurs="1">
1512
        <xs:annotation>
1513
          <xs:documentation>Date and time (UTC) that the object was uploaded
1514
          into the DataONE system, which is typically the time that the object
1515
          is first created on a Member Node using the :func:`MNStorage.create`
1516
          operation. Note this is independent of the publication or release
1517
          date of the object. The Member Node must set this optional field
1518
          when it receives the system metadata document from a
1519
          client.</xs:documentation>
1520
        </xs:annotation>
1521
      </xs:element>
1522
      <xs:element name="dateSysMetadataModified" type="xs:dateTime"
1523
                  minOccurs="0" maxOccurs="1">
1524
        <xs:annotation>
1525
          <xs:documentation> Date and time (UTC) that this system metadata
1526
          record was last modified in the DataONE system. This is the same
1527
          timestamp as *dateUploaded* until the system metadata is further
1528
          modified. The Member Node must set this optional field when it
1529
          receives the system metadata document from a
1530
          client.</xs:documentation>
1531
        </xs:annotation>
1532
      </xs:element>
1533
      <xs:element name="originMemberNode" type="d1:NodeReference" minOccurs="0"
1534
                  maxOccurs="1">
1535
        <xs:annotation>
1536
          <xs:documentation>A reference to the Member Node that originally
1537
          uploaded the associated object. This value should never change, even
1538
          if the Member Node ceases to exist. </xs:documentation>
1539
        </xs:annotation>
1540
      </xs:element>
1541
      <xs:element name="authoritativeMemberNode" type="d1:NodeReference"
1542
                  minOccurs="0" maxOccurs="1">
1543
        <xs:annotation>
1544
          <xs:documentation> A reference to the Member Node that acts as the
1545
          authoritative source for an object in the system. The
1546
          *authoritativeMemberNode* will often also be the *originMemberNode*,
1547
          unless there has been a need to transfer authority for an object to
1548
          a new node, such as when a Member Node becomes defunct. The
1549
          *authoritativeMemberNode* has all the rights of the *rightsHolder*
1550
          to maintain and curate the object, including making any changes
1551
          necessary. </xs:documentation>
1552
        </xs:annotation>
1553
      </xs:element>
1554
      <xs:element name="replica" type="d1:Replica" minOccurs="0" 
1555
                  maxOccurs="unbounded">
1556
        <xs:annotation>
1557
          <xs:documentation> A container field used to repeatedly provide
1558
          several metadata fields about each replica that exists in the
1559
          system, or is being replicated. Note that a *replica* field exists
1560
          even for the Authoritative/Origin Member Nodes so that the status of
1561
          those objects can be tracked. </xs:documentation>
1562
        </xs:annotation>
1563
      </xs:element>
1564
    </xs:sequence>
1565
  </xs:complexType>
1566
    
1567
  <!-- ******************************************
1568
          DEFINE ROOT ELEMENTS OF MESSAGES HERE 
1569
          ****************************************** -->
1570
  <!-- NOTE THAT ALL SERIALIZEABLE ROOT ELEMENTS FOR MESSAGES SHOULD BE OF A 
1571
       COMPLEX TYPE -->
1572

    
1573
  <!-- These root-level element definitions are provided for selected types so
1574
       that those types can be used in serialized messages in method calls in
1575
       DataONE. Any type that is included as a parameter to or a return type
1576
       from a DataONE service should have a corresponding root element of that
1577
       type defined here.
1578
  -->
1579

    
1580
  <xs:element name="accessPolicy" type="d1:AccessPolicy" />
1581
  <xs:element name="accessRule" type="d1:AccessRule" />
1582
  <xs:element name="checksum" type="d1:Checksum" />
1583
  <xs:element name="checksumAlgorithmList" type="d1:ChecksumAlgorithmList" />
1584
  <xs:element name="group" type="d1:Group" />
1585
  <xs:element name="identifier" type="d1:Identifier" />
1586
  <xs:element name="log" type="d1:Log" />
1587
  <xs:element name="logEntry" type="d1:LogEntry" />
1588
  <xs:element name="node" type="d1:Node"/>
1589
  <xs:element name="nodeList" type="d1:NodeList"/>
1590
  <xs:element name="nodeReference" type="d1:NodeReference" />
1591
  <xs:element name="nodeReplicationPolicy" type="d1:NodeReplicationPolicy" />
1592
  <xs:element name="objectInfo" type="d1:ObjectInfo" />
1593
  <xs:element name="objectList" type="d1:ObjectList" />
1594
  <xs:element name="objectLocationList" type="d1:ObjectLocationList" />
1595
  <xs:element name="objectFormat" type="d1:ObjectFormat" />
1596
  <xs:element name="objectFormatList" type="d1:ObjectFormatList" />
1597
  <xs:element name="person" type="d1:Person" />
1598
  <xs:element name="replica" type="d1:Replica" />
1599
  <xs:element name="replicationPolicy" type="d1:ReplicationPolicy" />
1600
  <xs:element name="schedule" type="d1:Schedule" />
1601
  <xs:element name="service" type="d1:Service" />
1602
  <xs:element name="services" type="d1:Services" />
1603
  <xs:element name="serviceMethodRestriction" type="d1:ServiceMethodRestriction" />
1604
  <xs:element name="session" type="d1:Session" />
1605
  <xs:element name="subject" type="d1:Subject" />
1606
  <xs:element name="subjectList" type="d1:SubjectList" />
1607
  <xs:element name="subjectInfo" type="d1:SubjectInfo" />
1608
  <xs:element name="synchronization" type="d1:Synchronization" />
1609
  <xs:element name="systemMetadata" type="d1:SystemMetadata" />
1610
</xs:schema>
1611

    
(1-1/3)