RelaxNG/publidoc.rng
author Patrick PIERRE <patrick.pierre@prismallia.fr>
sam., 04 juin 2011 09:01:30 +0200
changeset 0 41a5385c69a2
child 2 417bb62f2a77
permissions -rw-r--r--
Version initiale
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
  <!-- ~~~~~~ attributes -->
patrick@0
    14
  <define name="publidoc.attributes">
patrick@0
    15
    <ref name="version.attribute"/>
patrick@0
    16
  </define>
patrick@0
    17
  <define name="version.attribute">
patrick@0
    18
    <attribute name="version">
patrick@0
    19
      <value>1.0</value>
patrick@0
    20
    </attribute>
patrick@0
    21
  </define>
patrick@0
    22
  <!-- ~~~~~~ content -->
patrick@0
    23
  <define name="publidoc.content">
patrick@0
    24
    <choice>
patrick@0
    25
      <ref name="document"/>
patrick@0
    26
      <ref name="top.topic"/>
patrick@0
    27
    </choice>
patrick@0
    28
  </define>
patrick@0
    29
  <!--
patrick@0
    30
    =============================================================================
patrick@0
    31
                                     Top level
patrick@0
    32
    =============================================================================
patrick@0
    33
  -->
patrick@0
    34
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ document ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
    35
  <define name="document">
patrick@0
    36
    <element name="document">
patrick@0
    37
      <ref name="document.attributes"/>
patrick@0
    38
      <ref name="document.content"/>
patrick@0
    39
    </element>
patrick@0
    40
  </define>
patrick@0
    41
  <!-- ~~~~~~ attributes -->
patrick@0
    42
  <define name="document.attributes">
patrick@0
    43
    <ref name="document.id.attribute"/>
patrick@0
    44
  </define>
patrick@0
    45
  <define name="document.id.attribute">
patrick@0
    46
    <attribute name="xml:id">
patrick@0
    47
      <data type="ID"/>
patrick@0
    48
    </attribute>
patrick@0
    49
  </define>
patrick@0
    50
  <!-- ~~~~~~ content -->
patrick@0
    51
  <define name="document.content">
patrick@0
    52
    <optional>
patrick@0
    53
      <ref name="metadata"/>
patrick@0
    54
    </optional>
patrick@0
    55
    <choice>
patrick@0
    56
      <oneOrMore>
patrick@0
    57
        <ref name="division"/>
patrick@0
    58
      </oneOrMore>
patrick@0
    59
      <oneOrMore>
patrick@0
    60
        <ref name="topic"/>
patrick@0
    61
      </oneOrMore>
patrick@0
    62
    </choice>
patrick@0
    63
  </define>
patrick@0
    64
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ topic ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
    65
  <define name="top.topic">
patrick@0
    66
    <element name="topic">
patrick@0
    67
      <ref name="top.topic.attributes"/>
patrick@0
    68
      <ref name="topic.content"/>
patrick@0
    69
    </element>
patrick@0
    70
  </define>
patrick@0
    71
  <!--
patrick@0
    72
    =============================================================================
patrick@0
    73
                                  Metadata level
patrick@0
    74
    =============================================================================
patrick@0
    75
  -->
patrick@0
    76
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ metadata ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
    77
  <define name="metadata">
patrick@0
    78
    <element name="metadata">
patrick@0
    79
      <ref name="metadata.content"/>
patrick@0
    80
    </element>
patrick@0
    81
  </define>
patrick@0
    82
  <define name="metadata.content">
patrick@0
    83
    <interleave>
patrick@0
    84
      <ref name="title"/>
patrick@0
    85
      <optional>
patrick@0
    86
        <ref name="subtitle"/>
patrick@0
    87
      </optional>
patrick@0
    88
      <zeroOrMore>
patrick@0
    89
        <ref name="author"/>
patrick@0
    90
      </zeroOrMore>
patrick@0
    91
      <optional>
patrick@0
    92
        <ref name="publisher"/>
patrick@0
    93
      </optional>
patrick@0
    94
      <optional>
patrick@0
    95
        <ref name="language"/>
patrick@0
    96
      </optional>
patrick@0
    97
      <optional>
patrick@0
    98
        <ref name="date"/>
patrick@0
    99
      </optional>
patrick@0
   100
      <optional>
patrick@0
   101
        <ref name="place"/>
patrick@0
   102
      </optional>
patrick@0
   103
      <zeroOrMore>
patrick@0
   104
        <ref name="source"/>
patrick@0
   105
      </zeroOrMore>
patrick@0
   106
      <optional>
patrick@0
   107
        <ref name="subjectset"/>
patrick@0
   108
      </optional>
patrick@0
   109
      <optional>
patrick@0
   110
        <ref name="abstract"/>
patrick@0
   111
      </optional>
patrick@0
   112
      <zeroOrMore>
patrick@0
   113
        <ref name="annotation"/>
patrick@0
   114
      </zeroOrMore>
patrick@0
   115
    </interleave>
patrick@0
   116
  </define>
patrick@0
   117
  <define name="language">
patrick@0
   118
    <element name="language">
patrick@0
   119
      <ref name="language.attributes"/>
patrick@0
   120
    </element>
patrick@0
   121
  </define>
patrick@0
   122
  <define name="language.attributes">
patrick@0
   123
    <ref name="lang.attribute"/>
patrick@0
   124
  </define>
patrick@0
   125
  <define name="lang.attribute">
patrick@0
   126
    <attribute name="xml:lang">
patrick@0
   127
      <data type="language"/>
patrick@0
   128
    </attribute>
patrick@0
   129
  </define>
patrick@0
   130
  <define name="place">
patrick@0
   131
    <element name="place">
patrick@0
   132
      <ref name="place.content"/>
patrick@0
   133
    </element>
patrick@0
   134
  </define>
patrick@0
   135
  <define name="place.content">
patrick@0
   136
    <ref name="inlines"/>
patrick@0
   137
  </define>
patrick@0
   138
  <define name="abstract">
patrick@0
   139
    <element name="abstract">
patrick@0
   140
      <ref name="abstract.content"/>
patrick@0
   141
    </element>
patrick@0
   142
  </define>
patrick@0
   143
  <define name="abstract.content">
patrick@0
   144
    <oneOrMore>
patrick@0
   145
      <ref name="parag"/>
patrick@0
   146
    </oneOrMore>
patrick@0
   147
  </define>
patrick@0
   148
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ title, subtitle ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
   149
  <define name="title">
patrick@0
   150
    <element name="title">
patrick@0
   151
      <ref name="title.content"/>
patrick@0
   152
    </element>
patrick@0
   153
  </define>
patrick@0
   154
  <define name="title.content">
patrick@0
   155
    <ref name="inlines"/>
patrick@0
   156
  </define>
patrick@0
   157
  <define name="subtitle">
patrick@0
   158
    <element name="subtitle">
patrick@0
   159
      <ref name="title.content"/>
patrick@0
   160
    </element>
patrick@0
   161
  </define>
patrick@0
   162
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ author, publisher ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
   163
  <define name="author">
patrick@0
   164
    <element name="author">
patrick@0
   165
      <ref name="author.content"/>
patrick@0
   166
    </element>
patrick@0
   167
  </define>
patrick@0
   168
  <define name="author.content">
patrick@0
   169
    <optional>
patrick@0
   170
      <ref name="firstname"/>
patrick@0
   171
    </optional>
patrick@0
   172
    <ref name="lastname"/>
patrick@0
   173
  </define>
patrick@0
   174
  <define name="publisher">
patrick@0
   175
    <element name="publisher">
patrick@0
   176
      <ref name="publisher.content"/>
patrick@0
   177
    </element>
patrick@0
   178
  </define>
patrick@0
   179
  <define name="publisher.content">
patrick@0
   180
    <ref name="inlines"/>
patrick@0
   181
  </define>
patrick@0
   182
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ source ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
   183
  <define name="source">
patrick@0
   184
    <element name="source">
patrick@0
   185
      <ref name="source.attributes"/>
patrick@0
   186
      <choice>
patrick@0
   187
        <group>
patrick@0
   188
          <attribute name="type">
patrick@0
   189
            <value>book</value>
patrick@0
   190
          </attribute>
patrick@0
   191
          <ref name="source.content.book"/>
patrick@0
   192
        </group>
patrick@0
   193
        <attribute name="type">
patrick@0
   194
          <value>file</value>
patrick@0
   195
        </attribute>
patrick@0
   196
      </choice>
patrick@0
   197
      <ref name="source.content"/>
patrick@0
   198
    </element>
patrick@0
   199
  </define>
patrick@0
   200
  <!-- ~~~~~~ Attributes -->
patrick@0
   201
  <define name="source.attributes">
patrick@0
   202
    <ref name="source.id.attribute"/>
patrick@0
   203
  </define>
patrick@0
   204
  <define name="source.id.attribute">
patrick@0
   205
    <attribute name="id">
patrick@0
   206
      <data type="NMTOKEN"/>
patrick@0
   207
    </attribute>
patrick@0
   208
  </define>
patrick@0
   209
  <!-- ~~~~~~ Content -->
patrick@0
   210
  <define name="source.content.book">
patrick@0
   211
    <ref name="title"/>
patrick@0
   212
    <zeroOrMore>
patrick@0
   213
      <ref name="pagenumber"/>
patrick@0
   214
    </zeroOrMore>
patrick@0
   215
  </define>
patrick@0
   216
  <define name="source.content">
patrick@0
   217
    <zeroOrMore>
patrick@0
   218
      <ref name="annotation"/>
patrick@0
   219
    </zeroOrMore>
patrick@0
   220
  </define>
patrick@0
   221
  <define name="pagenumber">
patrick@0
   222
    <element name="pagenumber">
patrick@0
   223
      <ref name="pagenumber.attributes"/>
patrick@0
   224
    </element>
patrick@0
   225
  </define>
patrick@0
   226
  <define name="pagenumber.attributes">
patrick@0
   227
    <ref name="pagenumber.value.attribute"/>
patrick@0
   228
  </define>
patrick@0
   229
  <define name="pagenumber.value.attribute">
patrick@0
   230
    <attribute name="value">
patrick@0
   231
      <ref name="pagenumber.value.enumeration"/>
patrick@0
   232
    </attribute>
patrick@0
   233
  </define>
patrick@0
   234
  <define name="pagenumber.value.enumeration">
patrick@0
   235
    <data type="positiveInteger"/>
patrick@0
   236
  </define>
patrick@0
   237
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ subject ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
   238
  <define name="subjectset">
patrick@0
   239
    <element name="subjectset">
patrick@0
   240
      <ref name="subjectset.content"/>
patrick@0
   241
    </element>
patrick@0
   242
  </define>
patrick@0
   243
  <define name="subjectset.content">
patrick@0
   244
    <oneOrMore>
patrick@0
   245
      <ref name="subject"/>
patrick@0
   246
    </oneOrMore>
patrick@0
   247
  </define>
patrick@0
   248
  <define name="subject">
patrick@0
   249
    <element name="subject">
patrick@0
   250
      <ref name="subject.attributes"/>
patrick@0
   251
    </element>
patrick@0
   252
  </define>
patrick@0
   253
  <define name="subject.attributes">
patrick@0
   254
    <ref name="subject.id.attribute"/>
patrick@0
   255
  </define>
patrick@0
   256
  <define name="subject.id.attribute">
patrick@0
   257
    <attribute name="id">
patrick@0
   258
      <data type="NMTOKEN"/>
patrick@0
   259
    </attribute>
patrick@0
   260
  </define>
patrick@0
   261
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ annotation ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
   262
  <define name="annotation">
patrick@0
   263
    <element name="annotation">
patrick@0
   264
      <ref name="annotation.content"/>
patrick@0
   265
    </element>
patrick@0
   266
  </define>
patrick@0
   267
  <define name="annotation.content">
patrick@0
   268
    <ref name="inlines"/>
patrick@0
   269
  </define>
patrick@0
   270
  <!--
patrick@0
   271
    =============================================================================
patrick@0
   272
                                    Division level
patrick@0
   273
    =============================================================================
patrick@0
   274
  -->
patrick@0
   275
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ division ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
   276
  <define name="division">
patrick@0
   277
    <element name="division">
patrick@0
   278
      <ref name="division.content"/>
patrick@0
   279
    </element>
patrick@0
   280
  </define>
patrick@0
   281
  <define name="division.content">
patrick@0
   282
    <optional>
patrick@0
   283
      <ref name="metadata"/>
patrick@0
   284
    </optional>
patrick@0
   285
    <choice>
patrick@0
   286
      <oneOrMore>
patrick@0
   287
        <ref name="division"/>
patrick@0
   288
      </oneOrMore>
patrick@0
   289
      <oneOrMore>
patrick@0
   290
        <ref name="topic"/>
patrick@0
   291
      </oneOrMore>
patrick@0
   292
    </choice>
patrick@0
   293
  </define>
patrick@0
   294
  <!--
patrick@0
   295
    =============================================================================
patrick@0
   296
                                  Component level
patrick@0
   297
    =============================================================================
patrick@0
   298
  -->
patrick@0
   299
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ topic ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
   300
  <define name="topic">
patrick@0
   301
    <element name="topic">
patrick@0
   302
      <ref name="topic.attributes"/>
patrick@0
   303
      <ref name="topic.content"/>
patrick@0
   304
    </element>
patrick@0
   305
  </define>
patrick@0
   306
  <!-- ~~~~~~ attributes -->
patrick@0
   307
  <define name="top.topic.attributes">
patrick@0
   308
    <interleave>
patrick@0
   309
      <ref name="topic.id.attribute"/>
patrick@0
   310
      <optional>
patrick@0
   311
        <ref name="topic.type.attribute"/>
patrick@0
   312
      </optional>
patrick@0
   313
    </interleave>
patrick@0
   314
  </define>
patrick@0
   315
  <define name="topic.attributes">
patrick@0
   316
    <interleave>
patrick@0
   317
      <optional>
patrick@0
   318
        <ref name="topic.id.attribute"/>
patrick@0
   319
      </optional>
patrick@0
   320
      <optional>
patrick@0
   321
        <ref name="topic.type.attribute"/>
patrick@0
   322
      </optional>
patrick@0
   323
    </interleave>
patrick@0
   324
  </define>
patrick@0
   325
  <define name="topic.id.attribute">
patrick@0
   326
    <attribute name="xml:id">
patrick@0
   327
      <data type="ID"/>
patrick@0
   328
    </attribute>
patrick@0
   329
  </define>
patrick@0
   330
  <define name="topic.type.attribute">
patrick@0
   331
    <attribute name="type">
patrick@0
   332
      <data type="NCName"/>
patrick@0
   333
    </attribute>
patrick@0
   334
  </define>
patrick@0
   335
  <!-- ~~~~~~ content -->
patrick@0
   336
  <define name="topic.content">
patrick@0
   337
    <optional>
patrick@0
   338
      <ref name="metadata"/>
patrick@0
   339
    </optional>
patrick@0
   340
    <oneOrMore>
patrick@0
   341
      <ref name="section"/>
patrick@0
   342
    </oneOrMore>
patrick@0
   343
  </define>
patrick@0
   344
  <!--
patrick@0
   345
    =============================================================================
patrick@0
   346
                                    Section level
patrick@0
   347
    =============================================================================
patrick@0
   348
  -->
patrick@0
   349
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ section ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
   350
  <define name="section">
patrick@0
   351
    <element name="section">
patrick@0
   352
      <ref name="section.content"/>
patrick@0
   353
      <ref name="section.attributes"/>
patrick@0
   354
    </element>
patrick@0
   355
  </define>
patrick@0
   356
  <define name="section.content">
patrick@0
   357
    <optional>
patrick@0
   358
      <ref name="metadata"/>
patrick@0
   359
    </optional>
patrick@0
   360
    <choice>
patrick@0
   361
      <oneOrMore>
patrick@0
   362
        <ref name="section"/>
patrick@0
   363
      </oneOrMore>
patrick@0
   364
      <oneOrMore>
patrick@0
   365
        <choice>
patrick@0
   366
          <ref name="parag"/>
patrick@0
   367
          <ref name="media"/>
patrick@0
   368
        </choice>
patrick@0
   369
      </oneOrMore>
patrick@0
   370
    </choice>
patrick@0
   371
  </define>
patrick@0
   372
  <define name="section.attributes">
patrick@0
   373
    <optional>
patrick@0
   374
      <ref name="status.attribute"/>
patrick@0
   375
    </optional>
patrick@0
   376
  </define>
patrick@0
   377
  <define name="status.attribute">
patrick@0
   378
    <attribute name="status">
patrick@0
   379
      <data type="NCName"/>
patrick@0
   380
    </attribute>
patrick@0
   381
  </define>
patrick@0
   382
  <!--
patrick@0
   383
    =============================================================================
patrick@0
   384
                                    Block level
patrick@0
   385
    =============================================================================
patrick@0
   386
  -->
patrick@0
   387
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ parag ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
   388
  <define name="parag">
patrick@0
   389
    <element name="parag">
patrick@0
   390
      <ref name="parag.content"/>
patrick@0
   391
    </element>
patrick@0
   392
  </define>
patrick@0
   393
  <define name="parag.content">
patrick@0
   394
    <interleave>
patrick@0
   395
      <ref name="inlines"/>
patrick@0
   396
      <zeroOrMore>
patrick@0
   397
        <ref name="link"/>
patrick@0
   398
      </zeroOrMore>
patrick@0
   399
    </interleave>
patrick@0
   400
  </define>
patrick@0
   401
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ media ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
   402
  <define name="media">
patrick@0
   403
    <element name="media">
patrick@0
   404
      <ref name="media.content"/>
patrick@0
   405
    </element>
patrick@0
   406
  </define>
patrick@0
   407
  <define name="media.content">
patrick@0
   408
    <oneOrMore>
patrick@0
   409
      <ref name="image"/>
patrick@0
   410
    </oneOrMore>
patrick@0
   411
    <optional>
patrick@0
   412
      <ref name="media.caption"/>
patrick@0
   413
    </optional>
patrick@0
   414
  </define>
patrick@0
   415
  <define name="media.id.attribute">
patrick@0
   416
    <attribute name="id">
patrick@0
   417
      <data type="NMTOKEN"/>
patrick@0
   418
    </attribute>
patrick@0
   419
  </define>
patrick@0
   420
  <define name="media.caption">
patrick@0
   421
    <element name="caption">
patrick@0
   422
      <ref name="media.caption.content"/>
patrick@0
   423
    </element>
patrick@0
   424
  </define>
patrick@0
   425
  <define name="media.caption.content">
patrick@0
   426
    <oneOrMore>
patrick@0
   427
      <ref name="parag"/>
patrick@0
   428
    </oneOrMore>
patrick@0
   429
  </define>
patrick@0
   430
  <!-- ~~~~~~ Image -->
patrick@0
   431
  <define name="image">
patrick@0
   432
    <element name="image">
patrick@0
   433
      <ref name="image.attributes"/>
patrick@0
   434
      <ref name="image.content"/>
patrick@0
   435
    </element>
patrick@0
   436
  </define>
patrick@0
   437
  <define name="image.attributes">
patrick@0
   438
    <ref name="media.id.attribute"/>
patrick@0
   439
  </define>
patrick@0
   440
  <define name="image.content">
patrick@0
   441
    <optional>
patrick@0
   442
      <ref name="copyright"/>
patrick@0
   443
    </optional>
patrick@0
   444
  </define>
patrick@0
   445
  <define name="copyright">
patrick@0
   446
    <element name="copyright">
patrick@0
   447
      <ref name="copyright.content"/>
patrick@0
   448
    </element>
patrick@0
   449
  </define>
patrick@0
   450
  <define name="copyright.content">
patrick@0
   451
    <ref name="inlines"/>
patrick@0
   452
  </define>
patrick@0
   453
  <!--
patrick@0
   454
    =============================================================================
patrick@0
   455
                                    Inline level
patrick@0
   456
    =============================================================================
patrick@0
   457
  -->
patrick@0
   458
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ inlines ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
   459
  <define name="inlines">
patrick@0
   460
    <mixed>
patrick@0
   461
      <interleave>
patrick@0
   462
        <zeroOrMore>
patrick@0
   463
          <ref name="sup"/>
patrick@0
   464
        </zeroOrMore>
patrick@0
   465
        <zeroOrMore>
patrick@0
   466
          <ref name="sub"/>
patrick@0
   467
        </zeroOrMore>
patrick@0
   468
        <zeroOrMore>
patrick@0
   469
          <ref name="romannum"/>
patrick@0
   470
        </zeroOrMore>
patrick@0
   471
        <zeroOrMore>
patrick@0
   472
          <ref name="date"/>
patrick@0
   473
        </zeroOrMore>
patrick@0
   474
        <zeroOrMore>
patrick@0
   475
          <ref name="name"/>
patrick@0
   476
        </zeroOrMore>
patrick@0
   477
        <zeroOrMore>
patrick@0
   478
          <ref name="footnote"/>
patrick@0
   479
        </zeroOrMore>
patrick@0
   480
        <zeroOrMore>
patrick@0
   481
          <ref name="foreign"/>
patrick@0
   482
        </zeroOrMore>
patrick@0
   483
        <zeroOrMore>
patrick@0
   484
          <ref name="highlight"/>
patrick@0
   485
        </zeroOrMore>
patrick@0
   486
      </interleave>
patrick@0
   487
    </mixed>
patrick@0
   488
  </define>
patrick@0
   489
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sub, sup ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
   490
  <define name="sup">
patrick@0
   491
    <element name="sup">
patrick@0
   492
      <ref name="inlines"/>
patrick@0
   493
    </element>
patrick@0
   494
  </define>
patrick@0
   495
  <define name="sub">
patrick@0
   496
    <element name="sub">
patrick@0
   497
      <ref name="inlines"/>
patrick@0
   498
    </element>
patrick@0
   499
  </define>
patrick@0
   500
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ romannum ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
   501
  <define name="romannum">
patrick@0
   502
    <element name="romannum">
patrick@0
   503
      <data type="token">
patrick@0
   504
        <param name="pattern">([dlxvi]+)</param>
patrick@0
   505
      </data>
patrick@0
   506
    </element>
patrick@0
   507
  </define>
patrick@0
   508
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ date ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
   509
  <define name="date">
patrick@0
   510
    <element name="date">
patrick@0
   511
      <ref name="date.attributes"/>
patrick@0
   512
      <ref name="date.content"/>
patrick@0
   513
    </element>
patrick@0
   514
  </define>
patrick@0
   515
  <define name="date.attributes">
patrick@0
   516
    <ref name="date.of.attribute"/>
patrick@0
   517
  </define>
patrick@0
   518
  <define name="date.of.attribute">
patrick@0
   519
    <attribute name="of">
patrick@0
   520
      <ref name="date.of.enumeration"/>
patrick@0
   521
    </attribute>
patrick@0
   522
  </define>
patrick@0
   523
  <define name="date.of.enumeration">
patrick@0
   524
    <choice>
patrick@0
   525
      <value>event</value>
patrick@0
   526
      <value>birth</value>
patrick@0
   527
      <value>death</value>
patrick@0
   528
    </choice>
patrick@0
   529
  </define>
patrick@0
   530
  <define name="date.content">
patrick@0
   531
    <choice>
patrick@0
   532
      <data type="date"/>
patrick@0
   533
      <data type="gYearMonth"/>
patrick@0
   534
      <data type="gYear"/>
patrick@0
   535
    </choice>
patrick@0
   536
  </define>
patrick@0
   537
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ name ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
   538
  <define name="firstname">
patrick@0
   539
    <element name="firstname">
patrick@0
   540
      <ref name="inlines"/>
patrick@0
   541
    </element>
patrick@0
   542
  </define>
patrick@0
   543
  <define name="lastname">
patrick@0
   544
    <element name="lastname">
patrick@0
   545
      <ref name="inlines"/>
patrick@0
   546
    </element>
patrick@0
   547
  </define>
patrick@0
   548
  <define name="name">
patrick@0
   549
    <element name="name">
patrick@0
   550
      <ref name="name.attributes"/>
patrick@0
   551
      <ref name="name.content"/>
patrick@0
   552
    </element>
patrick@0
   553
  </define>
patrick@0
   554
  <define name="name.attributes">
patrick@0
   555
    <optional>
patrick@0
   556
      <ref name="name.of.attribute"/>
patrick@0
   557
    </optional>
patrick@0
   558
  </define>
patrick@0
   559
  <define name="name.content">
patrick@0
   560
    <ref name="inlines"/>
patrick@0
   561
  </define>
patrick@0
   562
  <define name="name.of.attribute">
patrick@0
   563
    <attribute name="of">
patrick@0
   564
      <ref name="name.of.enumeration"/>
patrick@0
   565
    </attribute>
patrick@0
   566
  </define>
patrick@0
   567
  <define name="name.of.enumeration">
patrick@0
   568
    <choice>
patrick@0
   569
      <value>person</value>
patrick@0
   570
      <value>company</value>
patrick@0
   571
      <value>book</value>
patrick@0
   572
      <value>newspaper</value>
patrick@0
   573
      <value>party</value>
patrick@0
   574
    </choice>
patrick@0
   575
  </define>
patrick@0
   576
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ footnote ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
   577
  <define name="footnote">
patrick@0
   578
    <element name="footnote">
patrick@0
   579
      <ref name="footnote.attributes"/>
patrick@0
   580
      <ref name="footnote.content"/>
patrick@0
   581
    </element>
patrick@0
   582
  </define>
patrick@0
   583
  <define name="footnote.attributes">
patrick@0
   584
    <optional>
patrick@0
   585
      <ref name="footnote.label.attribute"/>
patrick@0
   586
    </optional>
patrick@0
   587
  </define>
patrick@0
   588
  <define name="footnote.label.attribute">
patrick@0
   589
    <attribute name="label"/>
patrick@0
   590
  </define>
patrick@0
   591
  <define name="footnote.content">
patrick@0
   592
    <oneOrMore>
patrick@0
   593
      <ref name="parag"/>
patrick@0
   594
    </oneOrMore>
patrick@0
   595
  </define>
patrick@0
   596
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ foreign ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
   597
  <define name="foreign">
patrick@0
   598
    <element name="foreign">
patrick@0
   599
      <ref name="foreign.attributes"/>
patrick@0
   600
      <ref name="foreign.content"/>
patrick@0
   601
    </element>
patrick@0
   602
  </define>
patrick@0
   603
  <define name="foreign.attributes">
patrick@0
   604
    <optional>
patrick@0
   605
      <ref name="lang.attribute"/>
patrick@0
   606
    </optional>
patrick@0
   607
  </define>
patrick@0
   608
  <define name="foreign.content">
patrick@0
   609
    <ref name="inlines"/>
patrick@0
   610
  </define>
patrick@0
   611
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ highlight ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
   612
  <define name="highlight">
patrick@0
   613
    <element name="highlight">
patrick@0
   614
      <ref name="highlight.content"/>
patrick@0
   615
    </element>
patrick@0
   616
  </define>
patrick@0
   617
  <define name="highlight.content">
patrick@0
   618
    <ref name="inlines"/>
patrick@0
   619
  </define>
patrick@0
   620
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ link ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
   621
  <define name="link">
patrick@0
   622
    <element name="link">
patrick@0
   623
      <ref name="link.attributes"/>
patrick@0
   624
      <ref name="link.content"/>
patrick@0
   625
    </element>
patrick@0
   626
  </define>
patrick@0
   627
  <define name="link.attributes">
patrick@0
   628
    <empty/>
patrick@0
   629
  </define>
patrick@0
   630
  <define name="link.content">
patrick@0
   631
    <ref name="inlines"/>
patrick@0
   632
  </define>
patrick@0
   633
</grammar>