RelaxNG/publidoc.rng
author Patrick PIERRE <patrick.pierre@prismallia.fr>
mar., 20 déc. 2011 23:20:41 +0100
changeset 60 14211f9b064a
parent 58 c099d1e7e57e
child 63 60d5d3f81e19
permissions -rw-r--r--
Gestion des blocs principaux
patrick@0
     1
<?xml version="1.0" encoding="UTF-8"?>
patrick@0
     2
<grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
patrick@0
     3
  <!-- $Id$ -->
patrick@0
     4
  <start>
patrick@0
     5
    <ref name="publidoc"/>
patrick@0
     6
  </start>
patrick@0
     7
  <define name="publidoc">
patrick@0
     8
    <element name="publidoc">
patrick@0
     9
      <ref name="publidoc.attributes"/>
patrick@0
    10
      <ref name="publidoc.content"/>
patrick@0
    11
    </element>
patrick@0
    12
  </define>
patrick@0
    13
  <define name="publidoc.attributes">
patrick@0
    14
    <ref name="version.attribute"/>
patrick@0
    15
  </define>
patrick@0
    16
  <define name="version.attribute">
patrick@0
    17
    <attribute name="version">
patrick@0
    18
      <value>1.0</value>
patrick@0
    19
    </attribute>
patrick@0
    20
  </define>
patrick@0
    21
  <define name="publidoc.content">
patrick@0
    22
    <choice>
patrick@0
    23
      <ref name="document"/>
patrick@0
    24
      <ref name="top.topic"/>
patrick@0
    25
    </choice>
patrick@0
    26
  </define>
patrick@0
    27
  <!--
patrick@0
    28
    =============================================================================
patrick@20
    29
                                     TOP LEVEL
patrick@0
    30
    =============================================================================
patrick@0
    31
  -->
patrick@0
    32
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ document ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
    33
  <define name="document">
patrick@0
    34
    <element name="document">
patrick@0
    35
      <ref name="document.attributes"/>
patrick@0
    36
      <ref name="document.content"/>
patrick@0
    37
    </element>
patrick@0
    38
  </define>
patrick@0
    39
  <define name="document.attributes">
patrick@0
    40
    <ref name="document.id.attribute"/>
patrick@0
    41
  </define>
patrick@0
    42
  <define name="document.id.attribute">
patrick@0
    43
    <attribute name="xml:id">
patrick@0
    44
      <data type="ID"/>
patrick@0
    45
    </attribute>
patrick@0
    46
  </define>
patrick@0
    47
  <define name="document.content">
patrick@0
    48
    <optional>
patrick@20
    49
      <ref name="top.head"/>
patrick@0
    50
    </optional>
patrick@56
    51
    <oneOrMore>
patrick@56
    52
      <choice>
patrick@0
    53
        <ref name="division"/>
patrick@0
    54
        <ref name="topic"/>
patrick@56
    55
      </choice>
patrick@56
    56
    </oneOrMore>
patrick@0
    57
  </define>
patrick@0
    58
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ topic ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
    59
  <define name="top.topic">
patrick@0
    60
    <element name="topic">
patrick@0
    61
      <ref name="top.topic.attributes"/>
patrick@20
    62
      <ref name="top.topic.content"/>
patrick@0
    63
    </element>
patrick@0
    64
  </define>
patrick@20
    65
  <define name="top.topic.attributes">
patrick@20
    66
    <interleave>
patrick@20
    67
      <ref name="topic.id.attribute"/>
patrick@20
    68
      <optional>
patrick@20
    69
        <ref name="topic.type.attribute"/>
patrick@20
    70
      </optional>
patrick@20
    71
    </interleave>
patrick@20
    72
  </define>
patrick@20
    73
  <define name="topic.id.attribute">
patrick@20
    74
    <attribute name="xml:id">
patrick@20
    75
      <data type="ID"/>
patrick@20
    76
    </attribute>
patrick@20
    77
  </define>
patrick@20
    78
  <define name="topic.type.attribute">
patrick@20
    79
    <attribute name="type">
patrick@20
    80
      <data type="NCName"/>
patrick@20
    81
    </attribute>
patrick@20
    82
  </define>
patrick@20
    83
  <define name="top.topic.content">
patrick@20
    84
    <optional>
patrick@20
    85
      <ref name="top.head"/>
patrick@20
    86
    </optional>
patrick@20
    87
    <oneOrMore>
patrick@20
    88
      <ref name="section"/>
patrick@20
    89
    </oneOrMore>
patrick@20
    90
  </define>
patrick@0
    91
  <!--
patrick@0
    92
    =============================================================================
patrick@20
    93
                                    HEAD LEVEL
patrick@0
    94
    =============================================================================
patrick@0
    95
  -->
patrick@20
    96
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ head ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@20
    97
  <define name="top.head">
patrick@20
    98
    <element name="head">
patrick@20
    99
      <ref name="top.head.content"/>
patrick@0
   100
    </element>
patrick@0
   101
  </define>
patrick@20
   102
  <define name="division.head">
patrick@20
   103
    <element name="head">
patrick@20
   104
      <ref name="division.head.content"/>
patrick@20
   105
    </element>
patrick@20
   106
  </define>
patrick@20
   107
  <define name="component.head">
patrick@20
   108
    <element name="head">
patrick@20
   109
      <ref name="component.head.content"/>
patrick@20
   110
    </element>
patrick@20
   111
  </define>
patrick@20
   112
  <define name="section.head">
patrick@20
   113
    <element name="head">
patrick@20
   114
      <ref name="section.head.content"/>
patrick@20
   115
    </element>
patrick@20
   116
  </define>
patrick@20
   117
  <define name="block.head">
patrick@20
   118
    <element name="head">
patrick@20
   119
      <ref name="block.head.content"/>
patrick@20
   120
    </element>
patrick@20
   121
  </define>
patrick@20
   122
  <define name="top.head.content">
patrick@0
   123
    <interleave>
patrick@0
   124
      <optional>
patrick@20
   125
        <ref name="title"/>
patrick@20
   126
        <optional>
patrick@20
   127
          <ref name="subtitle"/>
patrick@20
   128
        </optional>
patrick@20
   129
      </optional>
patrick@34
   130
      <zeroOrMore>
patrick@34
   131
        <ref name="identifier"/>
patrick@34
   132
      </zeroOrMore>
patrick@20
   133
      <optional>
patrick@20
   134
        <ref name="language"/>
patrick@0
   135
      </optional>
patrick@39
   136
      <optional>
patrick@39
   137
        <ref name="copyright"/>
patrick@39
   138
      </optional>
patrick@0
   139
      <zeroOrMore>
patrick@0
   140
        <ref name="author"/>
patrick@0
   141
      </zeroOrMore>
patrick@0
   142
      <optional>
patrick@0
   143
        <ref name="publisher"/>
patrick@0
   144
      </optional>
patrick@0
   145
      <optional>
patrick@0
   146
        <ref name="date"/>
patrick@0
   147
      </optional>
patrick@0
   148
      <optional>
patrick@0
   149
        <ref name="place"/>
patrick@0
   150
      </optional>
patrick@0
   151
      <zeroOrMore>
patrick@0
   152
        <ref name="source"/>
patrick@0
   153
      </zeroOrMore>
patrick@0
   154
      <optional>
patrick@40
   155
        <ref name="keywordset"/>
patrick@40
   156
      </optional>
patrick@40
   157
      <optional>
patrick@0
   158
        <ref name="subjectset"/>
patrick@0
   159
      </optional>
patrick@0
   160
      <optional>
patrick@0
   161
        <ref name="abstract"/>
patrick@0
   162
      </optional>
patrick@35
   163
      <optional>
patrick@35
   164
        <ref name="cover"/>
patrick@35
   165
      </optional>
patrick@0
   166
      <zeroOrMore>
patrick@0
   167
        <ref name="annotation"/>
patrick@0
   168
      </zeroOrMore>
patrick@0
   169
    </interleave>
patrick@0
   170
  </define>
patrick@20
   171
  <define name="division.head.content">
patrick@20
   172
    <interleave>
patrick@20
   173
      <optional>
patrick@20
   174
        <ref name="title"/>
patrick@20
   175
        <optional>
patrick@20
   176
          <ref name="subtitle"/>
patrick@20
   177
        </optional>
patrick@20
   178
      </optional>
patrick@20
   179
      <optional>
patrick@20
   180
        <ref name="language"/>
patrick@20
   181
      </optional>
patrick@20
   182
      <zeroOrMore>
patrick@20
   183
        <ref name="annotation"/>
patrick@20
   184
      </zeroOrMore>
patrick@20
   185
    </interleave>
patrick@20
   186
  </define>
patrick@20
   187
  <define name="component.head.content">
patrick@20
   188
    <interleave>
patrick@20
   189
      <optional>
patrick@20
   190
        <ref name="title"/>
patrick@20
   191
        <optional>
patrick@20
   192
          <ref name="subtitle"/>
patrick@20
   193
        </optional>
patrick@20
   194
      </optional>
patrick@20
   195
      <optional>
patrick@20
   196
        <ref name="language"/>
patrick@20
   197
      </optional>
patrick@20
   198
      <zeroOrMore>
patrick@20
   199
        <ref name="author"/>
patrick@20
   200
      </zeroOrMore>
patrick@41
   201
      <optional>
patrick@41
   202
        <ref name="abstract"/>
patrick@41
   203
      </optional>
patrick@20
   204
      <zeroOrMore>
patrick@20
   205
        <ref name="annotation"/>
patrick@20
   206
      </zeroOrMore>
patrick@20
   207
    </interleave>
patrick@20
   208
  </define>
patrick@20
   209
  <define name="section.head.content">
patrick@20
   210
    <interleave>
patrick@20
   211
      <optional>
patrick@20
   212
        <ref name="title"/>
patrick@20
   213
        <optional>
patrick@20
   214
          <ref name="subtitle"/>
patrick@20
   215
        </optional>
patrick@20
   216
      </optional>
patrick@20
   217
      <optional>
patrick@20
   218
        <ref name="language"/>
patrick@20
   219
      </optional>
patrick@41
   220
      <optional>
patrick@41
   221
        <ref name="abstract"/>
patrick@41
   222
      </optional>
patrick@20
   223
      <zeroOrMore>
patrick@20
   224
        <ref name="annotation"/>
patrick@20
   225
      </zeroOrMore>
patrick@20
   226
    </interleave>
patrick@20
   227
  </define>
patrick@20
   228
  <define name="block.head.content">
patrick@20
   229
    <optional>
patrick@20
   230
      <ref name="title"/>
patrick@20
   231
      <optional>
patrick@20
   232
        <ref name="subtitle"/>
patrick@20
   233
      </optional>
patrick@20
   234
    </optional>
patrick@20
   235
  </define>
patrick@0
   236
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ title, subtitle ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
   237
  <define name="title">
patrick@0
   238
    <element name="title">
patrick@0
   239
      <ref name="title.content"/>
patrick@0
   240
    </element>
patrick@0
   241
  </define>
patrick@0
   242
  <define name="subtitle">
patrick@0
   243
    <element name="subtitle">
patrick@0
   244
      <ref name="title.content"/>
patrick@0
   245
    </element>
patrick@0
   246
  </define>
patrick@20
   247
  <define name="title.content">
patrick@20
   248
    <ref name="inlines"/>
patrick@20
   249
  </define>
patrick@34
   250
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ identifier ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@38
   251
  <define name="identifier.uri">
patrick@34
   252
    <element name="identifier">
patrick@38
   253
      <attribute name="type">
patrick@38
   254
        <value>uri</value>
patrick@38
   255
      </attribute>
patrick@38
   256
      <data type="anyURI"/>
patrick@34
   257
    </element>
patrick@34
   258
  </define>
patrick@38
   259
  <define name="identifier.ean">
patrick@38
   260
    <element name="identifier">
patrick@38
   261
      <attribute name="type">
patrick@38
   262
        <value>ean</value>
patrick@38
   263
      </attribute>
patrick@38
   264
      <data type="token">
patrick@38
   265
        <param name="pattern">\d{13}</param>
patrick@38
   266
      </data>
patrick@38
   267
    </element>
patrick@34
   268
  </define>
patrick@38
   269
  <define name="identifier">
patrick@34
   270
    <choice>
patrick@38
   271
      <ref name="identifier.uri"/>
patrick@38
   272
      <ref name="identifier.ean"/>
patrick@34
   273
    </choice>
patrick@34
   274
  </define>
patrick@20
   275
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ language ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@20
   276
  <define name="language">
patrick@20
   277
    <element name="language">
patrick@20
   278
      <ref name="language.attributes"/>
patrick@20
   279
    </element>
patrick@20
   280
  </define>
patrick@20
   281
  <define name="language.attributes">
patrick@20
   282
    <ref name="lang.attribute"/>
patrick@20
   283
  </define>
patrick@20
   284
  <define name="lang.attribute">
patrick@20
   285
    <attribute name="xml:lang">
patrick@20
   286
      <data type="language"/>
patrick@20
   287
    </attribute>
patrick@20
   288
  </define>
patrick@39
   289
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ copyright ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@39
   290
  <define name="copyright">
patrick@39
   291
    <element name="copyright">
patrick@39
   292
      <ref name="copyright.content"/>
patrick@39
   293
    </element>
patrick@39
   294
  </define>
patrick@39
   295
  <define name="copyright.content">
patrick@39
   296
    <ref name="inlines"/>
patrick@39
   297
  </define>
patrick@0
   298
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ author, publisher ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@5
   299
  <!-- ~~~~~~ author -->
patrick@0
   300
  <define name="author">
patrick@0
   301
    <element name="author">
patrick@0
   302
      <ref name="author.content"/>
patrick@0
   303
    </element>
patrick@0
   304
  </define>
patrick@0
   305
  <define name="author.content">
patrick@0
   306
    <optional>
patrick@0
   307
      <ref name="firstname"/>
patrick@0
   308
    </optional>
patrick@0
   309
    <ref name="lastname"/>
patrick@33
   310
    <zeroOrMore>
patrick@33
   311
      <ref name="role"/>
patrick@33
   312
    </zeroOrMore>
patrick@33
   313
  </define>
patrick@5
   314
  <!-- ~~~~~~ publisher -->
patrick@0
   315
  <define name="publisher">
patrick@0
   316
    <element name="publisher">
patrick@0
   317
      <ref name="publisher.content"/>
patrick@0
   318
    </element>
patrick@0
   319
  </define>
patrick@0
   320
  <define name="publisher.content">
patrick@34
   321
    <ref name="label"/>
patrick@34
   322
    <optional>
patrick@36
   323
      <ref name="link"/>
patrick@34
   324
    </optional>
patrick@0
   325
  </define>
patrick@5
   326
  <!-- ~~~~~~ firstname -->
patrick@5
   327
  <define name="firstname">
patrick@5
   328
    <element name="firstname">
patrick@5
   329
      <ref name="firstname.content"/>
patrick@5
   330
    </element>
patrick@5
   331
  </define>
patrick@5
   332
  <define name="firstname.content">
patrick@5
   333
    <ref name="inlines"/>
patrick@5
   334
  </define>
patrick@5
   335
  <!-- ~~~~~~ lastname -->
patrick@5
   336
  <define name="lastname">
patrick@5
   337
    <element name="lastname">
patrick@5
   338
      <ref name="lastname.content"/>
patrick@5
   339
    </element>
patrick@5
   340
  </define>
patrick@5
   341
  <define name="lastname.content">
patrick@5
   342
    <ref name="inlines"/>
patrick@5
   343
  </define>
patrick@34
   344
  <!-- ~~~~~~ role -->
patrick@34
   345
  <define name="role">
patrick@34
   346
    <element name="role">
patrick@34
   347
      <ref name="role.attributes"/>
patrick@34
   348
    </element>
patrick@34
   349
  </define>
patrick@34
   350
  <define name="role.attributes">
patrick@34
   351
    <ref name="role.of.attribute"/>
patrick@34
   352
  </define>
patrick@34
   353
  <define name="role.of.attribute">
patrick@34
   354
    <attribute name="of">
patrick@34
   355
      <choice>
patrick@34
   356
        <value>author</value>
patrick@34
   357
        <value>illustrator</value>
patrick@34
   358
      </choice>
patrick@34
   359
    </attribute>
patrick@34
   360
  </define>
patrick@38
   361
  <!-- ~~~~~~ label -->
patrick@38
   362
  <define name="label">
patrick@38
   363
    <element name="label">
patrick@38
   364
      <ref name="label.content"/>
patrick@38
   365
    </element>
patrick@38
   366
  </define>
patrick@38
   367
  <define name="label.content">
patrick@38
   368
    <ref name="inlines"/>
patrick@38
   369
  </define>
patrick@2
   370
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ place ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@2
   371
  <define name="place">
patrick@2
   372
    <element name="place">
patrick@2
   373
      <ref name="place.content"/>
patrick@2
   374
    </element>
patrick@2
   375
  </define>
patrick@2
   376
  <define name="place.content">
patrick@2
   377
    <ref name="inlines"/>
patrick@2
   378
  </define>
patrick@0
   379
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ source ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@2
   380
  <!-- ~~~~~~ source -->
patrick@0
   381
  <define name="source">
patrick@0
   382
    <element name="source">
patrick@0
   383
      <choice>
patrick@0
   384
        <group>
patrick@0
   385
          <attribute name="type">
patrick@0
   386
            <value>book</value>
patrick@0
   387
          </attribute>
patrick@0
   388
          <ref name="source.content.book"/>
patrick@0
   389
        </group>
patrick@38
   390
        <group>
patrick@38
   391
          <attribute name="type">
patrick@38
   392
            <value>file</value>
patrick@38
   393
          </attribute>
patrick@38
   394
          <ref name="source.content.file"/>
patrick@38
   395
        </group>
patrick@0
   396
      </choice>
patrick@0
   397
      <ref name="source.content"/>
patrick@0
   398
    </element>
patrick@0
   399
  </define>
patrick@0
   400
  <define name="source.content.book">
patrick@38
   401
    <ref name="identifier.ean"/>
patrick@38
   402
    <optional>
patrick@38
   403
      <ref name="title"/>
patrick@38
   404
    </optional>
patrick@0
   405
    <zeroOrMore>
patrick@0
   406
      <ref name="pagenumber"/>
patrick@0
   407
    </zeroOrMore>
patrick@0
   408
  </define>
patrick@38
   409
  <define name="source.content.file">
patrick@38
   410
    <ref name="identifier.uri"/>
patrick@38
   411
  </define>
patrick@0
   412
  <define name="source.content">
patrick@0
   413
    <zeroOrMore>
patrick@0
   414
      <ref name="annotation"/>
patrick@0
   415
    </zeroOrMore>
patrick@0
   416
  </define>
patrick@2
   417
  <!-- ~~~~~~ pagenumber -->
patrick@0
   418
  <define name="pagenumber">
patrick@0
   419
    <element name="pagenumber">
patrick@0
   420
      <ref name="pagenumber.attributes"/>
patrick@0
   421
    </element>
patrick@0
   422
  </define>
patrick@0
   423
  <define name="pagenumber.attributes">
patrick@0
   424
    <ref name="pagenumber.value.attribute"/>
patrick@0
   425
  </define>
patrick@0
   426
  <define name="pagenumber.value.attribute">
patrick@0
   427
    <attribute name="value">
patrick@33
   428
      <data type="positiveInteger"/>
patrick@0
   429
    </attribute>
patrick@0
   430
  </define>
patrick@40
   431
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ keyword & subject ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@40
   432
  <!-- ~~~~~~ keywordset -->
patrick@40
   433
  <define name="keywordset">
patrick@40
   434
    <element name="keywordset">
patrick@40
   435
      <ref name="keywordset.content"/>
patrick@40
   436
    </element>
patrick@40
   437
  </define>
patrick@40
   438
  <define name="keywordset.content">
patrick@40
   439
    <oneOrMore>
patrick@40
   440
      <ref name="keyword"/>
patrick@40
   441
    </oneOrMore>
patrick@40
   442
  </define>
patrick@40
   443
  <!-- ~~~~~~ keyword -->
patrick@40
   444
  <define name="keyword">
patrick@40
   445
    <element name="keyword">
patrick@40
   446
      <ref name="keyword.content"/>
patrick@40
   447
    </element>
patrick@40
   448
  </define>
patrick@40
   449
  <define name="keyword.content">
patrick@53
   450
    <mixed>
patrick@53
   451
      <zeroOrMore>
patrick@53
   452
        <ref name="sup"/>
patrick@53
   453
      </zeroOrMore>
patrick@53
   454
      <zeroOrMore>
patrick@53
   455
        <ref name="sub"/>
patrick@53
   456
      </zeroOrMore>
patrick@53
   457
    </mixed>
patrick@40
   458
  </define>
patrick@2
   459
  <!-- ~~~~~~ subjectset -->
patrick@0
   460
  <define name="subjectset">
patrick@0
   461
    <element name="subjectset">
patrick@0
   462
      <ref name="subjectset.content"/>
patrick@0
   463
    </element>
patrick@0
   464
  </define>
patrick@0
   465
  <define name="subjectset.content">
patrick@0
   466
    <oneOrMore>
patrick@0
   467
      <ref name="subject"/>
patrick@0
   468
    </oneOrMore>
patrick@0
   469
  </define>
patrick@2
   470
  <!-- ~~~~~~ subject -->
patrick@0
   471
  <define name="subject">
patrick@0
   472
    <element name="subject">
patrick@0
   473
      <ref name="subject.attributes"/>
patrick@0
   474
    </element>
patrick@0
   475
  </define>
patrick@0
   476
  <define name="subject.attributes">
patrick@0
   477
    <ref name="subject.id.attribute"/>
patrick@0
   478
  </define>
patrick@0
   479
  <define name="subject.id.attribute">
patrick@0
   480
    <attribute name="id">
patrick@0
   481
      <data type="NMTOKEN"/>
patrick@0
   482
    </attribute>
patrick@0
   483
  </define>
patrick@5
   484
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ abstract ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@2
   485
  <define name="abstract">
patrick@2
   486
    <element name="abstract">
patrick@2
   487
      <ref name="abstract.content"/>
patrick@2
   488
    </element>
patrick@2
   489
  </define>
patrick@2
   490
  <define name="abstract.content">
patrick@2
   491
    <oneOrMore>
patrick@20
   492
      <ref name="p"/>
patrick@2
   493
    </oneOrMore>
patrick@2
   494
  </define>
patrick@35
   495
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ cover ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@35
   496
  <define name="cover">
patrick@35
   497
    <element name="cover">
patrick@35
   498
      <ref name="cover.content"/>
patrick@35
   499
    </element>
patrick@35
   500
  </define>
patrick@35
   501
  <define name="cover.content">
patrick@35
   502
    <ref name="cover.image"/>
patrick@35
   503
  </define>
patrick@35
   504
  <define name="cover.image">
patrick@35
   505
    <element name="image">
patrick@35
   506
      <ref name="cover.image.attributes"/>
patrick@35
   507
    </element>
patrick@35
   508
  </define>
patrick@35
   509
  <define name="cover.image.attributes">
patrick@35
   510
    <ref name="cover.image.id.attribute"/>
patrick@35
   511
  </define>
patrick@35
   512
  <define name="cover.image.id.attribute">
patrick@35
   513
    <attribute name="id">
patrick@35
   514
      <data type="NMTOKEN"/>
patrick@35
   515
    </attribute>
patrick@35
   516
  </define>
patrick@0
   517
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ annotation ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
   518
  <define name="annotation">
patrick@0
   519
    <element name="annotation">
patrick@0
   520
      <ref name="annotation.content"/>
patrick@0
   521
    </element>
patrick@0
   522
  </define>
patrick@0
   523
  <define name="annotation.content">
patrick@0
   524
    <ref name="inlines"/>
patrick@0
   525
  </define>
patrick@0
   526
  <!--
patrick@0
   527
    =============================================================================
patrick@20
   528
                                    DIVISION LEVEL
patrick@0
   529
    =============================================================================
patrick@0
   530
  -->
patrick@0
   531
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ division ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
   532
  <define name="division">
patrick@0
   533
    <element name="division">
patrick@0
   534
      <ref name="division.content"/>
patrick@0
   535
    </element>
patrick@0
   536
  </define>
patrick@0
   537
  <define name="division.content">
patrick@0
   538
    <optional>
patrick@20
   539
      <ref name="division.head"/>
patrick@0
   540
    </optional>
patrick@56
   541
    <oneOrMore>
patrick@56
   542
      <choice>
patrick@0
   543
        <ref name="division"/>
patrick@0
   544
        <ref name="topic"/>
patrick@56
   545
      </choice>
patrick@56
   546
    </oneOrMore>
patrick@0
   547
  </define>
patrick@0
   548
  <!--
patrick@0
   549
    =============================================================================
patrick@20
   550
                                  COMPONENT LEVEL
patrick@0
   551
    =============================================================================
patrick@0
   552
  -->
patrick@0
   553
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ topic ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
   554
  <define name="topic">
patrick@0
   555
    <element name="topic">
patrick@0
   556
      <ref name="topic.attributes"/>
patrick@0
   557
      <ref name="topic.content"/>
patrick@0
   558
    </element>
patrick@0
   559
  </define>
patrick@0
   560
  <define name="topic.attributes">
patrick@0
   561
    <interleave>
patrick@0
   562
      <optional>
patrick@0
   563
        <ref name="topic.id.attribute"/>
patrick@0
   564
      </optional>
patrick@0
   565
      <optional>
patrick@0
   566
        <ref name="topic.type.attribute"/>
patrick@0
   567
      </optional>
patrick@0
   568
    </interleave>
patrick@0
   569
  </define>
patrick@0
   570
  <define name="topic.content">
patrick@0
   571
    <optional>
patrick@20
   572
      <ref name="component.head"/>
patrick@0
   573
    </optional>
patrick@0
   574
    <oneOrMore>
patrick@0
   575
      <ref name="section"/>
patrick@0
   576
    </oneOrMore>
patrick@0
   577
  </define>
patrick@0
   578
  <!--
patrick@0
   579
    =============================================================================
patrick@20
   580
                                    SECTION LEVEL
patrick@0
   581
    =============================================================================
patrick@0
   582
  -->
patrick@20
   583
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ section ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
   584
  <define name="section">
patrick@0
   585
    <element name="section">
patrick@58
   586
      <ref name="section.attributes"/>
patrick@0
   587
      <ref name="section.content"/>
patrick@0
   588
    </element>
patrick@0
   589
  </define>
patrick@58
   590
  <define name="section.attributes">
patrick@58
   591
    <optional>
patrick@58
   592
      <ref name="section.type.attribute"/>
patrick@58
   593
    </optional>
patrick@58
   594
  </define>
patrick@58
   595
  <define name="section.type.attribute">
patrick@58
   596
    <attribute name="type">
patrick@58
   597
      <data type="NCName"/>
patrick@58
   598
    </attribute>
patrick@58
   599
  </define>
patrick@0
   600
  <define name="section.content">
patrick@0
   601
    <optional>
patrick@20
   602
      <ref name="section.head"/>
patrick@0
   603
    </optional>
patrick@0
   604
    <choice>
patrick@0
   605
      <oneOrMore>
patrick@0
   606
        <ref name="section"/>
patrick@0
   607
      </oneOrMore>
patrick@0
   608
      <oneOrMore>
patrick@10
   609
        <ref name="block"/>
patrick@0
   610
      </oneOrMore>
patrick@0
   611
    </choice>
patrick@0
   612
  </define>
patrick@0
   613
  <!--
patrick@0
   614
    =============================================================================
patrick@20
   615
                                    BLOCK LEVEL
patrick@0
   616
    =============================================================================
patrick@0
   617
  -->
patrick@20
   618
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ block ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@10
   619
  <define name="block">
patrick@10
   620
    <choice>
patrick@20
   621
      <ref name="p"/>
patrick@20
   622
      <ref name="speech"/>
patrick@10
   623
      <ref name="list"/>
patrick@44
   624
      <ref name="blockquote"/>
patrick@17
   625
      <ref name="table"/>
patrick@10
   626
      <ref name="media"/>
patrick@10
   627
    </choice>
patrick@10
   628
  </define>
patrick@42
   629
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ p ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@20
   630
  <define name="p">
patrick@20
   631
    <element name="p">
patrick@20
   632
      <ref name="p.content"/>
patrick@0
   633
    </element>
patrick@0
   634
  </define>
patrick@20
   635
  <define name="p.content">
patrick@25
   636
    <ref name="inlines"/>
patrick@0
   637
  </define>
patrick@20
   638
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ speech ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@20
   639
  <!-- ~~~~~~ speech -->
patrick@20
   640
  <define name="speech">
patrick@20
   641
    <element name="speech">
patrick@20
   642
      <ref name="speech.content"/>
patrick@20
   643
    </element>
patrick@20
   644
  </define>
patrick@20
   645
  <define name="speech.content">
patrick@20
   646
    <optional>
patrick@20
   647
      <ref name="speaker"/>
patrick@20
   648
    </optional>
patrick@20
   649
    <optional>
patrick@20
   650
      <ref name="stage"/>
patrick@20
   651
    </optional>
patrick@20
   652
    <oneOrMore>
patrick@20
   653
      <ref name="p"/>
patrick@20
   654
    </oneOrMore>
patrick@20
   655
  </define>
patrick@20
   656
  <!-- ~~~~~~ speaker -->
patrick@20
   657
  <define name="speaker">
patrick@20
   658
    <element name="speaker">
patrick@20
   659
      <ref name="speaker.content"/>
patrick@20
   660
    </element>
patrick@20
   661
  </define>
patrick@20
   662
  <define name="speaker.content">
patrick@20
   663
    <ref name="inlines"/>
patrick@20
   664
  </define>
patrick@20
   665
  <!-- ~~~~~~ stage -->
patrick@20
   666
  <define name="stage">
patrick@20
   667
    <element name="stage">
patrick@20
   668
      <ref name="stage.content"/>
patrick@20
   669
    </element>
patrick@20
   670
  </define>
patrick@20
   671
  <define name="stage.content">
patrick@20
   672
    <ref name="inlines"/>
patrick@20
   673
  </define>
patrick@17
   674
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ list ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@10
   675
  <!-- ~~~~~~ list -->
patrick@10
   676
  <define name="list">
patrick@10
   677
    <element name="list">
patrick@10
   678
      <ref name="list.content"/>
patrick@10
   679
    </element>
patrick@10
   680
  </define>
patrick@10
   681
  <define name="list.content">
patrick@10
   682
    <optional>
patrick@20
   683
      <ref name="block.head"/>
patrick@10
   684
    </optional>
patrick@10
   685
    <choice>
patrick@10
   686
      <group>
patrick@10
   687
        <optional>
patrick@10
   688
          <attribute name="type">
patrick@12
   689
            <value>ordered</value>
patrick@10
   690
          </attribute>
patrick@10
   691
        </optional>
patrick@10
   692
        <ref name="item"/>
patrick@10
   693
        <oneOrMore>
patrick@10
   694
          <ref name="item"/>
patrick@10
   695
        </oneOrMore>
patrick@10
   696
      </group>
patrick@10
   697
      <group>
patrick@10
   698
        <attribute name="type">
patrick@10
   699
          <value>glossary</value>
patrick@10
   700
        </attribute>
patrick@10
   701
        <oneOrMore>
patrick@10
   702
          <ref name="glossary.item"/>
patrick@10
   703
        </oneOrMore>
patrick@10
   704
      </group>
patrick@10
   705
    </choice>
patrick@10
   706
  </define>
patrick@10
   707
  <!-- ~~~~~~ item -->
patrick@10
   708
  <define name="item">
patrick@10
   709
    <element name="item">
patrick@10
   710
      <ref name="item.content"/>
patrick@10
   711
    </element>
patrick@10
   712
  </define>
patrick@10
   713
  <define name="item.content">
patrick@30
   714
    <choice>
patrick@30
   715
      <ref name="inlines"/>
patrick@30
   716
      <oneOrMore>
patrick@30
   717
        <ref name="block"/>
patrick@30
   718
      </oneOrMore>
patrick@30
   719
    </choice>
patrick@10
   720
  </define>
patrick@10
   721
  <!-- ~~~~~~ glossary.item -->
patrick@10
   722
  <define name="glossary.item">
patrick@10
   723
    <element name="item">
patrick@10
   724
      <ref name="glossary.item.content"/>
patrick@10
   725
    </element>
patrick@10
   726
  </define>
patrick@10
   727
  <define name="glossary.item.content">
patrick@10
   728
    <ref name="label"/>
patrick@10
   729
    <oneOrMore>
patrick@10
   730
      <ref name="block"/>
patrick@10
   731
    </oneOrMore>
patrick@10
   732
  </define>
patrick@44
   733
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ blockquote ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@44
   734
  <!-- ~~~~~~ blockquote -->
patrick@44
   735
  <define name="blockquote">
patrick@44
   736
    <element name="blockquote">
patrick@44
   737
      <ref name="blockquote.content"/>
patrick@44
   738
    </element>
patrick@44
   739
  </define>
patrick@44
   740
  <define name="blockquote.content">
patrick@44
   741
    <optional>
patrick@44
   742
      <ref name="block.head"/>
patrick@44
   743
    </optional>
patrick@44
   744
    <oneOrMore>
patrick@44
   745
      <choice>
patrick@44
   746
        <ref name="p"/>
patrick@44
   747
        <ref name="speech"/>
patrick@44
   748
        <ref name="list"/>
patrick@44
   749
      </choice>
patrick@44
   750
    </oneOrMore>
patrick@44
   751
    <optional>
patrick@44
   752
      <ref name="attribution"/>
patrick@44
   753
    </optional>
patrick@44
   754
  </define>
patrick@44
   755
  <!-- ~~~~~~ attribution -->
patrick@44
   756
  <define name="attribution">
patrick@44
   757
    <element name="attribution">
patrick@44
   758
      <ref name="attribtuion.content"/>
patrick@44
   759
    </element>
patrick@44
   760
  </define>
patrick@44
   761
  <define name="attribtuion.content">
patrick@44
   762
    <ref name="inlines"/>
patrick@44
   763
  </define>
patrick@17
   764
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ table ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@17
   765
  <define name="table">
patrick@17
   766
    <element name="table">
patrick@17
   767
      <ref name="table.content"/>
patrick@17
   768
    </element>
patrick@17
   769
  </define>
patrick@17
   770
  <define name="table.content">
patrick@17
   771
    <optional>
patrick@20
   772
      <ref name="block.head"/>
patrick@17
   773
    </optional>
patrick@17
   774
    <oneOrMore>
patrick@17
   775
      <ref name="tgroup"/>
patrick@17
   776
    </oneOrMore>
patrick@17
   777
    <optional>
patrick@17
   778
      <ref name="caption"/>
patrick@17
   779
    </optional>
patrick@17
   780
  </define>
patrick@17
   781
  <!-- ~~~~~~ tgroup -->
patrick@17
   782
  <define name="tgroup">
patrick@17
   783
    <element name="tgroup">
patrick@17
   784
      <ref name="tgroup.attributes"/>
patrick@17
   785
      <ref name="tgroup.content"/>
patrick@17
   786
    </element>
patrick@17
   787
  </define>
patrick@17
   788
  <define name="tgroup.content">
patrick@17
   789
    <optional>
patrick@17
   790
      <ref name="thead"/>
patrick@17
   791
    </optional>
patrick@17
   792
    <optional>
patrick@17
   793
      <ref name="tfoot"/>
patrick@17
   794
    </optional>
patrick@17
   795
    <ref name="tbody"/>
patrick@17
   796
  </define>
patrick@17
   797
  <define name="tgroup.attributes">
patrick@17
   798
    <interleave>
patrick@17
   799
      <ref name="cols.attribute"/>
patrick@17
   800
      <optional>
patrick@17
   801
        <ref name="align.attribute"/>
patrick@17
   802
      </optional>
patrick@17
   803
      <optional>
patrick@17
   804
        <ref name="colsep.attribute"/>
patrick@17
   805
      </optional>
patrick@17
   806
      <optional>
patrick@17
   807
        <ref name="rowsep.attribute"/>
patrick@17
   808
      </optional>
patrick@17
   809
    </interleave>
patrick@17
   810
  </define>
patrick@17
   811
  <define name="cols.attribute">
patrick@17
   812
    <attribute name="cols">
patrick@17
   813
      <data type="positiveInteger"/>
patrick@17
   814
    </attribute>
patrick@17
   815
  </define>
patrick@17
   816
  <define name="align.attribute">
patrick@17
   817
    <attribute name="align">
patrick@17
   818
      <choice>
patrick@17
   819
        <value>left</value>
patrick@17
   820
        <value>right</value>
patrick@17
   821
        <value>center</value>
patrick@17
   822
        <value>justify</value>
patrick@17
   823
      </choice>
patrick@17
   824
    </attribute>
patrick@17
   825
  </define>
patrick@17
   826
  <define name="colsep.attribute">
patrick@17
   827
    <attribute name="colsep">
patrick@17
   828
      <choice>
patrick@17
   829
        <value>0</value>
patrick@17
   830
        <value>1</value>
patrick@17
   831
      </choice>
patrick@17
   832
    </attribute>
patrick@17
   833
  </define>
patrick@17
   834
  <define name="rowsep.attribute">
patrick@17
   835
    <attribute name="rowsep">
patrick@17
   836
      <choice>
patrick@17
   837
        <value>0</value>
patrick@17
   838
        <value>1</value>
patrick@17
   839
      </choice>
patrick@17
   840
    </attribute>
patrick@17
   841
  </define>
patrick@17
   842
  <!-- ~~~~~~ thead, tfoot, tbody -->
patrick@17
   843
  <define name="thead">
patrick@17
   844
    <element name="thead">
patrick@22
   845
      <ref name="thead.attributes"/>
patrick@17
   846
      <ref name="thead.content"/>
patrick@17
   847
    </element>
patrick@17
   848
  </define>
patrick@17
   849
  <define name="tfoot">
patrick@17
   850
    <element name="tfoot">
patrick@22
   851
      <ref name="tfoot.attributes"/>
patrick@17
   852
      <ref name="tfoot.content"/>
patrick@17
   853
    </element>
patrick@17
   854
  </define>
patrick@17
   855
  <define name="tbody">
patrick@17
   856
    <element name="tbody">
patrick@22
   857
      <ref name="tbody.attributes"/>
patrick@17
   858
      <ref name="tbody.content"/>
patrick@17
   859
    </element>
patrick@17
   860
  </define>
patrick@22
   861
  <define name="thead.attributes">
patrick@22
   862
    <optional>
patrick@22
   863
      <ref name="valign.attribute"/>
patrick@22
   864
    </optional>
patrick@22
   865
  </define>
patrick@22
   866
  <define name="tfoot.attributes">
patrick@22
   867
    <optional>
patrick@22
   868
      <ref name="valign.attribute"/>
patrick@22
   869
    </optional>
patrick@22
   870
  </define>
patrick@22
   871
  <define name="tbody.attributes">
patrick@22
   872
    <optional>
patrick@22
   873
      <ref name="valign.attribute"/>
patrick@22
   874
    </optional>
patrick@22
   875
  </define>
patrick@22
   876
  <define name="valign.attribute">
patrick@22
   877
    <attribute name="valign">
patrick@22
   878
      <choice>
patrick@22
   879
        <value>top</value>
patrick@22
   880
        <value>middle</value>
patrick@22
   881
        <value>bottom</value>
patrick@22
   882
      </choice>
patrick@22
   883
    </attribute>
patrick@22
   884
  </define>
patrick@17
   885
  <define name="thead.content">
patrick@17
   886
    <oneOrMore>
patrick@17
   887
      <ref name="row"/>
patrick@17
   888
    </oneOrMore>
patrick@17
   889
  </define>
patrick@17
   890
  <define name="tfoot.content">
patrick@17
   891
    <oneOrMore>
patrick@17
   892
      <ref name="row"/>
patrick@17
   893
    </oneOrMore>
patrick@17
   894
  </define>
patrick@17
   895
  <define name="tbody.content">
patrick@17
   896
    <oneOrMore>
patrick@17
   897
      <ref name="row"/>
patrick@17
   898
    </oneOrMore>
patrick@17
   899
  </define>
patrick@17
   900
  <!-- ~~~~~~ row -->
patrick@17
   901
  <define name="row">
patrick@17
   902
    <element name="row">
patrick@17
   903
      <ref name="row.attribute"/>
patrick@17
   904
      <ref name="row.content"/>
patrick@17
   905
    </element>
patrick@17
   906
  </define>
patrick@17
   907
  <define name="row.attribute">
patrick@17
   908
    <optional>
patrick@17
   909
      <ref name="valign.attribute"/>
patrick@17
   910
    </optional>
patrick@17
   911
  </define>
patrick@17
   912
  <define name="row.content">
patrick@17
   913
    <oneOrMore>
patrick@17
   914
      <ref name="entry"/>
patrick@17
   915
    </oneOrMore>
patrick@17
   916
  </define>
patrick@17
   917
  <!-- ~~~~~~ entry -->
patrick@17
   918
  <define name="entry">
patrick@17
   919
    <element name="entry">
patrick@17
   920
      <ref name="entry.content"/>
patrick@17
   921
    </element>
patrick@17
   922
  </define>
patrick@17
   923
  <define name="entry.content">
patrick@17
   924
    <choice>
patrick@17
   925
      <ref name="inlines"/>
patrick@17
   926
      <oneOrMore>
patrick@37
   927
        <choice>
patrick@37
   928
          <ref name="p"/>
patrick@37
   929
          <ref name="media"/>
patrick@37
   930
        </choice>
patrick@17
   931
      </oneOrMore>
patrick@17
   932
    </choice>
patrick@17
   933
  </define>
patrick@17
   934
  <!-- ~~~~~~ caption -->
patrick@17
   935
  <define name="caption">
patrick@17
   936
    <element name="caption">
patrick@17
   937
      <ref name="caption.content"/>
patrick@17
   938
    </element>
patrick@17
   939
  </define>
patrick@17
   940
  <define name="caption.content">
patrick@20
   941
    <choice>
patrick@20
   942
      <ref name="inlines"/>
patrick@20
   943
      <oneOrMore>
patrick@20
   944
        <ref name="p"/>
patrick@20
   945
      </oneOrMore>
patrick@20
   946
    </choice>
patrick@11
   947
  </define>
patrick@35
   948
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ media ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@2
   949
  <!-- ~~~~~~ media -->
patrick@0
   950
  <define name="media">
patrick@0
   951
    <element name="media">
patrick@0
   952
      <ref name="media.content"/>
patrick@0
   953
    </element>
patrick@0
   954
  </define>
patrick@0
   955
  <define name="media.content">
patrick@24
   956
    <optional>
patrick@24
   957
      <ref name="block.head"/>
patrick@24
   958
    </optional>
patrick@0
   959
    <oneOrMore>
patrick@43
   960
      <choice>
patrick@43
   961
        <ref name="image"/>
patrick@45
   962
        <ref name="audio"/>
patrick@43
   963
      </choice>
patrick@0
   964
    </oneOrMore>
patrick@0
   965
    <optional>
patrick@17
   966
      <ref name="caption"/>
patrick@0
   967
    </optional>
patrick@35
   968
    <optional>
patrick@36
   969
      <ref name="link"/>
patrick@35
   970
    </optional>
patrick@0
   971
  </define>
patrick@2
   972
  <!-- ~~~~~~ image -->
patrick@0
   973
  <define name="image">
patrick@0
   974
    <element name="image">
patrick@0
   975
      <ref name="image.attributes"/>
patrick@0
   976
      <ref name="image.content"/>
patrick@0
   977
    </element>
patrick@0
   978
  </define>
patrick@0
   979
  <define name="image.attributes">
patrick@0
   980
    <ref name="media.id.attribute"/>
patrick@49
   981
    <optional>
patrick@49
   982
      <ref name="image.type"/>
patrick@49
   983
    </optional>
patrick@0
   984
  </define>
patrick@17
   985
  <define name="media.id.attribute">
patrick@17
   986
    <attribute name="id">
patrick@17
   987
      <data type="NMTOKEN"/>
patrick@17
   988
    </attribute>
patrick@17
   989
  </define>
patrick@49
   990
  <define name="image.type">
patrick@49
   991
    <attribute name="type">
patrick@50
   992
      <choice>
patrick@50
   993
        <value>cover</value>
patrick@50
   994
        <value>thumbnail</value>
patrick@50
   995
      </choice>
patrick@49
   996
    </attribute>
patrick@49
   997
  </define>
patrick@0
   998
  <define name="image.content">
patrick@0
   999
    <optional>
patrick@0
  1000
      <ref name="copyright"/>
patrick@0
  1001
    </optional>
patrick@0
  1002
  </define>
patrick@45
  1003
  <!-- ~~~~~~ audio -->
patrick@45
  1004
  <define name="audio">
patrick@45
  1005
    <element name="audio">
patrick@45
  1006
      <ref name="audio.attributes"/>
patrick@43
  1007
    </element>
patrick@43
  1008
  </define>
patrick@45
  1009
  <define name="audio.attributes">
patrick@43
  1010
    <ref name="media.id.attribute"/>
patrick@43
  1011
  </define>
patrick@0
  1012
  <!--
patrick@0
  1013
    =============================================================================
patrick@20
  1014
                                    INLINE LEVEL
patrick@0
  1015
    =============================================================================
patrick@0
  1016
  -->
patrick@0
  1017
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ inlines ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
  1018
  <define name="inlines">
patrick@0
  1019
    <mixed>
patrick@0
  1020
      <interleave>
patrick@0
  1021
        <zeroOrMore>
patrick@0
  1022
          <ref name="sup"/>
patrick@0
  1023
        </zeroOrMore>
patrick@0
  1024
        <zeroOrMore>
patrick@0
  1025
          <ref name="sub"/>
patrick@0
  1026
        </zeroOrMore>
patrick@0
  1027
        <zeroOrMore>
patrick@42
  1028
          <ref name="var"/>
patrick@42
  1029
        </zeroOrMore>
patrick@42
  1030
        <zeroOrMore>
patrick@12
  1031
          <ref name="number"/>
patrick@0
  1032
        </zeroOrMore>
patrick@0
  1033
        <zeroOrMore>
patrick@42
  1034
          <ref name="math"/>
patrick@42
  1035
        </zeroOrMore>
patrick@42
  1036
        <zeroOrMore>
patrick@0
  1037
          <ref name="date"/>
patrick@0
  1038
        </zeroOrMore>
patrick@0
  1039
        <zeroOrMore>
patrick@0
  1040
          <ref name="name"/>
patrick@0
  1041
        </zeroOrMore>
patrick@0
  1042
        <zeroOrMore>
patrick@5
  1043
          <ref name="note"/>
patrick@0
  1044
        </zeroOrMore>
patrick@0
  1045
        <zeroOrMore>
patrick@0
  1046
          <ref name="foreign"/>
patrick@0
  1047
        </zeroOrMore>
patrick@0
  1048
        <zeroOrMore>
patrick@0
  1049
          <ref name="highlight"/>
patrick@0
  1050
        </zeroOrMore>
patrick@5
  1051
        <zeroOrMore>
patrick@5
  1052
          <ref name="mentioned"/>
patrick@5
  1053
        </zeroOrMore>
patrick@5
  1054
        <zeroOrMore>
patrick@5
  1055
          <ref name="quote"/>
patrick@5
  1056
        </zeroOrMore>
patrick@8
  1057
        <zeroOrMore>
patrick@8
  1058
          <ref name="acronym"/>
patrick@8
  1059
        </zeroOrMore>
patrick@10
  1060
        <zeroOrMore>
patrick@10
  1061
          <ref name="term"/>
patrick@10
  1062
        </zeroOrMore>
patrick@25
  1063
        <zeroOrMore>
patrick@25
  1064
          <ref name="link"/>
patrick@25
  1065
        </zeroOrMore>
patrick@42
  1066
        <zeroOrMore>
patrick@42
  1067
          <ref name="anchor"/>
patrick@42
  1068
        </zeroOrMore>
patrick@0
  1069
      </interleave>
patrick@0
  1070
    </mixed>
patrick@0
  1071
  </define>
patrick@42
  1072
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sub, sup, var ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
  1073
  <define name="sup">
patrick@0
  1074
    <element name="sup">
patrick@42
  1075
      <text/>
patrick@0
  1076
    </element>
patrick@0
  1077
  </define>
patrick@0
  1078
  <define name="sub">
patrick@0
  1079
    <element name="sub">
patrick@42
  1080
      <text/>
patrick@0
  1081
    </element>
patrick@0
  1082
  </define>
patrick@42
  1083
  <define name="var">
patrick@42
  1084
    <element name="var">
patrick@42
  1085
      <text/>
patrick@42
  1086
    </element>
patrick@42
  1087
  </define>
patrick@42
  1088
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ math ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@42
  1089
  <define name="math">
patrick@42
  1090
    <element name="math">
patrick@42
  1091
      <choice>
patrick@42
  1092
        <group>
patrick@42
  1093
          <attribute name="notation">
patrick@42
  1094
            <value>tex</value>
patrick@42
  1095
          </attribute>
patrick@42
  1096
          <ref name="math.attributes"/>
patrick@42
  1097
          <ref name="math.tex.content"/>
patrick@42
  1098
        </group>
patrick@42
  1099
        <group>
patrick@42
  1100
          <ref name="math.attributes"/>
patrick@42
  1101
          <ref name="math.content"/>
patrick@42
  1102
        </group>
patrick@42
  1103
      </choice>
patrick@42
  1104
    </element>
patrick@42
  1105
  </define>
patrick@42
  1106
  <define name="math.attributes">
patrick@42
  1107
    <optional>
patrick@42
  1108
      <ref name="wide.attribute"/>
patrick@42
  1109
    </optional>
patrick@42
  1110
  </define>
patrick@42
  1111
  <define name="wide.attribute">
patrick@42
  1112
    <attribute name="wide">
patrick@42
  1113
      <data type="boolean"/>
patrick@42
  1114
    </attribute>
patrick@42
  1115
  </define>
patrick@42
  1116
  <define name="math.content">
patrick@42
  1117
    <mixed>
patrick@42
  1118
      <interleave>
patrick@42
  1119
        <zeroOrMore>
patrick@42
  1120
          <ref name="sup"/>
patrick@42
  1121
        </zeroOrMore>
patrick@42
  1122
        <zeroOrMore>
patrick@42
  1123
          <ref name="sub"/>
patrick@42
  1124
        </zeroOrMore>
patrick@42
  1125
        <zeroOrMore>
patrick@42
  1126
          <ref name="var"/>
patrick@42
  1127
        </zeroOrMore>
patrick@42
  1128
      </interleave>
patrick@42
  1129
    </mixed>
patrick@42
  1130
  </define>
patrick@42
  1131
  <define name="math.tex.content">
patrick@42
  1132
    <text/>
patrick@42
  1133
  </define>
patrick@12
  1134
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ number ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@12
  1135
  <define name="number">
patrick@12
  1136
    <element name="number">
patrick@12
  1137
      <choice>
patrick@12
  1138
        <group>
patrick@12
  1139
          <attribute name="type">
patrick@12
  1140
            <value>roman</value>
patrick@12
  1141
          </attribute>
patrick@12
  1142
          <ref name="number.attributes"/>
patrick@12
  1143
          <ref name="number.roman.content"/>
patrick@12
  1144
        </group>
patrick@12
  1145
        <group>
patrick@12
  1146
          <ref name="number.attributes"/>
patrick@12
  1147
          <ref name="number.content"/>
patrick@12
  1148
        </group>
patrick@12
  1149
      </choice>
patrick@0
  1150
    </element>
patrick@0
  1151
  </define>
patrick@12
  1152
  <define name="number.attributes">
patrick@12
  1153
    <optional>
patrick@12
  1154
      <ref name="number.value.attribute"/>
patrick@12
  1155
    </optional>
patrick@12
  1156
  </define>
patrick@12
  1157
  <define name="number.value.attribute">
patrick@12
  1158
    <attribute name="value">
patrick@12
  1159
      <choice>
patrick@12
  1160
        <data type="integer"/>
patrick@12
  1161
        <data type="decimal"/>
patrick@12
  1162
      </choice>
patrick@12
  1163
    </attribute>
patrick@12
  1164
  </define>
patrick@12
  1165
  <define name="number.content">
patrick@12
  1166
    <mixed>
patrick@12
  1167
      <zeroOrMore>
patrick@12
  1168
        <ref name="sup"/>
patrick@12
  1169
      </zeroOrMore>
patrick@12
  1170
    </mixed>
patrick@12
  1171
  </define>
patrick@12
  1172
  <define name="number.roman.content">
patrick@12
  1173
    <data type="token">
patrick@12
  1174
      <param name="pattern">[dlxvi]+</param>
patrick@12
  1175
    </data>
patrick@12
  1176
  </define>
patrick@36
  1177
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ date ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
  1178
  <define name="date">
patrick@0
  1179
    <element name="date">
patrick@0
  1180
      <ref name="date.attributes"/>
patrick@0
  1181
      <ref name="date.content"/>
patrick@0
  1182
    </element>
patrick@0
  1183
  </define>
patrick@0
  1184
  <define name="date.attributes">
patrick@12
  1185
    <interleave>
patrick@12
  1186
      <ref name="date.value.attribute"/>
patrick@12
  1187
      <optional>
patrick@12
  1188
        <ref name="date.of.attribute"/>
patrick@12
  1189
      </optional>
patrick@12
  1190
    </interleave>
patrick@12
  1191
  </define>
patrick@12
  1192
  <define name="date.value.attribute">
patrick@12
  1193
    <attribute name="value">
patrick@12
  1194
      <choice>
patrick@12
  1195
        <data type="date"/>
patrick@12
  1196
        <data type="gYearMonth"/>
patrick@12
  1197
        <data type="gYear"/>
patrick@12
  1198
      </choice>
patrick@12
  1199
    </attribute>
patrick@0
  1200
  </define>
patrick@0
  1201
  <define name="date.of.attribute">
patrick@0
  1202
    <attribute name="of">
patrick@33
  1203
      <choice>
patrick@33
  1204
        <value>birth</value>
patrick@33
  1205
        <value>death</value>
patrick@33
  1206
      </choice>
patrick@0
  1207
    </attribute>
patrick@0
  1208
  </define>
patrick@0
  1209
  <define name="date.content">
patrick@12
  1210
    <mixed>
patrick@12
  1211
      <zeroOrMore>
patrick@12
  1212
        <ref name="sup"/>
patrick@12
  1213
      </zeroOrMore>
patrick@12
  1214
    </mixed>
patrick@0
  1215
  </define>
patrick@36
  1216
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ name ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
  1217
  <define name="name">
patrick@0
  1218
    <element name="name">
patrick@0
  1219
      <ref name="name.attributes"/>
patrick@0
  1220
      <ref name="name.content"/>
patrick@0
  1221
    </element>
patrick@0
  1222
  </define>
patrick@0
  1223
  <define name="name.attributes">
patrick@0
  1224
    <optional>
patrick@0
  1225
      <ref name="name.of.attribute"/>
patrick@0
  1226
    </optional>
patrick@0
  1227
  </define>
patrick@0
  1228
  <define name="name.of.attribute">
patrick@0
  1229
    <attribute name="of">
patrick@33
  1230
      <choice>
patrick@33
  1231
        <value>person</value>
patrick@33
  1232
        <value>company</value>
patrick@33
  1233
        <value>book</value>
patrick@33
  1234
        <value>newspaper</value>
patrick@33
  1235
        <value>party</value>
patrick@33
  1236
      </choice>
patrick@0
  1237
    </attribute>
patrick@0
  1238
  </define>
patrick@2
  1239
  <define name="name.content">
patrick@2
  1240
    <ref name="inlines"/>
patrick@2
  1241
  </define>
patrick@36
  1242
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ note ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@5
  1243
  <define name="note">
patrick@5
  1244
    <element name="note">
patrick@5
  1245
      <ref name="note.attributes"/>
patrick@5
  1246
      <ref name="note.content"/>
patrick@0
  1247
    </element>
patrick@0
  1248
  </define>
patrick@5
  1249
  <define name="note.attributes">
patrick@0
  1250
    <optional>
patrick@5
  1251
      <ref name="note.label.attribute"/>
patrick@0
  1252
    </optional>
patrick@0
  1253
  </define>
patrick@5
  1254
  <define name="note.label.attribute">
patrick@0
  1255
    <attribute name="label"/>
patrick@0
  1256
  </define>
patrick@5
  1257
  <define name="note.content">
patrick@17
  1258
    <choice>
patrick@17
  1259
      <ref name="inlines"/>
patrick@17
  1260
      <oneOrMore>
patrick@20
  1261
        <ref name="p"/>
patrick@17
  1262
      </oneOrMore>
patrick@17
  1263
    </choice>
patrick@0
  1264
  </define>
patrick@36
  1265
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ foreign ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
  1266
  <define name="foreign">
patrick@0
  1267
    <element name="foreign">
patrick@0
  1268
      <ref name="foreign.attributes"/>
patrick@0
  1269
      <ref name="foreign.content"/>
patrick@0
  1270
    </element>
patrick@0
  1271
  </define>
patrick@0
  1272
  <define name="foreign.attributes">
patrick@0
  1273
    <optional>
patrick@0
  1274
      <ref name="lang.attribute"/>
patrick@0
  1275
    </optional>
patrick@0
  1276
  </define>
patrick@0
  1277
  <define name="foreign.content">
patrick@0
  1278
    <ref name="inlines"/>
patrick@0
  1279
  </define>
patrick@36
  1280
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ highlight ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
  1281
  <define name="highlight">
patrick@0
  1282
    <element name="highlight">
patrick@0
  1283
      <ref name="highlight.content"/>
patrick@0
  1284
    </element>
patrick@0
  1285
  </define>
patrick@0
  1286
  <define name="highlight.content">
patrick@0
  1287
    <ref name="inlines"/>
patrick@0
  1288
  </define>
patrick@36
  1289
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ mentioned ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@5
  1290
  <define name="mentioned">
patrick@5
  1291
    <element name="mentioned">
patrick@5
  1292
      <ref name="mentioned.content"/>
patrick@5
  1293
    </element>
patrick@5
  1294
  </define>
patrick@5
  1295
  <define name="mentioned.content">
patrick@5
  1296
    <ref name="inlines"/>
patrick@5
  1297
  </define>
patrick@36
  1298
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ quote ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@5
  1299
  <define name="quote">
patrick@5
  1300
    <element name="quote">
patrick@5
  1301
      <ref name="quote.content"/>
patrick@5
  1302
    </element>
patrick@5
  1303
  </define>
patrick@5
  1304
  <define name="quote.content">
patrick@5
  1305
    <ref name="inlines"/>
patrick@5
  1306
  </define>
patrick@36
  1307
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ acronym ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@8
  1308
  <define name="acronym">
patrick@8
  1309
    <element name="acronym">
patrick@8
  1310
      <ref name="acronym.content"/>
patrick@8
  1311
    </element>
patrick@8
  1312
  </define>
patrick@8
  1313
  <define name="acronym.content">
patrick@8
  1314
    <ref name="inlines"/>
patrick@8
  1315
  </define>
patrick@36
  1316
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ term ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@10
  1317
  <define name="term">
patrick@10
  1318
    <element name="term">
patrick@10
  1319
      <ref name="term.content"/>
patrick@10
  1320
    </element>
patrick@10
  1321
  </define>
patrick@10
  1322
  <define name="term.content">
patrick@10
  1323
    <ref name="inlines"/>
patrick@10
  1324
  </define>
patrick@36
  1325
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ link ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
  1326
  <define name="link">
patrick@0
  1327
    <element name="link">
patrick@0
  1328
      <ref name="link.attributes"/>
patrick@0
  1329
      <ref name="link.content"/>
patrick@0
  1330
    </element>
patrick@0
  1331
  </define>
patrick@0
  1332
  <define name="link.attributes">
patrick@43
  1333
    <choice>
patrick@43
  1334
      <ref name="uri.attribute"/>
patrick@43
  1335
      <ref name="idref.attribute"/>
patrick@43
  1336
    </choice>
patrick@10
  1337
  </define>
patrick@10
  1338
  <define name="uri.attribute">
patrick@10
  1339
    <attribute name="uri">
patrick@10
  1340
      <data type="anyURI"/>
patrick@10
  1341
    </attribute>
patrick@10
  1342
  </define>
patrick@10
  1343
  <define name="idref.attribute">
patrick@10
  1344
    <attribute name="idref">
patrick@10
  1345
      <data type="IDREF"/>
patrick@10
  1346
    </attribute>
patrick@0
  1347
  </define>
patrick@0
  1348
  <define name="link.content">
patrick@0
  1349
    <ref name="inlines"/>
patrick@0
  1350
  </define>
patrick@42
  1351
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ anchor ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@42
  1352
  <define name="anchor">
patrick@42
  1353
    <element name="anchor">
patrick@43
  1354
      <ref name="anchor.attributes"/>
patrick@42
  1355
    </element>
patrick@42
  1356
  </define>
patrick@42
  1357
  <define name="anchor.attributes">
patrick@42
  1358
    <ref name="anchor.id.attribute"/>
patrick@42
  1359
  </define>
patrick@42
  1360
  <define name="anchor.id.attribute">
patrick@42
  1361
    <attribute name="xml:id">
patrick@42
  1362
      <data type="ID"/>
patrick@42
  1363
    </attribute>
patrick@42
  1364
  </define>
patrick@0
  1365
</grammar>