-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathreusable.xsd
7425 lines (7331 loc) · 438 KB
/
reusable.xsd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (c) 2014 DDI Alliance, DDI 3.2 release, 2014-02-05
This file is part of DDI 3.2 XML Schema.
DDI 3.2 XML Schema is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by the
Free Software Foundation, either version 3 of the License, or (at your
option) any later version.
DDI 3.2 XML Schema is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
for more details.
You should have received a copy of the GNU Lesser General Public License along
with DDI 3.2 XML Schema. If not, see <http://www.gnu.org/licenses/>.
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="ddi:reusable:3_2" xmlns:dc="http://purl.org/dc/terms/" xmlns:xhtml="http://www.w3.org/1999/xhtml" targetNamespace="ddi:reusable:3_2" elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="xml.xsd"/>
<xs:import namespace="http://www.w3.org/1999/xhtml" schemaLocation="ddi-xhtml11.xsd"/>
<xs:import namespace="http://purl.org/dc/terms/" schemaLocation="dcterms.xsd"/>
<!-- Regular Expressions for DDI Identification -->
<!-- CHANGES in Regular Expressions for any base type BaseIDType, DDIAgencyIDType, or VersionType must be propagated to the derivative regular expressions:
URNRegex "[Uu][Rr][Nn]"
DDIRegex "[Dd][Dd][Ii]"
ObjectNameRegex "[A-Za-z]+"
DNSLabelRegex "[a-zA-Z0-9\-]{1,63}"
DDIAgencyIDType is derived from DNSLabelRegex "&DNSLabelRegex;(\.&DNSLabelRegex;)*"
IDType is derived from BaseIDType "&BaseIDType;+(\.&BaseIDType)?"
CanonicalURNType is derived from "&URNRegex;:&DDIRegex;:&DDIAgencyIDType;:&IDType;:&VersionType;"
DeprecatedURNType is derived from "&URNRegex;:&DDIRegex;:&DDIAgencyIDType;:&ObjectNameRegex;:&BaseIDType;(:&ObjectNameRegex;:&BaseIDType;)?:&VersionType;"
Note that each part of the two URN types is delimited by a colon ":"
-->
<!-- ID Type -->
<xs:simpleType name="BaseIDType">
<xs:annotation>
<xs:documentation>A type which is used for restricting the characters in DDI ID structures. Valid characters include A-Z, a-z, 0-9, *, @, $, -, and _.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:pattern value="[A-Za-z0-9\*@$\-_]+"/>
</xs:restriction>
</xs:simpleType>
<!-- Agency ID Type -->
<xs:simpleType name="DDIAgencyIDType">
<xs:annotation>
<xs:documentation>The agency expressed as filed with the DDI Agency ID Registry with optional additional sub-agency extensions. The length restriction of the complete string is done with the means of minLength and maxLength.
The regular expression engine of XML Schema has no lookahead possibility.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="253"/>
<xs:pattern value="[a-zA-Z0-9\-]{1,63}(\.[a-zA-Z0-9\-]{1,63})*"/>
</xs:restriction>
</xs:simpleType>
<!-- Version Type -->
<xs:simpleType name="VersionType">
<xs:annotation>
<xs:documentation>A type used for restricting the characters in a DDI version number. Valid characters include 0-9 and '.' used as a separator to express levels for the version number. The use of levels is optional and a version number can contain as many levels as needed by the agency.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]+(\.[0-9]+)*"/>
</xs:restriction>
</xs:simpleType>
<!-- DDI URN Type -->
<xs:simpleType name="CanonicalURNType">
<xs:annotation>
<xs:documentation>The canonical URN is the default structure for the DDI URN. It is composed of the following portions separated by a colon: urn:ddi:AgencyID:ObjectID:Version. Note that the self identifying portion (urn:ddi) of the canonical URN may be upper or lower case. The Version is always the version number of the object itself. If the object is scoped to the Agency, the objectID is the ID. [Example: urn:ddi:us.mpc:194R671:1] If it is scoped to the Maintainable and is a Maintainable Object, the objectID is the ID. [Example: urn:ddi:us.mpc:IPUMS_CL_EDU:1] If it is scoped to the Maintainable and is either a Versionable or Identifiable Object, the objectID consists of the ID of the parent Maintainable followed by a dot "." used as a separator followed by the ID of the object itself. [Example: urn:ddi:us.mpc:IPUMS_CL_EDU.C4:1]</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:pattern value="[Uu][Rr][Nn]:[Dd][Dd][Ii]:[a-zA-Z0-9\-]{1,63}(\.[a-zA-Z0-9\-]{1,63})*:[A-Za-z0-9\*@$\-_]+(\.[A-Za-z0-9\*@$\-_]+)?:[0-9]+(\.[0-9]+)*"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="DeprecatedURNType">
<xs:annotation>
<xs:documentation>The deprecated URN is an alternative structure for the DDI URN which contains additional information regarding the object types. It is composed of the following portions separated by a colon: urn:ddi:AgencyID:MaintainableObjectType:MaintainableObjectID:ObjectType:ObjectID:Version. Note that the self identifying portion (urn:ddi) of the deprecated URN may be upper or lower case. The Version is always the version number of the object itself. The MaintainableObjectType and ObjectType should be taken from the TypeOfObject list which provides a consistent ObjectType name over time. If the deprecated URN structure is the same where the object is scoped to the Agency or to the Maintainable. If the object is a Maintainable Object, only the Maintainable Object information is included. [Example: urn:ddi:us.mpc:CodeList:IPUMS_CL_EDU:1] If it is either a Versionable or Identifiable Object, the ObjectType and ObjectID of the parent Maintainable is provided followed by the ObjectType and ObjectID of the object itself. [Example: urn:ddi:us.mpc:CodeList:IPUMS_CL_EDU:Code:C4:1]</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:pattern value="[Uu][Rr][Nn]:[Dd][Dd][Ii]:[a-zA-Z0-9\-]{1,63}(\.[a-zA-Z0-9\-]{1,63})*:[A-Za-z]+:[A-Za-z0-9\*@$\-_]+(:[A-Za-z]+:[A-Za-z0-9\*@$\-_]+)?:[0-9]+(\.[0-9]+)*"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="DDIURNType">
<xs:annotation>
<xs:documentation>The DDI URN is comprised of the self identifying "urn" or "URN" and "ddi" or "DDI" followed by an agency, identifier, and version number. Note that the identifier is composed in different ways for the Canonical and Deprecated URN (all other portions are the same). The identifier in the Canonical URN is composed of the unique identifier which may be scoped to the agency or the maintainable object (urn:ddi:DDIAgencyID:BaseID:Version). In the case of being scoped to the maintainable, the identification is the ID of the Maintainable parent, followed by a dot '.', followed by the ID of the object. The identifier in the Deprecated URN is composed of the following parts separated by ':' a colon: The object type of the Maintainable Object, the ID of the Maintainable Object, and if the object is Versionable or Identifable this is followed by the Object Type and the Object ID.</xs:documentation>
</xs:annotation>
<xs:union memberTypes="CanonicalURNType DeprecatedURNType"/>
</xs:simpleType>
<!-- End of Regular Expressions for DDI Identification -->
<!-- BASIC TYPES -->
<xs:simpleType name="BaseDateType">
<xs:annotation>
<xs:documentation>Union type which allows for the use of a date-time combination (YYYY-MM-DDTHH:MM:SS), date (YYYYY-MM-DD), year-month (YYYY-MM), year (YYYY), and duration (PnYnMnDnHnMnS) as valid values. These are formatted according to ISO 8601. Note that although a duration is allowed there are few situations where it is applicable.</xs:documentation>
</xs:annotation>
<xs:union memberTypes="xs:dateTime xs:date xs:gYearMonth xs:gYear xs:duration"/>
</xs:simpleType>
<xs:complexType name="HistoricalDateType">
<xs:annotation>
<xs:documentation>Used to preserve an historical date, formatted in a non-ISO fashion.</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element ref="NonISODate">
<xs:annotation>
<xs:documentation>This is the date expressed in a non-ISO compliant structure. Primarily used to retain legacy content or to express non-Gregorian calender dates.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="HistoricalDateFormat" minOccurs="0">
<xs:annotation>
<xs:documentation>Indicate the structure of the date provided in NonISODate. For example if the NonISODate contained 4/1/2000 the Historical Date Format would be mm/dd/yyyy. The use of a controlled vocabulary is strongly recommended to support interoperability.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="Calendar" minOccurs="0">
<xs:annotation>
<xs:documentation>Specifies the type of calendar used (e.g., Gregorian, Julian, Jewish).</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:element name="NonISODate" type="xs:string">
<xs:annotation>
<xs:documentation>The date expressed in a non-ISO compliant structure using xs:string.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="HistoricalDateFormat" type="CodeValueType">
<xs:annotation>
<xs:documentation>The structure of a non-ISO formatted date. For example if the NonISODate contained 4/1/2000 the Historical Date Format would be mm/dd/yyyy. The use of a controlled vocabulary is strongly recommended to support interoperability.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Calendar" type="CodeValueType">
<xs:annotation>
<xs:documentation>Specifies the type of calendar used (e.g., Gregorian, Julian, Jewish). Supports the use of an external controlled vocabulary. The use of a controlled vocabulary is strongly recommended to support interoperability.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="DateType">
<xs:annotation>
<xs:documentation>Provides the structure of a Date element, which allows a choice between single, simple dates (of BaseDateType) or date ranges. If the Date element contains a range, Cycle may be used to indicate occurrence of this range within a series of ranges as an integer identifying the cycle, i.e. the 4th wave of a data collection cycle would have <Cycle>4</Cycle>. ISO-formatted dates are required for all standard date fields; a historically-formatted date may also be provided to reflect the specific content of a legacy document or common practice within an agency or for publication. All uses of DateType should be optional.</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:choice>
<xs:sequence>
<xs:element ref="SimpleDate">
<xs:annotation>
<xs:documentation>A single point in time. If a duration is expressed as a SimpleDate it is defining a period of time without a designated Start or End date.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="HistoricalDate" minOccurs="0">
<xs:annotation>
<xs:documentation>A simple date expressed in a historical date format, including a specification of the date format and calendar used.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
<xs:sequence>
<xs:element ref="StartDate">
<xs:annotation>
<xs:documentation>Start of a date range. If there is a start date with no end date provided, this implies that the end date is unknown but that the date being recorded is not just a simple date but a range of unknown duration.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="HistoricalStartDate" minOccurs="0">
<xs:annotation>
<xs:documentation>A start date expressed in a historical date format, including a specification of the date format and calendar used.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="EndDate" minOccurs="0">
<xs:annotation>
<xs:documentation>End of a date range with a known start date.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="HistoricalEndDate" minOccurs="0">
<xs:annotation>
<xs:documentation>An end date expressed in a historical date format, including a specification of the date format and calendar used.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Cycle" type="xs:integer" minOccurs="0">
<xs:annotation>
<xs:documentation>Use to indicate occurrence of this range within a series of ranges as an integer identifying the cycle, i.e. the 4th wave of a data collection cycle would have <Cycle>4</Cycle>.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
<xs:sequence>
<xs:element ref="EndDate">
<xs:annotation>
<xs:documentation>This is the End date of a range for which the Start Date is unknown. For example an embargo may have only an end date. In some cases only the end date is known. This implies that the start date is unknown but that the date being recorded is not just a simple date but a range of unknown duration with a known end date.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="HistoricalEndDate" minOccurs="0">
<xs:annotation>
<xs:documentation>An end date of a range for which the start date is unknown expressed in a historical date format, including a specification of the date format and calendar used.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:choice>
</xs:sequence>
</xs:complexType>
<xs:complexType name="InternationalStringType">
<xs:annotation>
<xs:documentation>Packaging structure for multiple language versions of the same string content. Where an element of this type is repeatable, the expectation is that each repetition contains different content, each of which can be expressed in multiple languages. The language designation goes on the individual String.</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element ref="String" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>A non-formatted string of text with an attribute that designates the language of the text. Repeat this object to express the same content in another language.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:element name="String" type="StringType">
<xs:annotation>
<xs:documentation>Allows for non-formatted strings that may be translations from other languages, or that may be translatable into other languages. Only one string per language/location type is allowed.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="StringType">
<xs:annotation>
<xs:documentation>Allows for non-formatted strings that may be translations from other languages, or that may be translatable into other languages. Only one string per language/location type is allowed. String contains the following attributes, xml:lang to designate the language, isTranslated with a default value of false to designate if an object is a translation of another language, isTranslatable with a default value of true to designate if the content can be translated, translationSourceLanguage to indicate the source languages used in creating this translation, and translationDate.</xs:documentation>
</xs:annotation>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute ref="xml:lang">
<xs:annotation>
<xs:documentation>Indicates the language of content. Note that xml:lang allows for a simple 2 or 3 character language code or a language code extended by a country code , for example en-au for English as used in Australia.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="isTranslated" type="xs:boolean" default="false">
<xs:annotation>
<xs:documentation>Indicates whether content is a translation (true) or an original (false).</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="isTranslatable" type="xs:boolean" default="true">
<xs:annotation>
<xs:documentation>Indicates whether content is translatable (true) or not (false). An example of something that is not translatable would be a MNEMONIC of an object or a number.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="translationSourceLanguage" type="LanguageList" use="optional">
<xs:annotation>
<xs:documentation>List the language or language codes in a space delimited array. The language original may or may not be provided in this bundle of language specific strings.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="translationDate" type="xs:date" use="optional">
<xs:annotation>
<xs:documentation>The date the content was translated. Provision of translation date allows user to verify if translation was available during data collection or other time linked activity.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="StructuredStringType">
<xs:annotation>
<xs:documentation>Packaging structure for multiple language versions of the same string content. for objects that allow for internal formatting using XHTML tags. Where an element of this type is repeatable, the expectation is that each repetition contains different content, each of which can be expressed in multiple languages.</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element ref="Content" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>Supports the optional use of XHTML formatting tags within the string structure. In addition to the language designation and information regarding translation, the attribute isPlain can be set to true to indicate that the content should be treated as plain unstructured text, including any XHTML formatting tags. Repeat the content element to provide multiple language versions of the same content.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:element name="Content" type="ContentType">
<xs:annotation>
<xs:documentation>Supports the optional use of XHTML formatting tags within the string structure.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="ContentType" mixed="true">
<xs:annotation>
<xs:documentation>Supports the optional use of XHTML formatting tags within the string structure. XHTML tag content is controlled by the schema, see Part I of the DDI Technical Manual for a detailed list of available tags. Language of the string is defined by the attribute xml:lang. The content can be identified as translated (isTranslated), subject to translation (isTranslatable), the result of translation from one or more languages (translationSourceLanguages), and carry an indication whether or not it should be treated as plain text (isPlain).</xs:documentation>
</xs:annotation>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="xhtml:BlkNoForm.mix">
<xs:annotation>
<xs:documentation>The following xhtml tags are available for use in Content: address, blockquote, pre, h1, h2, h3, h4, h5, h6, hr, div, p, a, abbr, acronym, cite, code, dfn, em, kbd, q, samp, strong, var, b, big, i, small, sub, sup, tt, br, span, dl, dt, dd, ol, ul, li, table, caption, thead, tfoot, tbody, colgroup, col, tr, th, and td. They should be used with the xhtml namespace prefix, i.e., xhtml:div. See DDI Technical Manual Part I for additional details.</xs:documentation>
</xs:annotation>
</xs:group>
</xs:choice>
<xs:attribute ref="xml:lang">
<xs:annotation>
<xs:documentation>Indicates the language of content.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="isTranslated" type="xs:boolean" default="false">
<xs:annotation>
<xs:documentation>Indicates whether content is a translation (true) or an original (false).</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="isTranslatable" type="xs:boolean" default="true">
<xs:annotation>
<xs:documentation>Indicates whether content is translatable (true) or not (false).</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="translationSourceLanguage" type="LanguageList" use="optional">
<xs:annotation>
<xs:documentation>List the language or language codes in a space delimited array. The language original may or may not be provided in this bundle of language specific strings.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="translationDate" type="xs:date" use="optional">
<xs:annotation>
<xs:documentation>The date the content was translated. Provision of translation date allows user to verify if translation was available during data collection or other time linked activity.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="isPlainText" type="xs:boolean" default="true">
<xs:annotation>
<xs:documentation>Indicates that the content is to be treated as plain text (no formatting). You may use DDIProfile to fix the value of this attribute to true in cases where you wish to indicate that your system treats all content should be treated as plain text.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<xs:simpleType name="LanguageList">
<xs:list itemType="xs:language">
<xs:annotation>
<xs:documentation>Allows for a list of language codes (those valid for xml:lang) expressed as a space delimited array.</xs:documentation>
</xs:annotation>
</xs:list>
</xs:simpleType>
<xs:complexType name="EmptyType">
<xs:annotation>
<xs:documentation>Element with no content. It is an abstract type, used to extend into subclasses.</xs:documentation>
</xs:annotation>
</xs:complexType>
<xs:complexType name="CodeValueType">
<xs:annotation>
<xs:documentation>Allows for string content which may be taken from an externally maintained controlled vocabulary (code value). If the content is from a controlled vocabulary provide the code value, as well as a reference to the code list from which the value is taken. Provide as many of the identifying attributes as needed to adequately identify the controlled vocabulary. Note that DDI has published a number of controlled vocabularies applicable to several locations using the CodeValue structure. Use of shared controlled vocabularies helps support interoperability and machine actionability.</xs:documentation>
</xs:annotation>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="codeListID" type="xs:string" use="optional">
<xs:annotation>
<xs:documentation>The ID of the code list (controlled vocabulary) that the content was taken from.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="codeListName" type="xs:string" use="optional">
<xs:annotation>
<xs:documentation>The name of the code list.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="codeListAgencyName" type="xs:string" use="optional">
<xs:annotation>
<xs:documentation>The name of the agency maintaining the code list.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="codeListVersionID" type="xs:string" default="1.0">
<xs:annotation>
<xs:documentation>The version number of the code list (default is 1.0).</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="otherValue" type="xs:string" use="optional">
<xs:annotation>
<xs:documentation>If the value of the string is "Other" or the equivalent from the codelist, this attribute can provide a more specific value not found in the codelist.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="codeListURN" type="xs:string" use="optional">
<xs:annotation>
<xs:documentation>The URN of the codelist.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="codeListSchemeURN" type="xs:string" use="optional">
<xs:annotation>
<xs:documentation>If maintained within a scheme, the URN of the scheme containing the codelist.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!--BEGIN I/O PARAMETERS AND BINDING -->
<xs:complexType name="ParameterType">
<xs:annotation>
<xs:documentation>A parameter is a structure that specifically identifies a source of input or output information so that it can be use pragmatically.</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="IdentifiableType">
<xs:sequence>
<xs:element ref="ParameterName" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>A name for the Parameter. May be expressed in multiple languages. Repeat the element to express names with different content, for example different names for different systems.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="Alias" minOccurs="0">
<xs:annotation>
<xs:documentation>If the content of the parameter is being used in a generic set of code as an alias for the value of an object in a formula (for example source code for a statistical program) enter that name here. This provides a link from the identified parameter to the alias in the code.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="Description" minOccurs="0">
<xs:annotation>
<xs:documentation>A description of the Parameter. May be expressed in multiple languages and supports the use of structured content.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:choice minOccurs="0">
<xs:element ref="ValueRepresentation">
<xs:annotation>
<xs:documentation>If the content of the parameter contains representational content, such as codes, provide the representation here. ValueRepresentation is the abstract head of a substitution group and may be replaced with any valid substitution for ValueRepresentation. Inclusion of the ValueRepresentation is recommended if you will be sharing data with others as it provides information on the structure of what they can expect to receive when the parameter is processed.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="ValueRepresentationReference">
<xs:annotation>
<xs:documentation>Allows for the use of a ManagedRepresentation by reference. ValueRepresentationReference is the abstract head of a substitution group and may be replaced with any valid substitution for ValueRepresentationReference.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:choice>
<!-- Not needed unless you are sharing with others so they know what to expect coming in -->
<xs:element ref="DefaultValue" minOccurs="0">
<xs:annotation>
<xs:documentation>Provides a default value for the parameter if there is no value provided by the object it is bound to or the process that was intended to produce a value.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
<xs:attribute name="isArray" type="xs:boolean" default="false">
<xs:annotation>
<xs:documentation>If set to "true" indicates that the content of the parameter is a delimited array rather than a single object and should be processed as such.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="BindingType">
<xs:annotation>
<xs:documentation>A structure used to bind the content of a parameter declared as the source to a parameter declared as the target. For example, binding the output of a question to the input of a generation instruction. Question A has an OutParameter X. Generation Instruction has an InParameter Y used in the recode instruction. Binding defines the content of InParameter Y to be whatever is provided by OutParameter X for use in the calculation of the recode.</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element ref="SourceParameterReference">
<xs:annotation>
<xs:documentation>A structure used to bind the content of a parameter declared as the source to a parameter declared as the target. For example, binding the output of a question to the input of a generation instruction. Question A has an OutParameter X. Generation Instruction has an InParameter Y used in the recode instruction. Binding defines the content of InParameter Y to be whatever is provided by OutParameter X for use in the calculation of the recode.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="TargetParameterReference">
<xs:annotation>
<xs:documentation>A structure used to bind the content of a parameter declared as the source to a parameter declared as the target. For example, binding the output of a question to the input of a generation instruction. Question A has an OutParameter X. Generation Instruction has an InParameter Y used in the recode instruction. Binding defines the content of InParameter Y to be whatever is provided by OutParameter X for use in the calculation of the recode.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:element name="DefaultValue" type="ValueType">
<xs:annotation>
<xs:documentation>This provides a default value for the parameter if the parameter supplies only empty content or is otherwise unavailable.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="ParameterName" type="NameType">
<xs:annotation>
<xs:documentation>Name of the Parameter using the DDI Name structure.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Alias" type="xs:NMTOKEN">
<xs:annotation>
<xs:documentation>This is a string of type xs:NMTOKEN and can contain no spaces.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="SourceParameterReference" type="ReferenceType">
<xs:annotation>
<xs:documentation>Reference to an existing InParameter or OutParameter using the Reference structure. TypeOfObject should be set to InParameter or OutParameter.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="TargetParameterReference" type="ReferenceType">
<xs:annotation>
<xs:documentation>Reference to an existing InParameter or OutParameter using the Reference structure. TypeOfObject should be set to InParameter or OutParameter.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="InParameter" type="InParameterType">
<xs:annotation>
<xs:documentation>A parameter that may accept content from outside its parent element.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="InParameterType">
<xs:annotation>
<xs:documentation>A parameter that may accept content from outside its parent element. In addition to standard parameter content may provide the instructions for limiting the allowable array index.</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="ParameterType">
<xs:attribute name="limitArrayIndex" type="xs:NMTOKENS">
<xs:annotation>
<xs:documentation>When the InParameter represents an array of items, this attribute specifies the index identification of the items within the zero-based array which should be treated as input parameters. If not specified, the full array is treated as the input parameter.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="OutParameter" type="ParameterType">
<xs:annotation>
<xs:documentation>A parameter that contains output from its parent object, such as the specific response value of a question.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Binding" type="BindingType">
<xs:annotation>
<xs:documentation>A structure used to bind the content of a parameter declared as the source to a parameter declared as the target.</xs:documentation>
</xs:annotation>
</xs:element>
<!--END I/O PARAMETERS AND BINDING -->
<!-- Commands -->
<!--BEGIN NEW COMMANDCODE -->
<xs:element name="CommandCode" type="CommandCodeType">
<xs:annotation>
<xs:documentation>Content of the command itself expressed in the language specified in the parent object.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="CommandCodeType">
<xs:annotation>
<xs:documentation>Contains information on the command used for processing data. Contains a description of the command which should clarify for the user the purpose and process of the command, an in-line provision of the command itself, a reference to an external version of the command such as a coding script, and the option for attaching an extension to DDI to permit insertion of a command code in a foreign namespace. Both Command and CommandFile may be repeated to provide command information in additional programming languages. Multiple Command and CommandFile contents are differentiated by the content of the contained element ProgramLanguage.</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element ref="Description" minOccurs="0">
<xs:annotation>
<xs:documentation>A description of the purpose and use of the command code provided. Supports multiple languages.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="Command" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>This is an in-line provision of the command itself.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="CommandFile" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>Identifies and provides a link to an external copy of the command, for example, a SAS Command Code script.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="StructuredCommand" minOccurs="0">
<xs:annotation>
<xs:documentation>The is an extension stub to allow for the insertion of command code using an external namespace.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="CommandType">
<xs:annotation>
<xs:documentation>Provides the following information on the command: The content of the command, the programming language used, the pieces of information (InParameters) used by the command, the pieces of information created by the command (OutParameters) and the source of the information used by the InParameters (Binding).</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element ref="ProgramLanguage">
<xs:annotation>
<xs:documentation>Designates the programming language used for the command. Supports the use of a controlled vocabulary.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="InParameter" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>Describes the information used by the command as it is identified within the command structure.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="OutParameter" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>Describes the information that results from the command that may be used as input by another object.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="Binding" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>Defines the link between the output of an external object to an InParameter described above.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="CommandContent" minOccurs="0">
<xs:annotation>
<xs:documentation>Content of the command itself expressed in the language designated in Programming Language.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="CommandFileType">
<xs:annotation>
<xs:documentation>Identifies and provides a link to an external copy of the command, for example, a SAS Command Code script. Designates the programming language of the command file, designates input and output parameters, binding information between input and output parameters, a description of the location of the file , and a URN or URL for the command file.</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element ref="ProgramLanguage">
<xs:annotation>
<xs:documentation>Designates the programming language used for the command. Supports the use of a controlled vocabulary.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="InParameter" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>Describes the information used by the command as it is identified within the command structure. Use of the Alias may be needed to tie the designated input parameter content to its use in the external command file.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="OutParameter" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>Describes the information that results from the command that may be used as input by another object. Use of the Alias may be needed to tie the designated output parameter content to its use in the external command file.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="Binding" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>Defines the link between the output of an external object to an InParameter described above.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="Location" minOccurs="0">
<xs:annotation>
<xs:documentation>A description of the location of the file. This may not be machine actionable. It supports a description expressed in multiple languages.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="URI" minOccurs="0">
<xs:annotation>
<xs:documentation>The URL or URN of the command file.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:element name="ProgramLanguage" type="CodeValueType">
<xs:annotation>
<xs:documentation>Specifies the type of programming language used. Supports the use of an external controlled vocabulary. DDI strongly recommends the use of a common controlled vocabulary to support interoperability.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Command" type="CommandType">
<xs:annotation>
<xs:documentation>This is an in-line provision of the command itself and information regarding its use.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="CommandFile" type="CommandFileType">
<xs:annotation>
<xs:documentation>Identifies and provides a link to an external copy of the command.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="CommandContent" type="xs:string">
<xs:annotation>
<xs:documentation>The CommandContent expressed as an xs:string.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Location" type="InternationalStringType">
<xs:annotation>
<xs:documentation>The location of the file expressed using an International String to support multiple language versions of the same content.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="URI" type="xs:anyURI">
<xs:annotation>
<xs:documentation>Any URN or URL.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="StructuredCommandType" abstract="true">
<xs:annotation>
<xs:documentation>This type structures an empty stub which is used as the basis for extensions added using external namespaces such as MathML. The DDI 3.0 extension methodology is used here - a new module is declared, and the StructuredCommand element is used as the head of a substitution group to insert whatever XML is needed to express the command.</xs:documentation>
</xs:annotation>
</xs:complexType>
<xs:element name="StructuredCommand" type="StructuredCommandType">
<xs:annotation>
<xs:documentation>Contains a command expressed in XML, which is attached as an extension to this abstract stub (see the DDI Technical Document Part 1 for further discussion of extension mechanisms.</xs:documentation>
</xs:annotation>
</xs:element>
<!--END NEW COMMAND CODE -->
<!-- Identifiable -->
<xs:complexType name="AbstractIdentifiableType" abstract="true">
<xs:annotation>
<xs:documentation>Used to identify described identifiable objects for purposes of internal and/or external referencing. Elements of this type cannot be versioned or maintained except as part of a complex parent element. Provides containers for Uniform Resource Name (URN) as well as ID information. An entity can either be identified either by a URN and/or an identification sequence. At a minimum, one or the other is required. You must designate they type of URN supported by your agency, either "Canonical" or "Deprecated". To fully support interoperability both the DDI URN and identification sequence should be used. Note that to support interoperability of the canonical and deprecated URN. If both URN and the identification sequence is used, and there is any conflict, the URN takes precedence. The action attribute is used ONLY for inheritance is a Group structure. For the local use the maintainable you can "Add", "Delete", or "Replace" an identified object. These actions only effect the local usage of the content. These changes cannot be inherited.</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:choice minOccurs="1" maxOccurs="2">
<xs:annotation>
<xs:documentation>Must contain either the URN or the full Identification Sequence. Both structures may be provided. If there is a conflict between the contents of the URN and the Identification Sequence, the URN takes precedence. DO NOT provide 2 URNs or 2 Identification Sequences</xs:documentation>
</xs:annotation>
<xs:element ref="URN">
<xs:annotation>
<xs:documentation>The URN of the entity matching the DDI URN pattern associated with the value of the attribute typeOfIdentifier (Canonical or Deprecated).</xs:documentation>
</xs:annotation>
</xs:element>
<xs:sequence>
<xs:element ref="Agency">
<xs:annotation>
<xs:documentation>This is the registered agency code with optional sub-agencies separated by dots.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="ID">
<xs:annotation>
<xs:documentation>The ID of the object. This must conform to the allowed structure of the DDI Identifier and must be unique within the declared scope of uniqueness (Agency or Maintainable).</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="Version">
<xs:annotation>
<xs:documentation>The version number of the object. For the identifiable object this is the version number of its parent versionable at the point of creation or alteration of the non-administrative metadata of the identifiable. Versionable and Maintainable items increment their version number whenever the non-administrative metadata contained by the object changes.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:choice>
<xs:element ref="UserID" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>Allows for the specification of identifiers other than the specified DDI identification of the object. This may be a legacy ID from DDI-C, a system specific ID such as for a database or registry, or a non-DDI unique identifier. As the identifier is specific to a system the system must be identified with the UserID structure.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
<xs:attribute name="inheritanceAction" type="ActionCodeType" use="optional">
<xs:annotation>
<xs:documentation>The attribute "action" is used for inheritance situations where there is an override at the local level (within a grouped StudyUnit) which is not available for further inheritance. There are three possible values for "action": Add - A new identifiable object (an Identifiable, Versionable, or Maintainable element) is provided locally with a new identifier (one that is not inherited). All properties (elements and attributes contained in the object) of the object are as specified. If an object with an existing id is created, this is an error.; Update - An object is provided locally with the SAME id as the inherited object. For each type of property that is specified locally, a full set of those properties is specified for local use. These properties replace any properties of this type which were inherited. Unspecified properties are used as inherited.; Delete - An object is provided locally with the SAME id as the inherited object. All properties specified locally in this object will be deleted if their types and values match those inherited. Note that to completely delete an object at the local level, all properties of the inherited object must be listed.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="objectSource" type="DDIURNType" use="optional">
<xs:annotation>
<xs:documentation>When placing objects included by reference in-line for the purposes of archiving or production of unpublished metadata to accompany data subsets, enter the DDI URN here. This addition will NOT cause a version change in the parent maintainable.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="scopeOfUniqueness" type="UniquenessScopeType" default="Agency">
<xs:annotation>
<xs:documentation>States the scope of uniqueness for the ID. The default value is Agency. This asserts that the ID will be a unique value within the Agency/Sub-Agency provided in the element Agency. Changing this value to Maintainable indicates that the ID is unique only within the scope of its parent maintainable object. The ID of the parent maintainable is required in order to create either the Canonical or Deprecated URN.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="isUniversallyUnique" type="xs:boolean" use="optional">
<xs:annotation>
<xs:documentation>If the ID of the object was created as a Universally Unique ID (UUID) set this attribute to "true". If you wish to specifically state that the ID is NOT universally unique set this attribute to "false"</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<xs:complexType name="UserIDType">
<xs:annotation>
<xs:documentation>A user provided identifier that is locally unique within its specific type. The required type attribute points to the local user identification system that defines the values. The optional userIDVersion allows specification of a version number for the identifier. If multiple UserIDs are used they must be differentiated by the type attribute.</xs:documentation>
</xs:annotation>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="typeOfUserID" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>This is a required attribute containing the local user identification system that maintains and defines the UserID.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="userIDVersion" type="xs:string" use="optional">
<xs:annotation>
<xs:documentation>The UserID may designate the version number of the UserID. This is important in cases where the DDI identification system and the UserID system use different structures to record version numbers or if there is a difference between the DDI version number and the UserID's version number.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="typeOfUserVersion" type="xs:string" use="optional">
<xs:annotation>
<xs:documentation>This is the name of the versioning scheme as defined by the user's system, in cases where the user's system employs more than one versioning scheme. It is specific to the system identified by the typeOfUserID attribute</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name="MaintainableObject" type="MaintainableObjectType">
<xs:annotation>
<xs:documentation>Provides information on the Maintainable Parent of the object.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="MaintainableObjectType">
<xs:annotation>
<xs:documentation>Provides information on the Maintainable Parent of the object. If the scope of the Identifiable or Versionable Object is the Maintinable, this information must be provided in order to provide all the information contained in the Canonical DDI URN. This is done to support interoperability.</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element ref="TypeOfObject">
<xs:annotation>
<xs:documentation>The object type of the parent maintainable taken from a restricted list.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="MaintainableID">
<xs:annotation>
<xs:documentation>The value of the ID of the maintainable parent object.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="MaintainableVersion" minOccurs="0">
<xs:annotation>
<xs:documentation>The version number of the maintainable parent object at the time the identifiable or versionable object was created or altered. Note that creating or altering the non-administrative content of an object within a maintainable will increment the version number of the maintainable and the content of this element should contain the new version number. In short, this represents the version number of the maintainable when the content of the current object first appeared in its present form.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:element name="MaintainableID" type="IDType">
<xs:annotation>
<xs:documentation>ID of the object expressed according to the DDI ID definition with a fixed flag of ID.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="MaintainableVersion" type="VersionType">
<xs:annotation>
<xs:documentation>The version of the Maintainable parent object expressed according to the DDI version definition.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Agency" type="DDIAgencyIDType">
<xs:annotation>
<xs:documentation>The agency expressed as filed with the DDI Agency Registry with optional additional sub-agency extensions.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="IdentifiableType" abstract="true">
<xs:complexContent>
<xs:annotation>
<xs:documentation>Adds the attribute identifying this as an identifiable object as well as the MaintainableObject. All identifiable objects should provide their contextual information, the identity of their maintainable parent. The deprecated form of the URN contains all the information to identify and object and its context. A Canonical URN scoped to the Maintainable contains the ID of the Maintainable as part of its structure. To provide full contextual information use the MaintainableObject structure. The use of the Canonical URN scoped to the agency or the identification sequence alone requires the content of the MaintainableObject to provide full contextual information. All content of Identifiable is considered to be administrative metadata. Note that changes to the administrative metadata does not drive a change in the version of the parent objects. See DDI 3.2 Technical Documentation: Part I for further details.</xs:documentation>
</xs:annotation>
<xs:extension base="AbstractIdentifiableType">
<xs:sequence>
<xs:element ref="MaintainableObject" minOccurs="0">
<xs:annotation>
<xs:documentation>This section provides information on the Maintainable Parent of this object at its point of origination. This content will not change over time unless the version of the object changes. Note that if the ID, Agency, Version sequence is used, and the scope of uniqueness of the referenced object is the Maintainable, then the ID of the Maintainable is needed to create the structured ID portion of the canonical URN. If the system uses the deprecated URN, both the Maintainable ID and TypeOfMaintainableObject are required to create the deprecated URN structure.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
<xs:attribute name="isIdentifiable" type="xs:boolean" fixed="true">
<xs:annotation>
<xs:documentation>This is a fixed flag informing the system or user that this element is identifiable and may be referenced.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- Versionable -->
<xs:complexType name="AbstractVersionableType" abstract="true">
<xs:annotation>
<xs:documentation>Used to identify described versionable objects for purposes of internal and/or external referencing. Elements of this type cannot be maintained except as part of a complex parent element. Provides containers for Uniform Resource Name (URN) as well as ID information. An entity can either be identified either by a URN and/or an identification sequence. At a minimum, one or the other is required. You must designate they type of URN supported by your agency, either "Canonical" or "Deprecated". To fully support interoperability both the DDI URN and the full identification sequence should be used. Note that to support interoperability of the canonical and deprecated URN, at minimum the MaintainableIdentifier and TypeOfMaintainableObject should be supplied if the canonical URN is being used by the agency. If both URN and the identification sequence is used, and there is any conflict, the URN takes precedence. The element can be designated as an addition, replacement, or deletion to facilitate tracking changes. In addtion to the elements and attributes inherited from AbstractIdentifiable, additional information regarding the versioning process can be provided; version date, the person and/or organization within the maintenance agency responsible for the change as either text or reference, and the reason for the change. If the object created was based on an exisiting object (other than by versioning), the object on which it is based can be identified using BasedOnReference. In addition to UserID, versionable and maintainable objects may also designate additional user specific properties expressed as a key/value pair using UserAttributePair.</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="AbstractIdentifiableType">
<xs:sequence>
<xs:element ref="UserAttributePair" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>A system specific user defined property of the object expressed as a key/value pair. As this is specific to an individual system the use of controlled vocabularies for the key is strongly recommended.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:choice minOccurs="0">
<xs:annotation>
<xs:documentation>Allows for identification of the person or organization within the maintenance agency responsible for the new version. This is primarily intended for internal use.</xs:documentation>
</xs:annotation>
<xs:element ref="VersionResponsibility">
<xs:annotation>
<xs:documentation>Person or organization within the MaintenanceAgency responsible for the version change. If it is important to retain the affiliation between and individual responsible for the version and his/her agency, it may be included in this notation. This is primarily intended for internal use.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="VersionResponsibilityReference">
<xs:annotation>
<xs:documentation>Reference person or organization within the MaintenanceAgency responsible for the version change, as described in an OrganizationScheme. If it is important to retain the affiliation between and individual responsible for the version and his/her agency, a Relation should be created between the individual referenced here and his/her organization. This is primarily intended for internal use.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:choice>
<xs:element ref="VersionRationale" minOccurs="0">
<xs:annotation>
<xs:documentation>Textual description of the rationale/purpose for the version change and a coded value to provide an internal processing flag within and organization or system. Note that versioning can only take place on objects owned by the specified DDI Agency. If you are creating a local instance of an object from another agency for current or future modification use BasedOnObject. If the changes being made result in what you determine to be new object rather than a version of a previous object, i.e. the change is too extensive to consider it a version of the existing object, create a new object and use BasedOnObject to provide a link to the object or objects that were a basis for the new object.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="BasedOnObject" minOccurs="0">
<xs:annotation>
<xs:documentation>Use when creating an object that is based on an existing object or objects that are managed by a different agency or when the new object is NOT simply a version change but you wish to maintain a reference to the object that served as a basis for the new object. BasedOnObject may contain references to any number of objects which serve as a basis for this object, a BasedOnRationalDescription of how the content of the referenced object was incorporated or altered, and a BasedOnRationalCode to allow for specific typing of the BasedOnReference according to an external controlled vocabulary.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
<xs:attribute name="versionDate" type="BaseDateType" use="optional">
<xs:annotation>
<xs:documentation>Date of version using the union set BaseDateType. Duration should not be used in this field, even though allowed by the ISO format enforced by the parser.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="VersionResponsibility" type="xs:string">
<xs:annotation>
<xs:documentation>Person or organization within the MaintenanceAgency responsible for the version change. If it is important to retain the affiliation between and individual responsible for the version and his/her agency, it may be included in this notation. This is primarily intended for internal use.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="BasedOnObject" type="BasedOnObjectType">
<xs:annotation>
<xs:documentation>BasedOnObject may contain references to any number of objects which serve as a basis for this object, a BasedOnRationalDescription of how the content of the referenced object was incorporated or altered, and a BasedOnRationalCode to allow for specific typing of the BasedOnReference according to an external controlled vocabulary.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="BasedOnObjectType">
<xs:annotation>
<xs:documentation>Use when creating an object that is based on an existing object or objects that are managed by a different agency or when the new object is NOT simply a version change but you wish to maintain a reference to the object that served as a basis for the new object. BasedOnObject may contain references to any number of objects which serve as a basis for this object, a BasedOnRationalDescription of how the content of the referenced object was incorporated or altered, and a BasedOnRationalCode to allow for specific typing of the BasedOnReference according to an external controlled vocabulary.</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element ref="BasedOnReference" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>A reference to an object upon which the current object is based using a standard Reference structure. Repeat for multiple base objects. The TypeOfObject may be any Versionable or Maintainable object.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="BasedOnRationaleDescription" minOccurs="0">
<xs:annotation>
<xs:documentation>Textual description of the rationale/purpose for the based on reference to inform users as to the extent and implication of the version change. May be expressed in multiple languages.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="BasedOnRationaleCode" minOccurs="0">
<xs:annotation>
<xs:documentation>RationaleCode is primarily for internal processing flags within an organization or system. Supports the use of an external controlled vocabulary.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:element name="BasedOnRationaleDescription" type="InternationalStringType">
<xs:annotation>
<xs:documentation>A description of the rationale for the new variable based on another object using an International String to support multiple language versions of the same content.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="BasedOnRationaleCode" type="CodeValueType">
<xs:annotation>
<xs:documentation>Classification of the rationale for a new object based on an existing object. Supports the use of an external controlled vocabulary. DDI strongly recommends the use of a controlled vocabulary to facilitate interoperability within and/or between organizations.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="VersionResponsibilityReference" type="ReferenceType">
<xs:annotation>
<xs:documentation>Reference to an existing Organization or Individual using the Reference structure. TypeOfObject should be set to Organization or Individual.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="UserAttributePair" type="StandardKeyValuePairType">
<xs:annotation>
<xs:documentation>A structure that supports the use of a user specified standard key value pair.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="UserDefinedCorrespondenceProperty" type="StandardKeyValuePairType">
<xs:annotation>
<xs:documentation>A system specific user defined correspondence expressed as a key/value pair.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="VersionableType" abstract="true">
<xs:annotation>
<xs:documentation>Adds the attribute identifying this as a versionable object as well as the MaintainableObject. All versionable objects should provide their contextual information, the identity of their maintainable parent. The deprecated form of the URN contains all the information to identify and object and its context. A Canonical URN scoped to the Maintainable contains the ID of the Maintainable as part of its structure. To provide full contextual information use the MaintainableObject structure. The use of the Canonical URN scoped to the agency or the identification sequence alone requires the content of the MaintainableObject to provide full contextual information. All content of Versionable is considered to be administrative metadata. Note that changes to the administrative metadata does not drive a change in the version of the parent objects. See DDI 3.2 Technical Documentation: Part I for further details.</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="AbstractVersionableType">
<xs:sequence>
<xs:element ref="MaintainableObject" minOccurs="0">
<xs:annotation>
<xs:documentation>This section provides information on the Maintainable Parent of this object at its point of origination. This content will not change over time unless the version of the object changes. Note that if the ID, Agency, Version sequence is used, and the scope of uniqueness of the referenced object is the Maintainable, then the ID of the Maintainable is needed to create the structured ID portion of the canonical URN. If the system uses the deprecated URN, both the Maintainable ID and TypeOfMaintainableObject are required to create the deprecated URN structure.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
<xs:attribute name="isVersionable" type="xs:boolean" fixed="true">
<xs:annotation>
<xs:documentation>This is a fixed flag informing the system or user that this element is versionable and may be versioned over time as well as referenced.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="BasedOnReference" type="ReferenceType">
<xs:annotation>
<xs:documentation>A reference to an object which the object being described here is based upon using a standard Reference structure. The TypeOfObject may be any Versionable or Maintainable object.</xs:documentation>
</xs:annotation>
</xs:element>
<!-- Maintainable -->
<xs:complexType name="AbstractMaintainableType" abstract="true">
<xs:annotation>
<xs:documentation>Used to identify described maintainable objects for purposes of internal and/or external referencing. Elements of this type may be maintained as independent objects (outside of a parent object). Provides containers for Uniform Resource Name (URN) as well as ID information. An entity can either be identified either by a URN and/or an identification sequence. At a minimum, one or the other is required. You must designate they type of URN supported by your agency, either "Canonical" or "Deprecated". To fully support interoperability both the DDI URN and the full identification sequence should be used. Note that to support interoperability of the canonical and deprecated URN, at minimum the MaintainableIdentifier and TypeOfMaintainableObject should be supplied if the canonical URN is being used by the agency. If both URN and the identification sequence is used, and there is any conflict, the URN takes precedence. The element can be designated as an addition, replacement, or deletion to facilitate tracking changes. In addtion to the elements and attributes inherited from AbstractIdentifiable, additional information regarding the versioning process can be provided; version date, the person and/or organization within the maintenance agency responsible for the change as either text or reference, and the reason for the change. If the object created was based on an exisiting object (other than by versioning), the object on which it is based can be identified using BasedOnReference. In addition to UserID, versionable and maintainable objects may also designate additional user specific properties expressed as a key/value pair using UserAttributePair. Maintainable objects may also contain any notes related to the objects they contain, identification of the software used to create and/or manage the metadata, a statement of the metadata quality, and a default URI value to use for external external references. The attribute xml:lang can be used to provide specification of the default language of the metadata contents. When the isPublished attribute is set to "true" it indicates to the user that they may safely reference the contents as they will continue to be accessible and any changes in the non-administrative content will be tracked by a versioning mechanism.</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="AbstractVersionableType">
<xs:sequence>
<xs:element ref="Note" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>Note allows for the attachment of a piece of additional information to any object with an ID. Note facilitates capturing temporary processing notes such as "Review and approval required". A single note can be attached to multiple objects by reference to the objects. Note may also contain content for a needed object that has been reported for addition in a later version of the schema. Ideally this should be handled by a local extension, but Note can accommodate run-time extensions when required. The Note should be housed within the Maintainable object that contains the referenced objects. In this way the user is ensured of receiving all known Note attachments when the maintainable content is delivered. This means that if a Note references objects within multiple Maintainable objects, the Note should be repeated in each Maintainable and reference only those objects with that Maintainable.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="Software" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>Indicate the software used to create and/or manage the metadata. This is repeatable to allow for multiple softwares or multiple functions. If this information is important it is advisable to provide it in each maintainable so that it does not become separated from the internal content if the metadata is re-factored.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="MetadataQuality" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>An assessment of the quality of the metadata within the Maintainable object, e.g. the quality of the transcription, completeness, editing status, etc.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
<xs:attribute name="externalReferenceDefaultURI" type="xs:anyURI" use="optional">
<xs:annotation>
<xs:documentation>Use to provide a default value for the URI of external references. Use of a URI in a reference within this maintainable overrides the value entered here. Nested maintainables should redeclare the contents of this attribute for clarity.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="isPublished" type="xs:boolean" default="false">
<xs:annotation>
<xs:documentation>Indicates that the maintainable will not be changed without versioning, and is a stable target for referencing.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute ref="xml:lang" use="optional">
<xs:annotation>
<xs:documentation>This is used to designate the language of the metadata content of the maintainable. If a lower level xml:lang attribute conflicts with the content at the maintainable level, the object level value takes precedence.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="MaintainableType" abstract="true">
<xs:annotation>
<xs:documentation>Adds the attribute identifying this as a maintainable object. All content of Maintainable is considered to be administrative metadata. Note that changes to the administrative metadata does not drive a change in the version of the parent objects. All content of Maintainable with the exception of 'Note' is considered to be administrative metadata. Note that changes to the administrative metadata does not drive a change in the version of the parent objects. See DDI 3.2 Technical Documentation: Part I for further details.</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="AbstractMaintainableType">
<xs:attribute name="isMaintainable" type="xs:boolean" fixed="true">
<xs:annotation>
<xs:documentation>This is a fixed flag informing the system or user that in additional to being versionable the element is maintainable in its own right (outside of a parent object).</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- SIMPLE TYPES FOR IDS -->
<!-- Action Code Type -->
<xs:simpleType name="ActionCodeType">
<xs:annotation>
<xs:documentation>The attribute "action" is used for inheritance situations in which there is an override at the local level (within a grouped StudyUnit) which is not available for further inheritance. There are three possible values for "action" include Add, Update, and Delete.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="Add">
<xs:annotation>
<xs:documentation>A new identifiable object (an Identifiable, Versionable, or Maintainable element) is provided locally with a new identifier (one that is not inherited). All properties (elements and attributes contained in the object) of the object are as specified. If an object with an existing ID is created, this is an error.</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="Update">
<xs:annotation>
<xs:documentation>An object is provided locally with the SAME id as the inherited object. For each type of property that is specified locally, a full set of those properties is specified for local use. These properties replace any properties of this type which were inherited. Unspecified properties are used as inherited.</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="Delete">
<xs:annotation>