metanorma-generic 3.4.2 → 3.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1041 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ MathML 4 (Core Level 1)
4
+ #######################
5
+ -->
6
+ <!--
7
+ Copyright 1998-2026 W3C (MIT, ERCIM, Keio, Beihang)
8
+
9
+ Use and distribution of this code are permitted under the terms
10
+ W3C Software Notice and License
11
+ http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
12
+ -->
13
+ <grammar ns="http://www.w3.org/1998/Math/MathML" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
14
+ <start combine="choice">
15
+ <ref name="math"/>
16
+ </start>
17
+ <define name="math">
18
+ <element name="math">
19
+ <ref name="math.attributes"/>
20
+ <ref name="ImpliedMrow"/>
21
+ </element>
22
+ </define>
23
+ <define name="MathMLoneventAttributes">
24
+ <optional>
25
+ <attribute name="onabort"/>
26
+ </optional>
27
+ <optional>
28
+ <attribute name="onauxclick"/>
29
+ </optional>
30
+ <optional>
31
+ <attribute name="onblur"/>
32
+ </optional>
33
+ <optional>
34
+ <attribute name="oncancel"/>
35
+ </optional>
36
+ <optional>
37
+ <attribute name="oncanplay"/>
38
+ </optional>
39
+ <optional>
40
+ <attribute name="oncanplaythrough"/>
41
+ </optional>
42
+ <optional>
43
+ <attribute name="onchange"/>
44
+ </optional>
45
+ <optional>
46
+ <attribute name="onclick"/>
47
+ </optional>
48
+ <optional>
49
+ <attribute name="onclose"/>
50
+ </optional>
51
+ <optional>
52
+ <attribute name="oncontextlost"/>
53
+ </optional>
54
+ <optional>
55
+ <attribute name="oncontextmenu"/>
56
+ </optional>
57
+ <optional>
58
+ <attribute name="oncontextrestored"/>
59
+ </optional>
60
+ <optional>
61
+ <attribute name="oncuechange"/>
62
+ </optional>
63
+ <optional>
64
+ <attribute name="ondblclick"/>
65
+ </optional>
66
+ <optional>
67
+ <attribute name="ondrag"/>
68
+ </optional>
69
+ <optional>
70
+ <attribute name="ondragend"/>
71
+ </optional>
72
+ <optional>
73
+ <attribute name="ondragenter"/>
74
+ </optional>
75
+ <optional>
76
+ <attribute name="ondragleave"/>
77
+ </optional>
78
+ <optional>
79
+ <attribute name="ondragover"/>
80
+ </optional>
81
+ <optional>
82
+ <attribute name="ondragstart"/>
83
+ </optional>
84
+ <optional>
85
+ <attribute name="ondrop"/>
86
+ </optional>
87
+ <optional>
88
+ <attribute name="ondurationchange"/>
89
+ </optional>
90
+ <optional>
91
+ <attribute name="onemptied"/>
92
+ </optional>
93
+ <optional>
94
+ <attribute name="onended"/>
95
+ </optional>
96
+ <optional>
97
+ <attribute name="onerror"/>
98
+ </optional>
99
+ <optional>
100
+ <attribute name="onfocus"/>
101
+ </optional>
102
+ <optional>
103
+ <attribute name="onformdata"/>
104
+ </optional>
105
+ <optional>
106
+ <attribute name="oninput"/>
107
+ </optional>
108
+ <optional>
109
+ <attribute name="oninvalid"/>
110
+ </optional>
111
+ <optional>
112
+ <attribute name="onkeydown"/>
113
+ </optional>
114
+ <optional>
115
+ <attribute name="onkeypress"/>
116
+ </optional>
117
+ <optional>
118
+ <attribute name="onkeyup"/>
119
+ </optional>
120
+ <optional>
121
+ <attribute name="onload"/>
122
+ </optional>
123
+ <optional>
124
+ <attribute name="onloadeddata"/>
125
+ </optional>
126
+ <optional>
127
+ <attribute name="onloadedmetadata"/>
128
+ </optional>
129
+ <optional>
130
+ <attribute name="onloadstart"/>
131
+ </optional>
132
+ <optional>
133
+ <attribute name="onmousedown"/>
134
+ </optional>
135
+ <optional>
136
+ <attribute name="onmouseenter"/>
137
+ </optional>
138
+ <optional>
139
+ <attribute name="onmouseleave"/>
140
+ </optional>
141
+ <optional>
142
+ <attribute name="onmousemove"/>
143
+ </optional>
144
+ <optional>
145
+ <attribute name="onmouseout"/>
146
+ </optional>
147
+ <optional>
148
+ <attribute name="onmouseover"/>
149
+ </optional>
150
+ <optional>
151
+ <attribute name="onmouseup"/>
152
+ </optional>
153
+ <optional>
154
+ <attribute name="onpause"/>
155
+ </optional>
156
+ <optional>
157
+ <attribute name="onplay"/>
158
+ </optional>
159
+ <optional>
160
+ <attribute name="onplaying"/>
161
+ </optional>
162
+ <optional>
163
+ <attribute name="onprogress"/>
164
+ </optional>
165
+ <optional>
166
+ <attribute name="onratechange"/>
167
+ </optional>
168
+ <optional>
169
+ <attribute name="onreset"/>
170
+ </optional>
171
+ <optional>
172
+ <attribute name="onresize"/>
173
+ </optional>
174
+ <optional>
175
+ <attribute name="onscroll"/>
176
+ </optional>
177
+ <optional>
178
+ <attribute name="onsecuritypolicyviolation"/>
179
+ </optional>
180
+ <optional>
181
+ <attribute name="onseeked"/>
182
+ </optional>
183
+ <optional>
184
+ <attribute name="onseeking"/>
185
+ </optional>
186
+ <optional>
187
+ <attribute name="onselect"/>
188
+ </optional>
189
+ <optional>
190
+ <attribute name="onslotchange"/>
191
+ </optional>
192
+ <optional>
193
+ <attribute name="onstalled"/>
194
+ </optional>
195
+ <optional>
196
+ <attribute name="onsubmit"/>
197
+ </optional>
198
+ <optional>
199
+ <attribute name="onsuspend"/>
200
+ </optional>
201
+ <optional>
202
+ <attribute name="ontimeupdate"/>
203
+ </optional>
204
+ <optional>
205
+ <attribute name="ontoggle"/>
206
+ </optional>
207
+ <optional>
208
+ <attribute name="onvolumechange"/>
209
+ </optional>
210
+ <optional>
211
+ <attribute name="onwaiting"/>
212
+ </optional>
213
+ <optional>
214
+ <attribute name="onwebkitanimationend"/>
215
+ </optional>
216
+ <optional>
217
+ <attribute name="onwebkitanimationiteration"/>
218
+ </optional>
219
+ <optional>
220
+ <attribute name="onwebkitanimationstart"/>
221
+ </optional>
222
+ <optional>
223
+ <attribute name="onwebkittransitionend"/>
224
+ </optional>
225
+ <optional>
226
+ <attribute name="onwheel"/>
227
+ </optional>
228
+ <optional>
229
+ <attribute name="onafterprint"/>
230
+ </optional>
231
+ <optional>
232
+ <attribute name="onbeforeprint"/>
233
+ </optional>
234
+ <optional>
235
+ <attribute name="onbeforeunload"/>
236
+ </optional>
237
+ <optional>
238
+ <attribute name="onhashchange"/>
239
+ </optional>
240
+ <optional>
241
+ <attribute name="onlanguagechange"/>
242
+ </optional>
243
+ <optional>
244
+ <attribute name="onmessage"/>
245
+ </optional>
246
+ <optional>
247
+ <attribute name="onmessageerror"/>
248
+ </optional>
249
+ <optional>
250
+ <attribute name="onoffline"/>
251
+ </optional>
252
+ <optional>
253
+ <attribute name="ononline"/>
254
+ </optional>
255
+ <optional>
256
+ <attribute name="onpagehide"/>
257
+ </optional>
258
+ <optional>
259
+ <attribute name="onpageshow"/>
260
+ </optional>
261
+ <optional>
262
+ <attribute name="onpopstate"/>
263
+ </optional>
264
+ <optional>
265
+ <attribute name="onrejectionhandled"/>
266
+ </optional>
267
+ <optional>
268
+ <attribute name="onstorage"/>
269
+ </optional>
270
+ <optional>
271
+ <attribute name="onunhandledrejection"/>
272
+ </optional>
273
+ <optional>
274
+ <attribute name="onunload"/>
275
+ </optional>
276
+ <optional>
277
+ <attribute name="oncopy"/>
278
+ </optional>
279
+ <optional>
280
+ <attribute name="oncut"/>
281
+ </optional>
282
+ <optional>
283
+ <attribute name="onpaste"/>
284
+ </optional>
285
+ </define>
286
+ <define name="MathMLlink.attributes">
287
+ <optional>
288
+ <attribute name="attributionsrc"/>
289
+ </optional>
290
+ <optional>
291
+ <attribute name="download">
292
+ <ref name="mathml-boolean"/>
293
+ </attribute>
294
+ </optional>
295
+ <optional>
296
+ <attribute name="filename"/>
297
+ </optional>
298
+ <optional>
299
+ <!--
300
+ METANORMA MODIFICATION (basicdoc-models#39): `attribute href` removed
301
+ here — the full profile adds href to MathMLPGlobalAttributes
302
+ (mathml4-presentation.rnc), so the <a> element (mrow.attributes +
303
+ MathMLlink.attributes) would carry it twice, which RELAX NG's
304
+ duplicate-attribute restriction forbids (jing: 'duplicate attribute
305
+ "href"'). href remains available on <a> via the global set.
306
+ -->
307
+ <attribute name="hreflang"/>
308
+ </optional>
309
+ <optional>
310
+ <attribute name="referrerpolicy"/>
311
+ </optional>
312
+ <optional>
313
+ <attribute name="rel"/>
314
+ </optional>
315
+ <optional>
316
+ <attribute name="target"/>
317
+ </optional>
318
+ <optional>
319
+ <attribute name="type"/>
320
+ </optional>
321
+ </define>
322
+ <!--
323
+ Sample set. May need preprocessing
324
+ or schema extension to allow more see MathML Core (and HTML) spec
325
+ -->
326
+ <define name="MathMLDataAttributes">
327
+ <!--
328
+ METANORMA MODIFICATION (basicdoc-models#39): upstream places a literal
329
+ `attribute data-other {text}?` here as an admitted placeholder for
330
+ data-* ("Sample set. May need preprocessing"). In the full-MathML
331
+ profile it duplicates the NonMathMLAtt any-attribute wildcard
332
+ (mathml4-presentation.rnc), which RELAX NG forbids (jing: 'duplicate
333
+ attribute "data-other"'). The wildcard subsumes data-*; the literal is
334
+ dropped.
335
+ -->
336
+ <empty/>
337
+ </define>
338
+ <!-- sample set, like data- may need preprocessing to allow more -->
339
+ <define name="MathMLARIAattributes">
340
+ <optional>
341
+ <attribute name="aria-label"/>
342
+ </optional>
343
+ <optional>
344
+ <attribute name="aria-describedby"/>
345
+ </optional>
346
+ <optional>
347
+ <attribute name="aria-description"/>
348
+ </optional>
349
+ <optional>
350
+ <attribute name="aria-details"/>
351
+ </optional>
352
+ </define>
353
+ <define name="MathMLintentAttributes">
354
+ <optional>
355
+ <attribute name="intent"/>
356
+ </optional>
357
+ <optional>
358
+ <attribute name="arg">
359
+ <data type="NCName"/>
360
+ </attribute>
361
+ </optional>
362
+ </define>
363
+ <define name="MathMLPGlobalAttributes">
364
+ <optional>
365
+ <attribute name="id">
366
+ <data type="ID"/>
367
+ </attribute>
368
+ </optional>
369
+ <optional>
370
+ <attribute name="class">
371
+ <data type="NCName"/>
372
+ </attribute>
373
+ </optional>
374
+ <optional>
375
+ <attribute name="style">
376
+ <data type="string"/>
377
+ </attribute>
378
+ </optional>
379
+ <optional>
380
+ <attribute name="dir">
381
+ <choice>
382
+ <value>ltr</value>
383
+ <value>rtl</value>
384
+ </choice>
385
+ </attribute>
386
+ </optional>
387
+ <optional>
388
+ <attribute name="mathbackground">
389
+ <ref name="color"/>
390
+ </attribute>
391
+ </optional>
392
+ <optional>
393
+ <attribute name="mathcolor">
394
+ <ref name="color"/>
395
+ </attribute>
396
+ </optional>
397
+ <optional>
398
+ <attribute name="mathsize">
399
+ <ref name="length-percentage"/>
400
+ </attribute>
401
+ </optional>
402
+ <optional>
403
+ <attribute name="mathvariant">
404
+ <data type="string">
405
+ <param name="pattern">\s*([Nn][Oo][Rr][Mm][Aa][Ll]|[Bb][Oo][Ll][Dd]|[Ii][Tt][Aa][Ll][Ii][Cc]|[Bb][Oo][Ll][Dd]-[Ii][Tt][Aa][Ll][Ii][Cc]|[Dd][Oo][Uu][Bb][Ll][Ee]-[Ss][Tt][Rr][Uu][Cc][Kk]|[Bb][Oo][Ll][Dd]-[Ff][Rr][Aa][Kk][Tt][Uu][Rr]|[Ss][Cc][Rr][Ii][Pp][Tt]|[Bb][Oo][Ll][Dd]-[Ss][Cc][Rr][Ii][Pp][Tt]|[Ff][Rr][Aa][Kk][Tt][Uu][Rr]|[Ss][Aa][Nn][Ss]-[Ss][Ee][Rr][Ii][Ff]|[Bb][Oo][Ll][Dd]-[Ss][Aa][Nn][Ss]-[Ss][Ee][Rr][Ii][Ff]|[Ss][Aa][Nn][Ss]-[Ss][Ee][Rr][Ii][Ff]-[Ii][Tt][Aa][Ll][Ii][Cc]|[Ss][Aa][Nn][Ss]-[Ss][Ee][Rr][Ii][Ff]-[Bb][Oo][Ll][Dd]-[Ii][Tt][Aa][Ll][Ii][Cc]|[Mm][Oo][Nn][Oo][Ss][Pp][Aa][Cc][Ee]|[Ii][Nn][Ii][Tt][Ii][Aa][Ll]|[Tt][Aa][Ii][Ll][Ee][Dd]|[Ll][Oo][Oo][Pp][Ee][Dd]|[Ss][Tt][Rr][Ee][Tt][Cc][Hh][Ee][Dd])\s*</param>
406
+ </data>
407
+ </attribute>
408
+ </optional>
409
+ <optional>
410
+ <attribute name="displaystyle">
411
+ <ref name="mathml-boolean"/>
412
+ </attribute>
413
+ </optional>
414
+ <optional>
415
+ <attribute name="scriptlevel">
416
+ <data type="integer"/>
417
+ </attribute>
418
+ </optional>
419
+ <optional>
420
+ <attribute name="autofocus">
421
+ <ref name="mathml-boolean"/>
422
+ </attribute>
423
+ </optional>
424
+ <optional>
425
+ <attribute name="tabindex">
426
+ <data type="integer"/>
427
+ </attribute>
428
+ </optional>
429
+ <optional>
430
+ <attribute name="nonce"/>
431
+ </optional>
432
+ <ref name="MathMLoneventAttributes"/>
433
+ <!-- Extension attributes, no defined behavior -->
434
+ <ref name="MathMLDataAttributes"/>
435
+ <!-- No specified behavior in Core, see MathML4 -->
436
+ <ref name="MathMLintentAttributes"/>
437
+ <!-- No specified behavior in Core, see WAI-ARIA -->
438
+ <ref name="MathMLARIAattributes"/>
439
+ </define>
440
+ <define name="math.attributes">
441
+ <ref name="MathMLPGlobalAttributes"/>
442
+ <optional>
443
+ <attribute name="display">
444
+ <choice>
445
+ <value>block</value>
446
+ <value>inline</value>
447
+ </choice>
448
+ </attribute>
449
+ </optional>
450
+ <optional>
451
+ <!-- No specified behavior in Core, see MathML4 -->
452
+ <attribute name="alttext"/>
453
+ </optional>
454
+ </define>
455
+ <define name="annotation">
456
+ <element name="annotation">
457
+ <ref name="MathMLPGlobalAttributes"/>
458
+ <optional>
459
+ <ref name="encoding"/>
460
+ </optional>
461
+ <text/>
462
+ </element>
463
+ </define>
464
+ <define name="anyElement">
465
+ <element>
466
+ <anyName/>
467
+ <zeroOrMore>
468
+ <choice>
469
+ <attribute>
470
+ <anyName/>
471
+ </attribute>
472
+ <text/>
473
+ <ref name="anyElement"/>
474
+ </choice>
475
+ </zeroOrMore>
476
+ </element>
477
+ </define>
478
+ <define name="annotation-xml">
479
+ <element name="annotation-xml">
480
+ <ref name="annotation-xml.attributes"/>
481
+ <choice>
482
+ <zeroOrMore>
483
+ <ref name="MathExpression"/>
484
+ </zeroOrMore>
485
+ <zeroOrMore>
486
+ <ref name="anyElement"/>
487
+ </zeroOrMore>
488
+ </choice>
489
+ </element>
490
+ </define>
491
+ <define name="annotation-xml.attributes">
492
+ <ref name="MathMLPGlobalAttributes"/>
493
+ <optional>
494
+ <ref name="encoding"/>
495
+ </optional>
496
+ </define>
497
+ <define name="encoding">
498
+ <optional>
499
+ <attribute name="encoding">
500
+ <data type="string"/>
501
+ </attribute>
502
+ </optional>
503
+ </define>
504
+ <define name="semantics">
505
+ <element name="semantics">
506
+ <ref name="semantics.attributes"/>
507
+ <ref name="MathExpression"/>
508
+ <zeroOrMore>
509
+ <choice>
510
+ <ref name="annotation"/>
511
+ <ref name="annotation-xml"/>
512
+ </choice>
513
+ </zeroOrMore>
514
+ </element>
515
+ </define>
516
+ <define name="semantics.attributes">
517
+ <ref name="MathMLPGlobalAttributes"/>
518
+ </define>
519
+ <define name="mathml-boolean">
520
+ <data type="string">
521
+ <param name="pattern">\s*([Tt][Rr][Uu][Ee]|[Ff][Aa][Ll][Ss][Ee])\s*</param>
522
+ </data>
523
+ </define>
524
+ <define name="length-percentage">
525
+ <data type="string">
526
+ <param name="pattern">\s*((-?[0-9]*([0-9]\.?|\.[0-9])[0-9]*(r?em|ex|in|cm|mm|p[xtc]|Q|v[hw]|vmin|vmax|%))|0)\s*</param>
527
+ </data>
528
+ </define>
529
+ <define name="MathExpression">
530
+ <choice>
531
+ <ref name="TokenExpression"/>
532
+ <ref name="mrow"/>
533
+ <ref name="a"/>
534
+ <ref name="mfrac"/>
535
+ <ref name="msqrt"/>
536
+ <ref name="mroot"/>
537
+ <ref name="mstyle"/>
538
+ <ref name="merror"/>
539
+ <ref name="mpadded"/>
540
+ <ref name="mphantom"/>
541
+ <ref name="msub"/>
542
+ <ref name="msup"/>
543
+ <ref name="msubsup"/>
544
+ <ref name="munder"/>
545
+ <ref name="mover"/>
546
+ <ref name="munderover"/>
547
+ <ref name="mmultiscripts"/>
548
+ <ref name="mtable"/>
549
+ <ref name="maction"/>
550
+ <ref name="semantics"/>
551
+ </choice>
552
+ </define>
553
+ <define name="MathMalignExpression">
554
+ <ref name="MathExpression"/>
555
+ </define>
556
+ <define name="ImpliedMrow">
557
+ <zeroOrMore>
558
+ <ref name="MathMalignExpression"/>
559
+ </zeroOrMore>
560
+ </define>
561
+ <define name="TableRowExpression">
562
+ <ref name="mtr"/>
563
+ </define>
564
+ <define name="MultiScriptExpression">
565
+ <choice>
566
+ <ref name="MathExpression"/>
567
+ <ref name="none"/>
568
+ </choice>
569
+ <choice>
570
+ <ref name="MathExpression"/>
571
+ <ref name="none"/>
572
+ </choice>
573
+ </define>
574
+ <define name="color">
575
+ <data type="string">
576
+ <param name="pattern">\s*((#[0-9a-fA-F]{3}([0-9a-fA-F]{3})?)|[a-zA-Z]+|[a-zA-Z]+\s*\([0-9, %.]+\))\s*</param>
577
+ </data>
578
+ </define>
579
+ <define name="TokenExpression">
580
+ <choice>
581
+ <ref name="mi"/>
582
+ <ref name="mn"/>
583
+ <ref name="mo"/>
584
+ <ref name="mtext"/>
585
+ <ref name="mspace"/>
586
+ <ref name="ms"/>
587
+ </choice>
588
+ </define>
589
+ <!--
590
+ METANORMA MODIFICATION (basicdoc-models#39): upstream admits embedded
591
+ XHTML (h:*) and svg:svg inside token elements. libxml2's RELAX NG rejects
592
+ the compiled grammar outright on the svg branch ("Element svg attributes
593
+ have a content type error", wildcard-attribute constructs), which breaks
594
+ every passthrough validation in metanorma-standoc; and metanorma's
595
+ serialiser never emits embedded HTML/SVG in math tokens (the wrapper bans
596
+ foreign markup generally). Both foreign branches are removed.
597
+ Upstream text was:
598
+ textorHTML = text | math | element (h:*) {attribute * {text}*,(textorHTML)*} | element svg:svg {attribute * {text}*, anyElement*}
599
+ -->
600
+ <define name="textorHTML">
601
+ <choice>
602
+ <text/>
603
+ <ref name="math"/>
604
+ </choice>
605
+ </define>
606
+ <define name="token.content">
607
+ <zeroOrMore>
608
+ <ref name="textorHTML"/>
609
+ </zeroOrMore>
610
+ </define>
611
+ <define name="mi">
612
+ <element name="mi">
613
+ <ref name="mi.attributes"/>
614
+ <ref name="token.content"/>
615
+ </element>
616
+ </define>
617
+ <define name="mi.attributes">
618
+ <ref name="MathMLPGlobalAttributes"/>
619
+ </define>
620
+ <define name="mn">
621
+ <element name="mn">
622
+ <ref name="mn.attributes"/>
623
+ <ref name="token.content"/>
624
+ </element>
625
+ </define>
626
+ <define name="mn.attributes">
627
+ <ref name="MathMLPGlobalAttributes"/>
628
+ </define>
629
+ <define name="mo">
630
+ <element name="mo">
631
+ <ref name="mo.attributes"/>
632
+ <ref name="token.content"/>
633
+ </element>
634
+ </define>
635
+ <define name="mo.attributes">
636
+ <ref name="MathMLPGlobalAttributes"/>
637
+ <optional>
638
+ <attribute name="form">
639
+ <choice>
640
+ <value>prefix</value>
641
+ <value>infix</value>
642
+ <value>postfix</value>
643
+ </choice>
644
+ </attribute>
645
+ </optional>
646
+ <optional>
647
+ <attribute name="lspace">
648
+ <ref name="length-percentage"/>
649
+ </attribute>
650
+ </optional>
651
+ <optional>
652
+ <attribute name="rspace">
653
+ <ref name="length-percentage"/>
654
+ </attribute>
655
+ </optional>
656
+ <optional>
657
+ <attribute name="stretchy">
658
+ <ref name="mathml-boolean"/>
659
+ </attribute>
660
+ </optional>
661
+ <optional>
662
+ <attribute name="symmetric">
663
+ <ref name="mathml-boolean"/>
664
+ </attribute>
665
+ </optional>
666
+ <optional>
667
+ <!--
668
+ METANORMA MODIFICATION (basicdoc-models#39): value space merged with the
669
+ presentation profile's `maxsize {"infinity"}` re-declaration, which RELAX
670
+ NG's duplicate-attribute restriction forbids as a separate attribute.
671
+ -->
672
+ <attribute name="maxsize">
673
+ <choice>
674
+ <ref name="length-percentage"/>
675
+ <value>infinity</value>
676
+ </choice>
677
+ </attribute>
678
+ </optional>
679
+ <optional>
680
+ <attribute name="minsize">
681
+ <ref name="length-percentage"/>
682
+ </attribute>
683
+ </optional>
684
+ <optional>
685
+ <attribute name="largeop">
686
+ <ref name="mathml-boolean"/>
687
+ </attribute>
688
+ </optional>
689
+ <optional>
690
+ <attribute name="movablelimits">
691
+ <ref name="mathml-boolean"/>
692
+ </attribute>
693
+ </optional>
694
+ </define>
695
+ <define name="mtext">
696
+ <element name="mtext">
697
+ <ref name="mtext.attributes"/>
698
+ <ref name="token.content"/>
699
+ </element>
700
+ </define>
701
+ <define name="mtext.attributes">
702
+ <ref name="MathMLPGlobalAttributes"/>
703
+ </define>
704
+ <define name="mspace">
705
+ <element name="mspace">
706
+ <ref name="mspace.attributes"/>
707
+ <empty/>
708
+ </element>
709
+ </define>
710
+ <define name="mspace.attributes">
711
+ <ref name="MathMLPGlobalAttributes"/>
712
+ <optional>
713
+ <attribute name="width">
714
+ <ref name="length-percentage"/>
715
+ </attribute>
716
+ </optional>
717
+ <optional>
718
+ <attribute name="height">
719
+ <ref name="length-percentage"/>
720
+ </attribute>
721
+ </optional>
722
+ <optional>
723
+ <attribute name="depth">
724
+ <ref name="length-percentage"/>
725
+ </attribute>
726
+ </optional>
727
+ </define>
728
+ <define name="ms">
729
+ <element name="ms">
730
+ <ref name="ms.attributes"/>
731
+ <ref name="token.content"/>
732
+ </element>
733
+ </define>
734
+ <define name="ms.attributes">
735
+ <ref name="MathMLPGlobalAttributes"/>
736
+ </define>
737
+ <define name="none">
738
+ <element name="none">
739
+ <ref name="none.attributes"/>
740
+ <empty/>
741
+ </element>
742
+ </define>
743
+ <define name="none.attributes">
744
+ <ref name="MathMLPGlobalAttributes"/>
745
+ </define>
746
+ <define name="mprescripts">
747
+ <element name="mprescripts">
748
+ <ref name="mprescripts.attributes"/>
749
+ <empty/>
750
+ </element>
751
+ </define>
752
+ <define name="mprescripts.attributes">
753
+ <ref name="MathMLPGlobalAttributes"/>
754
+ </define>
755
+ <define name="mrow">
756
+ <element name="mrow">
757
+ <ref name="mrow.attributes"/>
758
+ <ref name="ImpliedMrow"/>
759
+ </element>
760
+ </define>
761
+ <define name="mrow.attributes">
762
+ <ref name="MathMLPGlobalAttributes"/>
763
+ </define>
764
+ <!--
765
+ METANORMA MODIFICATION (basicdoc-models#39): upstream composes
766
+ `mrow.attributes, MathMLlink.attributes` on <a>, but the full profile
767
+ already augments mrow.attributes with MathMLlink.attributes
768
+ (mathml4-presentation.rnc), so every link attribute would appear twice on
769
+ <a>, which RELAX NG's duplicate-attribute restriction forbids (jing:
770
+ 'duplicate attribute "attributionsrc"').
771
+ Upstream text was:
772
+ a = element a {mrow.attributes, MathMLlink.attributes, ImpliedMrow}
773
+ -->
774
+ <define name="a">
775
+ <element name="a">
776
+ <ref name="mrow.attributes"/>
777
+ <ref name="ImpliedMrow"/>
778
+ </element>
779
+ </define>
780
+ <define name="mfrac">
781
+ <element name="mfrac">
782
+ <ref name="mfrac.attributes"/>
783
+ <ref name="MathExpression"/>
784
+ <ref name="MathExpression"/>
785
+ </element>
786
+ </define>
787
+ <define name="mfrac.attributes">
788
+ <ref name="MathMLPGlobalAttributes"/>
789
+ <optional>
790
+ <attribute name="linethickness">
791
+ <ref name="length-percentage"/>
792
+ </attribute>
793
+ </optional>
794
+ </define>
795
+ <define name="msqrt">
796
+ <element name="msqrt">
797
+ <ref name="msqrt.attributes"/>
798
+ <ref name="ImpliedMrow"/>
799
+ </element>
800
+ </define>
801
+ <define name="msqrt.attributes">
802
+ <ref name="MathMLPGlobalAttributes"/>
803
+ </define>
804
+ <define name="mroot">
805
+ <element name="mroot">
806
+ <ref name="mroot.attributes"/>
807
+ <ref name="MathExpression"/>
808
+ <ref name="MathExpression"/>
809
+ </element>
810
+ </define>
811
+ <define name="mroot.attributes">
812
+ <ref name="MathMLPGlobalAttributes"/>
813
+ </define>
814
+ <define name="mstyle">
815
+ <element name="mstyle">
816
+ <ref name="mstyle.attributes"/>
817
+ <ref name="ImpliedMrow"/>
818
+ </element>
819
+ </define>
820
+ <define name="mstyle.attributes">
821
+ <ref name="MathMLPGlobalAttributes"/>
822
+ </define>
823
+ <define name="merror">
824
+ <element name="merror">
825
+ <ref name="merror.attributes"/>
826
+ <ref name="ImpliedMrow"/>
827
+ </element>
828
+ </define>
829
+ <define name="merror.attributes">
830
+ <ref name="MathMLPGlobalAttributes"/>
831
+ </define>
832
+ <define name="mpadded">
833
+ <element name="mpadded">
834
+ <ref name="mpadded.attributes"/>
835
+ <ref name="ImpliedMrow"/>
836
+ </element>
837
+ </define>
838
+ <define name="mpadded.attributes">
839
+ <ref name="MathMLPGlobalAttributes"/>
840
+ <optional>
841
+ <attribute name="height">
842
+ <ref name="mpadded-length-percentage"/>
843
+ </attribute>
844
+ </optional>
845
+ <optional>
846
+ <attribute name="depth">
847
+ <ref name="mpadded-length-percentage"/>
848
+ </attribute>
849
+ </optional>
850
+ <optional>
851
+ <attribute name="width">
852
+ <ref name="mpadded-length-percentage"/>
853
+ </attribute>
854
+ </optional>
855
+ <optional>
856
+ <attribute name="lspace">
857
+ <ref name="mpadded-length-percentage"/>
858
+ </attribute>
859
+ </optional>
860
+ <optional>
861
+ <attribute name="rspace">
862
+ <ref name="mpadded-length-percentage"/>
863
+ </attribute>
864
+ </optional>
865
+ <optional>
866
+ <attribute name="voffset">
867
+ <ref name="mpadded-length-percentage"/>
868
+ </attribute>
869
+ </optional>
870
+ </define>
871
+ <define name="mpadded-length-percentage">
872
+ <ref name="length-percentage"/>
873
+ </define>
874
+ <define name="mphantom">
875
+ <element name="mphantom">
876
+ <ref name="mphantom.attributes"/>
877
+ <ref name="ImpliedMrow"/>
878
+ </element>
879
+ </define>
880
+ <define name="mphantom.attributes">
881
+ <ref name="MathMLPGlobalAttributes"/>
882
+ </define>
883
+ <define name="msub">
884
+ <element name="msub">
885
+ <ref name="msub.attributes"/>
886
+ <ref name="MathExpression"/>
887
+ <ref name="MathExpression"/>
888
+ </element>
889
+ </define>
890
+ <define name="msub.attributes">
891
+ <ref name="MathMLPGlobalAttributes"/>
892
+ </define>
893
+ <define name="msup">
894
+ <element name="msup">
895
+ <ref name="msup.attributes"/>
896
+ <ref name="MathExpression"/>
897
+ <ref name="MathExpression"/>
898
+ </element>
899
+ </define>
900
+ <define name="msup.attributes">
901
+ <ref name="MathMLPGlobalAttributes"/>
902
+ </define>
903
+ <define name="msubsup">
904
+ <element name="msubsup">
905
+ <ref name="msubsup.attributes"/>
906
+ <ref name="MathExpression"/>
907
+ <ref name="MathExpression"/>
908
+ <ref name="MathExpression"/>
909
+ </element>
910
+ </define>
911
+ <define name="msubsup.attributes">
912
+ <ref name="MathMLPGlobalAttributes"/>
913
+ </define>
914
+ <define name="munder">
915
+ <element name="munder">
916
+ <ref name="munder.attributes"/>
917
+ <ref name="MathExpression"/>
918
+ <ref name="MathExpression"/>
919
+ </element>
920
+ </define>
921
+ <define name="munder.attributes">
922
+ <ref name="MathMLPGlobalAttributes"/>
923
+ <optional>
924
+ <attribute name="accentunder">
925
+ <ref name="mathml-boolean"/>
926
+ </attribute>
927
+ </optional>
928
+ </define>
929
+ <define name="mover">
930
+ <element name="mover">
931
+ <ref name="mover.attributes"/>
932
+ <ref name="MathExpression"/>
933
+ <ref name="MathExpression"/>
934
+ </element>
935
+ </define>
936
+ <define name="mover.attributes">
937
+ <ref name="MathMLPGlobalAttributes"/>
938
+ <optional>
939
+ <attribute name="accent">
940
+ <ref name="mathml-boolean"/>
941
+ </attribute>
942
+ </optional>
943
+ </define>
944
+ <define name="munderover">
945
+ <element name="munderover">
946
+ <ref name="munderover.attributes"/>
947
+ <ref name="MathExpression"/>
948
+ <ref name="MathExpression"/>
949
+ <ref name="MathExpression"/>
950
+ </element>
951
+ </define>
952
+ <define name="munderover.attributes">
953
+ <ref name="MathMLPGlobalAttributes"/>
954
+ <optional>
955
+ <attribute name="accent">
956
+ <ref name="mathml-boolean"/>
957
+ </attribute>
958
+ </optional>
959
+ <optional>
960
+ <attribute name="accentunder">
961
+ <ref name="mathml-boolean"/>
962
+ </attribute>
963
+ </optional>
964
+ </define>
965
+ <define name="mmultiscripts">
966
+ <element name="mmultiscripts">
967
+ <ref name="mmultiscripts.attributes"/>
968
+ <ref name="MathExpression"/>
969
+ <zeroOrMore>
970
+ <ref name="MultiScriptExpression"/>
971
+ </zeroOrMore>
972
+ <optional>
973
+ <ref name="mprescripts"/>
974
+ <zeroOrMore>
975
+ <ref name="MultiScriptExpression"/>
976
+ </zeroOrMore>
977
+ </optional>
978
+ </element>
979
+ </define>
980
+ <define name="mmultiscripts.attributes">
981
+ <ref name="msubsup.attributes"/>
982
+ </define>
983
+ <define name="mtable">
984
+ <element name="mtable">
985
+ <ref name="mtable.attributes"/>
986
+ <zeroOrMore>
987
+ <ref name="TableRowExpression"/>
988
+ </zeroOrMore>
989
+ </element>
990
+ </define>
991
+ <define name="mtable.attributes">
992
+ <ref name="MathMLPGlobalAttributes"/>
993
+ </define>
994
+ <define name="mtr">
995
+ <element name="mtr">
996
+ <ref name="mtr.attributes"/>
997
+ <zeroOrMore>
998
+ <ref name="mtd"/>
999
+ </zeroOrMore>
1000
+ </element>
1001
+ </define>
1002
+ <define name="mtr.attributes">
1003
+ <ref name="MathMLPGlobalAttributes"/>
1004
+ </define>
1005
+ <define name="mtd">
1006
+ <element name="mtd">
1007
+ <ref name="mtd.attributes"/>
1008
+ <ref name="ImpliedMrow"/>
1009
+ </element>
1010
+ </define>
1011
+ <define name="mtd.attributes">
1012
+ <ref name="MathMLPGlobalAttributes"/>
1013
+ <optional>
1014
+ <attribute name="rowspan">
1015
+ <data type="positiveInteger"/>
1016
+ </attribute>
1017
+ </optional>
1018
+ <optional>
1019
+ <attribute name="columnspan">
1020
+ <data type="positiveInteger"/>
1021
+ </attribute>
1022
+ </optional>
1023
+ </define>
1024
+ <define name="maction">
1025
+ <element name="maction">
1026
+ <ref name="maction.attributes"/>
1027
+ <ref name="ImpliedMrow"/>
1028
+ </element>
1029
+ </define>
1030
+ <define name="maction.attributes">
1031
+ <ref name="MathMLPGlobalAttributes"/>
1032
+ <optional>
1033
+ <attribute name="actiontype"/>
1034
+ </optional>
1035
+ <optional>
1036
+ <attribute name="selection">
1037
+ <data type="positiveInteger"/>
1038
+ </attribute>
1039
+ </optional>
1040
+ </define>
1041
+ </grammar>