-
Notifications
You must be signed in to change notification settings - Fork 39
Expand file tree
/
Copy pathmusicxml.xsd
More file actions
5432 lines (4932 loc) · 290 KB
/
musicxml.xsd
File metadata and controls
5432 lines (4932 loc) · 290 KB
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"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xlink="http://www.w3.org/1999/xlink" 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/xlink"
schemaLocation="xlink.xsd"/>
<xs:annotation>
<xs:documentation>MusicXML™ W3C XML schema (XSD)
Version 3.0
Copyright © 2004-2011 MakeMusic, Inc.
http://www.makemusic.com/
This MusicXML™ work is being provided by the copyright holder under the MusicXML Public License Version 3.0, available from:
http://www.musicxml.org/dtds/license.html
This is the W3C XML Schema (XSD) version of the MusicXML 3.0 language. Validation is tightened by moving MusicXML definitions from comments into schema data types and definitions. Character entities and other entity usages that are not supported in W3C XML Schema have been removed. The features of W3C XML Schema make it easier to define variations of the MusicXML format, either via extension or restriction.
This file defines the MusicXML 3.0 XSD, including the score-partwise and score-timewise document elements.</xs:documentation>
</xs:annotation>
<xs:annotation>
<xs:documentation>The MusicXML 3.0 DTD has no namespace, so for compatibility the MusicXML 3.0 XSD has no namespace either. Those who need to import the MusicXML XSD into another schema are advised to create a new version that uses "http://www.musicxml.org/xsd/MusicXML" as the namespace.</xs:documentation>
</xs:annotation>
<xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/03/xml.xsd"/>
<xs:import namespace="http://www.w3.org/1999/xlink" schemaLocation="http://www.w3.org/XML/2008/06/xlink.xsd"/>
<!-- Simple types derived from common.mod entities and elements -->
<xs:simpleType name="above-below">
<xs:annotation>
<xs:documentation>The above-below type is used to indicate whether one element appears above or below another element.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:enumeration value="above"/>
<xs:enumeration value="below"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="beam-level">
<xs:annotation>
<xs:documentation>The MusicXML format supports six levels of beaming, up to 1024th notes. Unlike the number-level type, the beam-level type identifies concurrent beams in a beam group. It does not distinguish overlapping beams such as grace notes within regular notes, or beams used in different voices.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:positiveInteger">
<xs:minInclusive value="1"/>
<xs:maxInclusive value="8"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="color">
<xs:annotation>
<xs:documentation>The color type indicates the color of an element. Color may be represented as hexadecimal RGB triples, as in HTML, or as hexadecimal ARGB tuples, with the A indicating alpha of transparency. An alpha value of 00 is totally transparent; FF is totally opaque. If RGB is used, the A value is assumed to be FF.
For instance, the RGB value "#800080" represents purple. An ARGB value of "#40800080" would be a transparent purple.
As in SVG 1.1, colors are defined in terms of the sRGB color space (IEC 61966).</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:pattern value="#[\dA-F]{6}([\dA-F][\dA-F])?"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="comma-separated-text">
<xs:annotation>
<xs:documentation>The comma-separated-text type is used to specify a comma-separated list of text elements, as is used by the font-family attribute.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:pattern value="[^,]+(, ?[^,]+)*"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="css-font-size">
<xs:annotation>
<xs:documentation>The css-font-size type includes the CSS font sizes used as an alternative to a numeric point size.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:enumeration value="xx-small"/>
<xs:enumeration value="x-small"/>
<xs:enumeration value="small"/>
<xs:enumeration value="medium"/>
<xs:enumeration value="large"/>
<xs:enumeration value="x-large"/>
<xs:enumeration value="xx-large"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="divisions">
<xs:annotation>
<xs:documentation>The divisions type is used to express values in terms of the musical divisions defined by the divisions element. It is preferred that these be integer values both for MIDI interoperability and to avoid roundoff errors.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:decimal"/>
</xs:simpleType>
<xs:simpleType name="enclosure-shape">
<xs:annotation>
<xs:documentation>The enclosure-shape type describes the shape and presence / absence of an enclosure around text or symbols. A bracket enclosure is similar to a rectangle with the bottom line missing, as is common in jazz notation.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:enumeration value="rectangle"/>
<xs:enumeration value="square"/>
<xs:enumeration value="oval"/>
<xs:enumeration value="circle"/>
<xs:enumeration value="bracket"/>
<xs:enumeration value="triangle"/>
<xs:enumeration value="diamond"/>
<xs:enumeration value="none"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="fermata-shape">
<xs:annotation>
<xs:documentation>The fermata-shape type represents the shape of the fermata sign. The empty value is equivalent to the normal value.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="normal"/>
<xs:enumeration value="angled"/>
<xs:enumeration value="square"/>
<xs:enumeration value=""/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="font-size">
<xs:annotation>
<xs:documentation>The font-size can be one of the CSS font sizes or a numeric point size.</xs:documentation>
</xs:annotation>
<xs:union memberTypes="xs:decimal css-font-size"/>
</xs:simpleType>
<xs:simpleType name="font-style">
<xs:annotation>
<xs:documentation>The font-style type represents a simplified version of the CSS font-style property.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:enumeration value="normal"/>
<xs:enumeration value="italic"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="font-weight">
<xs:annotation>
<xs:documentation>The font-weight type represents a simplified version of the CSS font-weight property.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:enumeration value="normal"/>
<xs:enumeration value="bold"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="left-center-right">
<xs:annotation>
<xs:documentation>The left-center-right type is used to define horizontal alignment and text justification.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:enumeration value="left"/>
<xs:enumeration value="center"/>
<xs:enumeration value="right"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="left-right">
<xs:annotation>
<xs:documentation>The left-right type is used to indicate whether one element appears to the left or the right of another element.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:enumeration value="left"/>
<xs:enumeration value="right"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="line-shape">
<xs:annotation>
<xs:documentation>The line-shape type distinguishes between straight and curved lines.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:enumeration value="straight"/>
<xs:enumeration value="curved"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="line-type">
<xs:annotation>
<xs:documentation>The line-type type distinguishes between solid, dashed, dotted, and wavy lines.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:enumeration value="solid"/>
<xs:enumeration value="dashed"/>
<xs:enumeration value="dotted"/>
<xs:enumeration value="wavy"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="midi-16">
<xs:annotation>
<xs:documentation>The midi-16 type is used to express MIDI 1.0 values that range from 1 to 16.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:positiveInteger">
<xs:minInclusive value="1"/>
<xs:maxInclusive value="16"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="midi-128">
<xs:annotation>
<xs:documentation>The midi-16 type is used to express MIDI 1.0 values that range from 1 to 128.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:positiveInteger">
<xs:minInclusive value="1"/>
<xs:maxInclusive value="128"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="midi-16384">
<xs:annotation>
<xs:documentation>The midi-16 type is used to express MIDI 1.0 values that range from 1 to 16,384.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:positiveInteger">
<xs:minInclusive value="1"/>
<xs:maxInclusive value="16384"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="mute">
<xs:annotation>
<xs:documentation>The mute type represents muting for different instruments, including brass, winds, and strings. The on and off values are used for undifferentiated mutes. The remaining values represent specific mutes.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="on"/>
<xs:enumeration value="off"/>
<xs:enumeration value="straight"/>
<xs:enumeration value="cup"/>
<xs:enumeration value="harmon-no-stem"/>
<xs:enumeration value="harmon-stem"/>
<xs:enumeration value="bucket"/>
<xs:enumeration value="plunger"/>
<xs:enumeration value="hat"/>
<xs:enumeration value="solotone"/>
<xs:enumeration value="practice"/>
<xs:enumeration value="stop-mute"/>
<xs:enumeration value="stop-hand"/>
<xs:enumeration value="echo"/>
<xs:enumeration value="palm"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="non-negative-decimal">
<xs:annotation>
<xs:documentation>The non-negative-decimal type specifies a non-negative decimal value.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:decimal">
<xs:minInclusive value="0"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="number-level">
<xs:annotation>
<xs:documentation>Slurs, tuplets, and many other features can be concurrent and overlapping within a single musical part. The number-level type distinguishes up to six concurrent objects of the same type. A reading program should be prepared to handle cases where the number-levels stop in an arbitrary order. Different numbers are needed when the features overlap in MusicXML document order. When a number-level value is implied, the value is 1 by default.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:positiveInteger">
<xs:minInclusive value="1"/>
<xs:maxInclusive value="6"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="number-of-lines">
<xs:annotation>
<xs:documentation>The number-of-lines type is used to specify the number of lines in text decoration attributes.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:nonNegativeInteger">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="3"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="number-or-normal">
<xs:annotation>
<xs:documentation>The number-or-normal values can be either a decimal number or the string "normal". This is used by the line-height and letter-spacing attributes.</xs:documentation>
</xs:annotation>
<xs:union memberTypes="xs:decimal">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="normal"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:simpleType name="over-under">
<xs:annotation>
<xs:documentation>The over-under type is used to indicate whether the tips of curved lines such as slurs and ties are overhand (tips down) or underhand (tips up).</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:enumeration value="over"/>
<xs:enumeration value="under"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="percent">
<xs:annotation>
<xs:documentation>The percent type specifies a percentage from 0 to 100.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:decimal">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="100"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="positive-decimal">
<xs:annotation>
<xs:documentation>The positive-decimal type specifies a positive decimal value.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:decimal">
<xs:minExclusive value="0"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="positive-divisions">
<xs:annotation>
<xs:documentation>The positive-divisions type restricts divisions values to positive numbers.</xs:documentation>
</xs:annotation>
<xs:restriction base="divisions">
<xs:minExclusive value="0"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="positive-integer-or-empty">
<xs:annotation>
<xs:documentation>The positive-integer-or-empty values can be either a positive integer or an empty string.</xs:documentation>
</xs:annotation>
<xs:union memberTypes="xs:positiveInteger">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value=""/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:simpleType name="rotation-degrees">
<xs:annotation>
<xs:documentation>The rotation-degrees type specifies rotation, pan, and elevation values in degrees. Values range from -180 to 180.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:decimal">
<xs:minInclusive value="-180"/>
<xs:maxInclusive value="180"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="semi-pitched">
<xs:annotation>
<xs:documentation>The semi-pitched type represents categories of indefinite pitch for percussion instruments.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="high"/>
<xs:enumeration value="medium-high"/>
<xs:enumeration value="medium"/>
<xs:enumeration value="medium-low"/>
<xs:enumeration value="low"/>
<xs:enumeration value="very-low"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="start-note">
<xs:annotation>
<xs:documentation>The start-note type describes the starting note of trills and mordents for playback, relative to the current note.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:enumeration value="upper"/>
<xs:enumeration value="main"/>
<xs:enumeration value="below"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="start-stop">
<xs:annotation>
<xs:documentation>The start-stop type is used for an attribute of musical elements that can either start or stop, such as tuplets.
The values of start and stop refer to how an element appears in musical score order, not in MusicXML document order. An element with a stop attribute may precede the corresponding element with a start attribute within a MusicXML document. This is particularly common in multi-staff music. For example, the stopping point for a tuplet may appear in staff 1 before the starting point for the tuplet appears in staff 2 later in the document.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:enumeration value="start"/>
<xs:enumeration value="stop"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="start-stop-continue">
<xs:annotation>
<xs:documentation>The start-stop-continue type is used for an attribute of musical elements that can either start or stop, but also need to refer to an intermediate point in the symbol, as for complex slurs or for formatting of symbols across system breaks.
The values of start, stop, and continue refer to how an element appears in musical score order, not in MusicXML document order. An element with a stop attribute may precede the corresponding element with a start attribute within a MusicXML document. This is particularly common in multi-staff music. For example, the stopping point for a slur may appear in staff 1 before the starting point for the slur appears in staff 2 later in the document.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:enumeration value="start"/>
<xs:enumeration value="stop"/>
<xs:enumeration value="continue"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="start-stop-single">
<xs:annotation>
<xs:documentation>The start-stop-single type is used for an attribute of musical elements that can be used for either multi-note or single-note musical elements, as for tremolos.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:enumeration value="start"/>
<xs:enumeration value="stop"/>
<xs:enumeration value="single"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="string-number">
<xs:annotation>
<xs:documentation>The string-number type indicates a string number. Strings are numbered from high to low, with 1 being the highest pitched string.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:positiveInteger"/>
</xs:simpleType>
<xs:simpleType name="symbol-size">
<xs:annotation>
<xs:documentation>The symbol-size type is used to indicate full vs. cue-sized vs. oversized symbols. The large value for oversized symbols was added in version 1.1.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:enumeration value="full"/>
<xs:enumeration value="cue"/>
<xs:enumeration value="large"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="tenths">
<xs:annotation>
<xs:documentation>The tenths type is a number representing tenths of interline staff space (positive or negative). Both integer and decimal values are allowed, such as 5 for a half space and 2.5 for a quarter space. Interline space is measured from the middle of a staff line.
Distances in a MusicXML file are measured in tenths of staff space. Tenths are then scaled to millimeters within the scaling element, used in the defaults element at the start of a score. Individual staves can apply a scaling factor to adjust staff size. When a MusicXML element or attribute refers to tenths, it means the global tenths defined by the scaling element, not the local tenths as adjusted by the staff-size element.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:decimal"/>
</xs:simpleType>
<xs:simpleType name="text-direction">
<xs:annotation>
<xs:documentation>The text-direction type is used to adjust and override the Unicode bidirectional text algorithm, similar to the W3C Internationalization Tag Set recommendation. Values are ltr (left-to-right embed), rtl (right-to-left embed), lro (left-to-right bidi-override), and rlo (right-to-left bidi-override). The default value is ltr. This type is typically used by applications that store text in left-to-right visual order rather than logical order. Such applications can use the lro value to better communicate with other applications that more fully support bidirectional text.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:enumeration value="ltr"/>
<xs:enumeration value="rtl"/>
<xs:enumeration value="lro"/>
<xs:enumeration value="rlo"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="time-only">
<xs:annotation>
<xs:documentation>The time-only type is used to indicate that a particular playback-related element only applies particular times through a repeated section. The value is a comma-separated list of positive integers arranged in ascending order, indicating which times through the repeated section that the element applies.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:pattern value="[1-9][0-9]*(, ?[1-9][0-9]*)*"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="top-bottom">
<xs:annotation>
<xs:documentation>The top-bottom type is used to indicate the top or bottom part of a vertical shape like non-arpeggiate.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:enumeration value="top"/>
<xs:enumeration value="bottom"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="trill-beats">
<xs:annotation>
<xs:documentation>The trill-beats type specifies the beats used in a trill-sound or bend-sound attribute group. It is a decimal value with a minimum value of 2.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:decimal">
<xs:minInclusive value="2"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="trill-step">
<xs:annotation>
<xs:documentation>The trill-step type describes the alternating note of trills and mordents for playback, relative to the current note.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:enumeration value="whole"/>
<xs:enumeration value="half"/>
<xs:enumeration value="unison"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="two-note-turn">
<xs:annotation>
<xs:documentation>The two-note-turn type describes the ending notes of trills and mordents for playback, relative to the current note.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:enumeration value="whole"/>
<xs:enumeration value="half"/>
<xs:enumeration value="none"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="up-down">
<xs:annotation>
<xs:documentation>The up-down type is used for the direction of arrows and other pointed symbols like vertical accents, indicating which way the tip is pointing.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:enumeration value="up"/>
<xs:enumeration value="down"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="upright-inverted">
<xs:annotation>
<xs:documentation>The upright-inverted type describes the appearance of a fermata element. The value is upright if not specified.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:enumeration value="upright"/>
<xs:enumeration value="inverted"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="valign">
<xs:annotation>
<xs:documentation>The valign type is used to indicate vertical alignment to the top, middle, bottom, or baseline of the text. Defaults are implementation-dependent.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:enumeration value="top"/>
<xs:enumeration value="middle"/>
<xs:enumeration value="bottom"/>
<xs:enumeration value="baseline"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="valign-image">
<xs:annotation>
<xs:documentation>The valign-image type is used to indicate vertical alignment for images and graphics, so it does not include a baseline value. Defaults are implementation-dependent.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:enumeration value="top"/>
<xs:enumeration value="middle"/>
<xs:enumeration value="bottom"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="yes-no">
<xs:annotation>
<xs:documentation>The yes-no type is used for boolean-like attributes. We cannot use W3C XML Schema booleans due to their restrictions on expression of boolean values.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:enumeration value="yes"/>
<xs:enumeration value="no"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="yes-no-number">
<xs:annotation>
<xs:documentation>The yes-no-number type is used for attributes that can be either boolean or numeric values.</xs:documentation>
</xs:annotation>
<xs:union memberTypes="yes-no xs:decimal"/>
</xs:simpleType>
<xs:simpleType name="yyyy-mm-dd">
<xs:annotation>
<xs:documentation>Calendar dates are represented yyyy-mm-dd format, following ISO 8601. This is a W3C XML Schema date type, but without the optional timezone data.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:date">
<xs:pattern value="[^:Z]*"/>
</xs:restriction>
</xs:simpleType>
<!-- Simple types derived from attributes.mod entities and elements -->
<xs:simpleType name="cancel-location">
<xs:annotation>
<xs:documentation>The cancel-location type is used to indicate where a key signature cancellation appears relative to a new key signature: to the left, to the right, or before the barline and to the left. It is left by default. For mid-measure key elements, a cancel-location of before-barline should be treated like a cancel-location of left.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="left"/>
<xs:enumeration value="right"/>
<xs:enumeration value="before-barline"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="clef-sign">
<xs:annotation>
<xs:documentation>The clef-sign element represents the different clef symbols. The jianpu sign indicates that the music that follows should be in jianpu numbered notation, just as the TAB sign indicates that the music that follows should be in tablature notation. Unlike TAB, a jianpu sign does not correspond to a visual clef notation.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="G"/>
<xs:enumeration value="F"/>
<xs:enumeration value="C"/>
<xs:enumeration value="percussion"/>
<xs:enumeration value="TAB"/>
<xs:enumeration value="jianpu"/>
<xs:enumeration value="none"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="fifths">
<xs:annotation>
<xs:documentation>The fifths type represents the number of flats or sharps in a traditional key signature. Negative numbers are used for flats and positive numbers for sharps, reflecting the key's placement within the circle of fifths (hence the type name).</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:integer"/>
</xs:simpleType>
<xs:simpleType name="mode">
<xs:annotation>
<xs:documentation>The mode type is used to specify major/minor and other mode distinctions. Valid mode values include major, minor, dorian, phrygian, lydian, mixolydian, aeolian, ionian, locrian, and none.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string"/>
</xs:simpleType>
<xs:simpleType name="show-frets">
<xs:annotation>
<xs:documentation>The show-frets type indicates whether to show tablature frets as numbers (0, 1, 2) or letters (a, b, c). The default choice is numbers.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:enumeration value="numbers"/>
<xs:enumeration value="letters"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="staff-line">
<xs:annotation>
<xs:documentation>The staff-line type indicates the line on a given staff. Staff lines are numbered from bottom to top, with 1 being the bottom line on a staff. Staff line values can be used to specify positions outside the staff, such as a C clef positioned in the middle of a grand staff.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:integer"/>
</xs:simpleType>
<xs:simpleType name="staff-number">
<xs:annotation>
<xs:documentation>The staff-number type indicates staff numbers within a multi-staff part. Staves are numbered from top to bottom, with 1 being the top staff on a part.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:positiveInteger"/>
</xs:simpleType>
<xs:simpleType name="staff-type">
<xs:annotation>
<xs:documentation>The staff-type value can be ossia, cue, editorial, regular, or alternate. An alternate staff indicates one that shares the same musical data as the prior staff, but displayed differently (e.g., treble and bass clef, standard notation and tab).</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="ossia"/>
<xs:enumeration value="cue"/>
<xs:enumeration value="editorial"/>
<xs:enumeration value="regular"/>
<xs:enumeration value="alternate"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="time-relation">
<xs:annotation>
<xs:documentation>The time-relation type indicates the symbol used to represent the interchangeable aspect of dual time signatures.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="parentheses"/>
<xs:enumeration value="bracket"/>
<xs:enumeration value="equals"/>
<xs:enumeration value="slash"/>
<xs:enumeration value="space"/>
<xs:enumeration value="hyphen"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="time-separator">
<xs:annotation>
<xs:documentation>The time-separator type indicates how to display the arrangement between the beats and beat-type values in a time signature. The default value is none. The horizontal, diagonal, and vertical values represent horizontal, diagonal lower-left to upper-right, and vertical lines respectively. For these values, the beats and beat-type values are arranged on either side of the separator line. The none value represents no separator with the beats and beat-type arranged vertically. The adjacent value represents no separator with the beats and beat-type arranged horizontally.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:enumeration value="none"/>
<xs:enumeration value="horizontal"/>
<xs:enumeration value="diagonal"/>
<xs:enumeration value="vertical"/>
<xs:enumeration value="adjacent"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="time-symbol">
<xs:annotation>
<xs:documentation>The time-symbol type indicates how to display a time signature. The normal value is the usual fractional display, and is the implied symbol type if none is specified. Other options are the common and cut time symbols, as well as a single number with an implied denominator. The note symbol indicates that the beat-type should be represented with the corresponding downstem note rather than a number. The dotted-note symbol indicates that the beat-type should be represented with a dotted downstem note that corresponds to three times the beat-type value, and a numerator that is one third the beats value.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:enumeration value="common"/>
<xs:enumeration value="cut"/>
<xs:enumeration value="single-number"/>
<xs:enumeration value="note"/>
<xs:enumeration value="dotted-note"/>
<xs:enumeration value="normal"/>
</xs:restriction>
</xs:simpleType>
<!-- Simple types derived from barline.mod elements -->
<xs:simpleType name="backward-forward">
<xs:annotation>
<xs:documentation>The backward-forward type is used to specify repeat directions. The start of the repeat has a forward direction while the end of the repeat has a backward direction.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:enumeration value="backward"/>
<xs:enumeration value="forward"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="bar-style">
<xs:annotation>
<xs:documentation>The bar-style type represents barline style information. Choices are regular, dotted, dashed, heavy, light-light, light-heavy, heavy-light, heavy-heavy, tick (a short stroke through the top line), short (a partial barline between the 2nd and 4th lines), and none.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="regular"/>
<xs:enumeration value="dotted"/>
<xs:enumeration value="dashed"/>
<xs:enumeration value="heavy"/>
<xs:enumeration value="light-light"/>
<xs:enumeration value="light-heavy"/>
<xs:enumeration value="heavy-light"/>
<xs:enumeration value="heavy-heavy"/>
<xs:enumeration value="tick"/>
<xs:enumeration value="short"/>
<xs:enumeration value="none"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ending-number">
<xs:annotation>
<xs:documentation>The ending-number type is used to specify either a comma-separated list of positive integers without leading zeros, or a string of zero or more spaces. It is used for the number attribute of the ending element. The zero or more spaces version is used when software knows that an ending is present, but cannot determine the type of the ending.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:pattern value="([ ]*)|([1-9][0-9]*(, ?[1-9][0-9]*)*)"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="right-left-middle">
<xs:annotation>
<xs:documentation>The right-left-middle type is used to specify barline location.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:enumeration value="right"/>
<xs:enumeration value="left"/>
<xs:enumeration value="middle"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="start-stop-discontinue">
<xs:annotation>
<xs:documentation>The start-stop-discontinue type is used to specify ending types. Typically, the start type is associated with the left barline of the first measure in an ending. The stop and discontinue types are associated with the right barline of the last measure in an ending. Stop is used when the ending mark concludes with a downward jog, as is typical for first endings. Discontinue is used when there is no downward jog, as is typical for second endings that do not conclude a piece.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:enumeration value="start"/>
<xs:enumeration value="stop"/>
<xs:enumeration value="discontinue"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="winged">
<xs:annotation>
<xs:documentation>The winged attribute indicates whether the repeat has winged extensions that appear above and below the barline. The straight and curved values represent single wings, while the double-straight and double-curved values represent double wings. The none value indicates no wings and is the default.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:enumeration value="none"/>
<xs:enumeration value="straight"/>
<xs:enumeration value="curved"/>
<xs:enumeration value="double-straight"/>
<xs:enumeration value="double-curved"/>
</xs:restriction>
</xs:simpleType>
<!-- Simple types derived from direction.mod elements -->
<xs:simpleType name="accordion-middle">
<xs:annotation>
<xs:documentation>The accordion-middle type may have values of 1, 2, or 3, corresponding to having 1 to 3 dots in the middle section of the accordion registration symbol.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:positiveInteger">
<xs:minInclusive value="1"/>
<xs:maxInclusive value="3"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="beater-value">
<xs:annotation>
<xs:documentation>The beater-value type represents pictograms for beaters, mallets, and sticks that do not have different materials represented in the pictogram. The finger and hammer values are in addition to Stone's list.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="bow"/>
<xs:enumeration value="chime hammer"/>
<xs:enumeration value="coin"/>
<xs:enumeration value="finger"/>
<xs:enumeration value="fingernail"/>
<xs:enumeration value="fist"/>
<xs:enumeration value="guiro scraper"/>
<xs:enumeration value="hammer"/>
<xs:enumeration value="hand"/>
<xs:enumeration value="jazz stick"/>
<xs:enumeration value="knitting needle"/>
<xs:enumeration value="metal hammer"/>
<xs:enumeration value="snare stick"/>
<xs:enumeration value="spoon mallet"/>
<xs:enumeration value="triangle beater"/>
<xs:enumeration value="triangle beater plain"/>
<xs:enumeration value="wire brush"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="degree-symbol-value">
<xs:annotation>
<xs:documentation>The degree-symbol-value type indicates indicates that a symbol should be used in specifying the degree.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:enumeration value="major"/>
<xs:enumeration value="minor"/>
<xs:enumeration value="augmented"/>
<xs:enumeration value="diminished"/>
<xs:enumeration value="half-diminished"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="degree-type-value">
<xs:annotation>
<xs:documentation>The degree-type-value type indicates whether the current degree element is an addition, alteration, or subtraction to the kind of the current chord in the harmony element.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="add"/>
<xs:enumeration value="alter"/>
<xs:enumeration value="subtract"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="effect">
<xs:annotation>
<xs:documentation>The effect type represents pictograms for sound effect percussion instruments. The cannon value is in addition to Stone's list.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="anvil"/>
<xs:enumeration value="auto horn"/>
<xs:enumeration value="bird whistle"/>
<xs:enumeration value="cannon"/>
<xs:enumeration value="duck call"/>
<xs:enumeration value="gun shot"/>
<xs:enumeration value="klaxon horn"/>
<xs:enumeration value="lions roar"/>
<xs:enumeration value="police whistle"/>
<xs:enumeration value="siren"/>
<xs:enumeration value="slide whistle"/>
<xs:enumeration value="thunder sheet"/>
<xs:enumeration value="wind machine"/>
<xs:enumeration value="wind whistle"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="glass">
<xs:annotation>
<xs:documentation>The glass type represents pictograms for glass percussion instruments.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="wind chimes"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="harmony-type">
<xs:annotation>
<xs:documentation>The harmony-type type differentiates different types of harmonies when alternate harmonies are possible. Explicit harmonies have all note present in the music; implied have some notes missing but implied; alternate represents alternate analyses.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:enumeration value="explicit"/>
<xs:enumeration value="implied"/>
<xs:enumeration value="alternate"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="kind-value">
<xs:annotation>
<xs:documentation>A kind-value indicates the type of chord. Degree elements can then add, subtract, or alter from these starting points. Values include:
Triads:
major (major third, perfect fifth)
minor (minor third, perfect fifth)
augmented (major third, augmented fifth)
diminished (minor third, diminished fifth)
Sevenths:
dominant (major triad, minor seventh)
major-seventh (major triad, major seventh)
minor-seventh (minor triad, minor seventh)
diminished-seventh (diminished triad, diminished seventh)
augmented-seventh (augmented triad, minor seventh)
half-diminished (diminished triad, minor seventh)
major-minor (minor triad, major seventh)
Sixths:
major-sixth (major triad, added sixth)
minor-sixth (minor triad, added sixth)
Ninths:
dominant-ninth (dominant-seventh, major ninth)
major-ninth (major-seventh, major ninth)
minor-ninth (minor-seventh, major ninth)
11ths (usually as the basis for alteration):
dominant-11th (dominant-ninth, perfect 11th)
major-11th (major-ninth, perfect 11th)
minor-11th (minor-ninth, perfect 11th)
13ths (usually as the basis for alteration):
dominant-13th (dominant-11th, major 13th)
major-13th (major-11th, major 13th)
minor-13th (minor-11th, major 13th)
Suspended:
suspended-second (major second, perfect fifth)
suspended-fourth (perfect fourth, perfect fifth)
Functional sixths:
Neapolitan
Italian
French
German
Other:
pedal (pedal-point bass)
power (perfect fifth)
Tristan
The "other" kind is used when the harmony is entirely composed of add elements. The "none" kind is used to explicitly encode absence of chords or functional harmony.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="major"/>
<xs:enumeration value="minor"/>
<xs:enumeration value="augmented"/>
<xs:enumeration value="diminished"/>
<xs:enumeration value="dominant"/>
<xs:enumeration value="major-seventh"/>
<xs:enumeration value="minor-seventh"/>
<xs:enumeration value="diminished-seventh"/>
<xs:enumeration value="augmented-seventh"/>
<xs:enumeration value="half-diminished"/>
<xs:enumeration value="major-minor"/>
<xs:enumeration value="major-sixth"/>
<xs:enumeration value="minor-sixth"/>
<xs:enumeration value="dominant-ninth"/>
<xs:enumeration value="major-ninth"/>
<xs:enumeration value="minor-ninth"/>
<xs:enumeration value="dominant-11th"/>
<xs:enumeration value="major-11th"/>
<xs:enumeration value="minor-11th"/>
<xs:enumeration value="dominant-13th"/>
<xs:enumeration value="major-13th"/>
<xs:enumeration value="minor-13th"/>
<xs:enumeration value="suspended-second"/>
<xs:enumeration value="suspended-fourth"/>
<xs:enumeration value="Neapolitan"/>
<xs:enumeration value="Italian"/>
<xs:enumeration value="French"/>
<xs:enumeration value="German"/>
<xs:enumeration value="pedal"/>
<xs:enumeration value="power"/>
<xs:enumeration value="Tristan"/>
<xs:enumeration value="other"/>
<xs:enumeration value="none"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="line-end">
<xs:annotation>
<xs:documentation>The line-end type specifies if there is a jog up or down (or both), an arrow, or nothing at the start or end of a bracket.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:enumeration value="up"/>
<xs:enumeration value="down"/>
<xs:enumeration value="both"/>
<xs:enumeration value="arrow"/>
<xs:enumeration value="none"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="measure-numbering-value">
<xs:annotation>
<xs:documentation>The measure-numbering-value type describes how measure numbers are displayed on this part: no numbers, numbers every measure, or numbers every system.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="none"/>
<xs:enumeration value="measure"/>
<xs:enumeration value="system"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="membrane">
<xs:annotation>
<xs:documentation>The membrane type represents pictograms for membrane percussion instruments. The goblet drum value is in addition to Stone's list.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="bass drum"/>
<xs:enumeration value="bass drum on side"/>
<xs:enumeration value="bongos"/>
<xs:enumeration value="conga drum"/>
<xs:enumeration value="goblet drum"/>
<xs:enumeration value="military drum"/>
<xs:enumeration value="snare drum"/>
<xs:enumeration value="snare drum snares off"/>
<xs:enumeration value="tambourine"/>
<xs:enumeration value="tenor drum"/>
<xs:enumeration value="timbales"/>
<xs:enumeration value="tomtom"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="metal">
<xs:annotation>
<xs:documentation>The metal type represents pictograms for metal percussion instruments. The hi-hat value refers to a pictogram like Stone's high-hat cymbals but without the long vertical line at the bottom.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="almglocken"/>