RelaxNG/publiset.rng
author Patrick PIERRE <patrick.pierre@prismallia.fr>
mar., 19 juil. 2011 18:16:50 +0200
changeset 37 83b7ec3c3132
parent 36 d23cfb7be79e
child 38 3c8b406be906
permissions -rw-r--r--
media dans table
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="publiset"/>
patrick@0
     6
  </start>
patrick@0
     7
  <define name="publiset">
patrick@0
     8
    <element name="publiset">
patrick@0
     9
      <ref name="publiset.attributes"/>
patrick@0
    10
      <ref name="publiset.content"/>
patrick@0
    11
    </element>
patrick@0
    12
  </define>
patrick@0
    13
  <define name="publiset.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="publiset.content">
patrick@0
    22
    <oneOrMore>
patrick@0
    23
      <choice>
patrick@0
    24
        <ref name="composition"/>
patrick@0
    25
        <ref name="selection"/>
patrick@0
    26
      </choice>
patrick@0
    27
    </oneOrMore>
patrick@0
    28
  </define>
patrick@0
    29
  <!--
patrick@0
    30
    =============================================================================
patrick@20
    31
                                     TOP LEVEL
patrick@0
    32
    =============================================================================
patrick@0
    33
  -->
patrick@0
    34
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ composition ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
    35
  <define name="composition">
patrick@0
    36
    <element name="composition">
patrick@0
    37
      <ref name="composition.attributes"/>
patrick@0
    38
      <ref name="composition.content"/>
patrick@0
    39
    </element>
patrick@0
    40
  </define>
patrick@0
    41
  <define name="composition.attributes">
patrick@0
    42
    <interleave>
patrick@0
    43
      <ref name="composition.id.attribute"/>
patrick@29
    44
      <optional>
patrick@29
    45
        <ref name="path.attribute"/>
patrick@29
    46
      </optional>
patrick@29
    47
      <optional>
patrick@29
    48
        <ref name="xpath.attribute"/>
patrick@29
    49
      </optional>
patrick@29
    50
      <optional>
patrick@29
    51
        <ref name="xslt.attribute"/>
patrick@29
    52
      </optional>
patrick@0
    53
      <ref name="remap.attributes"/>
patrick@0
    54
    </interleave>
patrick@0
    55
  </define>
patrick@0
    56
  <define name="composition.id.attribute">
patrick@0
    57
    <attribute name="xml:id">
patrick@0
    58
      <data type="ID"/>
patrick@0
    59
    </attribute>
patrick@0
    60
  </define>
patrick@29
    61
  <define name="path.attribute">
patrick@29
    62
    <attribute name="path">
patrick@29
    63
      <data type="anyURI"/>
patrick@29
    64
    </attribute>
patrick@29
    65
  </define>
patrick@29
    66
  <define name="xslt.attribute">
patrick@29
    67
    <attribute name="xslt">
patrick@29
    68
      <data type="anyURI"/>
patrick@29
    69
    </attribute>
patrick@29
    70
  </define>
patrick@29
    71
  <define name="xpath.attribute">
patrick@29
    72
    <attribute name="xpath"/>
patrick@29
    73
  </define>
patrick@0
    74
  <define name="composition.content">
patrick@0
    75
    <optional>
patrick@20
    76
      <ref name="composition.head"/>
patrick@0
    77
    </optional>
patrick@0
    78
    <oneOrMore>
patrick@0
    79
      <choice>
patrick@30
    80
        <ref name="composition.division"/>
patrick@0
    81
        <ref name="composition.file"/>
patrick@0
    82
      </choice>
patrick@0
    83
    </oneOrMore>
patrick@0
    84
  </define>
patrick@0
    85
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ selection ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
    86
  <define name="selection">
patrick@0
    87
    <element name="selection">
patrick@0
    88
      <ref name="selection.attributes"/>
patrick@0
    89
      <ref name="selection.content"/>
patrick@0
    90
    </element>
patrick@0
    91
  </define>
patrick@0
    92
  <define name="selection.attributes">
patrick@29
    93
    <interleave>
patrick@29
    94
      <ref name="selection.id.attribute"/>
patrick@29
    95
      <optional>
patrick@29
    96
        <ref name="path.attribute"/>
patrick@29
    97
      </optional>
patrick@29
    98
    </interleave>
patrick@0
    99
  </define>
patrick@0
   100
  <define name="selection.id.attribute">
patrick@0
   101
    <attribute name="xml:id">
patrick@0
   102
      <data type="ID"/>
patrick@0
   103
    </attribute>
patrick@0
   104
  </define>
patrick@0
   105
  <define name="selection.content">
patrick@0
   106
    <optional>
patrick@20
   107
      <ref name="selection.head"/>
patrick@0
   108
    </optional>
patrick@0
   109
    <oneOrMore>
patrick@0
   110
      <choice>
patrick@30
   111
        <ref name="selection.division"/>
patrick@0
   112
        <ref name="selection.file"/>
patrick@30
   113
        <ref name="link"/>
patrick@0
   114
      </choice>
patrick@0
   115
    </oneOrMore>
patrick@0
   116
  </define>
patrick@0
   117
  <!--
patrick@0
   118
    =============================================================================
patrick@20
   119
                                     HEAD LEVEL
patrick@0
   120
    =============================================================================
patrick@0
   121
  -->
patrick@20
   122
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ head ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@20
   123
  <define name="composition.head">
patrick@20
   124
    <element name="head">
patrick@20
   125
      <ref name="head.attributes"/>
patrick@20
   126
      <ref name="top.head.content"/>
patrick@0
   127
    </element>
patrick@0
   128
  </define>
patrick@20
   129
  <define name="selection.head">
patrick@20
   130
    <element name="head">
patrick@20
   131
      <ref name="top.head.content"/>
patrick@0
   132
    </element>
patrick@0
   133
  </define>
patrick@20
   134
  <define name="division.head">
patrick@20
   135
    <element name="head">
patrick@20
   136
      <ref name="division.head.content"/>
patrick@20
   137
    </element>
patrick@20
   138
  </define>
patrick@20
   139
  <define name="head.attributes">
patrick@0
   140
    <ref name="remap.attributes"/>
patrick@0
   141
  </define>
patrick@20
   142
  <define name="top.head.content">
patrick@5
   143
    <interleave>
patrick@5
   144
      <optional>
patrick@5
   145
        <ref name="title"/>
patrick@20
   146
        <optional>
patrick@20
   147
          <ref name="subtitle"/>
patrick@20
   148
        </optional>
patrick@5
   149
      </optional>
patrick@34
   150
      <zeroOrMore>
patrick@34
   151
        <ref name="identifier"/>
patrick@34
   152
      </zeroOrMore>
patrick@5
   153
      <optional>
patrick@20
   154
        <ref name="language"/>
patrick@5
   155
      </optional>
patrick@5
   156
      <zeroOrMore>
patrick@5
   157
        <ref name="author"/>
patrick@5
   158
      </zeroOrMore>
patrick@5
   159
      <optional>
patrick@5
   160
        <ref name="publisher"/>
patrick@5
   161
      </optional>
patrick@5
   162
      <optional>
patrick@20
   163
        <ref name="source"/>
patrick@20
   164
      </optional>
patrick@35
   165
      <optional>
patrick@35
   166
        <ref name="cover"/>
patrick@35
   167
      </optional>
patrick@20
   168
    </interleave>
patrick@20
   169
  </define>
patrick@20
   170
  <define name="division.head.content">
patrick@20
   171
    <interleave>
patrick@20
   172
      <optional>
patrick@20
   173
        <ref name="title"/>
patrick@20
   174
        <optional>
patrick@20
   175
          <ref name="subtitle"/>
patrick@20
   176
        </optional>
patrick@20
   177
      </optional>
patrick@20
   178
      <optional>
patrick@5
   179
        <ref name="language"/>
patrick@5
   180
      </optional>
patrick@5
   181
    </interleave>
patrick@0
   182
  </define>
patrick@0
   183
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ title, subtitle ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
   184
  <define name="title">
patrick@0
   185
    <element name="title">
patrick@0
   186
      <ref name="title.content"/>
patrick@0
   187
    </element>
patrick@0
   188
  </define>
patrick@0
   189
  <define name="subtitle">
patrick@0
   190
    <element name="subtitle">
patrick@0
   191
      <ref name="title.content"/>
patrick@0
   192
    </element>
patrick@0
   193
  </define>
patrick@20
   194
  <define name="title.content">
patrick@20
   195
    <ref name="inlines"/>
patrick@20
   196
  </define>
patrick@34
   197
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ identifier ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@34
   198
  <define name="identifier">
patrick@34
   199
    <element name="identifier">
patrick@34
   200
      <ref name="identifier.content"/>
patrick@34
   201
      <ref name="identifier.attributes"/>
patrick@34
   202
    </element>
patrick@34
   203
  </define>
patrick@34
   204
  <define name="identifier.attributes">
patrick@34
   205
    <ref name="class.attribute"/>
patrick@34
   206
  </define>
patrick@34
   207
  <define name="class.attribute">
patrick@34
   208
    <attribute name="class">
patrick@34
   209
      <choice>
patrick@34
   210
        <value>uri</value>
patrick@34
   211
        <value>ean</value>
patrick@34
   212
      </choice>
patrick@34
   213
    </attribute>
patrick@34
   214
  </define>
patrick@34
   215
  <define name="identifier.content">
patrick@34
   216
    <choice>
patrick@34
   217
      <data type="anyURI"/>
patrick@34
   218
      <data type="NMTOKEN"/>
patrick@34
   219
    </choice>
patrick@34
   220
  </define>
patrick@20
   221
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ language ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@20
   222
  <define name="language">
patrick@20
   223
    <element name="language">
patrick@20
   224
      <ref name="language.attributes"/>
patrick@20
   225
    </element>
patrick@20
   226
  </define>
patrick@20
   227
  <define name="language.attributes">
patrick@20
   228
    <ref name="lang.attribute"/>
patrick@20
   229
  </define>
patrick@20
   230
  <define name="lang.attribute">
patrick@20
   231
    <attribute name="xml:lang">
patrick@20
   232
      <data type="language"/>
patrick@20
   233
    </attribute>
patrick@20
   234
  </define>
patrick@5
   235
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ author, publisher ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@5
   236
  <!-- ~~~~~~ author -->
patrick@5
   237
  <define name="author">
patrick@5
   238
    <element name="author">
patrick@5
   239
      <ref name="author.content"/>
patrick@5
   240
    </element>
patrick@5
   241
  </define>
patrick@34
   242
  <define name="author.attributes">
patrick@34
   243
    <optional>
patrick@34
   244
      <ref name="role.attribute"/>
patrick@34
   245
    </optional>
patrick@34
   246
  </define>
patrick@34
   247
  <define name="role.attribute">
patrick@34
   248
    <attribute name="role">
patrick@34
   249
      <choice>
patrick@34
   250
        <value>author</value>
patrick@34
   251
        <value>illustrator</value>
patrick@34
   252
      </choice>
patrick@34
   253
    </attribute>
patrick@34
   254
  </define>
patrick@5
   255
  <define name="author.content">
patrick@5
   256
    <optional>
patrick@5
   257
      <ref name="firstname"/>
patrick@5
   258
    </optional>
patrick@5
   259
    <ref name="lastname"/>
patrick@34
   260
    <zeroOrMore>
patrick@34
   261
      <ref name="role"/>
patrick@34
   262
    </zeroOrMore>
patrick@5
   263
  </define>
patrick@5
   264
  <!-- ~~~~~~ publisher -->
patrick@5
   265
  <define name="publisher">
patrick@5
   266
    <element name="publisher">
patrick@5
   267
      <ref name="publisher.content"/>
patrick@5
   268
    </element>
patrick@5
   269
  </define>
patrick@5
   270
  <define name="publisher.content">
patrick@34
   271
    <ref name="label"/>
patrick@34
   272
    <optional>
patrick@36
   273
      <ref name="link"/>
patrick@34
   274
    </optional>
patrick@5
   275
  </define>
patrick@5
   276
  <!-- ~~~~~~ firstname -->
patrick@5
   277
  <define name="firstname">
patrick@5
   278
    <element name="firstname">
patrick@5
   279
      <ref name="firstname.content"/>
patrick@5
   280
    </element>
patrick@5
   281
  </define>
patrick@5
   282
  <define name="firstname.content">
patrick@5
   283
    <ref name="inlines"/>
patrick@5
   284
  </define>
patrick@5
   285
  <!-- ~~~~~~ lastname -->
patrick@5
   286
  <define name="lastname">
patrick@5
   287
    <element name="lastname">
patrick@5
   288
      <ref name="lastname.content"/>
patrick@5
   289
    </element>
patrick@5
   290
  </define>
patrick@5
   291
  <define name="lastname.content">
patrick@5
   292
    <ref name="inlines"/>
patrick@5
   293
  </define>
patrick@34
   294
  <!-- ~~~~~~ label -->
patrick@34
   295
  <define name="label">
patrick@34
   296
    <element name="label">
patrick@34
   297
      <ref name="label.content"/>
patrick@34
   298
    </element>
patrick@34
   299
  </define>
patrick@34
   300
  <define name="label.content">
patrick@34
   301
    <ref name="inlines"/>
patrick@34
   302
  </define>
patrick@34
   303
  <!-- ~~~~~~ role -->
patrick@34
   304
  <define name="role">
patrick@34
   305
    <element name="role">
patrick@34
   306
      <ref name="role.attributes"/>
patrick@34
   307
    </element>
patrick@34
   308
  </define>
patrick@34
   309
  <define name="role.attributes">
patrick@34
   310
    <ref name="role.of.attribute"/>
patrick@34
   311
  </define>
patrick@34
   312
  <define name="role.of.attribute">
patrick@34
   313
    <attribute name="of">
patrick@34
   314
      <choice>
patrick@34
   315
        <value>author</value>
patrick@34
   316
        <value>illustrator</value>
patrick@34
   317
      </choice>
patrick@34
   318
    </attribute>
patrick@34
   319
  </define>
patrick@0
   320
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ source ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@2
   321
  <!-- ~~~~~~ source -->
patrick@0
   322
  <define name="source">
patrick@0
   323
    <element name="source">
patrick@0
   324
      <ref name="source.attributes"/>
patrick@0
   325
      <choice>
patrick@0
   326
        <group>
patrick@0
   327
          <attribute name="type">
patrick@0
   328
            <value>book</value>
patrick@0
   329
          </attribute>
patrick@0
   330
          <ref name="source.content.book"/>
patrick@0
   331
        </group>
patrick@0
   332
        <attribute name="type">
patrick@0
   333
          <value>file</value>
patrick@0
   334
        </attribute>
patrick@0
   335
      </choice>
patrick@0
   336
    </element>
patrick@0
   337
  </define>
patrick@0
   338
  <define name="source.attributes">
patrick@0
   339
    <interleave>
patrick@0
   340
      <optional>
patrick@0
   341
        <ref name="source.id.attribute"/>
patrick@0
   342
      </optional>
patrick@0
   343
      <ref name="remap.attributes"/>
patrick@0
   344
    </interleave>
patrick@0
   345
  </define>
patrick@0
   346
  <define name="source.id.attribute">
patrick@0
   347
    <attribute name="id">
patrick@0
   348
      <data type="NMTOKEN"/>
patrick@0
   349
    </attribute>
patrick@0
   350
  </define>
patrick@0
   351
  <define name="source.content.book">
patrick@0
   352
    <optional>
patrick@0
   353
      <ref name="title"/>
patrick@0
   354
    </optional>
patrick@0
   355
    <optional>
patrick@0
   356
      <ref name="pagenumber"/>
patrick@0
   357
    </optional>
patrick@0
   358
  </define>
patrick@2
   359
  <!-- ~~~~~~ pagenumber -->
patrick@0
   360
  <define name="pagenumber">
patrick@0
   361
    <element name="pagenumber">
patrick@0
   362
      <ref name="pagenumber.attributes"/>
patrick@0
   363
    </element>
patrick@0
   364
  </define>
patrick@0
   365
  <define name="pagenumber.attributes">
patrick@0
   366
    <ref name="pagenumber.value.attribute"/>
patrick@0
   367
  </define>
patrick@0
   368
  <define name="pagenumber.value.attribute">
patrick@0
   369
    <attribute name="value">
patrick@0
   370
      <ref name="pagenumber.value.enumeration"/>
patrick@0
   371
    </attribute>
patrick@0
   372
  </define>
patrick@0
   373
  <define name="pagenumber.value.enumeration">
patrick@0
   374
    <data type="positiveInteger"/>
patrick@0
   375
  </define>
patrick@35
   376
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ cover ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@35
   377
  <define name="cover">
patrick@35
   378
    <element name="cover">
patrick@35
   379
      <ref name="cover.content"/>
patrick@35
   380
    </element>
patrick@35
   381
  </define>
patrick@35
   382
  <define name="cover.content">
patrick@35
   383
    <ref name="cover.image"/>
patrick@35
   384
  </define>
patrick@35
   385
  <define name="cover.image">
patrick@35
   386
    <element name="image">
patrick@35
   387
      <ref name="cover.image.attributes"/>
patrick@35
   388
    </element>
patrick@35
   389
  </define>
patrick@35
   390
  <define name="cover.image.attributes">
patrick@35
   391
    <ref name="cover.image.id.attribute"/>
patrick@35
   392
  </define>
patrick@35
   393
  <define name="cover.image.id.attribute">
patrick@35
   394
    <attribute name="id">
patrick@35
   395
      <data type="NMTOKEN"/>
patrick@35
   396
    </attribute>
patrick@35
   397
  </define>
patrick@0
   398
  <!--
patrick@0
   399
    =============================================================================
patrick@20
   400
                                   DIVISION LEVEL
patrick@0
   401
    =============================================================================
patrick@0
   402
  -->
patrick@0
   403
  <define name="composition.division">
patrick@0
   404
    <element name="division">
patrick@0
   405
      <ref name="composition.division.attributes"/>
patrick@0
   406
      <ref name="composition.division.content"/>
patrick@0
   407
    </element>
patrick@0
   408
  </define>
patrick@0
   409
  <define name="selection.division">
patrick@0
   410
    <element name="division">
patrick@0
   411
      <ref name="selection.division.attributes"/>
patrick@0
   412
      <ref name="selection.division.content"/>
patrick@0
   413
    </element>
patrick@0
   414
  </define>
patrick@0
   415
  <define name="composition.division.attributes">
patrick@0
   416
    <interleave>
patrick@0
   417
      <optional>
patrick@26
   418
        <ref name="path.attribute"/>
patrick@0
   419
      </optional>
patrick@23
   420
      <optional>
patrick@29
   421
        <ref name="xpath.attribute"/>
patrick@23
   422
      </optional>
patrick@23
   423
      <optional>
patrick@29
   424
        <ref name="xslt.attribute"/>
patrick@23
   425
      </optional>
patrick@0
   426
      <ref name="remap.attributes"/>
patrick@0
   427
    </interleave>
patrick@0
   428
  </define>
patrick@0
   429
  <define name="selection.division.attributes">
patrick@30
   430
    <optional>
patrick@30
   431
      <ref name="path.attribute"/>
patrick@30
   432
    </optional>
patrick@23
   433
  </define>
patrick@0
   434
  <define name="composition.division.content">
patrick@0
   435
    <optional>
patrick@20
   436
      <ref name="composition.head"/>
patrick@0
   437
    </optional>
patrick@0
   438
    <oneOrMore>
patrick@0
   439
      <choice>
patrick@20
   440
        <ref name="composition.division"/>
patrick@0
   441
        <ref name="composition.file"/>
patrick@0
   442
      </choice>
patrick@0
   443
    </oneOrMore>
patrick@0
   444
  </define>
patrick@0
   445
  <define name="selection.division.content">
patrick@0
   446
    <optional>
patrick@20
   447
      <ref name="selection.head"/>
patrick@0
   448
    </optional>
patrick@0
   449
    <oneOrMore>
patrick@0
   450
      <choice>
patrick@20
   451
        <ref name="selection.division"/>
patrick@0
   452
        <ref name="selection.file"/>
patrick@30
   453
        <ref name="link"/>
patrick@0
   454
      </choice>
patrick@0
   455
    </oneOrMore>
patrick@0
   456
  </define>
patrick@0
   457
  <!--
patrick@0
   458
    =============================================================================
patrick@20
   459
                                     FILE LEVEL
patrick@0
   460
    =============================================================================
patrick@0
   461
  -->
patrick@0
   462
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ file ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
   463
  <define name="composition.file">
patrick@0
   464
    <element name="file">
patrick@0
   465
      <ref name="composition.file.attributes"/>
patrick@0
   466
    </element>
patrick@0
   467
  </define>
patrick@0
   468
  <define name="selection.file">
patrick@0
   469
    <element name="file">
patrick@0
   470
      <ref name="selection.file.attributes"/>
patrick@2
   471
      <ref name="file.content"/>
patrick@0
   472
    </element>
patrick@0
   473
  </define>
patrick@0
   474
  <define name="composition.file.attributes">
patrick@0
   475
    <interleave>
patrick@30
   476
      <ref name="name.attribute"/>
patrick@0
   477
      <optional>
patrick@29
   478
        <ref name="xpath.attribute"/>
patrick@0
   479
      </optional>
patrick@20
   480
      <optional>
patrick@29
   481
        <ref name="xslt.attribute"/>
patrick@20
   482
      </optional>
patrick@0
   483
      <ref name="remap.attributes"/>
patrick@0
   484
    </interleave>
patrick@0
   485
  </define>
patrick@0
   486
  <define name="selection.file.attributes">
patrick@30
   487
    <interleave>
patrick@30
   488
      <ref name="name.attribute"/>
patrick@30
   489
      <optional>
patrick@30
   490
        <ref name="uri.attribute"/>
patrick@30
   491
      </optional>
patrick@30
   492
    </interleave>
patrick@30
   493
  </define>
patrick@30
   494
  <define name="name.attribute">
patrick@30
   495
    <attribute name="name">
patrick@30
   496
      <data type="anyURI"/>
patrick@30
   497
    </attribute>
patrick@30
   498
  </define>
patrick@2
   499
  <define name="file.content">
patrick@30
   500
    <ref name="inlines"/>
patrick@30
   501
  </define>
patrick@0
   502
  <!--
patrick@0
   503
    =============================================================================
patrick@20
   504
                                    INLINE LEVEL
patrick@0
   505
    =============================================================================
patrick@0
   506
  -->
patrick@0
   507
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ inlines ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
   508
  <define name="inlines">
patrick@0
   509
    <mixed>
patrick@0
   510
      <interleave>
patrick@0
   511
        <zeroOrMore>
patrick@0
   512
          <ref name="sup"/>
patrick@0
   513
        </zeroOrMore>
patrick@0
   514
        <zeroOrMore>
patrick@0
   515
          <ref name="sub"/>
patrick@0
   516
        </zeroOrMore>
patrick@0
   517
      </interleave>
patrick@0
   518
    </mixed>
patrick@0
   519
  </define>
patrick@0
   520
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sub, sup ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@0
   521
  <define name="sup">
patrick@0
   522
    <element name="sup">
patrick@0
   523
      <ref name="inlines"/>
patrick@0
   524
    </element>
patrick@0
   525
  </define>
patrick@0
   526
  <define name="sub">
patrick@0
   527
    <element name="sub">
patrick@0
   528
      <ref name="inlines"/>
patrick@0
   529
    </element>
patrick@0
   530
  </define>
patrick@36
   531
  <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ link ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
patrick@36
   532
  <define name="link">
patrick@36
   533
    <element name="link">
patrick@36
   534
      <ref name="link.attributes"/>
patrick@36
   535
      <ref name="link.content"/>
patrick@36
   536
    </element>
patrick@36
   537
  </define>
patrick@36
   538
  <define name="link.attributes">
patrick@36
   539
    <ref name="uri.attribute"/>
patrick@36
   540
  </define>
patrick@36
   541
  <define name="uri.attribute">
patrick@36
   542
    <attribute name="uri">
patrick@36
   543
      <data type="anyURI"/>
patrick@36
   544
    </attribute>
patrick@36
   545
  </define>
patrick@36
   546
  <define name="link.content">
patrick@36
   547
    <ref name="inlines"/>
patrick@36
   548
  </define>
patrick@0
   549
  <!--
patrick@0
   550
    =============================================================================
patrick@20
   551
                                  REMAP ATTRIBUTES
patrick@0
   552
    =============================================================================
patrick@0
   553
  -->
patrick@0
   554
  <define name="remap.attributes">
patrick@0
   555
    <interleave>
patrick@0
   556
      <optional>
patrick@0
   557
        <ref name="as.attribute"/>
patrick@0
   558
      </optional>
patrick@0
   559
      <optional>
patrick@0
   560
        <ref name="attributes.attribute"/>
patrick@0
   561
      </optional>
patrick@0
   562
    </interleave>
patrick@0
   563
  </define>
patrick@0
   564
  <define name="as.attribute">
patrick@0
   565
    <attribute name="as">
patrick@0
   566
      <data type="QName"/>
patrick@0
   567
    </attribute>
patrick@0
   568
  </define>
patrick@0
   569
  <define name="attributes.attribute">
patrick@0
   570
    <attribute name="attributes">
patrick@0
   571
      <list>
patrick@0
   572
        <oneOrMore>
patrick@0
   573
          <data type="token">
patrick@0
   574
            <param name="pattern">\c+=\S+</param>
patrick@0
   575
          </data>
patrick@0
   576
        </oneOrMore>
patrick@0
   577
      </list>
patrick@0
   578
    </attribute>
patrick@0
   579
  </define>
patrick@0
   580
</grammar>