@likecoin/epubcheck-ts 0.1.0

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.
Files changed (65) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +339 -0
  3. package/dist/index.cjs +1904 -0
  4. package/dist/index.cjs.map +1 -0
  5. package/dist/index.d.cts +523 -0
  6. package/dist/index.d.ts +523 -0
  7. package/dist/index.js +1895 -0
  8. package/dist/index.js.map +1 -0
  9. package/package.json +69 -0
  10. package/schemas/applications.rng +429 -0
  11. package/schemas/aria.rng +3355 -0
  12. package/schemas/block.rng +488 -0
  13. package/schemas/common.rng +1076 -0
  14. package/schemas/container.rng +24 -0
  15. package/schemas/core-scripting.rng +950 -0
  16. package/schemas/data.rng +161 -0
  17. package/schemas/datatypes.rng +401 -0
  18. package/schemas/embed.rng +980 -0
  19. package/schemas/epub-mathml3-inc.rng +161 -0
  20. package/schemas/epub-nav-30.rnc +44 -0
  21. package/schemas/epub-nav-30.rng +19985 -0
  22. package/schemas/epub-nav-30.sch +87 -0
  23. package/schemas/epub-prefix-attr.rng +17 -0
  24. package/schemas/epub-shared-inc.rng +29 -0
  25. package/schemas/epub-ssml-attrs.rng +17 -0
  26. package/schemas/epub-svg-30.rnc +17 -0
  27. package/schemas/epub-svg-30.rng +19903 -0
  28. package/schemas/epub-svg-30.sch +7 -0
  29. package/schemas/epub-svg-forgiving-inc.rng +315 -0
  30. package/schemas/epub-switch.rng +121 -0
  31. package/schemas/epub-trigger.rng +90 -0
  32. package/schemas/epub-type-attr.rng +12 -0
  33. package/schemas/epub-xhtml-30.rnc +6 -0
  34. package/schemas/epub-xhtml-30.rng +19882 -0
  35. package/schemas/epub-xhtml-30.sch +409 -0
  36. package/schemas/epub-xhtml-inc.rng +151 -0
  37. package/schemas/epub-xhtml-integration.rng +565 -0
  38. package/schemas/epub-xhtml-svg-mathml.rng +17 -0
  39. package/schemas/form-datatypes.rng +54 -0
  40. package/schemas/mathml3-common.rng +336 -0
  41. package/schemas/mathml3-content.rng +1552 -0
  42. package/schemas/mathml3-inc.rng +30 -0
  43. package/schemas/mathml3-presentation.rng +2341 -0
  44. package/schemas/mathml3-strict-content.rng +205 -0
  45. package/schemas/media.rng +374 -0
  46. package/schemas/meta.rng +754 -0
  47. package/schemas/microdata.rng +192 -0
  48. package/schemas/ncx.rng +308 -0
  49. package/schemas/ocf-container-30.rnc +37 -0
  50. package/schemas/ocf-container-30.rng +568 -0
  51. package/schemas/opf.rng +15 -0
  52. package/schemas/opf20.rng +513 -0
  53. package/schemas/package-30.rnc +133 -0
  54. package/schemas/package-30.rng +1153 -0
  55. package/schemas/package-30.sch +444 -0
  56. package/schemas/phrase.rng +746 -0
  57. package/schemas/rdfa.rng +552 -0
  58. package/schemas/revision.rng +106 -0
  59. package/schemas/ruby.rng +141 -0
  60. package/schemas/sectional.rng +278 -0
  61. package/schemas/structural.rng +298 -0
  62. package/schemas/tables.rng +420 -0
  63. package/schemas/web-components.rng +184 -0
  64. package/schemas/web-forms.rng +975 -0
  65. package/schemas/web-forms2.rng +1236 -0
@@ -0,0 +1,1153 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <grammar datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" ns="http://www.idpf.org/2007/opf" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns="http://relaxng.org/ns/structure/1.0" xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" xmlns:epub="http://www.idpf.org/2007/ops">
3
+
4
+ <!-- Inlined from datatypes.rng -->
5
+
6
+ <div xml:id="datatypes-common">
7
+ <define name="datatype.ID">
8
+ <ref name="datatype.ID.lexical"/>
9
+ </define>
10
+ <define name="datatype.IDREF">
11
+ <ref name="datatype.IDREF.lexical"/>
12
+ </define>
13
+ <define name="datatype.IDREFS">
14
+ <ref name="datatype.IDREFS.lexical"/>
15
+ </define>
16
+ <define name="datatype.languagecode">
17
+ <ref name="datatype.BCP47"/>
18
+ </define>
19
+ <!-- http://www.w3.org/TR/xmlschema11-2/#language -->
20
+ <define name="datatype.BCP47">
21
+ <data type="language"/>
22
+ </define>
23
+ <!-- http://www.w3.org/TR/xmlschema11-2/#ID -->
24
+ <define name="datatype.ID.xsd">
25
+ <data type="ID"/>
26
+ </define>
27
+ <!-- http://www.w3.org/TR/xmlschema11-2/#NCName -->
28
+ <define name="datatype.IDREF.lexical">
29
+ <data type="NCName"/>
30
+ </define>
31
+ <define name="datatype.IDREFS.lexical">
32
+ <list>
33
+ <oneOrMore>
34
+ <ref name="datatype.IDREF.lexical"/>
35
+ </oneOrMore>
36
+ </list>
37
+ </define>
38
+ <define name="datatype.ID.lexical">
39
+ <data type="NCName"/>
40
+ </define>
41
+ <!-- http://www.w3.org/TR/xmlschema11-2/#IDREF -->
42
+ <define name="datatype.IDREF.xsd">
43
+ <data type="IDREF"/>
44
+ </define>
45
+ <!-- http://www.w3.org/TR/xmlschema11-2/#IDREFS -->
46
+ <define name="datatype.IDREFS.xsd">
47
+ <data type="IDREFS"/>
48
+ </define>
49
+ <!-- http://www.w3.org/TR/xmlschema11-2/#NMTOKEN -->
50
+ <define name="datatype.NMTOKEN">
51
+ <data type="NMTOKEN"/>
52
+ </define>
53
+ <!-- http://www.w3.org/TR/xmlschema11-2/#NMTOKENS -->
54
+ <define name="datatype.NMTOKENS">
55
+ <data type="NMTOKENS"/>
56
+ </define>
57
+ <!-- http://www.w3.org/TR/xmlschema11-2/#string -->
58
+ <define name="datatype.string">
59
+ <data type="string"/>
60
+ </define>
61
+ <define name="datatype.string.nonempty">
62
+ <data type="token">
63
+ <param name="minLength">1</param>
64
+ </data>
65
+ </define>
66
+ <define name="datatype.text">
67
+ <text/>
68
+ </define>
69
+ <!-- http://www.w3.org/TR/xmlschema11-2/#nt-dateRep -->
70
+ <define name="datatype.date">
71
+ <data type="date"/>
72
+ </define>
73
+ <!-- http://www.w3.org/TR/xmlschema11-2/#nt-dateTimeRep -->
74
+ <define name="datatype.dateTime">
75
+ <data type="dateTime"/>
76
+ </define>
77
+ <!-- http://www.w3.org/TR/xmlschema11-2/#nt-timeRep -->
78
+ <define name="datatype.date.or.dateTime">
79
+ <choice>
80
+ <ref name="datatype.date"/>
81
+ <ref name="datatype.dateTime"/>
82
+ </choice>
83
+ </define>
84
+ <define name="datatype.LEIRI">
85
+ <data type="anyURI"/>
86
+ </define>
87
+ <!--
88
+ http://www.w3.org/TR/xmlschema11-2/#anyURI
89
+ http://tools.ietf.org/html/rfc3986#appendix-B
90
+ http://www.w3.org/TR/html5/urls.html#valid-url-potentially-surrounded-by-spaces
91
+ -->
92
+ <define name="datatype.URI">
93
+ <data type="anyURI"/>
94
+ </define>
95
+ <define name="datatype.URI.absolute">
96
+ <data type="anyURI"/>
97
+ </define>
98
+ <define name="datatype.IRI">
99
+ <ref name="datatype.URI"/>
100
+ </define>
101
+ <define name="datatype.character.encoding">
102
+ <ref name="datatype.iana.charset"/>
103
+ </define>
104
+ <define name="datatype.iana.charset">
105
+ <data type="NMTOKEN"/>
106
+ </define>
107
+ <!--
108
+ http://www.w3.org/TR/html5/infrastructure.html#valid-mime-type
109
+ http://tools.ietf.org/html/rfc4288#section-4.2
110
+ http://tools.ietf.org/html/rfc2616#section-3.7
111
+ -->
112
+ <define name="datatype.mimetype">
113
+ <data type="string">
114
+ <param name="pattern">[a-zA-Z0-9!#$&amp;+\-\^_]+/[a-zA-Z0-9!#$&amp;+\-\^_]+.*</param>
115
+ </data>
116
+ </define>
117
+ <define name="datatype.mimetype.nocharset">
118
+ <ref name="datatype.mimetype"/>
119
+ </define>
120
+ <!--
121
+ http://www.w3.org/TR/xmlschema11-2/#nonNegativeInteger
122
+ http://www.w3.org/TR/html5/common-microsyntaxes.html#non-negative-integers
123
+ -->
124
+ <define name="datatype.non-negative.integer">
125
+ <data type="nonNegativeInteger"/>
126
+ </define>
127
+ <!-- http://www.w3.org/TR/xmlschema11-2/#positiveInteger -->
128
+ <define name="datatype.positive.integer">
129
+ <data type="positiveInteger"/>
130
+ </define>
131
+ <!-- http://www.w3.org/TR/xmlschema11-2/#integer -->
132
+ <define name="datatype.integer">
133
+ <data type="integer"/>
134
+ </define>
135
+ <!--
136
+ http://www.w3.org/TR/xmlschema11-2/#nt-floatRep
137
+ http://www.w3.org/TR/html5/common-microsyntaxes.html#real-numbers
138
+ -->
139
+ <define name="datatype.float">
140
+ <data type="float"/>
141
+ </define>
142
+ <define name="datatype.float.positive">
143
+ <data type="float">
144
+ <param name="minExclusive">0</param>
145
+ </data>
146
+ </define>
147
+ <define name="datatype.float.non-negative">
148
+ <data type="float">
149
+ <param name="minInclusive">0</param>
150
+ </data>
151
+ </define>
152
+ <define name="datatype.token">
153
+ <data type="string">
154
+ <param name="pattern">[^\s]+</param>
155
+ </data>
156
+ </define>
157
+ <define name="datatype.space.separated.tokens">
158
+ <list>
159
+ <zeroOrMore>
160
+ <ref name="datatype.token"/>
161
+ </zeroOrMore>
162
+ </list>
163
+ </define>
164
+ </div>
165
+ <div xml:id="datatypes-smil">
166
+ <!--
167
+ http://www.w3.org/TR/smil/smil-timing.html#TimingSyntax-Full-clock-value
168
+ http://www.w3.org/TR/smil/smil-timing.html#TimingSyntax-Partial-clock-value
169
+ http://www.w3.org/TR/smil/smil-timing.html#TimingSyntax-Timecount-value
170
+ -->
171
+ <define name="datatype.smil.npt">
172
+ <choice>
173
+ <data type="string">
174
+ <param name="pattern">(\s*)[0-9]+:[0-5][0-9]:[0-5][0-9](\.[0-9]+)?(\s*)</param>
175
+ </data>
176
+ <data type="string">
177
+ <param name="pattern">(\s*)[0-5][0-9]:[0-5][0-9](\.[0-9]+)?(\s*)</param>
178
+ </data>
179
+ <data type="string">
180
+ <param name="pattern">(\s*)[0-9]+(\.[0-9]+)?(h|min|s|ms)?(\s*)</param>
181
+ </data>
182
+ </choice>
183
+ </define>
184
+ </div>
185
+ <div xml:id="datatypes-vocab">
186
+ <define name="datatype.property">
187
+ <data type="NMTOKEN"/>
188
+ </define>
189
+ <define name="datatype.properties">
190
+ <data type="NMTOKENS"/>
191
+ </define>
192
+ <define name="datatype.prefixdecl">
193
+ <text/>
194
+ </define>
195
+ <!-- \s*([\i-[:]][\c-[:]]*: +[^ ]+)(\s+[\i-[:]][\c-[:]]*: +[^ ]+)*\s* -->
196
+ </div>
197
+ <div xml:id="datatypes-ssml">
198
+ <!-- http://www.w3.org/TR/speech-synthesis11/#edef_phoneme -->
199
+ <define name="datatype.ssml.PhoneticExpression">
200
+ <data type="string"/>
201
+ </define>
202
+ <define name="datatype.ssml.PhoneticAlphabet">
203
+ <data type="string">
204
+ <param name="pattern">(ipa|x-.+)</param>
205
+ </data>
206
+ </define>
207
+ </div>
208
+ <div xml:id="datatypes-html5">
209
+ <define name="datatype.html5.browsing.context.name.or.keyword">
210
+ <data type="string">
211
+ <param name="pattern">()|([^_].*)|(_[bB][lL][aA][nN][kK])|(_[sS][eE][lL][fF])|(_[pP][aA][rR][eE][nN][tT])|(_[tT][oO][pP])</param>
212
+ </data>
213
+ </define>
214
+ <define name="datatype.html5.browsing.context.name">
215
+ <data type="string">
216
+ <param name="pattern">()|([^_].*)</param>
217
+ </data>
218
+ </define>
219
+ <define name="datatype.html5.token">
220
+ <data type="string">
221
+ <param name="pattern">[^\s]+</param>
222
+ </data>
223
+ </define>
224
+ <!-- http://www.w3.org/TR/html5/common-microsyntaxes.html#space-separated-tokens -->
225
+ <define name="datatype.html5.space.separated.tokens">
226
+ <list>
227
+ <zeroOrMore>
228
+ <ref name="datatype.html5.token"/>
229
+ </zeroOrMore>
230
+ </list>
231
+ </define>
232
+ <define name="datatype.html5.ordered.set.unique.tokens">
233
+ <ref name="datatype.html5.space.separated.tokens"/>
234
+ </define>
235
+ <define name="datatype.html5.URL.spaces">
236
+ <ref name="datatype.URI"/>
237
+ </define>
238
+ <!--
239
+ http://dev.w3.org/csswg/css3-mediaqueries/#syntax
240
+ http://www.w3.org/TR/html5/common-microsyntaxes.html#mq
241
+ -->
242
+ <define name="datatype.html5.media.query">
243
+ <data type="string"/>
244
+ </define>
245
+ <define name="datatype.html5.name">
246
+ <data type="string"/>
247
+ </define>
248
+ <define name="datatype.html5.name.reference">
249
+ <data type="string">
250
+ <param name="pattern">#.+</param>
251
+ </data>
252
+ </define>
253
+ <define name="datatype.html5.year">
254
+ <data type="token">
255
+ <param name="pattern">[0-9]{4}</param>
256
+ </data>
257
+ </define>
258
+ <define name="datatype.html5.yearless">
259
+ <data type="token">
260
+ <param name="pattern">(--)?(0[0-9]|1[0-2])-(0[0-9]|[1-2][0-9]|3[0-1])</param>
261
+ </data>
262
+ </define>
263
+ <define name="datatype.html5.duration">
264
+ <data type="token">
265
+ <param name="pattern">(((P[0-9]+D)|(P([0-9]+D)?T((([0-9]+H)([0-9]+M)?([0-9]+(\.[0-9]{1,3})?S)?)|(([0-9]+H)?([0-9]+M)([0-9]+(\.[0-9]{1,3})?S)?)|(([0-9]+H)?([0-9]+M)?([0-9]+(\.[0-9]{1,3})?S)))))|( *(([0-9]+ *[WDHM])|([0-9]+(\.[0-9]{1,3})? *S)) *)+)</param>
266
+ </data>
267
+ </define>
268
+ <!-- http://www.w3.org/TR/html5/common-microsyntaxes.html#months -->
269
+ <define name="datatype.html5.month">
270
+ <data type="token">
271
+ <param name="pattern">([0-9]{4,})-([0-9]{2})</param>
272
+ </data>
273
+ </define>
274
+ <!-- http://www.w3.org/TR/html5/common-microsyntaxes.html#dates -->
275
+ <define name="datatype.html5.date">
276
+ <data type="token">
277
+ <param name="pattern">([0-9]{4,})-([0-9]{2})-([0-9]{2})</param>
278
+ </data>
279
+ </define>
280
+ <!-- http://www.w3.org/TR/html5/common-microsyntaxes.html#times -->
281
+ <define name="datatype.html5.time">
282
+ <data type="token">
283
+ <param name="pattern">([0-9]{2}):([0-9]{2})(:[0-9]{2}(\.[0-9]{1,3})?)?</param>
284
+ </data>
285
+ </define>
286
+ <!-- http://www.w3.org/TR/html5/common-microsyntaxes.html#local-dates-and-times -->
287
+ <define name="datatype.html5.datetime.local">
288
+ <data type="token">
289
+ <param name="pattern">([0-9]{4,})-([0-9]{2})-([0-9]{2})([T ])([0-9]{2}):([0-9]{2})(:[0-9]{2}(\.[0-9]{1,3})?)?</param>
290
+ </data>
291
+ </define>
292
+ <!-- http://www.w3.org/TR/html5/common-microsyntaxes.html#global-dates-and-times -->
293
+ <define name="datatype.html5.datetime.global">
294
+ <data type="token">
295
+ <param name="pattern">([0-9]{4,})-([0-9]{2})-([0-9]{2})([T ])([0-9]{2}):([0-9]{2})(:[0-9]{2}(\.[0-9]{1,3})?)?(Z|((\+|-)([0-9]{2}):?([0-9]{2})))?</param>
296
+ </data>
297
+ </define>
298
+ <define name="datatype.html5.datetime">
299
+ <ref name="datatype.html5.datetime.global"/>
300
+ </define>
301
+ <!-- http://www.w3.org/TR/html5/common-microsyntaxes.html#vaguer-moments-in-time -->
302
+ <define name="datatype.html5.date.or.time">
303
+ <choice>
304
+ <ref name="datatype.html5.year"/>
305
+ <ref name="datatype.html5.yearless"/>
306
+ <ref name="datatype.html5.week"/>
307
+ <ref name="datatype.html5.date"/>
308
+ <ref name="datatype.html5.month"/>
309
+ <ref name="datatype.html5.time"/>
310
+ <ref name="datatype.html5.datetime.global"/>
311
+ <ref name="datatype.html5.duration"/>
312
+ </choice>
313
+ </define>
314
+ <!-- http://www.w3.org/TR/html5/common-microsyntaxes.html#vaguer-moments-in-time -->
315
+ <define name="datatype.html5.date.optional.time">
316
+ <choice>
317
+ <ref name="datatype.html5.date"/>
318
+ <ref name="datatype.html5.datetime.global"/>
319
+ </choice>
320
+ </define>
321
+ <define name="datatype.html5.week">
322
+ <data type="token">
323
+ <param name="pattern">([0-9]{4,})-W([0-9]{2})</param>
324
+ </data>
325
+ </define>
326
+ <define name="datatype.html5.accesskey">
327
+ <ref name="datatype.html5.ordered.set.unique.tokens"/>
328
+ </define>
329
+ <define name="datatype.html5.coords.rectangle">
330
+ <data type="token">
331
+ <param name="pattern">-?[0-9]+,-?[0-9]+,-?[0-9]+,-?[0-9]+</param>
332
+ </data>
333
+ </define>
334
+ <define name="datatype.html5.coords.circle">
335
+ <data type="token">
336
+ <param name="pattern">-?[0-9]+,-?[0-9]+,[0-9]+</param>
337
+ </data>
338
+ </define>
339
+ <define name="datatype.html5.coords.poly">
340
+ <data type="token">
341
+ <param name="pattern">-?[0-9]+,-?[0-9]+,-?[0-9]+,-?[0-9]+,-?[0-9]+,-?[0-9]+(,-?[0-9]+,-?[0-9]+)*</param>
342
+ </data>
343
+ </define>
344
+ <define name="datatype.html5.js">
345
+ <data type="string"/>
346
+ </define>
347
+ <define name="datatype.html5.script">
348
+ <data type="string"/>
349
+ </define>
350
+ <define name="datatype.html5.script.documentation">
351
+ <data type="string"/>
352
+ </define>
353
+ <define name="datatype.html5.iframe.srcdoc.xml">
354
+ <data type="string"/>
355
+ </define>
356
+ <define name="datatype.style">
357
+ <data type="string"/>
358
+ </define>
359
+ <define name="datatype.html5.sizes">
360
+ <list>
361
+ <oneOrMore>
362
+ <data type="string">
363
+ <param name="pattern">[1-9][0-9]*x[1-9][0-9]*</param>
364
+ </data>
365
+ </oneOrMore>
366
+ </list>
367
+ </define>
368
+ <define name="datatype.html5.emailaddress">
369
+ <data type="string">
370
+ <param name="pattern">[^@]+@[^@]+</param>
371
+ </data>
372
+ </define>
373
+ <define name="datatype.html5.emailaddresslist">
374
+ <data type="string">
375
+ <param name="pattern">([^@]+@[^@]+,)*([^@]+@[^@]+)</param>
376
+ </data>
377
+ </define>
378
+ <!-- http://www.w3.org/TR/html5/common-microsyntaxes.html#colors -->
379
+ <define name="datatype.html5.color">
380
+ <data type="string">
381
+ <param name="pattern">#([A-Fa-f0-9]{6})</param>
382
+ </data>
383
+ </define>
384
+ </div>
385
+ <div xml:id="datatypes-html5forms">
386
+ <define name="datatype.html5.forms.mimetypelist">
387
+ <data type="string"/>
388
+ </define>
389
+ <!-- http://www.w3.org/TR/html5/forms.html#attr-form-accept-charset -->
390
+ <define name="datatype.html5.forms.charsetlist">
391
+ <list>
392
+ <oneOrMore>
393
+ <ref name="datatype.character.encoding"/>
394
+ </oneOrMore>
395
+ </list>
396
+ </define>
397
+ <define name="datatype.html5.forms.pattern">
398
+ <data type="string"/>
399
+ </define>
400
+ <define name="datatype.html5.forms.string.nolinebreaks">
401
+ <data type="string"/>
402
+ </define>
403
+ </div>
404
+
405
+
406
+
407
+ <!-- Inlined from epub-prefix-attr.rng -->
408
+
409
+ <!-- ##################################################################### -->
410
+ <define name="epub.prefix.attr">
411
+ <a:documentation> RELAX NG Schema for EPUB: EPUB prefix attributes #</a:documentation>
412
+ <!-- ##################################################################### -->
413
+ <a:documentation>prefix attributes</a:documentation>
414
+ <attribute name="prefix">
415
+ <ref name="datatype.prefixdecl"/>
416
+ </attribute>
417
+ </define>
418
+ <define name="epub.prefix.attr.ns">
419
+ <attribute name="prefix" ns="http://www.idpf.org/2007/ops">
420
+ <ref name="datatype.prefixdecl"/>
421
+ </attribute>
422
+ </define>
423
+
424
+
425
+ <start>
426
+ <element name="package">
427
+ <interleave>
428
+ <ref name="opf.package.attlist"/>
429
+ <ref name="opf.package.content"/>
430
+ </interleave>
431
+ </element>
432
+ </start>
433
+ <define name="opf.package.attlist" combine="interleave">
434
+ <interleave>
435
+ <ref name="opf.version.attr"/>
436
+ <ref name="opf.unique.identifier.attr"/>
437
+ <optional>
438
+ <ref name="opf.id.attr"/>
439
+ </optional>
440
+ <optional>
441
+ <ref name="epub.prefix.attr"/>
442
+ </optional>
443
+ <ref name="opf.i18n.attrs"/>
444
+ </interleave>
445
+ </define>
446
+ <define name="opf.version.attr">
447
+ <attribute name="version">
448
+ <value>3.0</value>
449
+ </attribute>
450
+ </define>
451
+ <define name="opf.unique.identifier.attr">
452
+ <attribute name="unique-identifier">
453
+ <ref name="datatype.IDREF"/>
454
+ </attribute>
455
+ </define>
456
+ <define name="opf.package.content">
457
+ <ref name="opf.metadata"/>
458
+ <ref name="opf.manifest"/>
459
+ <ref name="opf.spine"/>
460
+ <optional>
461
+ <ref name="opf.guide"/>
462
+ </optional>
463
+ <optional>
464
+ <ref name="opf.bindings"/>
465
+ </optional>
466
+ <zeroOrMore>
467
+ <ref name="opf.collection"/>
468
+ </zeroOrMore>
469
+ </define>
470
+ <define name="opf.metadata">
471
+ <element name="metadata">
472
+ <interleave>
473
+ <optional>
474
+ <ref name="opf.id.attr"/>
475
+ </optional>
476
+ <ref name="opf.i18n.attrs"/>
477
+ <ref name="opf.metadata.content"/>
478
+ </interleave>
479
+ </element>
480
+ </define>
481
+ <define name="opf.metadata.content">
482
+ <!-- Flattened interleave to avoid nested interleave issues in libxml2 -->
483
+ <interleave>
484
+ <!-- DC elements (inlined from opf.dc.elems) -->
485
+ <oneOrMore>
486
+ <ref name="opf.dc.identifier"/>
487
+ </oneOrMore>
488
+ <oneOrMore>
489
+ <ref name="opf.dc.title"/>
490
+ </oneOrMore>
491
+ <oneOrMore>
492
+ <ref name="opf.dc.language"/>
493
+ </oneOrMore>
494
+ <optional>
495
+ <ref name="opf.dc.date"/>
496
+ </optional>
497
+ <zeroOrMore>
498
+ <ref name="opf.dc.source"/>
499
+ </zeroOrMore>
500
+ <zeroOrMore>
501
+ <ref name="opf.dc.type"/>
502
+ </zeroOrMore>
503
+ <zeroOrMore>
504
+ <ref name="opf.dc.format"/>
505
+ </zeroOrMore>
506
+ <zeroOrMore>
507
+ <ref name="opf.dc.creator"/>
508
+ </zeroOrMore>
509
+ <zeroOrMore>
510
+ <ref name="opf.dc.subject"/>
511
+ </zeroOrMore>
512
+ <zeroOrMore>
513
+ <ref name="opf.dc.description"/>
514
+ </zeroOrMore>
515
+ <zeroOrMore>
516
+ <ref name="opf.dc.publisher"/>
517
+ </zeroOrMore>
518
+ <zeroOrMore>
519
+ <ref name="opf.dc.contributor"/>
520
+ </zeroOrMore>
521
+ <zeroOrMore>
522
+ <ref name="opf.dc.relation"/>
523
+ </zeroOrMore>
524
+ <zeroOrMore>
525
+ <ref name="opf.dc.coverage"/>
526
+ </zeroOrMore>
527
+ <zeroOrMore>
528
+ <ref name="opf.dc.rights"/>
529
+ </zeroOrMore>
530
+ <!-- meta and link elements -->
531
+ <zeroOrMore>
532
+ <ref name="opf.meta"/>
533
+ </zeroOrMore>
534
+ <zeroOrMore>
535
+ <ref name="opf.link"/>
536
+ </zeroOrMore>
537
+ </interleave>
538
+ </define>
539
+ <define name="opf.meta">
540
+ <element name="meta">
541
+ <choice>
542
+ <ref name="opf.epub3.meta.content"/>
543
+ <ref name="opf.epub2.meta.content"/>
544
+ </choice>
545
+ </element>
546
+ </define>
547
+ <define name="opf.epub3.meta.content">
548
+ <interleave>
549
+ <ref name="opf.property.attr"/>
550
+ <optional>
551
+ <ref name="opf.refines.attr"/>
552
+ </optional>
553
+ <optional>
554
+ <ref name="opf.id.attr"/>
555
+ </optional>
556
+ <optional>
557
+ <ref name="opf.scheme.attr"/>
558
+ </optional>
559
+ <ref name="opf.i18n.attrs"/>
560
+ <ref name="datatype.string.nonempty"/>
561
+ </interleave>
562
+ </define>
563
+ <define name="opf.epub2.meta.content">
564
+ <interleave>
565
+ <attribute name="name"/>
566
+ <attribute name="content"/>
567
+ </interleave>
568
+ </define>
569
+ <!-- legacy -->
570
+ <define name="opf.link">
571
+ <element name="link">
572
+ <interleave>
573
+ <ref name="opf.href.attr"/>
574
+ <optional>
575
+ <ref name="opf.hreflang.attr"/>
576
+ </optional>
577
+ <ref name="opf.rel.attr"/>
578
+ <optional>
579
+ <ref name="opf.id.attr"/>
580
+ </optional>
581
+ <optional>
582
+ <ref name="opf.refines.attr"/>
583
+ </optional>
584
+ <optional>
585
+ <ref name="opf.media-type.attr"/>
586
+ </optional>
587
+ <optional>
588
+ <ref name="opf.properties.attr"/>
589
+ </optional>
590
+ </interleave>
591
+ </element>
592
+ </define>
593
+ <define name="opf.property.attr">
594
+ <attribute name="property">
595
+ <ref name="datatype.property"/>
596
+ </attribute>
597
+ </define>
598
+ <define name="opf.rel.attr">
599
+ <attribute name="rel">
600
+ <ref name="datatype.properties"/>
601
+ </attribute>
602
+ </define>
603
+ <define name="opf.hreflang.attr">
604
+ <attribute name="hreflang">
605
+ <choice>
606
+ <value/>
607
+ <ref name="datatype.languagecode"/>
608
+ </choice>
609
+ </attribute>
610
+ </define>
611
+ <define name="opf.scheme.attr">
612
+ <attribute name="scheme">
613
+ <ref name="datatype.property"/>
614
+ </attribute>
615
+ </define>
616
+ <define name="opf.refines.attr">
617
+ <attribute name="refines">
618
+ <ref name="datatype.URI"/>
619
+ </attribute>
620
+ </define>
621
+ <define name="opf.dc.identifier">
622
+ <element name="dc:identifier">
623
+ <interleave>
624
+ <optional>
625
+ <ref name="opf.id.attr"/>
626
+ </optional>
627
+ <ref name="datatype.string.nonempty"/>
628
+ </interleave>
629
+ </element>
630
+ </define>
631
+ <define name="opf.dc.title">
632
+ <element name="dc:title">
633
+ <interleave>
634
+ <ref name="opf.dc.attlist"/>
635
+ <ref name="datatype.string.nonempty"/>
636
+ </interleave>
637
+ </element>
638
+ </define>
639
+ <define name="opf.dc.language">
640
+ <element name="dc:language">
641
+ <interleave>
642
+ <optional>
643
+ <ref name="opf.id.attr"/>
644
+ </optional>
645
+ <ref name="datatype.string.nonempty"/>
646
+ </interleave>
647
+ </element>
648
+ </define>
649
+ <define name="opf.dc.date">
650
+ <element name="dc:date">
651
+ <interleave>
652
+ <optional>
653
+ <ref name="opf.id.attr"/>
654
+ </optional>
655
+ <ref name="datatype.string.nonempty"/>
656
+ </interleave>
657
+ </element>
658
+ </define>
659
+ <define name="opf.dc.source">
660
+ <element name="dc:source">
661
+ <interleave>
662
+ <ref name="opf.dc.attlist"/>
663
+ <ref name="datatype.string.nonempty"/>
664
+ </interleave>
665
+ </element>
666
+ </define>
667
+ <define name="opf.dc.type">
668
+ <element name="dc:type">
669
+ <interleave>
670
+ <optional>
671
+ <ref name="opf.id.attr"/>
672
+ </optional>
673
+ <ref name="datatype.string.nonempty"/>
674
+ </interleave>
675
+ </element>
676
+ </define>
677
+ <define name="opf.dc.format">
678
+ <element name="dc:format">
679
+ <interleave>
680
+ <optional>
681
+ <ref name="opf.id.attr"/>
682
+ </optional>
683
+ <ref name="datatype.string.nonempty"/>
684
+ </interleave>
685
+ </element>
686
+ </define>
687
+ <define name="opf.dc.creator">
688
+ <element name="dc:creator">
689
+ <interleave>
690
+ <ref name="opf.dc.attlist"/>
691
+ <ref name="datatype.string.nonempty"/>
692
+ </interleave>
693
+ </element>
694
+ </define>
695
+ <define name="opf.dc.subject">
696
+ <element name="dc:subject">
697
+ <interleave>
698
+ <ref name="opf.dc.attlist"/>
699
+ <ref name="datatype.string.nonempty"/>
700
+ </interleave>
701
+ </element>
702
+ </define>
703
+ <define name="opf.dc.description">
704
+ <element name="dc:description">
705
+ <interleave>
706
+ <ref name="opf.dc.attlist"/>
707
+ <ref name="datatype.string.nonempty"/>
708
+ </interleave>
709
+ </element>
710
+ </define>
711
+ <define name="opf.dc.publisher">
712
+ <element name="dc:publisher">
713
+ <interleave>
714
+ <ref name="opf.dc.attlist"/>
715
+ <ref name="datatype.string.nonempty"/>
716
+ </interleave>
717
+ </element>
718
+ </define>
719
+ <define name="opf.dc.contributor">
720
+ <element name="dc:contributor">
721
+ <interleave>
722
+ <ref name="opf.dc.attlist"/>
723
+ <ref name="datatype.string.nonempty"/>
724
+ </interleave>
725
+ </element>
726
+ </define>
727
+ <define name="opf.dc.relation">
728
+ <element name="dc:relation">
729
+ <interleave>
730
+ <ref name="opf.dc.attlist"/>
731
+ <ref name="datatype.string.nonempty"/>
732
+ </interleave>
733
+ </element>
734
+ </define>
735
+ <define name="opf.dc.coverage">
736
+ <element name="dc:coverage">
737
+ <interleave>
738
+ <ref name="opf.dc.attlist"/>
739
+ <ref name="datatype.string.nonempty"/>
740
+ </interleave>
741
+ </element>
742
+ </define>
743
+ <define name="opf.dc.rights">
744
+ <element name="dc:rights">
745
+ <interleave>
746
+ <ref name="opf.dc.attlist"/>
747
+ <ref name="datatype.string.nonempty"/>
748
+ </interleave>
749
+ </element>
750
+ </define>
751
+ <define name="opf.dc.elems">
752
+ <interleave>
753
+ <oneOrMore>
754
+ <ref name="opf.dc.identifier"/>
755
+ </oneOrMore>
756
+ <oneOrMore>
757
+ <ref name="opf.dc.title"/>
758
+ </oneOrMore>
759
+ <oneOrMore>
760
+ <ref name="opf.dc.language"/>
761
+ </oneOrMore>
762
+ <optional>
763
+ <ref name="opf.dc.date"/>
764
+ </optional>
765
+ <zeroOrMore>
766
+ <ref name="opf.dc.source"/>
767
+ </zeroOrMore>
768
+ <zeroOrMore>
769
+ <ref name="opf.dc.type"/>
770
+ </zeroOrMore>
771
+ <zeroOrMore>
772
+ <ref name="opf.dc.format"/>
773
+ </zeroOrMore>
774
+ <zeroOrMore>
775
+ <ref name="opf.dc.creator"/>
776
+ </zeroOrMore>
777
+ <zeroOrMore>
778
+ <ref name="opf.dc.subject"/>
779
+ </zeroOrMore>
780
+ <zeroOrMore>
781
+ <ref name="opf.dc.description"/>
782
+ </zeroOrMore>
783
+ <zeroOrMore>
784
+ <ref name="opf.dc.publisher"/>
785
+ </zeroOrMore>
786
+ <zeroOrMore>
787
+ <ref name="opf.dc.contributor"/>
788
+ </zeroOrMore>
789
+ <zeroOrMore>
790
+ <ref name="opf.dc.relation"/>
791
+ </zeroOrMore>
792
+ <zeroOrMore>
793
+ <ref name="opf.dc.coverage"/>
794
+ </zeroOrMore>
795
+ <zeroOrMore>
796
+ <ref name="opf.dc.rights"/>
797
+ </zeroOrMore>
798
+ </interleave>
799
+ </define>
800
+ <define name="opf.dc.attlist">
801
+ <interleave>
802
+ <optional>
803
+ <ref name="opf.id.attr"/>
804
+ </optional>
805
+ <ref name="opf.i18n.attrs"/>
806
+ </interleave>
807
+ </define>
808
+ <define name="opf.manifest">
809
+ <element name="manifest">
810
+ <interleave>
811
+ <ref name="opf.manifest.attlist"/>
812
+ <ref name="opf.manifest.content"/>
813
+ </interleave>
814
+ </element>
815
+ </define>
816
+ <define name="opf.manifest.attlist" combine="interleave">
817
+ <optional>
818
+ <ref name="opf.id.attr"/>
819
+ </optional>
820
+ </define>
821
+ <define name="opf.manifest.content">
822
+ <oneOrMore>
823
+ <ref name="opf.item"/>
824
+ </oneOrMore>
825
+ </define>
826
+ <define name="opf.item">
827
+ <element name="item">
828
+ <ref name="opf.item.attlist"/>
829
+ </element>
830
+ </define>
831
+ <define name="opf.item.attlist" combine="interleave">
832
+ <interleave>
833
+ <ref name="opf.id.attr"/>
834
+ <ref name="opf.href.attr"/>
835
+ <ref name="opf.media-type.attr"/>
836
+ <optional>
837
+ <ref name="opf.fallback.attr"/>
838
+ </optional>
839
+ <optional>
840
+ <ref name="opf.media-overlay.attr"/>
841
+ </optional>
842
+ <optional>
843
+ <ref name="opf.properties.attr"/>
844
+ </optional>
845
+ </interleave>
846
+ </define>
847
+ <define name="opf.fallback.attr">
848
+ <attribute name="fallback">
849
+ <ref name="datatype.IDREF"/>
850
+ </attribute>
851
+ </define>
852
+ <define name="opf.media-overlay.attr">
853
+ <attribute name="media-overlay">
854
+ <ref name="datatype.IDREF"/>
855
+ </attribute>
856
+ </define>
857
+ <define name="opf.properties.attr">
858
+ <attribute name="properties">
859
+ <ref name="datatype.properties"/>
860
+ </attribute>
861
+ </define>
862
+ <define name="opf.spine">
863
+ <element name="spine">
864
+ <interleave>
865
+ <ref name="opf.spine.attlist"/>
866
+ <ref name="opf.spine.content"/>
867
+ </interleave>
868
+ </element>
869
+ </define>
870
+ <define name="opf.spine.attlist" combine="interleave">
871
+ <interleave>
872
+ <optional>
873
+ <ref name="opf.id.attr"/>
874
+ </optional>
875
+ <optional>
876
+ <ref name="opf.spine.toc.attr"/>
877
+ </optional>
878
+ <optional>
879
+ <ref name="opf.ppd.attr"/>
880
+ </optional>
881
+ </interleave>
882
+ </define>
883
+ <define name="opf.spine.toc.attr">
884
+ <attribute name="toc">
885
+ <ref name="datatype.IDREF"/>
886
+ </attribute>
887
+ </define>
888
+ <define name="opf.ppd.attr">
889
+ <attribute name="page-progression-direction">
890
+ <choice>
891
+ <value>ltr</value>
892
+ <value>rtl</value>
893
+ <value>default</value>
894
+ </choice>
895
+ </attribute>
896
+ </define>
897
+ <define name="opf.spine.content">
898
+ <oneOrMore>
899
+ <ref name="opf.itemref"/>
900
+ </oneOrMore>
901
+ </define>
902
+ <define name="opf.itemref">
903
+ <element name="itemref">
904
+ <ref name="opf.itemref.attlist"/>
905
+ </element>
906
+ </define>
907
+ <define name="opf.itemref.attlist" combine="interleave">
908
+ <interleave>
909
+ <ref name="opf.itemref.idref.attr"/>
910
+ <optional>
911
+ <ref name="opf.itemref.linear.attr"/>
912
+ </optional>
913
+ <optional>
914
+ <ref name="opf.id.attr"/>
915
+ </optional>
916
+ <optional>
917
+ <ref name="opf.properties.attr"/>
918
+ </optional>
919
+ </interleave>
920
+ </define>
921
+ <define name="opf.itemref.idref.attr">
922
+ <attribute name="idref">
923
+ <ref name="datatype.IDREF"/>
924
+ </attribute>
925
+ </define>
926
+ <define name="opf.itemref.linear.attr">
927
+ <attribute name="linear">
928
+ <choice>
929
+ <value>yes</value>
930
+ <value>no</value>
931
+ </choice>
932
+ </attribute>
933
+ </define>
934
+ <define name="opf.guide">
935
+ <element name="guide">
936
+ <oneOrMore>
937
+ <ref name="opf.reference"/>
938
+ </oneOrMore>
939
+ </element>
940
+ </define>
941
+ <define name="opf.reference">
942
+ <element name="reference">
943
+ <interleave>
944
+ <ref name="opf.href.attr"/>
945
+ <attribute name="type">
946
+ <ref name="datatype.text"/>
947
+ </attribute>
948
+ <optional>
949
+ <attribute name="title">
950
+ <ref name="datatype.text"/>
951
+ </attribute>
952
+ </optional>
953
+ </interleave>
954
+ </element>
955
+ </define>
956
+ <define name="opf.bindings">
957
+ <element name="bindings">
958
+ <oneOrMore>
959
+ <ref name="opf.bindings.mediaType"/>
960
+ </oneOrMore>
961
+ </element>
962
+ </define>
963
+ <define name="opf.bindings.mediaType">
964
+ <element name="mediaType">
965
+ <ref name="opf.bindings.mediaType.attlist"/>
966
+ </element>
967
+ </define>
968
+ <define name="opf.bindings.mediaType.attlist" combine="interleave">
969
+ <interleave>
970
+ <ref name="opf.media-type.attr"/>
971
+ <attribute name="handler">
972
+ <ref name="datatype.IDREF"/>
973
+ </attribute>
974
+ </interleave>
975
+ </define>
976
+ <define name="opf.collection">
977
+ <element name="collection">
978
+ <ref name="opf.collection.attlist"/>
979
+ <ref name="opf.collection.content"/>
980
+ </element>
981
+ </define>
982
+ <define name="opf.collection.attlist" combine="interleave">
983
+ <interleave>
984
+ <optional>
985
+ <ref name="opf.id.attr"/>
986
+ </optional>
987
+ <optional>
988
+ <ref name="opf.dir.attr"/>
989
+ </optional>
990
+ <optional>
991
+ <ref name="opf.xml.lang.attr"/>
992
+ </optional>
993
+ <ref name="opf.collection.role.attr"/>
994
+ </interleave>
995
+ </define>
996
+ <define name="opf.collection.role.attr">
997
+ <attribute name="role">
998
+ <ref name="datatype.space.separated.tokens"/>
999
+ </attribute>
1000
+ </define>
1001
+ <define name="opf.collection.content">
1002
+ <optional>
1003
+ <ref name="opf.collection.metadata"/>
1004
+ </optional>
1005
+ <choice>
1006
+ <oneOrMore>
1007
+ <ref name="opf.collection"/>
1008
+ </oneOrMore>
1009
+ <group>
1010
+ <zeroOrMore>
1011
+ <ref name="opf.collection"/>
1012
+ </zeroOrMore>
1013
+ <oneOrMore>
1014
+ <ref name="opf.collection.link"/>
1015
+ </oneOrMore>
1016
+ </group>
1017
+ </choice>
1018
+ </define>
1019
+ <define name="opf.collection.metadata">
1020
+ <element name="metadata">
1021
+ <interleave>
1022
+ <optional>
1023
+ <ref name="opf.id.attr"/>
1024
+ </optional>
1025
+ <ref name="opf.i18n.attrs"/>
1026
+ <ref name="opf.collection.metadata.content"/>
1027
+ </interleave>
1028
+ </element>
1029
+ </define>
1030
+ <define name="opf.collection.metadata.content">
1031
+ <interleave>
1032
+ <ref name="opf.collection.dc.elems"/>
1033
+ <zeroOrMore>
1034
+ <ref name="opf.collection.meta"/>
1035
+ </zeroOrMore>
1036
+ <zeroOrMore>
1037
+ <ref name="opf.link"/>
1038
+ </zeroOrMore>
1039
+ </interleave>
1040
+ </define>
1041
+ <define name="opf.collection.dc.elems">
1042
+ <interleave>
1043
+ <zeroOrMore>
1044
+ <ref name="opf.dc.identifier"/>
1045
+ </zeroOrMore>
1046
+ <zeroOrMore>
1047
+ <ref name="opf.dc.title"/>
1048
+ </zeroOrMore>
1049
+ <zeroOrMore>
1050
+ <ref name="opf.dc.language"/>
1051
+ </zeroOrMore>
1052
+ <zeroOrMore>
1053
+ <ref name="opf.dc.date"/>
1054
+ </zeroOrMore>
1055
+ <zeroOrMore>
1056
+ <ref name="opf.dc.source"/>
1057
+ </zeroOrMore>
1058
+ <zeroOrMore>
1059
+ <ref name="opf.dc.type"/>
1060
+ </zeroOrMore>
1061
+ <zeroOrMore>
1062
+ <ref name="opf.dc.format"/>
1063
+ </zeroOrMore>
1064
+ <zeroOrMore>
1065
+ <ref name="opf.dc.creator"/>
1066
+ </zeroOrMore>
1067
+ <zeroOrMore>
1068
+ <ref name="opf.dc.subject"/>
1069
+ </zeroOrMore>
1070
+ <zeroOrMore>
1071
+ <ref name="opf.dc.description"/>
1072
+ </zeroOrMore>
1073
+ <zeroOrMore>
1074
+ <ref name="opf.dc.publisher"/>
1075
+ </zeroOrMore>
1076
+ <zeroOrMore>
1077
+ <ref name="opf.dc.contributor"/>
1078
+ </zeroOrMore>
1079
+ <zeroOrMore>
1080
+ <ref name="opf.dc.relation"/>
1081
+ </zeroOrMore>
1082
+ <zeroOrMore>
1083
+ <ref name="opf.dc.coverage"/>
1084
+ </zeroOrMore>
1085
+ <zeroOrMore>
1086
+ <ref name="opf.dc.rights"/>
1087
+ </zeroOrMore>
1088
+ </interleave>
1089
+ </define>
1090
+ <define name="opf.collection.meta">
1091
+ <element name="meta">
1092
+ <ref name="opf.epub3.meta.content"/>
1093
+ </element>
1094
+ </define>
1095
+ <define name="opf.collection.link">
1096
+ <element name="link">
1097
+ <interleave>
1098
+ <ref name="opf.href.attr"/>
1099
+ <optional>
1100
+ <ref name="opf.rel.attr"/>
1101
+ </optional>
1102
+ <optional>
1103
+ <ref name="opf.id.attr"/>
1104
+ </optional>
1105
+ <optional>
1106
+ <ref name="opf.media-type.attr"/>
1107
+ </optional>
1108
+ </interleave>
1109
+ </element>
1110
+ </define>
1111
+ <define name="opf.media-type.attr">
1112
+ <attribute name="media-type">
1113
+ <ref name="datatype.mimetype"/>
1114
+ </attribute>
1115
+ </define>
1116
+ <define name="opf.href.attr">
1117
+ <attribute name="href">
1118
+ <ref name="datatype.URI"/>
1119
+ </attribute>
1120
+ </define>
1121
+ <define name="opf.id.attr">
1122
+ <attribute name="id">
1123
+ <ref name="datatype.ID"/>
1124
+ </attribute>
1125
+ </define>
1126
+ <define name="opf.i18n.attrs">
1127
+ <interleave>
1128
+ <optional>
1129
+ <ref name="opf.xml.lang.attr"/>
1130
+ </optional>
1131
+ <optional>
1132
+ <ref name="opf.dir.attr"/>
1133
+ </optional>
1134
+ </interleave>
1135
+ </define>
1136
+ <define name="opf.xml.lang.attr">
1137
+ <attribute name="xml:lang">
1138
+ <choice>
1139
+ <value/>
1140
+ <ref name="datatype.languagecode"/>
1141
+ </choice>
1142
+ </attribute>
1143
+ </define>
1144
+ <define name="opf.dir.attr">
1145
+ <attribute name="dir">
1146
+ <choice>
1147
+ <value>ltr</value>
1148
+ <value>rtl</value>
1149
+ <value>auto</value>
1150
+ </choice>
1151
+ </attribute>
1152
+ </define>
1153
+ </grammar>