metanorma-iso 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. checksums.yaml +7 -0
  2. data/.gitattributes +4 -0
  3. data/.gitignore +11 -0
  4. data/.hound.yml +3 -0
  5. data/.oss-guides.rubocop.yml +1077 -0
  6. data/.rubocop.ribose.yml +66 -0
  7. data/.rubocop.tb.yml +650 -0
  8. data/.rubocop.yml +15 -0
  9. data/.travis.yml +21 -0
  10. data/CODE_OF_CONDUCT.md +46 -0
  11. data/Gemfile +7 -0
  12. data/LICENSE +25 -0
  13. data/Makefile +39 -0
  14. data/README.adoc +882 -0
  15. data/Rakefile +6 -0
  16. data/asciidoctor-iso.gemspec.old +50 -0
  17. data/bin/rspec +18 -0
  18. data/docs/customisation.adoc +186 -0
  19. data/docs/guidance.adoc +436 -0
  20. data/docs/htmloutput.adoc +115 -0
  21. data/docs/quickstart.adoc +375 -0
  22. data/lib/asciidoctor-iso.rb +11 -0
  23. data/lib/asciidoctor/iso/base.rb +48 -0
  24. data/lib/asciidoctor/iso/biblio.rng +836 -0
  25. data/lib/asciidoctor/iso/cleanup.rb +39 -0
  26. data/lib/asciidoctor/iso/converter.rb +19 -0
  27. data/lib/asciidoctor/iso/front.rb +131 -0
  28. data/lib/asciidoctor/iso/isodoc.rng +1059 -0
  29. data/lib/asciidoctor/iso/isostandard.rnc +176 -0
  30. data/lib/asciidoctor/iso/isostandard.rng +1001 -0
  31. data/lib/asciidoctor/iso/section.rb +72 -0
  32. data/lib/asciidoctor/iso/validate.rb +190 -0
  33. data/lib/asciidoctor/iso/validate_requirements.rb +105 -0
  34. data/lib/asciidoctor/iso/validate_section.rb +214 -0
  35. data/lib/asciidoctor/iso/validate_style.rb +134 -0
  36. data/lib/asciidoctor/iso/version.rb +5 -0
  37. data/lib/isodoc/iso/html/header.html +206 -0
  38. data/lib/isodoc/iso/html/html_iso_intro.html +34 -0
  39. data/lib/isodoc/iso/html/html_iso_titlepage.html +34 -0
  40. data/lib/isodoc/iso/html/htmlstyle.scss +46 -0
  41. data/lib/isodoc/iso/html/isodoc.scss +696 -0
  42. data/lib/isodoc/iso/html/scripts.html +174 -0
  43. data/lib/isodoc/iso/html/style-human.scss +1277 -0
  44. data/lib/isodoc/iso/html/style-iso.scss +1257 -0
  45. data/lib/isodoc/iso/html/word_iso_intro.html +72 -0
  46. data/lib/isodoc/iso/html/word_iso_titlepage.html +62 -0
  47. data/lib/isodoc/iso/html/wordstyle.scss +1175 -0
  48. data/lib/isodoc/iso/html_convert.rb +118 -0
  49. data/lib/isodoc/iso/metadata.rb +107 -0
  50. data/lib/isodoc/iso/word_convert.rb +141 -0
  51. data/lib/metanorma/iso.rb +7 -0
  52. data/lib/metanorma/iso/processor.rb +44 -0
  53. data/spec/asciidoctor-iso/base_spec.rb +350 -0
  54. data/spec/asciidoctor-iso/blocks_spec.rb +469 -0
  55. data/spec/asciidoctor-iso/cleanup_spec.rb +765 -0
  56. data/spec/asciidoctor-iso/inline_spec.rb +162 -0
  57. data/spec/asciidoctor-iso/isobib_cache_spec.rb +332 -0
  58. data/spec/asciidoctor-iso/lists_spec.rb +190 -0
  59. data/spec/asciidoctor-iso/macros_spec.rb +111 -0
  60. data/spec/asciidoctor-iso/refs_spec.rb +643 -0
  61. data/spec/asciidoctor-iso/section_spec.rb +334 -0
  62. data/spec/asciidoctor-iso/table_spec.rb +307 -0
  63. data/spec/asciidoctor-iso/validate_spec.rb +907 -0
  64. data/spec/assets/header.html +7 -0
  65. data/spec/assets/html.css +2 -0
  66. data/spec/assets/htmlcover.html +4 -0
  67. data/spec/assets/htmlintro.html +5 -0
  68. data/spec/assets/i18n.yaml +2 -0
  69. data/spec/assets/iso.doc +1093 -0
  70. data/spec/assets/iso.headless.html +33 -0
  71. data/spec/assets/iso.html +278 -0
  72. data/spec/assets/iso.xml +8 -0
  73. data/spec/assets/rice_image1.png +0 -0
  74. data/spec/assets/scripts.html +3 -0
  75. data/spec/assets/std.css +2 -0
  76. data/spec/assets/word.css +2 -0
  77. data/spec/assets/wordcover.html +3 -0
  78. data/spec/assets/wordintro.html +4 -0
  79. data/spec/examples/103_01_02.html +247 -0
  80. data/spec/examples/english.yaml +69 -0
  81. data/spec/examples/iso_123_.xml +45 -0
  82. data/spec/examples/iso_123_all_parts.xml +45 -0
  83. data/spec/examples/iso_123_no_year_note.xml +46 -0
  84. data/spec/examples/iso_124_.xml +41 -0
  85. data/spec/examples/iso_216_.xml +47 -0
  86. data/spec/examples/iso_iec_12382_.xml +48 -0
  87. data/spec/examples/rice.adoc +715 -0
  88. data/spec/examples/rice.preview.html +1877 -0
  89. data/spec/examples/rice.sh +4 -0
  90. data/spec/examples/rice_images/rice_image1.png +0 -0
  91. data/spec/examples/rice_images/rice_image2.png +0 -0
  92. data/spec/examples/rice_images/rice_image3_1.png +0 -0
  93. data/spec/examples/rice_images/rice_image3_2.png +0 -0
  94. data/spec/examples/rice_images/rice_image3_3.png +0 -0
  95. data/spec/isodoc/i18n_spec.rb +642 -0
  96. data/spec/isodoc/iso_spec.rb +168 -0
  97. data/spec/isodoc/metadata_spec.rb +152 -0
  98. data/spec/isodoc/postproc_spec.rb +405 -0
  99. data/spec/isodoc/section_spec.rb +522 -0
  100. data/spec/isodoc/xref_spec.rb +1337 -0
  101. data/spec/metanorma/processor_spec.rb +70 -0
  102. data/spec/spec_helper.rb +227 -0
  103. metadata +402 -0
@@ -0,0 +1,11 @@
1
+ require "asciidoctor" unless defined? Asciidoctor::Converter
2
+ require_relative "asciidoctor/iso/converter"
3
+ require_relative "asciidoctor/iso/version"
4
+ require_relative "isodoc/iso/html_convert"
5
+ require_relative "isodoc/iso/word_convert"
6
+ require "asciidoctor/extensions"
7
+
8
+ if defined? Metanorma
9
+ require_relative "metanorma/iso"
10
+ Metanorma::Registry.instance.register(Metanorma::Iso::Processor)
11
+ end
@@ -0,0 +1,48 @@
1
+ require "date"
2
+ require "nokogiri"
3
+ require "json"
4
+ require "pathname"
5
+ require "open-uri"
6
+ require "pp"
7
+ require "isodoc"
8
+
9
+ module Asciidoctor
10
+ module ISO
11
+ class Converter < Standoc::Converter
12
+ def html_converter(node)
13
+ IsoDoc::Iso::HtmlConvert.new(html_extract_attributes(node))
14
+ end
15
+
16
+ def html_converter_alt(node)
17
+ IsoDoc::Iso::HtmlConvert.new(html_extract_attributes(node).
18
+ merge(alt: true))
19
+ end
20
+
21
+ def doc_converter(node)
22
+ IsoDoc::Iso::WordConvert.new(doc_extract_attributes(node))
23
+ end
24
+
25
+ def document(node)
26
+ init(node)
27
+ ret = makexml(node).to_xml(indent: 2)
28
+ unless node.attr("nodoc") || !node.attr("docfile")
29
+ File.open(@filename + ".xml", "w:UTF-8") { |f| f.write(ret) }
30
+ html_converter_alt(node).convert(@filename + ".xml")
31
+ system "mv #{@filename}.html #{@filename}_alt.html"
32
+ html_converter(node).convert(@filename + ".xml")
33
+ doc_converter(node).convert(@filename + ".xml")
34
+ end
35
+ @files_to_delete.each { |f| system "rm #{f}" }
36
+ ret
37
+ end
38
+
39
+ def makexml1(node)
40
+ result = ["<?xml version='1.0' encoding='UTF-8'?>\n<iso-standard>"]
41
+ result << noko { |ixml| front node, ixml }
42
+ result << noko { |ixml| middle node, ixml }
43
+ result << "</iso-standard>"
44
+ textcleanup(result.flatten * "\n")
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,836 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ instantiations of this grammar may replace leaf strings
4
+ with more elaborated types; e.g. title (text) replaced with
5
+ title-main, title-intro, title-part; type replaced with
6
+ enum.
7
+
8
+ some renaming at leaf nodes is permissible
9
+
10
+ obligations can change both from optional to mandatory,
11
+ and from mandatory to optional; optional elements may
12
+ be omitted; freely positioned alternatives may be replaced
13
+ with strict ordering
14
+
15
+ DO NOT introduce a namespace here. We do not want a distinct namespace
16
+ for these elements, and a distinct namespace for any grammar inheriting
17
+ these elements; we just want one namespace for any child grammars
18
+ of this.
19
+ -->
20
+ <grammar xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
21
+ <define name="status">
22
+ <element name="status">
23
+ <ref name="LocalizedString"/>
24
+ </element>
25
+ </define>
26
+ <define name="language">
27
+ <element name="language">
28
+ <text/>
29
+ </element>
30
+ </define>
31
+ <define name="script">
32
+ <a:documentation>ISO-639</a:documentation>
33
+ <element name="script">
34
+ <text/>
35
+ </element>
36
+ </define>
37
+ <define name="edition">
38
+ <a:documentation>ISO-15924: Latn</a:documentation>
39
+ <element name="edition">
40
+ <text/>
41
+ </element>
42
+ </define>
43
+ <define name="LocalizedString">
44
+ <optional>
45
+ <!-- multiple languages and scripts possible: comma delimit them if so -->
46
+ <attribute name="language"/>
47
+ </optional>
48
+ <optional>
49
+ <attribute name="script"/>
50
+ </optional>
51
+ <text/>
52
+ </define>
53
+ <!--
54
+ Unlike UML, change type to format: type is overloaded
55
+ Would be need if plain were default value and could omit the attribute
56
+ Added LocalizedStringOrXsAny
57
+ -->
58
+ <define name="FormattedString">
59
+ <optional>
60
+ <!-- attribute format { ( "plain" | "html" | "docbook" | "tei" | "asciidoc" | "markdown" ) }?, -->
61
+ <attribute name="format">
62
+ <choice>
63
+ <value>text/plain</value>
64
+ <value>text/html</value>
65
+ <value>application/docbook+xml</value>
66
+ <value>application/tei+xml</value>
67
+ <value>text/x-asciidoc</value>
68
+ <value>text/markdown</value>
69
+ <value>application/x-isodoc+xml</value>
70
+ <text/>
71
+ </choice>
72
+ </attribute>
73
+ </optional>
74
+ <ref name="LocalizedStringOrXsAny"/>
75
+ </define>
76
+ <define name="LocalizedStringOrXsAny">
77
+ <optional>
78
+ <!-- multiple languages and scripts possible: comma delimit them if so -->
79
+ <attribute name="language"/>
80
+ </optional>
81
+ <optional>
82
+ <attribute name="script"/>
83
+ </optional>
84
+ <oneOrMore>
85
+ <choice>
86
+ <text/>
87
+ <ref name="AnyElement"/>
88
+ </choice>
89
+ </oneOrMore>
90
+ </define>
91
+ <define name="contributor">
92
+ <element name="contributor">
93
+ <zeroOrMore>
94
+ <ref name="role"/>
95
+ </zeroOrMore>
96
+ <ref name="ContributorInfo"/>
97
+ </element>
98
+ </define>
99
+ <define name="role">
100
+ <element name="role">
101
+ <optional>
102
+ <attribute name="type">
103
+ <choice>
104
+ <value>author</value>
105
+ <value>performer</value>
106
+ <value>publisher</value>
107
+ <value>editor</value>
108
+ <value>adapter</value>
109
+ <value>translator</value>
110
+ <value>distributor</value>
111
+ </choice>
112
+ </attribute>
113
+ </optional>
114
+ <zeroOrMore>
115
+ <ref name="roledescription"/>
116
+ </zeroOrMore>
117
+ </element>
118
+ </define>
119
+ <define name="ContributorInfo">
120
+ <choice>
121
+ <ref name="person"/>
122
+ <ref name="organization"/>
123
+ </choice>
124
+ </define>
125
+ <define name="roledescription">
126
+ <element name="description">
127
+ <ref name="FormattedString"/>
128
+ </element>
129
+ </define>
130
+ <define name="person">
131
+ <element name="person">
132
+ <optional>
133
+ <ref name="fullname"/>
134
+ </optional>
135
+ <zeroOrMore>
136
+ <ref name="affiliation"/>
137
+ </zeroOrMore>
138
+ <zeroOrMore>
139
+ <ref name="person-identifier"/>
140
+ </zeroOrMore>
141
+ <zeroOrMore>
142
+ <ref name="contact"/>
143
+ </zeroOrMore>
144
+ <optional>
145
+ <ref name="uri"/>
146
+ </optional>
147
+ </element>
148
+ </define>
149
+ <define name="fullname">
150
+ <element name="name">
151
+ <choice>
152
+ <group>
153
+ <zeroOrMore>
154
+ <ref name="prefix"/>
155
+ </zeroOrMore>
156
+ <zeroOrMore>
157
+ <ref name="forename"/>
158
+ </zeroOrMore>
159
+ <zeroOrMore>
160
+ <ref name="initial"/>
161
+ </zeroOrMore>
162
+ <ref name="surname"/>
163
+ <zeroOrMore>
164
+ <ref name="addition"/>
165
+ </zeroOrMore>
166
+ </group>
167
+ <ref name="completeName"/>
168
+ </choice>
169
+ <zeroOrMore>
170
+ <ref name="biblionote"/>
171
+ </zeroOrMore>
172
+ </element>
173
+ </define>
174
+ <define name="prefix">
175
+ <element name="prefix">
176
+ <ref name="LocalizedString"/>
177
+ </element>
178
+ </define>
179
+ <define name="initial">
180
+ <element name="initial">
181
+ <ref name="LocalizedString"/>
182
+ </element>
183
+ </define>
184
+ <define name="addition">
185
+ <element name="addition">
186
+ <ref name="LocalizedString"/>
187
+ </element>
188
+ </define>
189
+ <define name="surname">
190
+ <element name="surname">
191
+ <ref name="LocalizedString"/>
192
+ </element>
193
+ </define>
194
+ <define name="forename">
195
+ <element name="forename">
196
+ <ref name="LocalizedString"/>
197
+ </element>
198
+ </define>
199
+ <define name="completeName">
200
+ <element name="completename">
201
+ <ref name="LocalizedString"/>
202
+ </element>
203
+ </define>
204
+ <define name="affiliation">
205
+ <element name="affiliation">
206
+ <optional>
207
+ <ref name="affiliationname"/>
208
+ </optional>
209
+ <zeroOrMore>
210
+ <ref name="affiliationdescription"/>
211
+ </zeroOrMore>
212
+ <ref name="organization"/>
213
+ </element>
214
+ </define>
215
+ <define name="affiliationname">
216
+ <element name="name">
217
+ <ref name="LocalizedString"/>
218
+ </element>
219
+ </define>
220
+ <define name="affiliationdescription">
221
+ <element name="description">
222
+ <ref name="FormattedString"/>
223
+ </element>
224
+ </define>
225
+ <define name="organization">
226
+ <element name="organization">
227
+ <ref name="orgname"/>
228
+ <optional>
229
+ <ref name="subdivision"/>
230
+ </optional>
231
+ <optional>
232
+ <ref name="abbreviation"/>
233
+ </optional>
234
+ <optional>
235
+ <ref name="uri"/>
236
+ </optional>
237
+ <zeroOrMore>
238
+ <ref name="org-identifier"/>
239
+ </zeroOrMore>
240
+ <zeroOrMore>
241
+ <ref name="contact"/>
242
+ </zeroOrMore>
243
+ </element>
244
+ </define>
245
+ <define name="orgname">
246
+ <element name="name">
247
+ <ref name="LocalizedString"/>
248
+ </element>
249
+ </define>
250
+ <define name="subdivision">
251
+ <element name="subdivision">
252
+ <ref name="LocalizedString"/>
253
+ </element>
254
+ </define>
255
+ <define name="abbreviation">
256
+ <element name="abbreviation">
257
+ <ref name="LocalizedString"/>
258
+ </element>
259
+ </define>
260
+ <define name="uri">
261
+ <element name="uri">
262
+ <data type="anyURI"/>
263
+ </element>
264
+ </define>
265
+ <!-- TODO may change -->
266
+ <define name="contact">
267
+ <choice>
268
+ <ref name="address"/>
269
+ <ref name="phone"/>
270
+ <ref name="email"/>
271
+ <ref name="uri"/>
272
+ </choice>
273
+ </define>
274
+ <define name="phone">
275
+ <element name="phone">
276
+ <text/>
277
+ </element>
278
+ </define>
279
+ <define name="email">
280
+ <element name="email">
281
+ <text/>
282
+ </element>
283
+ </define>
284
+ <define name="address">
285
+ <element name="address">
286
+ <oneOrMore>
287
+ <!-- iso191606 TODO -->
288
+ <ref name="street"/>
289
+ </oneOrMore>
290
+ <ref name="city"/>
291
+ <optional>
292
+ <ref name="state"/>
293
+ </optional>
294
+ <ref name="country"/>
295
+ <optional>
296
+ <ref name="postcode"/>
297
+ </optional>
298
+ </element>
299
+ </define>
300
+ <define name="street">
301
+ <element name="street">
302
+ <text/>
303
+ </element>
304
+ </define>
305
+ <define name="city">
306
+ <element name="city">
307
+ <text/>
308
+ </element>
309
+ </define>
310
+ <define name="state">
311
+ <element name="state">
312
+ <text/>
313
+ </element>
314
+ </define>
315
+ <define name="country">
316
+ <element name="country">
317
+ <text/>
318
+ </element>
319
+ </define>
320
+ <define name="postcode">
321
+ <element name="postcode">
322
+ <text/>
323
+ </element>
324
+ </define>
325
+ <define name="person-identifier">
326
+ <element name="identifier">
327
+ <attribute name="type">
328
+ <choice>
329
+ <value>isni</value>
330
+ <value>uri</value>
331
+ </choice>
332
+ </attribute>
333
+ <text/>
334
+ </element>
335
+ </define>
336
+ <define name="org-identifier">
337
+ <element name="identifier">
338
+ <attribute name="type">
339
+ <choice>
340
+ <value>orcid</value>
341
+ <value>uri</value>
342
+ </choice>
343
+ </attribute>
344
+ <text/>
345
+ </element>
346
+ </define>
347
+ <define name="citation">
348
+ <element name="citation">
349
+ <ref name="CitationType"/>
350
+ </element>
351
+ </define>
352
+ <define name="CitationType">
353
+ <attribute name="bibitemid">
354
+ <data type="IDREF"/>
355
+ </attribute>
356
+ <zeroOrMore>
357
+ <ref name="locality"/>
358
+ </zeroOrMore>
359
+ <optional>
360
+ <ref name="date"/>
361
+ </optional>
362
+ </define>
363
+ <define name="date">
364
+ <element name="date">
365
+ <choice>
366
+ <data type="gYear"/>
367
+ <data type="date"/>
368
+ </choice>
369
+ </element>
370
+ </define>
371
+ <define name="locality">
372
+ <element name="locality">
373
+ <ref name="BibItemLocality"/>
374
+ </element>
375
+ </define>
376
+ <define name="BibItemLocality">
377
+ <attribute name="type">
378
+ <ref name="LocalityType"/>
379
+ </attribute>
380
+ <ref name="referenceFrom"/>
381
+ <optional>
382
+ <ref name="referenceTo"/>
383
+ </optional>
384
+ </define>
385
+ <define name="LocalityType">
386
+ <data type="string">
387
+ <param name="pattern">section|clause|part|paragraph|chapter|page|whole|table|annex|figure|note|example|volume|issue|locality:[a-zA-Z0-9_]+</param>
388
+ </data>
389
+ </define>
390
+ <define name="referenceFrom">
391
+ <element name="referenceFrom">
392
+ <text/>
393
+ </element>
394
+ </define>
395
+ <define name="referenceTo">
396
+ <element name="referenceTo">
397
+ <text/>
398
+ </element>
399
+ </define>
400
+ <!-- unlike UML, has id attribute; that results from including bibitem in a docmodel -->
401
+ <define name="bibitem">
402
+ <element name="bibitem">
403
+ <attribute name="id">
404
+ <data type="ID"/>
405
+ </attribute>
406
+ <ref name="BibliographicItem"/>
407
+ </element>
408
+ </define>
409
+ <define name="bibitem_no_id">
410
+ <element name="bibitem">
411
+ <ref name="BibliographicItem"/>
412
+ </element>
413
+ </define>
414
+ <define name="BibItemType" combine="choice">
415
+ <choice>
416
+ <value>article</value>
417
+ <value>book</value>
418
+ <value>booklet</value>
419
+ <value>conference</value>
420
+ <value>manual</value>
421
+ <value>proceedings</value>
422
+ <value>presentation</value>
423
+ <value>thesis</value>
424
+ <value>techreport</value>
425
+ <value>standard</value>
426
+ <value>unpublished</value>
427
+ <value>map</value>
428
+ <value>electronic resource</value>
429
+ <value>audiovisual</value>
430
+ <value>film</value>
431
+ <value>video</value>
432
+ <value>broadcast</value>
433
+ <value>graphic work</value>
434
+ <value>music</value>
435
+ <value>patent</value>
436
+ <value>inbook</value>
437
+ <value>incollection</value>
438
+ <value>inproceedings</value>
439
+ </choice>
440
+ </define>
441
+ <define name="BibliographicItem">
442
+ <optional>
443
+ <attribute name="type">
444
+ <ref name="BibItemType"/>
445
+ </attribute>
446
+ </optional>
447
+ <choice>
448
+ <oneOrMore>
449
+ <ref name="btitle"/>
450
+ </oneOrMore>
451
+ <ref name="formattedref"/>
452
+ </choice>
453
+ <zeroOrMore>
454
+ <ref name="bsource"/>
455
+ </zeroOrMore>
456
+ <zeroOrMore>
457
+ <ref name="docidentifier"/>
458
+ </zeroOrMore>
459
+ <zeroOrMore>
460
+ <ref name="bdate"/>
461
+ </zeroOrMore>
462
+ <zeroOrMore>
463
+ <ref name="contributor"/>
464
+ </zeroOrMore>
465
+ <optional>
466
+ <ref name="edition"/>
467
+ </optional>
468
+ <zeroOrMore>
469
+ <ref name="biblionote"/>
470
+ </zeroOrMore>
471
+ <zeroOrMore>
472
+ <ref name="language"/>
473
+ </zeroOrMore>
474
+ <zeroOrMore>
475
+ <ref name="script"/>
476
+ </zeroOrMore>
477
+ <optional>
478
+ <ref name="abstract"/>
479
+ </optional>
480
+ <optional>
481
+ <ref name="status"/>
482
+ </optional>
483
+ <optional>
484
+ <ref name="copyright"/>
485
+ </optional>
486
+ <zeroOrMore>
487
+ <ref name="docrelation"/>
488
+ </zeroOrMore>
489
+ <zeroOrMore>
490
+ <ref name="series"/>
491
+ </zeroOrMore>
492
+ <optional>
493
+ <ref name="medium"/>
494
+ </optional>
495
+ <zeroOrMore>
496
+ <ref name="bplace"/>
497
+ </zeroOrMore>
498
+ <zeroOrMore>
499
+ <ref name="extent"/>
500
+ </zeroOrMore>
501
+ <zeroOrMore>
502
+ <ref name="accesslocation"/>
503
+ </zeroOrMore>
504
+ <optional>
505
+ <ref name="bclassification"/>
506
+ </optional>
507
+ <optional>
508
+ <ref name="validity"/>
509
+ </optional>
510
+ </define>
511
+ <define name="btitle">
512
+ <element name="title">
513
+ <ref name="TypedTitleString"/>
514
+ </element>
515
+ </define>
516
+ <define name="bsource">
517
+ <element name="uri">
518
+ <ref name="TypedUri"/>
519
+ </element>
520
+ </define>
521
+ <define name="formattedref">
522
+ <element name="formattedref">
523
+ <ref name="FormattedString"/>
524
+ </element>
525
+ </define>
526
+ <define name="validity">
527
+ <element name="validity">
528
+ <optional>
529
+ <ref name="validityBegins"/>
530
+ </optional>
531
+ <optional>
532
+ <ref name="validityEnds"/>
533
+ </optional>
534
+ <optional>
535
+ <ref name="validityRevision"/>
536
+ </optional>
537
+ </element>
538
+ </define>
539
+ <define name="validityBegins">
540
+ <element name="validityBegins">
541
+ <data type="dateTime"/>
542
+ </element>
543
+ </define>
544
+ <define name="validityEnds">
545
+ <element name="validityEnds">
546
+ <data type="dateTime"/>
547
+ </element>
548
+ </define>
549
+ <define name="validityRevision">
550
+ <element name="revision">
551
+ <data type="dateTime"/>
552
+ </element>
553
+ </define>
554
+ <define name="TypedTitleString">
555
+ <optional>
556
+ <attribute name="type">
557
+ <ref name="TitleType"/>
558
+ </attribute>
559
+ </optional>
560
+ <ref name="FormattedString"/>
561
+ </define>
562
+ <define name="TitleType">
563
+ <choice>
564
+ <value>alternative</value>
565
+ <value>original</value>
566
+ <value>unofficial</value>
567
+ <value>subtitle</value>
568
+ <value>main</value>
569
+ </choice>
570
+ </define>
571
+ <define name="TypedUri">
572
+ <optional>
573
+ <attribute name="type"/>
574
+ </optional>
575
+ <data type="anyURI"/>
576
+ </define>
577
+ <define name="DateType">
578
+ <optional>
579
+ <attribute name="text"/>
580
+ </optional>
581
+ <optional>
582
+ <choice>
583
+ <data type="gYear"/>
584
+ <data type="date"/>
585
+ </choice>
586
+ </optional>
587
+ </define>
588
+ <define name="bdate">
589
+ <element name="date">
590
+ <attribute name="type">
591
+ <choice>
592
+ <value>published</value>
593
+ <value>accessed</value>
594
+ <value>created</value>
595
+ <value>implemented</value>
596
+ <value>obsoleted</value>
597
+ <value>confirmed</value>
598
+ <value>updated</value>
599
+ <value>issued</value>
600
+ <value>transmitted</value>
601
+ <value>copied</value>
602
+ </choice>
603
+ </attribute>
604
+ <choice>
605
+ <group>
606
+ <element name="from">
607
+ <choice>
608
+ <data type="gYear"/>
609
+ <data type="date"/>
610
+ </choice>
611
+ </element>
612
+ <optional>
613
+ <element name="to">
614
+ <choice>
615
+ <data type="gYear"/>
616
+ <data type="date"/>
617
+ </choice>
618
+ </element>
619
+ </optional>
620
+ </group>
621
+ <element name="on">
622
+ <choice>
623
+ <data type="gYear"/>
624
+ <data type="date"/>
625
+ </choice>
626
+ </element>
627
+ </choice>
628
+ </element>
629
+ </define>
630
+ <define name="docidentifier">
631
+ <element name="docidentifier">
632
+ <optional>
633
+ <attribute name="type"/>
634
+ </optional>
635
+ <text/>
636
+ </element>
637
+ </define>
638
+ <define name="bclassification">
639
+ <element name="classification">
640
+ <optional>
641
+ <attribute name="type"/>
642
+ </optional>
643
+ <text/>
644
+ </element>
645
+ </define>
646
+ <define name="bplace">
647
+ <element name="place">
648
+ <text/>
649
+ </element>
650
+ </define>
651
+ <define name="medium">
652
+ <element name="medium">
653
+ <optional>
654
+ <ref name="form"/>
655
+ </optional>
656
+ <optional>
657
+ <ref name="size"/>
658
+ </optional>
659
+ <optional>
660
+ <ref name="scale"/>
661
+ </optional>
662
+ </element>
663
+ </define>
664
+ <define name="form">
665
+ <element name="form">
666
+ <text/>
667
+ </element>
668
+ </define>
669
+ <define name="size">
670
+ <element name="size">
671
+ <text/>
672
+ </element>
673
+ </define>
674
+ <define name="scale">
675
+ <element name="scale">
676
+ <text/>
677
+ </element>
678
+ </define>
679
+ <define name="accesslocation">
680
+ <element name="accesslocation">
681
+ <text/>
682
+ </element>
683
+ </define>
684
+ <define name="extent">
685
+ <element name="extent">
686
+ <ref name="BibItemLocality"/>
687
+ </element>
688
+ </define>
689
+ <define name="series">
690
+ <element name="series">
691
+ <optional>
692
+ <attribute name="type">
693
+ <choice>
694
+ <value>main</value>
695
+ <value>alt</value>
696
+ </choice>
697
+ </attribute>
698
+ </optional>
699
+ <choice>
700
+ <ref name="btitle"/>
701
+ <ref name="formattedref"/>
702
+ </choice>
703
+ <ref name="bplace"/>
704
+ <ref name="seriesorganization"/>
705
+ <optional>
706
+ <ref name="abbreviation"/>
707
+ </optional>
708
+ <optional>
709
+ <ref name="seriesfrom"/>
710
+ </optional>
711
+ <optional>
712
+ <ref name="seriesto"/>
713
+ </optional>
714
+ <optional>
715
+ <ref name="seriesnumber"/>
716
+ </optional>
717
+ <optional>
718
+ <ref name="seriespartnumber"/>
719
+ </optional>
720
+ </element>
721
+ </define>
722
+ <define name="seriesorganization">
723
+ <element name="organization">
724
+ <text/>
725
+ </element>
726
+ </define>
727
+ <define name="seriesfrom">
728
+ <element name="from">
729
+ <choice>
730
+ <data type="dateTime"/>
731
+ <data type="gYear"/>
732
+ </choice>
733
+ </element>
734
+ </define>
735
+ <define name="seriesto">
736
+ <element name="to">
737
+ <choice>
738
+ <data type="dateTime"/>
739
+ <data type="gYear"/>
740
+ </choice>
741
+ </element>
742
+ </define>
743
+ <define name="seriesnumber">
744
+ <element name="number">
745
+ <text/>
746
+ </element>
747
+ </define>
748
+ <define name="seriespartnumber">
749
+ <element name="partnumber">
750
+ <text/>
751
+ </element>
752
+ </define>
753
+ <define name="biblionote">
754
+ <element name="note">
755
+ <ref name="FormattedString"/>
756
+ </element>
757
+ </define>
758
+ <define name="abstract">
759
+ <element name="abstract">
760
+ <ref name="FormattedString"/>
761
+ </element>
762
+ </define>
763
+ <define name="copyright">
764
+ <element name="copyright">
765
+ <ref name="from"/>
766
+ <optional>
767
+ <ref name="to"/>
768
+ </optional>
769
+ <ref name="owner"/>
770
+ </element>
771
+ </define>
772
+ <define name="from">
773
+ <element name="from">
774
+ <data type="gYear"/>
775
+ </element>
776
+ </define>
777
+ <define name="to">
778
+ <element name="to">
779
+ <data type="gYear"/>
780
+ </element>
781
+ </define>
782
+ <define name="owner">
783
+ <element name="owner">
784
+ <ref name="ContributorInfo"/>
785
+ </element>
786
+ </define>
787
+ <define name="docrelation">
788
+ <element name="relation">
789
+ <attribute name="type">
790
+ <choice>
791
+ <value>obsoletes</value>
792
+ <value>updates</value>
793
+ <value>updatedBy</value>
794
+ <value>complements</value>
795
+ <value>derivedFrom</value>
796
+ <value>translatedFrom</value>
797
+ <value>adoptedFrom</value>
798
+ <value>equivalent</value>
799
+ <value>identical</value>
800
+ <value>nonequivalent</value>
801
+ <value>includedIn</value>
802
+ <value>includes</value>
803
+ <value>instance</value>
804
+ <value>partOf</value>
805
+ </choice>
806
+ </attribute>
807
+ <element name="bibitem">
808
+ <ref name="BibliographicItem"/>
809
+ </element>
810
+ <zeroOrMore>
811
+ <ref name="locality"/>
812
+ </zeroOrMore>
813
+ </element>
814
+ </define>
815
+ <!--
816
+ Anycontents = mixed {
817
+ https://github.com/relaxng/jing-trang/issues/211
818
+ https://lists.oasis-open.org/archives/office/200808/msg00024.html
819
+ https://lists.oasis-open.org/archives/office/200808/msg00099.html
820
+ For this to work, we will actually strip any attributes in the Anycontents before
821
+ passing it for validation. Horrible I know, but there are no good alternatives
822
+ that also allow us to do grammar inheritance
823
+ (attribute * { text } | Any)*
824
+ Any*
825
+ }
826
+ -->
827
+ <define name="AnyElement">
828
+ <element>
829
+ <anyName/>
830
+ <choice>
831
+ <text/>
832
+ <ref name="AnyElement"/>
833
+ </choice>
834
+ </element>
835
+ </define>
836
+ </grammar>