1namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"
2namespace ctrl = "http://nwalsh.com/xmlns/schema-control/"
3default namespace db = "http://docbook.org/ns/docbook"
4namespace html = "http://www.w3.org/1999/xhtml"
5namespace mml = "http://www.w3.org/1998/Math/MathML"
6namespace rng = "http://relaxng.org/ns/structure/1.0"
7namespace s = "http://www.ascc.net/xml/schematron"
8namespace svg = "http://www.w3.org/2000/svg"
9namespace xlink = "http://www.w3.org/1999/xlink"
10
11s:ns [
12  prefix = "a"
13  uri = "http://relaxng.org/ns/compatibility/annotations/1.0"
14]
15s:ns [ prefix = "ctrl" uri = "http://nwalsh.com/xmlns/schema-control/" ]
16s:ns [ prefix = "db" uri = "http://docbook.org/ns/docbook" ]
17s:ns [
18  prefix = "dbx"
19  uri =
20    "http://sourceforge.net/projects/docbook/defguide/schema/extra-markup"
21]
22s:ns [ prefix = "html" uri = "http://www.w3.org/1999/xhtml" ]
23s:ns [ prefix = "mml" uri = "http://www.w3.org/1998/Math/MathML" ]
24s:ns [ prefix = "rng" uri = "http://relaxng.org/ns/structure/1.0" ]
25s:ns [ prefix = "s" uri = "http://www.ascc.net/xml/schematron" ]
26s:ns [ prefix = "svg" uri = "http://www.w3.org/2000/svg" ]
27s:ns [ prefix = "xlink" uri = "http://www.w3.org/1999/xlink" ]
28#  DocBook V5.0b7
29
30# See http://docbook.org/ns/docbook
31
32# This file is part of DocBook V5.0b8
33#
34# Copyright 1992-2005 HaL Computer Systems, Inc.,
35# O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software
36# Corporation, Norman Walsh, Sun Microsystems, Inc., and the
37# Organization for the Advancement of Structured Information
38# Standards (OASIS).
39#
40# Release: $Id: docbook.rnc 6325 2006-09-26 22:57:52Z nwalsh $
41#
42# Permission to use, copy, modify and distribute the DocBook schema
43# and its accompanying documentation for any purpose and without fee
44# is hereby granted in perpetuity, provided that the above copyright
45# notice and this paragraph appear in all copies. The copyright
46# holders make no representation about the suitability of the schema
47# for any purpose. It is provided "as is" without expressed or implied
48# warranty.
49#
50# If you modify the DocBook schema in any way, label your schema as a
51# variant of DocBook. See the reference documentation
52# (http://docbook.org/tdg5/en/html/ch05.html#s-notdocbook)
53# for more information.
54#
55# Please direct all questions, bug reports, or suggestions for changes
56# to the docbook@lists.oasis-open.org mailing list. For more
57# information, see http://www.oasis-open.org/docbook/.
58#
59# ======================================================================
60start =
61  (db.set
62   | db.book
63   | db.divisions
64   | db.components
65   | db.navigation.components
66   | db.section
67   | db.para)
68  | (db.sect1 | db.sect2 | db.sect3 | db.sect4 | db.sect5)
69  | (db.refentry | db.refsection)
70  | (db.refsect1 | db.refsect2 | db.refsect3)
71  | db.setindex
72div {
73  db._any.attribute =
74
75    ## Any attribute including in any attribute in any namespace.
76    attribute * { text }
77  db._any =
78
79    ## Any element from almost any namespace
80    element * - (db:* | html:*) {
81      (db._any.attribute | text | db._any)*
82    }
83}
84db.arch.attribute =
85
86  ## Designates the computer or chip architecture to which the element applies
87  attribute arch { text }
88db.audience.attribute =
89
90  ## Designates the intended audience to which the element applies
91  attribute audience { text }
92db.condition.attribute =
93
94  ## provides a standard place for application-specific effectivity
95  attribute condition { text }
96db.conformance.attribute =
97
98  ## Indicates standards conformance characteristics of the element
99  attribute conformance { text }
100db.os.attribute =
101
102  ## Indicates the operating system to which the element is applicable
103  attribute os { text }
104db.revision.attribute =
105
106  ## Indicates the editorial revision to which the element belongs
107  attribute revision { text }
108db.security.attribute =
109
110  ## Indicates something about the security level associated with the element to which it applies
111  attribute security { text }
112db.userlevel.attribute =
113
114  ## Indicates the level of user experience for which the element applies
115  attribute userlevel { text }
116db.vendor.attribute =
117
118  ## Indicates the computer vendor to which the element applies.
119  attribute vendor { text }
120db.wordsize.attribute =
121
122  ## Indicates the word size (width in bits) of the computer architecture to which the element applies
123  attribute wordsize { text }
124db.effectivity.attributes =
125  db.arch.attribute?
126  & db.audience.attribute?
127  & db.condition.attribute?
128  & db.conformance.attribute?
129  & db.os.attribute?
130  & db.revision.attribute?
131  & db.security.attribute?
132  & db.userlevel.attribute?
133  & db.vendor.attribute?
134  & db.wordsize.attribute?
135db.endterm.attribute =
136
137  ## Points to the element whose content is to be used as the text of the link
138  attribute endterm { xsd:IDREF }
139db.linkend.attribute =
140
141  ## Points to an internal link target by identifying the value of its xml:id attribute
142  attribute linkend { xsd:IDREF }
143db.linkends.attribute =
144
145  ## Points to one or more internal link targets by identifying the value of their xml:id attributes
146  attribute linkends { xsd:IDREFS }
147db.xlink.href.attribute =
148
149  ## Identifies a link target with a URI
150  attribute xlink:href { xsd:anyURI }
151db.xlink.type.attribute =
152
153  ## Identifies the XLink link type
154  attribute xlink:type {
155
156    ## An XLink simple link
157    "simple"
158  }
159db.xlink.role.attribute =
160
161  ## Identifies the XLink role of the link
162  attribute xlink:role { xsd:anyURI }
163db.xlink.arcrole.attribute =
164
165  ## Identifies the XLink arcrole of the link
166  attribute xlink:arcrole { xsd:anyURI }
167db.xlink.title.attribute =
168
169  ## Identifies the XLink title of the link
170  attribute xlink:title { text }?
171db.xlink.show.enumeration =
172
173  ## An application traversing to the ending resource should load it in a new window, frame, pane, or other relevant presentation context.
174  "new"
175  |
176    ## An application traversing to the ending resource should load the resource in the same window, frame, pane, or other relevant presentation context in which the starting resource was loaded.
177    "replace"
178  |
179    ## An application traversing to the ending resource should load its presentation in place of the presentation of the starting resource.
180    "embed"
181  |
182    ## The behavior of an application traversing to the ending resource is unconstrained by XLink. The application should look for other markup present in the link to determine the appropriate behavior.
183    "other"
184  |
185    ## The behavior of an application traversing to the ending resource is unconstrained by this specification. No other markup is present to help the application determine the appropriate behavior.
186    "none"
187db.xlink.show.attribute =
188
189  ## Identifies the XLink show behavior of the link
190  attribute xlink:show { db.xlink.show.enumeration }
191db.xlink.actuate.enumeration =
192
193  ## An application should traverse to the ending resource immediately on loading the starting resource.
194  "onLoad"
195  |
196    ## An application should traverse from the starting resource to the ending resource only on a post-loading event triggered for the purpose of traversal.
197    "onRequest"
198  |
199    ## The behavior of an application traversing to the ending resource is unconstrained by this specification. The application should look for other markup present in the link to determine the appropriate behavior.
200    "other"
201  |
202    ## The behavior of an application traversing to the ending resource is unconstrained by this specification. No other markup is present to help the application determine the appropriate behavior.
203    "none"
204db.xlink.actuate.attribute =
205
206  ## Identifies the XLink actuate behavior of the link
207  attribute xlink:actuate { db.xlink.actuate.enumeration }
208db.href.attribute =
209  db.xlink.href.attribute
210  & db.xlink.type.attribute?
211  & db.xlink.role.attribute?
212  & db.xlink.arcrole.attribute?
213  & db.xlink.title.attribute?
214  & db.xlink.show.attribute?
215  & db.xlink.actuate.attribute?
216db.xml.id.attribute =
217
218  ## Identifies the unique ID value of the element
219  attribute xml:id { xsd:ID }
220db.version.attribute =
221
222  ## Specifies the DocBook version of the element and its descendants
223  attribute version { text }
224db.xml.lang.attribute =
225
226  ## Specifies the natural language of the element and its descendants
227  attribute xml:lang { text }
228db.xml.base.attribute =
229
230  ## Specifies the base URI of the element and its descendants
231  attribute xml:base { xsd:anyURI }
232db.remap.attribute =
233
234  ## Provides the name or similar semantic identifier assigned to the content in some previous markup scheme
235  attribute remap { text }
236db.xreflabel.attribute =
237
238  ## Provides the text that is to be generated for a cross reference to the element
239  attribute xreflabel { text }
240db.xrefstyle.attribute =
241
242  ## Specifies a keyword or keywords identifying additional style information
243  attribute xrefstyle { text }
244db.revisionflag.enumeration =
245
246  ## The element has been changed.
247  "changed"
248  |
249    ## The element is new (has been added to the document).
250    "added"
251  |
252    ## The element has been deleted.
253    "deleted"
254  |
255    ## Explicitly turns off revision markup for this element.
256    "off"
257db.revisionflag.attribute =
258
259  ## Identifies the revision status of the element
260  attribute revisionflag { db.revisionflag.enumeration }
261db.dir.enumeration =
262
263  ## Left-to-right text
264  "ltr"
265  |
266    ## Right-to-left text
267    "rtl"
268  |
269    ## Left-to-right override
270    "lro"
271  |
272    ## Right-to-left override
273    "rlo"
274db.dir.attribute =
275
276  ## Identifies the direction of text in an element
277  attribute dir { db.dir.enumeration }
278db.common.attributes =
279  db.xml.id.attribute?
280  & db.version.attribute?
281  & db.xml.lang.attribute?
282  & db.xml.base.attribute?
283  & db.remap.attribute?
284  & db.xreflabel.attribute?
285  & db.revisionflag.attribute?
286  & db.dir.attribute?
287  & db.effectivity.attributes
288  & db.annotations.attribute?
289db.common.idreq.attributes =
290  db.xml.id.attribute
291  & db.version.attribute?
292  & db.xml.lang.attribute?
293  & db.xml.base.attribute?
294  & db.remap.attribute?
295  & db.xreflabel.attribute?
296  & db.revisionflag.attribute?
297  & db.dir.attribute?
298  & db.effectivity.attributes
299  & db.annotations.attribute?
300db.common.linking.attributes =
301  (db.linkend.attribute | db.href.attribute)?
302db.common.req.linking.attributes =
303  db.linkend.attribute | db.href.attribute
304db.common.data.attributes =
305
306  ## Specifies the format of the data
307  attribute format { text }?,
308  (
309   ## Indentifies the location of the data by URI
310   attribute fileref { xsd:anyURI }
311   |
312     ## Identifies the location of the data by external identifier (entity name)
313     attribute entityref { xsd:ENTITY })
314db.verbatim.continuation.enumeration =
315
316  ## Line numbering continues from the immediately preceding element with the same name.
317  "continues"
318  |
319    ## Line numbering restarts (begins at 1, usually).
320    "restarts"
321db.verbatim.continuation.attribute =
322
323  ## Determines whether line numbering continues from the previous element or restarts.
324  attribute continuation { db.verbatim.continuation.enumeration }
325db.verbatim.linenumbering.enumeration =
326
327  ## Lines are numbered.
328  "numbered"
329  |
330    ## Lines are not numbered.
331    "unnumbered"
332db.verbatim.linenumbering.attribute =
333
334  ## Determines whether lines are numbered.
335  attribute linenumbering { db.verbatim.linenumbering.enumeration }
336db.verbatim.startinglinenumber.attribute =
337
338  ## Specifies the initial line number.
339  attribute startinglinenumber { xsd:integer }
340db.verbatim.language.attribute =
341
342  ## Identifies the language (i.e. programming language) of the verbatim content.
343  attribute language { text }
344db.verbatim.xml.space.attribute =
345
346  ## Can be used to indicate explicitly that whitespace in the verbatim environment is preserved. Whitespace must always be preserved in verbatim environments whether this attribute is specified or not.
347  attribute xml:space {
348
349    ## Whitespace must be preserved.
350    "preserve"
351  }
352db.verbatim.attributes =
353  db.verbatim.continuation.attribute?
354  & db.verbatim.linenumbering.attribute?
355  & db.verbatim.startinglinenumber.attribute?
356  & db.verbatim.language.attribute?
357  & db.verbatim.xml.space.attribute?
358db.label.attribute =
359
360  ## Specifies an identifying string for presentation purposes
361  attribute label { text }
362db.width.characters.attribute =
363
364  ## Specifies the width (in characters) of the element
365  attribute width { xsd:nonNegativeInteger }
366db.spacing.enumeration =
367
368  ## The spacing should be "compact".
369  "compact"
370  |
371    ## The spacing should be "normal".
372    "normal"
373db.spacing.attribute =
374
375  ## Specifies (a hint about) the spacing of the content
376  attribute spacing { db.spacing.enumeration }
377db.pgwide.enumeration =
378
379  ## The element should be rendered in the current text flow (with the flow column width).
380  "0"
381  |
382    ## The element should be rendered across the full text page.
383    "1"
384db.pgwide.attribute =
385
386  ## Indicates if the element is rendered across the column or the page
387  attribute pgwide { db.pgwide.enumeration }
388db.language.attribute =
389
390  ## Identifies the language (i.e. programming language) of the content.
391  attribute language { text }
392db.performance.enumeration =
393
394  ## The content describes an optional step or steps.
395  "optional"
396  |
397    ## The content describes a required step or steps.
398    "required"
399db.performance.attribute =
400
401  ## Specifies if the content is required or optional.
402  attribute performance { db.performance.enumeration }
403db.floatstyle.attribute =
404
405  ## Specifies style information to be used when rendering the float
406  attribute floatstyle { text }
407db.width.attribute =
408
409  ## Specifies the width of the element
410  attribute width { text }
411db.depth.attribute =
412
413  ## Specifies the depth of the element
414  attribute depth { text }
415db.contentwidth.attribute =
416
417  ## Specifies the width of the content rectangle
418  attribute contentwidth { text }
419db.contentdepth.attribute =
420
421  ## Specifies the depth of the content rectangle
422  attribute contentdepth { text }
423db.scalefit.enumeration =
424
425  ## False (do not scale-to-fit; anamorphic scaling may occur)
426  "0"
427  |
428    ## True (scale-to-fit; anamorphic scaling is forbidden)
429    "1"
430db.scale.attribute =
431
432  ## Specifies the scaling factor
433  attribute scale { xsd:positiveInteger }
434db.halign.enumeration =
435
436  ## Centered horizontally
437  "center"
438  |
439    ## Aligned horizontally on the specified character
440    "char"
441  |
442    ## Fully justified (left and right margins or edges)
443    "justify"
444  |
445    ## Left aligned
446    "left"
447  |
448    ## Right aligned
449    "right"
450db.valign.enumeration =
451
452  ## Aligned on the bottom of the region
453  "bottom"
454  |
455    ## Centered vertically
456    "middle"
457  |
458    ## Aligned on the top of the region
459    "top"
460db.biblio.class.enumeration =
461
462  ## A document object identifier.
463  "doi"
464  |
465    ## An international standard book number.
466    "isbn"
467  |
468    ## An international standard technical report number (ISO 10444).
469    "isrn"
470  |
471    ## An international standard serial number.
472    "issn"
473  |
474    ## A Library of Congress reference number.
475    "libraryofcongress"
476  |
477    ## A publication number (an internal number or possibly organizational standard).
478    "pubsnumber"
479  |
480    ## A Uniform Resource Identifier
481    "uri"
482db.biblio.class-enum.attribute =
483
484  ## Identifies the kind of bibliographic identifier
485  attribute class { db.biblio.class.enumeration }?
486db.biblio.class-other.attribute =
487
488  ## Identifies the nature of the non-standard bibliographic identifier
489  attribute otherclass { xsd:NMTOKEN }
490db.biblio.class-other.attributes =
491
492  ## Identifies the kind of bibliographic identifier
493  attribute class {
494
495    ## Indicates that the identifier is some 'other' kind.
496    "other"
497  }
498  & db.biblio.class-other.attribute
499db.biblio.class.attribute =
500  db.biblio.class-enum.attribute | db.biblio.class-other.attributes
501db.ubiq.inlines =
502  (db.inlinemediaobject
503   | db.remark
504   | db.superscript
505   | db.subscript
506   | db.link.inlines
507   | db.alt)
508  | db.annotation
509  | db.indexterm
510db._text = (text | db.ubiq.inlines | db._phrase | db.replaceable)*
511db._title = db.title? & db.titleabbrev? & db.subtitle?
512db._title.req = db.title & db.titleabbrev? & db.subtitle?
513db._title.only = db.title? & db.titleabbrev?
514db._title.onlyreq = db.title & db.titleabbrev?
515db._info = (db._title.req?, db.titleforbidden.info?) | db.info?
516db._info.title.req =
517  (db._title.req, db.titleforbidden.info?) | db.titlereq.info
518db._info.title.only =
519  (db._title.only, db.titleforbidden.info?) | db.titleonly.info
520db._info.title.onlyreq =
521  (db._title.onlyreq, db.titleforbidden.info?) | db.titleonlyreq.info
522db._info.title.forbidden = db.titleforbidden.info?
523db.all.inlines =
524  text
525  | db.ubiq.inlines
526  | db.general.inlines
527  | db.domain.inlines
528  | db.extension.inlines
529db.general.inlines =
530  db.publishing.inlines
531  | db.product.inlines
532  | db.bibliography.inlines
533  | db.graphic.inlines
534  | db.indexing.inlines
535  | db.link.inlines
536db.domain.inlines =
537  (db.technical.inlines
538   | db.error.inlines
539   | db.os.inlines
540   | db.programming.inlines
541   | db.markup.inlines
542   | db.gui.inlines
543   | db.keyboard.inlines)
544  | db.math.inlines
545db.technical.inlines =
546  (db.replaceable
547   | db.systemitem
548   | db.option
549   | db.optional
550   | db.package
551   | db.parameter
552   | db.property
553   | db.termdef)
554  | db.nonterminal
555db.error.inlines =
556  db.errorcode | db.errortext | db.errorname | db.errortype
557db.oo.inlines = db.ooclass | db.ooexception | db.oointerface
558db.programming.inlines =
559  db.function
560  | db.parameter
561  | db.varname
562  | db.returnvalue
563  | db.type
564  | db.classname
565  | db.exceptionname
566  | db.interfacename
567  | db.methodname
568  | db.modifier
569  | db.initializer
570  | db.oo.inlines
571db.product.inlines =
572  db.productnumber
573  | db.productname
574  | db.database
575  | db.application
576  | db.hardware
577  | db.trademark
578db.os.inlines =
579  db.prompt
580  | db.envar
581  | db.filename
582  | db.command
583  | db.computeroutput
584  | db.userinput
585db.markup.inlines =
586  db.tag
587  | db.markup
588  | db.token
589  | db.symbol
590  | db.literal
591  | db.code
592  | db.constant
593  | db.email
594  | db.uri
595db.bibliography.inlines =
596  db.citation
597  | db.citerefentry
598  | db.citetitle
599  | db.citebiblioid
600  | db.author
601  | db.person
602  | db.personname
603  | db.org
604  | db.orgname
605  | db.editor
606db.publishing.inlines =
607  (db.abbrev
608   | db.acronym
609   | db.date
610   | db.emphasis
611   | db.footnote
612   | db.footnoteref
613   | db.foreignphrase
614   | db.phrase
615   | db.quote
616   | db.subscript
617   | db.superscript
618   | db.wordasword)
619  | db.glossary.inlines
620  | db.coref
621db.graphic.inlines = db.inlinemediaobject
622db.indexing.inlines = notAllowed | db.indexterm
623db.gui.inlines =
624  db.guiicon
625  | db.guibutton
626  | db.guimenuitem
627  | db.guimenu
628  | db.guisubmenu
629  | db.guilabel
630  | db.menuchoice
631  | db.mousebutton
632db.keyboard.inlines =
633  db.keycombo
634  | db.keycap
635  | db.keycode
636  | db.keysym
637  | db.shortcut
638  | db.accel
639db.link.inlines =
640  (db.xref | db.link | db.olink | db.anchor) | db.biblioref
641db.extension.inlines = notAllowed
642db.nopara.blocks =
643  (db.list.blocks
644   | db.admonition.blocks
645   | db.formal.blocks
646   | db.informal.blocks
647   | db.publishing.blocks
648   | db.graphic.blocks
649   | db.technical.blocks
650   | db.verbatim.blocks
651   | db.synopsis.blocks
652   | db.bridgehead
653   | db.remark
654   | db.revhistory)
655  | db.indexterm
656  | db.math.blocks
657db.para.blocks = db.anchor | db.para | db.formalpara | db.simpara
658db.all.blocks =
659  (db.nopara.blocks | db.para.blocks | db.extension.blocks)
660  | db.annotation
661db.formal.blocks = db.example | db.figure | db.table
662db.informal.blocks =
663  db.informalexample | db.informalfigure | db.informaltable
664db.publishing.blocks =
665  db.sidebar | db.blockquote | db.address | db.epigraph
666db.graphic.blocks = db.mediaobject | db.screenshot
667db.technical.blocks =
668  db.procedure
669  | db.task
670  | (db.productionset | db.constraintdef)
671  | db.msgset
672db.admonition.blocks =
673  db.caution | db.important | db.note | db.tip | db.warning
674db.list.blocks =
675  (db.itemizedlist
676   | db.orderedlist
677   | db.procedure
678   | db.simplelist
679   | db.variablelist
680   | db.segmentedlist)
681  | db.glosslist
682  | db.bibliolist
683  | db.calloutlist
684  | db.qandaset
685db.verbatim.blocks =
686  (db.programlisting | db.screen | db.literallayout | db.synopsis)
687  | (db.programlistingco | db.screenco)
688db.synopsis.blocks =
689  db.cmdsynopsis
690  | db.funcsynopsis
691  | db.classsynopsis
692  | db.methodsynopsis
693  | db.constructorsynopsis
694  | db.destructorsynopsis
695  | db.fieldsynopsis
696db.extension.blocks = notAllowed
697db.info.elements =
698  (db.abstract
699   | db.address
700   | db.artpagenums
701   | db.author
702   | db.authorgroup
703   | db.authorinitials
704   | db.bibliocoverage
705   | db.biblioid
706   | db.bibliosource
707   | db.collab
708   | db.confgroup
709   | db.contractsponsor
710   | db.contractnum
711   | db.copyright
712   | db.cover
713   | db.date
714   | db.edition
715   | db.editor
716   | db.issuenum
717   | db.keywordset
718   | db.legalnotice
719   | db.mediaobject
720   | db.org
721   | db.orgname
722   | db.othercredit
723   | db.pagenums
724   | db.printhistory
725   | db.productname
726   | db.productnumber
727   | db.pubdate
728   | db.publisher
729   | db.publishername
730   | db.releaseinfo
731   | db.revhistory
732   | db.seriesvolnums
733   | db.subjectset
734   | db.volumenum)
735  | db.annotation
736  | db.extendedlink
737  | (db.bibliomisc | db.bibliomset | db.bibliorelation | db.biblioset)
738  | db.itermset
739db.bibliographic.elements =
740  db.info.elements
741  | db.publishing.inlines
742  | db.citerefentry
743  | db.citetitle
744  | db.citebiblioid
745  | db.person
746  | db.personname
747  | db.subtitle
748  | db.title
749div {
750  db.title.role.attribute = attribute role { text }
751  db.title.attlist =
752    db.title.role.attribute?
753    & db.common.attributes
754    & db.common.linking.attributes
755  db.title =
756
757    ## The text of the title of a section of a document or of a formal block-level element
758    element title { db.title.attlist, db.all.inlines* }
759}
760div {
761  db.titleabbrev.role.attribute = attribute role { text }
762  db.titleabbrev.attlist =
763    db.titleabbrev.role.attribute?
764    & db.common.attributes
765    & db.common.linking.attributes
766  db.titleabbrev =
767
768    ## The abbreviation of a title
769    element titleabbrev { db.titleabbrev.attlist, db.all.inlines* }
770}
771div {
772  db.subtitle.role.attribute = attribute role { text }
773  db.subtitle.attlist =
774    db.subtitle.role.attribute?
775    & db.common.attributes
776    & db.common.linking.attributes
777  db.subtitle =
778
779    ## The subtitle of a document
780    element subtitle { db.subtitle.attlist, db.all.inlines* }
781}
782div {
783  db.info.role.attribute = attribute role { text }
784  db.info.attlist = db.info.role.attribute? & db.common.attributes
785  db.info =
786
787    ## A wrapper for information about a component or other block
788    element info { db.info.attlist, (db._title & db.info.elements*) }
789}
790div {
791  db.titlereq.info.role.attribute = attribute role { text }
792  db.titlereq.info.attlist =
793    db.titlereq.info.role.attribute? & db.common.attributes
794  db.titlereq.info =
795
796    ## A wrapper for information about a component or other block with a required title
797    element info {
798      db.titlereq.info.attlist, (db._title.req & db.info.elements*)
799    }
800}
801div {
802  db.titleonly.info.role.attribute = attribute role { text }
803  db.titleonly.info.attlist =
804    db.titleonly.info.role.attribute? & db.common.attributes
805  db.titleonly.info =
806
807    ## A wrapper for information about a component or other block with only a title
808    element info {
809      db.titleonly.info.attlist, (db._title.only & db.info.elements*)
810    }
811}
812div {
813  db.titleonlyreq.info.role.attribute = attribute role { text }
814  db.titleonlyreq.info.attlist =
815    db.titleonlyreq.info.role.attribute? & db.common.attributes
816  db.titleonlyreq.info =
817
818    ## A wrapper for information about a component or other block with only a required title
819    element info {
820      db.titleonlyreq.info.attlist,
821      (db._title.onlyreq & db.info.elements*)
822    }
823}
824div {
825  db.titleforbidden.info.role.attribute = attribute role { text }
826  db.titleforbidden.info.attlist =
827    db.titleforbidden.info.role.attribute? & db.common.attributes
828  db.titleforbidden.info =
829
830    ## A wrapper for information about a component or other block without a title
831    element info { db.titleforbidden.info.attlist, db.info.elements* }
832}
833div {
834  db.subjectset.role.attribute = attribute role { text }
835  db.subjectset.scheme.attribute =
836
837    ## Identifies the controlled vocabulary used by this set's terms
838    attribute scheme { xsd:NMTOKEN }
839  db.subjectset.attlist =
840    db.subjectset.role.attribute?
841    & db.common.attributes
842    & db.common.linking.attributes
843    & db.subjectset.scheme.attribute?
844  db.subjectset =
845
846    ## A set of terms describing the subject matter of a document
847    element subjectset { db.subjectset.attlist, db.subject+ }
848}
849div {
850  db.subject.role.attribute = attribute role { text }
851  db.subject.weight.attribute =
852
853    ## Specifies a ranking for this subject relative to other subjects in the same set
854    attribute weight { text }
855  db.subject.attlist =
856    db.subject.role.attribute?
857    & db.common.attributes
858    & db.common.linking.attributes
859    & db.subject.weight.attribute?
860  db.subject =
861
862    ## One of a group of terms describing the subject matter of a document
863    element subject { db.subject.attlist, db.subjectterm+ }
864}
865div {
866  db.subjectterm.role.attribute = attribute role { text }
867  db.subjectterm.attlist =
868    db.subjectterm.role.attribute?
869    & db.common.attributes
870    & db.common.linking.attributes
871  db.subjectterm =
872
873    ## A term in a group of terms describing the subject matter of a document
874    element subjectterm { db.subjectterm.attlist, text }
875}
876div {
877  db.keywordset.role.attribute = attribute role { text }
878  db.keywordset.attlist =
879    db.keywordset.role.attribute?
880    & db.common.attributes
881    & db.common.linking.attributes
882  db.keywordset =
883
884    ## A set of keywords describing the content of a document
885    element keywordset { db.keywordset.attlist, db.keyword+ }
886}
887div {
888  db.keyword.role.attribute = attribute role { text }
889  db.keyword.attlist =
890    db.keyword.role.attribute?
891    & db.common.attributes
892    & db.common.linking.attributes
893  db.keyword =
894
895    ## One of a set of keywords describing the content of a document
896    element keyword { db.keyword.attlist, text }
897}
898db.table.choice = notAllowed | db.cals.table | db.html.table
899db.informaltable.choice =
900  notAllowed | db.cals.informaltable | db.html.informaltable
901db.table = db.table.choice
902db.informaltable = db.informaltable.choice
903div {
904  db.procedure.role.attribute = attribute role { text }
905  db.procedure.attlist =
906    db.procedure.role.attribute?
907    & db.common.attributes
908    & db.common.linking.attributes
909  db.procedure.info = db._info.title.only
910  db.procedure =
911
912    ## A list of operations to be performed in a well-defined sequence
913    element procedure {
914      db.procedure.attlist, db.procedure.info, db.all.blocks*, db.step+
915    }
916}
917div {
918  db.step.role.attribute = attribute role { text }
919  db.step.attlist =
920    db.step.role.attribute?
921    & db.common.attributes
922    & db.common.linking.attributes
923    & db.performance.attribute?
924  db.step.info = db._info.title.only
925  #
926  # This content model is blocks*, step|stepalternatives, blocks* but
927  # expressed this way it avoids UPA issues in XSD and DTD versions
928  db.step =
929
930    ## A unit of action in a procedure
931    element step {
932      db.step.attlist,
933      db.step.info,
934      ((db.all.blocks+,
935        ((db.substeps | db.stepalternatives), db.all.blocks*)?)
936       | ((db.substeps | db.stepalternatives), db.all.blocks*))
937    }
938}
939div {
940  db.stepalternatives.role.attribute = attribute role { text }
941  db.stepalternatives.attlist =
942    db.stepalternatives.role.attribute?
943    & db.common.attributes
944    & db.common.linking.attributes
945    & db.performance.attribute?
946  db.stepalternatives.info = db._info.title.forbidden
947  db.stepalternatives =
948
949    ## Alternative steps in a procedure
950    element stepalternatives {
951      db.stepalternatives.attlist, db.stepalternatives.info, db.step+
952    }
953}
954div {
955  db.substeps.role.attribute = attribute role { text }
956  db.substeps.attlist =
957    db.substeps.role.attribute?
958    & db.common.attributes
959    & db.common.linking.attributes
960    & db.performance.attribute?
961  db.substeps =
962
963    ## A wrapper for steps that occur within steps in a procedure
964    element substeps { db.substeps.attlist, db.step+ }
965}
966div {
967  db.sidebar.role.attribute = attribute role { text }
968  db.sidebar.attlist =
969    db.sidebar.role.attribute?
970    & db.common.attributes
971    & db.common.linking.attributes
972  db.sidebar.info = db._info.title.only
973  db.sidebar =
974
975    ## A portion of a document that is isolated from the main narrative flow
976    [
977      s:pattern [
978        name = "Element exclusion"
979        "\x{a}" ~
980        "          "
981        s:rule [
982          context = "db:sidebar"
983          "\x{a}" ~
984          "            "
985          s:assert [
986            test = "not(.//db:sidebar)"
987            "sidebar must not occur in the descendants of sidebar"
988          ]
989          "\x{a}" ~
990          "          "
991        ]
992        "\x{a}" ~
993        "        "
994      ]
995    ]
996    element sidebar {
997      db.sidebar.attlist, db.sidebar.info, db.all.blocks+
998    }
999}
1000div {
1001  db.abstract.role.attribute = attribute role { text }
1002  db.abstract.attlist =
1003    db.abstract.role.attribute?
1004    & db.common.attributes
1005    & db.common.linking.attributes
1006  db.abstract.info = db._info.title.only
1007  db.abstract =
1008
1009    ## A summary
1010    element abstract {
1011      db.abstract.attlist, db.abstract.info, db.para.blocks+
1012    }
1013}
1014div {
1015  db.personblurb.role.attribute = attribute role { text }
1016  db.personblurb.attlist =
1017    db.personblurb.role.attribute?
1018    & db.common.attributes
1019    & db.common.linking.attributes
1020  db.personblurb.info = db._info.title.only
1021  db.personblurb =
1022
1023    ## A short description or note about a person
1024    element personblurb {
1025      db.personblurb.attlist, db.personblurb.info, db.para.blocks+
1026    }
1027}
1028div {
1029  db.blockquote.role.attribute = attribute role { text }
1030  db.blockquote.attlist =
1031    db.blockquote.role.attribute?
1032    & db.common.attributes
1033    & db.common.linking.attributes
1034  db.blockquote.info = db._info.title.only
1035  db.blockquote =
1036
1037    ## A quotation set off from the main text
1038    element blockquote {
1039      db.blockquote.attlist,
1040      db.blockquote.info,
1041      db.attribution?,
1042      (db.para.blocks | db.literallayout)+
1043    }
1044}
1045div {
1046  db.attribution.role.attribute = attribute role { text }
1047  db.attribution.attlist =
1048    db.attribution.role.attribute?
1049    & db.common.attributes
1050    & db.common.linking.attributes
1051  db.attribution =
1052
1053    ## The source of a block quote or epigraph
1054    element attribution {
1055      db.attribution.attlist,
1056      (db._text
1057       | db.person
1058       | db.personname
1059       | db.citetitle
1060       | db.citation)*
1061    }
1062}
1063div {
1064  db.bridgehead.renderas.enumeration =
1065
1066    ## Render as a first-level section
1067    "sect1"
1068    |
1069      ## Render as a second-level section
1070      "sect2"
1071    |
1072      ## Render as a third-level section
1073      "sect3"
1074    |
1075      ## Render as a fourth-level section
1076      "sect4"
1077    |
1078      ## Render as a fifth-level section
1079      "sect5"
1080  db.bridgehead.renderas-enum.attribute =
1081
1082    ## Indicates how the bridge head should be rendered
1083    attribute renderas { db.bridgehead.renderas.enumeration }?
1084  db.bridgehead.renderas-other.attribute =
1085
1086    ## Identifies the nature of the non-standard rendering
1087    attribute otherrenderas { xsd:NMTOKEN }
1088  db.bridgehead.renderas-other.attributes =
1089
1090    ## Indicates how the bridge head should be rendered
1091    attribute renderas {
1092
1093      ## Identifies a non-standard rendering
1094      "other"
1095    }
1096    & db.bridgehead.renderas-other.attribute
1097  db.bridgehead.renderas.attribute =
1098    db.bridgehead.renderas-enum.attribute
1099    | db.bridgehead.renderas-other.attributes
1100  db.bridgehead.role.attribute = attribute role { text }
1101  db.bridgehead.attlist =
1102    db.bridgehead.role.attribute?
1103    & db.common.attributes
1104    & db.common.linking.attributes
1105    & db.bridgehead.renderas.attribute?
1106  db.bridgehead =
1107
1108    ## A free-floating heading
1109    element bridgehead { db.bridgehead.attlist, db.all.inlines* }
1110}
1111div {
1112  db.remark.role.attribute = attribute role { text }
1113  db.remark.attlist =
1114    db.remark.role.attribute?
1115    & db.common.attributes
1116    & db.common.linking.attributes
1117  db.remark =
1118
1119    ## A remark (or comment) intended for presentation in a draft manuscript
1120    element remark { db.remark.attlist, db._text }
1121}
1122div {
1123  db.epigraph.role.attribute = attribute role { text }
1124  db.epigraph.attlist =
1125    db.epigraph.role.attribute?
1126    & db.common.attributes
1127    & db.common.linking.attributes
1128  db.epigraph.info = db._info.title.forbidden
1129  db.epigraph =
1130
1131    ## A short inscription at the beginning of a document or component
1132    element epigraph {
1133      db.epigraph.attlist,
1134      db.epigraph.info,
1135      db.attribution?,
1136      (db.para.blocks | db.literallayout)+
1137    }
1138}
1139div {
1140  db.footnote.role.attribute = attribute role { text }
1141  db.footnote.label.attribute =
1142
1143    ## Identifies the desired footnote mark
1144    attribute label { xsd:NMTOKEN }
1145  db.footnote.attlist =
1146    db.footnote.role.attribute?
1147    & db.common.attributes
1148    & db.common.linking.attributes
1149    & db.footnote.label.attribute?
1150  db.footnote =
1151
1152    ## A footnote
1153    [
1154      s:pattern [
1155        name = "Element exclusion"
1156        "\x{a}" ~
1157        "          "
1158        s:rule [
1159          context = "db:footnote"
1160          "\x{a}" ~
1161          "            "
1162          s:assert [
1163            test = "not(.//db:footnote)"
1164            "footnote must not occur in the descendants of footnote"
1165          ]
1166          "\x{a}" ~
1167          "          "
1168        ]
1169        "\x{a}" ~
1170        "        "
1171      ]
1172      s:pattern [
1173        name = "Element exclusion"
1174        "\x{a}" ~
1175        "          "
1176        s:rule [
1177          context = "db:footnote"
1178          "\x{a}" ~
1179          "            "
1180          s:assert [
1181            test = "not(.//db:example)"
1182            "example must not occur in the descendants of footnote"
1183          ]
1184          "\x{a}" ~
1185          "          "
1186        ]
1187        "\x{a}" ~
1188        "        "
1189      ]
1190      s:pattern [
1191        name = "Element exclusion"
1192        "\x{a}" ~
1193        "          "
1194        s:rule [
1195          context = "db:footnote"
1196          "\x{a}" ~
1197          "            "
1198          s:assert [
1199            test = "not(.//db:figure)"
1200            "figure must not occur in the descendants of footnote"
1201          ]
1202          "\x{a}" ~
1203          "          "
1204        ]
1205        "\x{a}" ~
1206        "        "
1207      ]
1208      s:pattern [
1209        name = "Element exclusion"
1210        "\x{a}" ~
1211        "          "
1212        s:rule [
1213          context = "db:footnote"
1214          "\x{a}" ~
1215          "            "
1216          s:assert [
1217            test = "not(.//db:table)"
1218            "table must not occur in the descendants of footnote"
1219          ]
1220          "\x{a}" ~
1221          "          "
1222        ]
1223        "\x{a}" ~
1224        "        "
1225      ]
1226      s:pattern [
1227        name = "Element exclusion"
1228        "\x{a}" ~
1229        "          "
1230        s:rule [
1231          context = "db:footnote"
1232          "\x{a}" ~
1233          "            "
1234          s:assert [
1235            test = "not(.//db:table)"
1236            "table must not occur in the descendants of footnote"
1237          ]
1238          "\x{a}" ~
1239          "          "
1240        ]
1241        "\x{a}" ~
1242        "        "
1243      ]
1244      s:pattern [
1245        name = "Element exclusion"
1246        "\x{a}" ~
1247        "          "
1248        s:rule [
1249          context = "db:footnote"
1250          "\x{a}" ~
1251          "            "
1252          s:assert [
1253            test = "not(.//db:caution)"
1254            "caution must not occur in the descendants of footnote"
1255          ]
1256          "\x{a}" ~
1257          "          "
1258        ]
1259        "\x{a}" ~
1260        "        "
1261      ]
1262      s:pattern [
1263        name = "Element exclusion"
1264        "\x{a}" ~
1265        "          "
1266        s:rule [
1267          context = "db:footnote"
1268          "\x{a}" ~
1269          "            "
1270          s:assert [
1271            test = "not(.//db:important)"
1272            "important must not occur in the descendants of footnote"
1273          ]
1274          "\x{a}" ~
1275          "          "
1276        ]
1277        "\x{a}" ~
1278        "        "
1279      ]
1280      s:pattern [
1281        name = "Element exclusion"
1282        "\x{a}" ~
1283        "          "
1284        s:rule [
1285          context = "db:footnote"
1286          "\x{a}" ~
1287          "            "
1288          s:assert [
1289            test = "not(.//db:note)"
1290            "note must not occur in the descendants of footnote"
1291          ]
1292          "\x{a}" ~
1293          "          "
1294        ]
1295        "\x{a}" ~
1296        "        "
1297      ]
1298      s:pattern [
1299        name = "Element exclusion"
1300        "\x{a}" ~
1301        "          "
1302        s:rule [
1303          context = "db:footnote"
1304          "\x{a}" ~
1305          "            "
1306          s:assert [
1307            test = "not(.//db:tip)"
1308            "tip must not occur in the descendants of footnote"
1309          ]
1310          "\x{a}" ~
1311          "          "
1312        ]
1313        "\x{a}" ~
1314        "        "
1315      ]
1316      s:pattern [
1317        name = "Element exclusion"
1318        "\x{a}" ~
1319        "          "
1320        s:rule [
1321          context = "db:footnote"
1322          "\x{a}" ~
1323          "            "
1324          s:assert [
1325            test = "not(.//db:warning)"
1326            "warning must not occur in the descendants of footnote"
1327          ]
1328          "\x{a}" ~
1329          "          "
1330        ]
1331        "\x{a}" ~
1332        "        "
1333      ]
1334      s:pattern [
1335        name = "Element exclusion"
1336        "\x{a}" ~
1337        "          "
1338        s:rule [
1339          context = "db:footnote"
1340          "\x{a}" ~
1341          "            "
1342          s:assert [
1343            test = "not(.//db:indexterm)"
1344            "indexterm must not occur in the descendants of footnote"
1345          ]
1346          "\x{a}" ~
1347          "          "
1348        ]
1349        "\x{a}" ~
1350        "        "
1351      ]
1352      s:pattern [
1353        name = "Element exclusion"
1354        "\x{a}" ~
1355        "          "
1356        s:rule [
1357          context = "db:footnote"
1358          "\x{a}" ~
1359          "            "
1360          s:assert [
1361            test = "not(.//db:indexterm)"
1362            "indexterm must not occur in the descendants of footnote"
1363          ]
1364          "\x{a}" ~
1365          "          "
1366        ]
1367        "\x{a}" ~
1368        "        "
1369      ]
1370      s:pattern [
1371        name = "Element exclusion"
1372        "\x{a}" ~
1373        "          "
1374        s:rule [
1375          context = "db:footnote"
1376          "\x{a}" ~
1377          "            "
1378          s:assert [
1379            test = "not(.//db:indexterm)"
1380            "indexterm must not occur in the descendants of footnote"
1381          ]
1382          "\x{a}" ~
1383          "          "
1384        ]
1385        "\x{a}" ~
1386        "        "
1387      ]
1388      s:pattern [
1389        name = "Element exclusion"
1390        "\x{a}" ~
1391        "          "
1392        s:rule [
1393          context = "db:footnote"
1394          "\x{a}" ~
1395          "            "
1396          s:assert [
1397            test = "not(.//db:sidebar)"
1398            "sidebar must not occur in the descendants of footnote"
1399          ]
1400          "\x{a}" ~
1401          "          "
1402        ]
1403        "\x{a}" ~
1404        "        "
1405      ]
1406      s:pattern [
1407        name = "Element exclusion"
1408        "\x{a}" ~
1409        "          "
1410        s:rule [
1411          context = "db:footnote"
1412          "\x{a}" ~
1413          "            "
1414          s:assert [
1415            test = "not(.//db:task)"
1416            "task must not occur in the descendants of footnote"
1417          ]
1418          "\x{a}" ~
1419          "          "
1420        ]
1421        "\x{a}" ~
1422        "        "
1423      ]
1424      s:pattern [
1425        name = "Element exclusion"
1426        "\x{a}" ~
1427        "          "
1428        s:rule [
1429          context = "db:footnote"
1430          "\x{a}" ~
1431          "            "
1432          s:assert [
1433            test = "not(.//db:epigraph)"
1434            "epigraph must not occur in the descendants of footnote"
1435          ]
1436          "\x{a}" ~
1437          "          "
1438        ]
1439        "\x{a}" ~
1440        "        "
1441      ]
1442    ]
1443    element footnote { db.footnote.attlist, db.all.blocks+ }
1444}
1445div {
1446  db.formalpara.role.attribute = attribute role { text }
1447  db.formalpara.attlist =
1448    db.formalpara.role.attribute?
1449    & db.common.attributes
1450    & db.common.linking.attributes
1451  db.formalpara.info = db._info.title.onlyreq
1452  db.formalpara =
1453
1454    ## A paragraph with a title
1455    element formalpara {
1456      db.formalpara.attlist,
1457      db.formalpara.info,
1458      db.indexing.inlines*,
1459      db.para
1460    }
1461}
1462div {
1463  db.para.role.attribute = attribute role { text }
1464  db.para.attlist =
1465    db.para.role.attribute?
1466    & db.common.attributes
1467    & db.common.linking.attributes
1468  db.para.info = db._info.title.forbidden
1469  db.para =
1470
1471    ## A paragraph
1472    [
1473      s:pattern [
1474        name = "Root must have version"
1475        "\x{a}" ~
1476        "          "
1477        s:rule [
1478          context = "/db:para"
1479          "\x{a}" ~
1480          "            "
1481          s:assert [
1482            test = "@version"
1483            "The root element must have a version attribute."
1484          ]
1485          "\x{a}" ~
1486          "          "
1487        ]
1488        "\x{a}" ~
1489        "        "
1490      ]
1491    ]
1492    element para {
1493      db.para.attlist,
1494      db.para.info,
1495      (db.all.inlines | db.nopara.blocks)*
1496    }
1497}
1498div {
1499  db.simpara.role.attribute = attribute role { text }
1500  db.simpara.attlist =
1501    db.simpara.role.attribute?
1502    & db.common.attributes
1503    & db.common.linking.attributes
1504  db.simpara.info = db._info.title.forbidden
1505  db.simpara =
1506
1507    ## A paragraph that contains only text and inline markup, no block elements
1508    element simpara {
1509      db.simpara.attlist, db.simpara.info, db.all.inlines*
1510    }
1511}
1512db.admonition.contentmodel = db._info.title.only, db.all.blocks+
1513div {
1514  db.caution.role.attribute = attribute role { text }
1515  db.caution.attlist =
1516    db.caution.role.attribute?
1517    & db.common.attributes
1518    & db.common.linking.attributes
1519  db.caution =
1520
1521    ## A note of caution
1522    [
1523      s:pattern [
1524        name = "Element exclusion"
1525        "\x{a}" ~
1526        "          "
1527        s:rule [
1528          context = "db:caution"
1529          "\x{a}" ~
1530          "            "
1531          s:assert [
1532            test = "not(.//db:caution)"
1533            "caution must not occur in the descendants of caution"
1534          ]
1535          "\x{a}" ~
1536          "          "
1537        ]
1538        "\x{a}" ~
1539        "        "
1540      ]
1541      s:pattern [
1542        name = "Element exclusion"
1543        "\x{a}" ~
1544        "          "
1545        s:rule [
1546          context = "db:caution"
1547          "\x{a}" ~
1548          "            "
1549          s:assert [
1550            test = "not(.//db:important)"
1551            "important must not occur in the descendants of caution"
1552          ]
1553          "\x{a}" ~
1554          "          "
1555        ]
1556        "\x{a}" ~
1557        "        "
1558      ]
1559      s:pattern [
1560        name = "Element exclusion"
1561        "\x{a}" ~
1562        "          "
1563        s:rule [
1564          context = "db:caution"
1565          "\x{a}" ~
1566          "            "
1567          s:assert [
1568            test = "not(.//db:note)"
1569            "note must not occur in the descendants of caution"
1570          ]
1571          "\x{a}" ~
1572          "          "
1573        ]
1574        "\x{a}" ~
1575        "        "
1576      ]
1577      s:pattern [
1578        name = "Element exclusion"
1579        "\x{a}" ~
1580        "          "
1581        s:rule [
1582          context = "db:caution"
1583          "\x{a}" ~
1584          "            "
1585          s:assert [
1586            test = "not(.//db:tip)"
1587            "tip must not occur in the descendants of caution"
1588          ]
1589          "\x{a}" ~
1590          "          "
1591        ]
1592        "\x{a}" ~
1593        "        "
1594      ]
1595      s:pattern [
1596        name = "Element exclusion"
1597        "\x{a}" ~
1598        "          "
1599        s:rule [
1600          context = "db:caution"
1601          "\x{a}" ~
1602          "            "
1603          s:assert [
1604            test = "not(.//db:warning)"
1605            "warning must not occur in the descendants of caution"
1606          ]
1607          "\x{a}" ~
1608          "          "
1609        ]
1610        "\x{a}" ~
1611        "        "
1612      ]
1613    ]
1614    element caution { db.caution.attlist, db.admonition.contentmodel }
1615}
1616div {
1617  db.important.role.attribute = attribute role { text }
1618  db.important.attlist =
1619    db.important.role.attribute?
1620    & db.common.attributes
1621    & db.common.linking.attributes
1622  db.important =
1623
1624    ## An admonition set off from the text
1625    [
1626      s:pattern [
1627        name = "Element exclusion"
1628        "\x{a}" ~
1629        "          "
1630        s:rule [
1631          context = "db:important"
1632          "\x{a}" ~
1633          "            "
1634          s:assert [
1635            test = "not(.//db:caution)"
1636            "caution must not occur in the descendants of important"
1637          ]
1638          "\x{a}" ~
1639          "          "
1640        ]
1641        "\x{a}" ~
1642        "        "
1643      ]
1644      s:pattern [
1645        name = "Element exclusion"
1646        "\x{a}" ~
1647        "          "
1648        s:rule [
1649          context = "db:important"
1650          "\x{a}" ~
1651          "            "
1652          s:assert [
1653            test = "not(.//db:important)"
1654            "important must not occur in the descendants of important"
1655          ]
1656          "\x{a}" ~
1657          "          "
1658        ]
1659        "\x{a}" ~
1660        "        "
1661      ]
1662      s:pattern [
1663        name = "Element exclusion"
1664        "\x{a}" ~
1665        "          "
1666        s:rule [
1667          context = "db:important"
1668          "\x{a}" ~
1669          "            "
1670          s:assert [
1671            test = "not(.//db:note)"
1672            "note must not occur in the descendants of important"
1673          ]
1674          "\x{a}" ~
1675          "          "
1676        ]
1677        "\x{a}" ~
1678        "        "
1679      ]
1680      s:pattern [
1681        name = "Element exclusion"
1682        "\x{a}" ~
1683        "          "
1684        s:rule [
1685          context = "db:important"
1686          "\x{a}" ~
1687          "            "
1688          s:assert [
1689            test = "not(.//db:tip)"
1690            "tip must not occur in the descendants of important"
1691          ]
1692          "\x{a}" ~
1693          "          "
1694        ]
1695        "\x{a}" ~
1696        "        "
1697      ]
1698      s:pattern [
1699        name = "Element exclusion"
1700        "\x{a}" ~
1701        "          "
1702        s:rule [
1703          context = "db:important"
1704          "\x{a}" ~
1705          "            "
1706          s:assert [
1707            test = "not(.//db:warning)"
1708            "warning must not occur in the descendants of important"
1709          ]
1710          "\x{a}" ~
1711          "          "
1712        ]
1713        "\x{a}" ~
1714        "        "
1715      ]
1716    ]
1717    element important {
1718      db.important.attlist, db.admonition.contentmodel
1719    }
1720}
1721div {
1722  db.note.role.attribute = attribute role { text }
1723  db.note.attlist =
1724    db.note.role.attribute?
1725    & db.common.attributes
1726    & db.common.linking.attributes
1727  db.note =
1728
1729    ## A message set off from the text
1730    [
1731      s:pattern [
1732        name = "Element exclusion"
1733        "\x{a}" ~
1734        "          "
1735        s:rule [
1736          context = "db:note"
1737          "\x{a}" ~
1738          "            "
1739          s:assert [
1740            test = "not(.//db:caution)"
1741            "caution must not occur in the descendants of note"
1742          ]
1743          "\x{a}" ~
1744          "          "
1745        ]
1746        "\x{a}" ~
1747        "        "
1748      ]
1749      s:pattern [
1750        name = "Element exclusion"
1751        "\x{a}" ~
1752        "          "
1753        s:rule [
1754          context = "db:note"
1755          "\x{a}" ~
1756          "            "
1757          s:assert [
1758            test = "not(.//db:important)"
1759            "important must not occur in the descendants of note"
1760          ]
1761          "\x{a}" ~
1762          "          "
1763        ]
1764        "\x{a}" ~
1765        "        "
1766      ]
1767      s:pattern [
1768        name = "Element exclusion"
1769        "\x{a}" ~
1770        "          "
1771        s:rule [
1772          context = "db:note"
1773          "\x{a}" ~
1774          "            "
1775          s:assert [
1776            test = "not(.//db:note)"
1777            "note must not occur in the descendants of note"
1778          ]
1779          "\x{a}" ~
1780          "          "
1781        ]
1782        "\x{a}" ~
1783        "        "
1784      ]
1785      s:pattern [
1786        name = "Element exclusion"
1787        "\x{a}" ~
1788        "          "
1789        s:rule [
1790          context = "db:note"
1791          "\x{a}" ~
1792          "            "
1793          s:assert [
1794            test = "not(.//db:tip)"
1795            "tip must not occur in the descendants of note"
1796          ]
1797          "\x{a}" ~
1798          "          "
1799        ]
1800        "\x{a}" ~
1801        "        "
1802      ]
1803      s:pattern [
1804        name = "Element exclusion"
1805        "\x{a}" ~
1806        "          "
1807        s:rule [
1808          context = "db:note"
1809          "\x{a}" ~
1810          "            "
1811          s:assert [
1812            test = "not(.//db:warning)"
1813            "warning must not occur in the descendants of note"
1814          ]
1815          "\x{a}" ~
1816          "          "
1817        ]
1818        "\x{a}" ~
1819        "        "
1820      ]
1821    ]
1822    element note { db.note.attlist, db.admonition.contentmodel }
1823}
1824div {
1825  db.tip.role.attribute = attribute role { text }
1826  db.tip.attlist =
1827    db.tip.role.attribute?
1828    & db.common.attributes
1829    & db.common.linking.attributes
1830  db.tip =
1831
1832    ## A suggestion to the user, set off from the text
1833    [
1834      s:pattern [
1835        name = "Element exclusion"
1836        "\x{a}" ~
1837        "          "
1838        s:rule [
1839          context = "db:tip"
1840          "\x{a}" ~
1841          "            "
1842          s:assert [
1843            test = "not(.//db:caution)"
1844            "caution must not occur in the descendants of tip"
1845          ]
1846          "\x{a}" ~
1847          "          "
1848        ]
1849        "\x{a}" ~
1850        "        "
1851      ]
1852      s:pattern [
1853        name = "Element exclusion"
1854        "\x{a}" ~
1855        "          "
1856        s:rule [
1857          context = "db:tip"
1858          "\x{a}" ~
1859          "            "
1860          s:assert [
1861            test = "not(.//db:important)"
1862            "important must not occur in the descendants of tip"
1863          ]
1864          "\x{a}" ~
1865          "          "
1866        ]
1867        "\x{a}" ~
1868        "        "
1869      ]
1870      s:pattern [
1871        name = "Element exclusion"
1872        "\x{a}" ~
1873        "          "
1874        s:rule [
1875          context = "db:tip"
1876          "\x{a}" ~
1877          "            "
1878          s:assert [
1879            test = "not(.//db:note)"
1880            "note must not occur in the descendants of tip"
1881          ]
1882          "\x{a}" ~
1883          "          "
1884        ]
1885        "\x{a}" ~
1886        "        "
1887      ]
1888      s:pattern [
1889        name = "Element exclusion"
1890        "\x{a}" ~
1891        "          "
1892        s:rule [
1893          context = "db:tip"
1894          "\x{a}" ~
1895          "            "
1896          s:assert [
1897            test = "not(.//db:tip)"
1898            "tip must not occur in the descendants of tip"
1899          ]
1900          "\x{a}" ~
1901          "          "
1902        ]
1903        "\x{a}" ~
1904        "        "
1905      ]
1906      s:pattern [
1907        name = "Element exclusion"
1908        "\x{a}" ~
1909        "          "
1910        s:rule [
1911          context = "db:tip"
1912          "\x{a}" ~
1913          "            "
1914          s:assert [
1915            test = "not(.//db:warning)"
1916            "warning must not occur in the descendants of tip"
1917          ]
1918          "\x{a}" ~
1919          "          "
1920        ]
1921        "\x{a}" ~
1922        "        "
1923      ]
1924    ]
1925    element tip { db.tip.attlist, db.admonition.contentmodel }
1926}
1927div {
1928  db.warning.role.attribute = attribute role { text }
1929  db.warning.attlist =
1930    db.warning.role.attribute?
1931    & db.common.attributes
1932    & db.common.linking.attributes
1933  db.warning =
1934
1935    ## An admonition set off from the text
1936    [
1937      s:pattern [
1938        name = "Element exclusion"
1939        "\x{a}" ~
1940        "          "
1941        s:rule [
1942          context = "db:warning"
1943          "\x{a}" ~
1944          "            "
1945          s:assert [
1946            test = "not(.//db:caution)"
1947            "caution must not occur in the descendants of warning"
1948          ]
1949          "\x{a}" ~
1950          "          "
1951        ]
1952        "\x{a}" ~
1953        "        "
1954      ]
1955      s:pattern [
1956        name = "Element exclusion"
1957        "\x{a}" ~
1958        "          "
1959        s:rule [
1960          context = "db:warning"
1961          "\x{a}" ~
1962          "            "
1963          s:assert [
1964            test = "not(.//db:important)"
1965            "important must not occur in the descendants of warning"
1966          ]
1967          "\x{a}" ~
1968          "          "
1969        ]
1970        "\x{a}" ~
1971        "        "
1972      ]
1973      s:pattern [
1974        name = "Element exclusion"
1975        "\x{a}" ~
1976        "          "
1977        s:rule [
1978          context = "db:warning"
1979          "\x{a}" ~
1980          "            "
1981          s:assert [
1982            test = "not(.//db:note)"
1983            "note must not occur in the descendants of warning"
1984          ]
1985          "\x{a}" ~
1986          "          "
1987        ]
1988        "\x{a}" ~
1989        "        "
1990      ]
1991      s:pattern [
1992        name = "Element exclusion"
1993        "\x{a}" ~
1994        "          "
1995        s:rule [
1996          context = "db:warning"
1997          "\x{a}" ~
1998          "            "
1999          s:assert [
2000            test = "not(.//db:tip)"
2001            "tip must not occur in the descendants of warning"
2002          ]
2003          "\x{a}" ~
2004          "          "
2005        ]
2006        "\x{a}" ~
2007        "        "
2008      ]
2009      s:pattern [
2010        name = "Element exclusion"
2011        "\x{a}" ~
2012        "          "
2013        s:rule [
2014          context = "db:warning"
2015          "\x{a}" ~
2016          "            "
2017          s:assert [
2018            test = "not(.//db:warning)"
2019            "warning must not occur in the descendants of warning"
2020          ]
2021          "\x{a}" ~
2022          "          "
2023        ]
2024        "\x{a}" ~
2025        "        "
2026      ]
2027    ]
2028    element warning { db.warning.attlist, db.admonition.contentmodel }
2029}
2030div {
2031  db.itemizedlist.role.attribute = attribute role { text }
2032  db.itemizedlist.mark.attribute =
2033
2034    ## Identifies the type of mark to be used on items in this list
2035    attribute mark { xsd:NMTOKEN }
2036  db.itemizedlist.attlist =
2037    db.itemizedlist.role.attribute?
2038    & db.common.attributes
2039    & db.common.linking.attributes
2040    & db.spacing.attribute?
2041    & db.itemizedlist.mark.attribute?
2042  db.itemizedlist.info = db._info.title.only
2043  db.itemizedlist =
2044
2045    ## A list in which each entry is marked with a bullet or other dingbat
2046    element itemizedlist {
2047      db.itemizedlist.attlist,
2048      db.itemizedlist.info,
2049      db.all.blocks*,
2050      db.listitem+
2051    }
2052}
2053div {
2054  db.orderedlist.role.attribute = attribute role { text }
2055  db.orderedlist.continuation.enumeration =
2056
2057    ## Specifies that numbering should begin where the preceding list left off
2058    "continues"
2059    |
2060      ## Specifies that numbering should begin again at 1
2061      "restarts"
2062  db.orderedlist.continuation.attribute =
2063
2064    ## Indicates how list numbering should begin relative to the immediately preceding list
2065    attribute continuation { db.orderedlist.continuation.enumeration }
2066  db.orderedlist.startingnumber.attribute =
2067
2068    ## Specifies the initial line number.
2069    attribute startingnumber { xsd:integer }
2070  db.orderedlist.inheritnum.enumeration =
2071
2072    ## Specifies that numbering should ignore list nesting
2073    "ignore"
2074    |
2075      ## Specifies that numbering should inherit from outer-level lists
2076      "inherit"
2077  db.orderedlist.inheritnum.attribute =
2078
2079    ## Indicates whether or not item numbering should be influenced by list nesting
2080    attribute inheritnum { db.orderedlist.inheritnum.enumeration }
2081  db.orderedlist.numeration.enumeration =
2082
2083    ## Specifies Arabic numeration (1, 2, 3, …)
2084    "arabic"
2085    |
2086      ## Specifies upper-case alphabetic numeration (A, B, C, …)
2087      "upperalpha"
2088    |
2089      ## Specifies lower-case alphabetic numeration (a, b, c, …)
2090      "loweralpha"
2091    |
2092      ## Specifies upper-case Roman numeration (I, II, III, …)
2093      "upperroman"
2094    |
2095      ## Specifies lower-case Roman numeration (i, ii, iii …)
2096      "lowerroman"
2097  db.orderedlist.numeration.attribute =
2098
2099    ## Indicates the desired numeration
2100    attribute numeration { db.orderedlist.numeration.enumeration }
2101  db.orderedlist.attlist =
2102    db.orderedlist.role.attribute?
2103    & db.common.attributes
2104    & db.common.linking.attributes
2105    & db.spacing.attribute?
2106    & (db.orderedlist.continuation.attribute
2107       | db.orderedlist.startingnumber.attribute)?
2108    & db.orderedlist.inheritnum.attribute?
2109    & db.orderedlist.numeration.attribute?
2110  db.orderedlist.info = db._info.title.only
2111  db.orderedlist =
2112
2113    ## A list in which each entry is marked with a sequentially incremented label
2114    element orderedlist {
2115      db.orderedlist.attlist,
2116      db.orderedlist.info,
2117      db.all.blocks*,
2118      db.listitem+
2119    }
2120}
2121div {
2122  db.listitem.role.attribute = attribute role { text }
2123  db.listitem.override.attribute =
2124
2125    ## Specifies the keyword for the type of mark that should be used on this
2126    ##  item, instead of the mark that would be used by default
2127    attribute override { xsd:NMTOKEN }
2128  db.listitem.attlist =
2129    db.listitem.role.attribute?
2130    & db.common.attributes
2131    & db.common.linking.attributes
2132    & db.listitem.override.attribute?
2133  db.listitem =
2134
2135    ## A wrapper for the elements of a list item
2136    element listitem { db.listitem.attlist, db.all.blocks+ }
2137}
2138div {
2139  db.segmentedlist.role.attribute = attribute role { text }
2140  db.segmentedlist.attlist =
2141    db.segmentedlist.role.attribute?
2142    & db.common.attributes
2143    & db.common.linking.attributes
2144  db.segmentedlist.info = db._info.title.only
2145  db.segmentedlist =
2146
2147    ## A segmented list, a list of sets of elements
2148    element segmentedlist {
2149      db.segmentedlist.attlist,
2150      db.segmentedlist.info,
2151      db.segtitle+,
2152      db.seglistitem+
2153    }
2154}
2155div {
2156  db.segtitle.role.attribute = attribute role { text }
2157  db.segtitle.attlist =
2158    db.segtitle.role.attribute?
2159    & db.common.attributes
2160    & db.common.linking.attributes
2161  db.segtitle =
2162
2163    ## The title of an element of a list item in a segmented list
2164    element segtitle { db.segtitle.attlist, db.all.inlines* }
2165}
2166div {
2167  db.seglistitem.role.attribute = attribute role { text }
2168  db.seglistitem.attlist =
2169    db.seglistitem.role.attribute?
2170    & db.common.attributes
2171    & db.common.linking.attributes
2172  db.seglistitem =
2173
2174    ## A list item in a segmented list
2175    [
2176      s:pattern [
2177        name = "Cardinality of segments and titles"
2178        "\x{a}" ~
2179        "          "
2180        s:rule [
2181          context = "db:seglistitem"
2182          "\x{a}" ~
2183          "            "
2184          s:assert [
2185            test = "count(db:seg) = count(../db:segtitle)"
2186            "The number of seg elements must be the same as the number of segtitle elements in the parent segmentedlist"
2187          ]
2188          "\x{a}" ~
2189          "          "
2190        ]
2191        "\x{a}" ~
2192        "        "
2193      ]
2194    ]
2195    element seglistitem { db.seglistitem.attlist, db.seg+ }
2196}
2197div {
2198  db.seg.role.attribute = attribute role { text }
2199  db.seg.attlist =
2200    db.seg.role.attribute?
2201    & db.common.attributes
2202    & db.common.linking.attributes
2203  db.seg =
2204
2205    ## An element of a list item in a segmented list
2206    element seg { db.seg.attlist, db.all.inlines* }
2207}
2208div {
2209  db.simplelist.role.attribute = attribute role { text }
2210  db.simplelist.type.enumeration =
2211
2212    ## A tabular presentation in row-major order.
2213    "horiz"
2214    |
2215      ## A tabular presentation in column-major order.
2216      "vert"
2217    |
2218      ## An inline presentation, usually a comma-delimited list.
2219      "inline"
2220  db.simplelist.type.attribute =
2221
2222    ## Specifies the type of list presentation.
2223    [ a:defaultValue = "vert" ]
2224    attribute type { db.simplelist.type.enumeration }
2225  db.simplelist.columns.attribute =
2226
2227    ## Specifies the number of columns for horizontal or vertical presentation
2228    attribute columns { xsd:integer }
2229  db.simplelist.attlist =
2230    db.simplelist.role.attribute?
2231    & db.common.attributes
2232    & db.common.linking.attributes
2233    & db.simplelist.type.attribute?
2234    & db.simplelist.columns.attribute?
2235  db.simplelist =
2236
2237    ## An undecorated list of single words or short phrases
2238    element simplelist { db.simplelist.attlist, db.member+ }
2239}
2240div {
2241  db.member.role.attribute = attribute role { text }
2242  db.member.attlist =
2243    db.member.role.attribute?
2244    & db.common.attributes
2245    & db.common.linking.attributes
2246  db.member =
2247
2248    ## An element of a simple list
2249    element member { db.member.attlist, db.all.inlines* }
2250}
2251div {
2252  db.variablelist.role.attribute = attribute role { text }
2253  db.variablelist.termlength.attribute =
2254
2255    ## Indicates a length beyond which the presentation system may consider a term too long and select an alternate presentation for that term, item, or list
2256    attribute termlength { text }
2257  db.variablelist.attlist =
2258    db.variablelist.role.attribute?
2259    & db.common.attributes
2260    & db.common.linking.attributes
2261    & db.spacing.attribute?
2262    & db.variablelist.termlength.attribute?
2263  db.variablelist.info = db._info.title.only
2264  db.variablelist =
2265
2266    ## A list in which each entry is composed of a set of one or more terms and an associated description
2267    element variablelist {
2268      db.variablelist.attlist,
2269      db.variablelist.info,
2270      db.all.blocks*,
2271      db.varlistentry+
2272    }
2273}
2274div {
2275  db.varlistentry.role.attribute = attribute role { text }
2276  db.varlistentry.attlist =
2277    db.varlistentry.role.attribute?
2278    & db.common.attributes
2279    & db.common.linking.attributes
2280  db.varlistentry =
2281
2282    ## A wrapper for a set of terms and the associated description in a variable list
2283    element varlistentry {
2284      db.varlistentry.attlist, db.term+, db.listitem
2285    }
2286}
2287div {
2288  db.term.role.attribute = attribute role { text }
2289  db.term.attlist =
2290    db.term.role.attribute?
2291    & db.common.attributes
2292    & db.common.linking.attributes
2293  db.term =
2294
2295    ## The word or phrase being defined or described in a variable list
2296    element term { db.term.attlist, db.all.inlines* }
2297}
2298div {
2299  db.example.role.attribute = attribute role { text }
2300  db.example.label.attribute = db.label.attribute
2301  db.example.width.attribute = db.width.characters.attribute
2302  db.example.floatstyle.attribute = db.floatstyle.attribute
2303  db.example.attlist =
2304    db.example.role.attribute?
2305    & db.common.attributes
2306    & db.common.linking.attributes
2307    & db.example.label.attribute?
2308    & db.example.floatstyle.attribute?
2309    & db.example.width.attribute?
2310  db.example.info = db._info.title.onlyreq
2311  db.example =
2312
2313    ## A formal example, with a title
2314    [
2315      s:pattern [
2316        name = "Element exclusion"
2317        "\x{a}" ~
2318        "          "
2319        s:rule [
2320          context = "db:example"
2321          "\x{a}" ~
2322          "            "
2323          s:assert [
2324            test = "not(.//db:example)"
2325            "example must not occur in the descendants of example"
2326          ]
2327          "\x{a}" ~
2328          "          "
2329        ]
2330        "\x{a}" ~
2331        "        "
2332      ]
2333      s:pattern [
2334        name = "Element exclusion"
2335        "\x{a}" ~
2336        "          "
2337        s:rule [
2338          context = "db:example"
2339          "\x{a}" ~
2340          "            "
2341          s:assert [
2342            test = "not(.//db:figure)"
2343            "figure must not occur in the descendants of example"
2344          ]
2345          "\x{a}" ~
2346          "          "
2347        ]
2348        "\x{a}" ~
2349        "        "
2350      ]
2351      s:pattern [
2352        name = "Element exclusion"
2353        "\x{a}" ~
2354        "          "
2355        s:rule [
2356          context = "db:example"
2357          "\x{a}" ~
2358          "            "
2359          s:assert [
2360            test = "not(.//db:table)"
2361            "table must not occur in the descendants of example"
2362          ]
2363          "\x{a}" ~
2364          "          "
2365        ]
2366        "\x{a}" ~
2367        "        "
2368      ]
2369      s:pattern [
2370        name = "Element exclusion"
2371        "\x{a}" ~
2372        "          "
2373        s:rule [
2374          context = "db:example"
2375          "\x{a}" ~
2376          "            "
2377          s:assert [
2378            test = "not(.//db:table)"
2379            "table must not occur in the descendants of example"
2380          ]
2381          "\x{a}" ~
2382          "          "
2383        ]
2384        "\x{a}" ~
2385        "        "
2386      ]
2387      s:pattern [
2388        name = "Element exclusion"
2389        "\x{a}" ~
2390        "          "
2391        s:rule [
2392          context = "db:example"
2393          "\x{a}" ~
2394          "            "
2395          s:assert [
2396            test = "not(.//db:caution)"
2397            "caution must not occur in the descendants of example"
2398          ]
2399          "\x{a}" ~
2400          "          "
2401        ]
2402        "\x{a}" ~
2403        "        "
2404      ]
2405      s:pattern [
2406        name = "Element exclusion"
2407        "\x{a}" ~
2408        "          "
2409        s:rule [
2410          context = "db:example"
2411          "\x{a}" ~
2412          "            "
2413          s:assert [
2414            test = "not(.//db:important)"
2415            "important must not occur in the descendants of example"
2416          ]
2417          "\x{a}" ~
2418          "          "
2419        ]
2420        "\x{a}" ~
2421        "        "
2422      ]
2423      s:pattern [
2424        name = "Element exclusion"
2425        "\x{a}" ~
2426        "          "
2427        s:rule [
2428          context = "db:example"
2429          "\x{a}" ~
2430          "            "
2431          s:assert [
2432            test = "not(.//db:note)"
2433            "note must not occur in the descendants of example"
2434          ]
2435          "\x{a}" ~
2436          "          "
2437        ]
2438        "\x{a}" ~
2439        "        "
2440      ]
2441      s:pattern [
2442        name = "Element exclusion"
2443        "\x{a}" ~
2444        "          "
2445        s:rule [
2446          context = "db:example"
2447          "\x{a}" ~
2448          "            "
2449          s:assert [
2450            test = "not(.//db:tip)"
2451            "tip must not occur in the descendants of example"
2452          ]
2453          "\x{a}" ~
2454          "          "
2455        ]
2456        "\x{a}" ~
2457        "        "
2458      ]
2459      s:pattern [
2460        name = "Element exclusion"
2461        "\x{a}" ~
2462        "          "
2463        s:rule [
2464          context = "db:example"
2465          "\x{a}" ~
2466          "            "
2467          s:assert [
2468            test = "not(.//db:warning)"
2469            "warning must not occur in the descendants of example"
2470          ]
2471          "\x{a}" ~
2472          "          "
2473        ]
2474        "\x{a}" ~
2475        "        "
2476      ]
2477    ]
2478    element example {
2479      db.example.attlist, db.example.info, db.all.blocks+, db.caption?
2480    }
2481}
2482div {
2483  db.informalexample.role.attribute = attribute role { text }
2484  db.informalexample.width.attribute = db.width.characters.attribute
2485  db.informalexample.floatstyle.attribute = db.floatstyle.attribute
2486  db.informalexample.attlist =
2487    db.informalexample.role.attribute?
2488    & db.common.attributes
2489    & db.common.linking.attributes
2490    & db.informalexample.floatstyle.attribute?
2491    & db.informalexample.width.attribute?
2492  db.informalexample.info = db._info.title.forbidden
2493  db.informalexample =
2494
2495    ## A displayed example without a title
2496    element informalexample {
2497      db.informalexample.attlist,
2498      db.informalexample.info,
2499      db.all.blocks+,
2500      db.caption?
2501    }
2502}
2503db.verbatim.inlines = (db.all.inlines | db.lineannotation) | db.co
2504db.verbatim.contentmodel =
2505  db._info.title.forbidden, (db.textobject | db.verbatim.inlines*)
2506div {
2507  db.programlisting.role.attribute = attribute role { text }
2508  db.programlisting.width.attribute = db.width.characters.attribute
2509  db.programlisting.attlist =
2510    db.programlisting.role.attribute?
2511    & db.common.attributes
2512    & db.common.linking.attributes
2513    & db.verbatim.attributes
2514    & db.programlisting.width.attribute?
2515  db.programlisting =
2516
2517    ## A literal listing of all or part of a program
2518    element programlisting {
2519      db.programlisting.attlist, db.verbatim.contentmodel
2520    }
2521}
2522div {
2523  db.literallayout.role.attribute = attribute role { text }
2524  db.literallayout.class.enumeration =
2525
2526    ## The literal layout should be formatted with a monospaced font
2527    "monospaced"
2528    |
2529      ## The literal layout should be formatted with the current font
2530      "normal"
2531  db.literallayout.class.attribute =
2532
2533    ## Specifies the class of literal layout
2534    attribute class { db.literallayout.class.enumeration }
2535  db.literallayout.attlist =
2536    db.literallayout.role.attribute?
2537    & db.common.attributes
2538    & db.common.linking.attributes
2539    & db.verbatim.attributes
2540    & db.literallayout.class.attribute?
2541  db.literallayout =
2542
2543    ## A block of text in which line breaks and white space are to be reproduced faithfully
2544    element literallayout {
2545      db.literallayout.attlist, db.verbatim.contentmodel
2546    }
2547}
2548div {
2549  db.screen.role.attribute = attribute role { text }
2550  db.screen.width.attribute = db.width.characters.attribute
2551  db.screen.attlist =
2552    db.screen.role.attribute?
2553    & db.common.attributes
2554    & db.common.linking.attributes
2555    & db.verbatim.attributes
2556    & db.screen.width.attribute?
2557  db.screen =
2558
2559    ## Text that a user sees or might see on a computer screen
2560    element screen { db.screen.attlist, db.verbatim.contentmodel }
2561}
2562div {
2563  db.screenshot.role.attribute = attribute role { text }
2564  db.screenshot.attlist =
2565    db.screenshot.role.attribute?
2566    & db.common.attributes
2567    & db.common.linking.attributes
2568  db.screenshot.info = db._info
2569  db.screenshot =
2570
2571    ## A representation of what the user sees or might see on a computer screen
2572    element screenshot {
2573      db.screenshot.attlist, db.screenshot.info, db.mediaobject
2574    }
2575}
2576div {
2577  db.figure.role.attribute = attribute role { text }
2578  db.figure.label.attribute = db.label.attribute
2579  db.figure.pgwide.attribute = db.pgwide.attribute
2580  db.figure.floatstyle.attribute = db.floatstyle.attribute
2581  db.figure.attlist =
2582    db.figure.role.attribute?
2583    & db.common.attributes
2584    & db.common.linking.attributes
2585    & db.figure.label.attribute?
2586    & db.figure.pgwide.attribute?
2587    & db.figure.floatstyle.attribute?
2588  db.figure.info = db._info.title.onlyreq
2589  db.figure =
2590
2591    ## A formal figure, generally an illustration, with a title
2592    [
2593      s:pattern [
2594        name = "Element exclusion"
2595        "\x{a}" ~
2596        "          "
2597        s:rule [
2598          context = "db:figure"
2599          "\x{a}" ~
2600          "            "
2601          s:assert [
2602            test = "not(.//db:example)"
2603            "example must not occur in the descendants of figure"
2604          ]
2605          "\x{a}" ~
2606          "          "
2607        ]
2608        "\x{a}" ~
2609        "        "
2610      ]
2611      s:pattern [
2612        name = "Element exclusion"
2613        "\x{a}" ~
2614        "          "
2615        s:rule [
2616          context = "db:figure"
2617          "\x{a}" ~
2618          "            "
2619          s:assert [
2620            test = "not(.//db:figure)"
2621            "figure must not occur in the descendants of figure"
2622          ]
2623          "\x{a}" ~
2624          "          "
2625        ]
2626        "\x{a}" ~
2627        "        "
2628      ]
2629      s:pattern [
2630        name = "Element exclusion"
2631        "\x{a}" ~
2632        "          "
2633        s:rule [
2634          context = "db:figure"
2635          "\x{a}" ~
2636          "            "
2637          s:assert [
2638            test = "not(.//db:table)"
2639            "table must not occur in the descendants of figure"
2640          ]
2641          "\x{a}" ~
2642          "          "
2643        ]
2644        "\x{a}" ~
2645        "        "
2646      ]
2647      s:pattern [
2648        name = "Element exclusion"
2649        "\x{a}" ~
2650        "          "
2651        s:rule [
2652          context = "db:figure"
2653          "\x{a}" ~
2654          "            "
2655          s:assert [
2656            test = "not(.//db:table)"
2657            "table must not occur in the descendants of figure"
2658          ]
2659          "\x{a}" ~
2660          "          "
2661        ]
2662        "\x{a}" ~
2663        "        "
2664      ]
2665      s:pattern [
2666        name = "Element exclusion"
2667        "\x{a}" ~
2668        "          "
2669        s:rule [
2670          context = "db:figure"
2671          "\x{a}" ~
2672          "            "
2673          s:assert [
2674            test = "not(.//db:caution)"
2675            "caution must not occur in the descendants of figure"
2676          ]
2677          "\x{a}" ~
2678          "          "
2679        ]
2680        "\x{a}" ~
2681        "        "
2682      ]
2683      s:pattern [
2684        name = "Element exclusion"
2685        "\x{a}" ~
2686        "          "
2687        s:rule [
2688          context = "db:figure"
2689          "\x{a}" ~
2690          "            "
2691          s:assert [
2692            test = "not(.//db:important)"
2693            "important must not occur in the descendants of figure"
2694          ]
2695          "\x{a}" ~
2696          "          "
2697        ]
2698        "\x{a}" ~
2699        "        "
2700      ]
2701      s:pattern [
2702        name = "Element exclusion"
2703        "\x{a}" ~
2704        "          "
2705        s:rule [
2706          context = "db:figure"
2707          "\x{a}" ~
2708          "            "
2709          s:assert [
2710            test = "not(.//db:note)"
2711            "note must not occur in the descendants of figure"
2712          ]
2713          "\x{a}" ~
2714          "          "
2715        ]
2716        "\x{a}" ~
2717        "        "
2718      ]
2719      s:pattern [
2720        name = "Element exclusion"
2721        "\x{a}" ~
2722        "          "
2723        s:rule [
2724          context = "db:figure"
2725          "\x{a}" ~
2726          "            "
2727          s:assert [
2728            test = "not(.//db:tip)"
2729            "tip must not occur in the descendants of figure"
2730          ]
2731          "\x{a}" ~
2732          "          "
2733        ]
2734        "\x{a}" ~
2735        "        "
2736      ]
2737      s:pattern [
2738        name = "Element exclusion"
2739        "\x{a}" ~
2740        "          "
2741        s:rule [
2742          context = "db:figure"
2743          "\x{a}" ~
2744          "            "
2745          s:assert [
2746            test = "not(.//db:warning)"
2747            "warning must not occur in the descendants of figure"
2748          ]
2749          "\x{a}" ~
2750          "          "
2751        ]
2752        "\x{a}" ~
2753        "        "
2754      ]
2755    ]
2756    element figure {
2757      db.figure.attlist, db.figure.info, db.all.blocks+, db.caption?
2758    }
2759}
2760div {
2761  db.informalfigure.role.attribute = attribute role { text }
2762  db.informalfigure.label.attribute = db.label.attribute
2763  db.informalfigure.pgwide.attribute = db.pgwide.attribute
2764  db.informalfigure.floatstyle.attribute = db.floatstyle.attribute
2765  db.informalfigure.attlist =
2766    db.informalfigure.role.attribute?
2767    & db.common.attributes
2768    & db.common.linking.attributes
2769    & db.informalfigure.label.attribute?
2770    & db.informalfigure.pgwide.attribute?
2771    & db.informalfigure.floatstyle.attribute?
2772  db.informalfigure.info = db._info.title.forbidden
2773  db.informalfigure =
2774
2775    ## A untitled figure
2776    element informalfigure {
2777      db.informalfigure.attlist,
2778      db.informalfigure.info,
2779      db.all.blocks+,
2780      db.caption?
2781    }
2782}
2783db.mediaobject.content =
2784  (db.videoobject | db.audioobject | db.imageobject | db.textobject)
2785  | db.imageobjectco
2786div {
2787  db.mediaobject.role.attribute = attribute role { text }
2788  db.mediaobject.attlist =
2789    db.mediaobject.role.attribute?
2790    & db.common.attributes
2791    & db.common.linking.attributes
2792  db.mediaobject.info = db._info.title.forbidden
2793  db.mediaobject =
2794
2795    ## A displayed media object (video, audio, image, etc.)
2796    element mediaobject {
2797      db.mediaobject.attlist,
2798      db.mediaobject.info,
2799      db.alt?,
2800      db.mediaobject.content+,
2801      db.caption?
2802    }
2803}
2804div {
2805  db.inlinemediaobject.role.attribute = attribute role { text }
2806  db.inlinemediaobject.attlist =
2807    db.inlinemediaobject.role.attribute?
2808    & db.common.attributes
2809    & db.common.linking.attributes
2810  db.inlinemediaobject.info = db._info.title.forbidden
2811  db.inlinemediaobject =
2812
2813    ## An inline media object (video, audio, image, and so on)
2814    element inlinemediaobject {
2815      db.inlinemediaobject.attlist,
2816      db.inlinemediaobject.info,
2817      db.alt?,
2818      db.mediaobject.content+
2819    }
2820}
2821div {
2822  db.videoobject.role.attribute = attribute role { text }
2823  db.videoobject.attlist =
2824    db.videoobject.role.attribute?
2825    & db.common.attributes
2826    & db.common.linking.attributes
2827  db.videoobject.info = db._info.title.forbidden
2828  db.videoobject =
2829
2830    ## A wrapper for video data and its associated meta-information
2831    element videoobject {
2832      db.videoobject.attlist, db.videoobject.info, db.videodata
2833    }
2834}
2835div {
2836  db.audioobject.role.attribute = attribute role { text }
2837  db.audioobject.attlist =
2838    db.audioobject.role.attribute?
2839    & db.common.attributes
2840    & db.common.linking.attributes
2841  db.audioobject.info = db._info.title.forbidden
2842  db.audioobject =
2843
2844    ## A wrapper for audio data and its associated meta-information
2845    element audioobject {
2846      db.audioobject.attlist, db.audioobject.info, db.audiodata
2847    }
2848}
2849db.imageobject.content =
2850  db.imagedata | db.imagedata.mathml | db.imagedata.svg
2851div {
2852  db.imageobject.role.attribute = attribute role { text }
2853  db.imageobject.attlist =
2854    db.imageobject.role.attribute?
2855    & db.common.attributes
2856    & db.common.linking.attributes
2857  db.imageobject.info = db._info.title.forbidden
2858  db.imageobject =
2859
2860    ## A wrapper for image data and its associated meta-information
2861    element imageobject {
2862      db.imageobject.attlist,
2863      db.imageobject.info,
2864      db.imageobject.content
2865    }
2866}
2867div {
2868  db.textobject.role.attribute = attribute role { text }
2869  db.textobject.attlist =
2870    db.textobject.role.attribute?
2871    & db.common.attributes
2872    & db.common.linking.attributes
2873  db.textobject.info = db._info.title.forbidden
2874  db.textobject =
2875
2876    ## A wrapper for a text description of an object and its associated meta-information
2877    element textobject {
2878      db.textobject.attlist,
2879      db.textobject.info,
2880      (db.phrase | db.textdata | db.all.blocks+)
2881    }
2882}
2883div {
2884  db.videodata.role.attribute = attribute role { text }
2885  db.videodata.align.enumeration = db.halign.enumeration
2886  db.videodata.align.attribute =
2887
2888    ## Specifies the (horizontal) alignment of the video data
2889    attribute align { db.videodata.align.enumeration }
2890  db.videodata.valign.enumeration = db.valign.enumeration
2891  db.videodata.valign.attribute =
2892
2893    ## Specifies the vertical alignment of the video data
2894    attribute valign { db.videodata.valign.enumeration }
2895  db.videodata.width.attribute = db.width.attribute
2896  db.videodata.depth.attribute = db.depth.attribute
2897  db.videodata.contentwidth.attribute = db.contentwidth.attribute
2898  db.videodata.contentdepth.attribute = db.contentdepth.attribute
2899  db.videodata.scalefit.enumeration = db.scalefit.enumeration
2900  db.videodata.scalefit.attribute =
2901
2902    ## Determines if anamorphic scaling is forbidden
2903    attribute scalefit { db.videodata.scalefit.enumeration }
2904  db.videodata.scale.attribute = db.scale.attribute
2905  db.videodata.attlist =
2906    db.videodata.role.attribute?
2907    & db.common.attributes
2908    & db.common.data.attributes
2909    & db.videodata.align.attribute?
2910    & db.videodata.valign.attribute?
2911    & db.videodata.width.attribute?
2912    & db.videodata.contentwidth.attribute?
2913    & db.videodata.scalefit.attribute?
2914    & db.videodata.scale.attribute?
2915    & db.videodata.depth.attribute?
2916    & db.videodata.contentdepth.attribute?
2917  db.videodata.info = db._info.title.forbidden
2918  db.videodata =
2919
2920    ## Pointer to external video data
2921    element videodata { db.videodata.attlist, db.videodata.info }
2922}
2923div {
2924  db.audiodata.role.attribute = attribute role { text }
2925  db.audiodata.attlist =
2926    db.audiodata.role.attribute?
2927    & db.common.attributes
2928    & db.common.data.attributes
2929  db.audiodata.info = db._info.title.forbidden
2930  db.audiodata =
2931
2932    ## Pointer to external audio data
2933    element audiodata { db.audiodata.attlist, db.audiodata.info }
2934}
2935div {
2936  db.imagedata.role.attribute = attribute role { text }
2937  db.imagedata.align.enumeration = db.halign.enumeration
2938  db.imagedata.align.attribute =
2939
2940    ## Specifies the (horizontal) alignment of the image data
2941    attribute align { db.imagedata.align.enumeration }
2942  db.imagedata.valign.enumeration = db.valign.enumeration
2943  db.imagedata.valign.attribute =
2944
2945    ## Specifies the vertical alignment of the image data
2946    attribute valign { db.imagedata.valign.enumeration }
2947  db.imagedata.width.attribute = db.width.attribute
2948  db.imagedata.depth.attribute = db.depth.attribute
2949  db.imagedata.contentwidth.attribute = db.contentwidth.attribute
2950  db.imagedata.contentdepth.attribute = db.contentdepth.attribute
2951  db.imagedata.scalefit.enumeration = db.scalefit.enumeration
2952  db.imagedata.scalefit.attribute =
2953
2954    ## Determines if anamorphic scaling is forbidden
2955    attribute scalefit { db.imagedata.scalefit.enumeration }
2956  db.imagedata.scale.attribute = db.scale.attribute
2957  db.imagedata.attlist =
2958    db.imagedata.role.attribute?
2959    & db.common.attributes
2960    & db.common.data.attributes
2961    & db.imagedata.align.attribute?
2962    & db.imagedata.valign.attribute?
2963    & db.imagedata.width.attribute?
2964    & db.imagedata.contentwidth.attribute?
2965    & db.imagedata.scalefit.attribute?
2966    & db.imagedata.scale.attribute?
2967    & db.imagedata.depth.attribute?
2968    & db.imagedata.contentdepth.attribute?
2969  db.imagedata.info = db._info.title.forbidden
2970  db.imagedata =
2971
2972    ## Pointer to external image data
2973    element imagedata { db.imagedata.attlist, db.imagedata.info }
2974}
2975div {
2976  db.textdata.role.attribute = attribute role { text }
2977  db.textdata.encoding.attribute =
2978
2979    ## Identifies the encoding of the text in the external file
2980    attribute encoding { text }
2981  db.textdata.attlist =
2982    db.textdata.role.attribute?
2983    & db.common.attributes
2984    & db.common.data.attributes
2985    & db.textdata.encoding.attribute?
2986  db.textdata.info = db._info.title.forbidden
2987  db.textdata =
2988
2989    ## Pointer to external text data
2990    element textdata { db.textdata.attlist, db.textdata.info }
2991}
2992div {
2993  db.caption.role.attribute = attribute role { text }
2994  db.caption.attlist =
2995    db.caption.role.attribute?
2996    & db.common.attributes
2997    & db.common.linking.attributes
2998  db.caption.info = db._info.title.forbidden
2999  db.caption =
3000
3001    ## A caption
3002    [
3003      s:pattern [
3004        name = "Element exclusion"
3005        "\x{a}" ~
3006        "          "
3007        s:rule [
3008          context = "db:caption"
3009          "\x{a}" ~
3010          "            "
3011          s:assert [
3012            test = "not(.//db:example)"
3013            "example must not occur in the descendants of caption"
3014          ]
3015          "\x{a}" ~
3016          "          "
3017        ]
3018        "\x{a}" ~
3019        "        "
3020      ]
3021      s:pattern [
3022        name = "Element exclusion"
3023        "\x{a}" ~
3024        "          "
3025        s:rule [
3026          context = "db:caption"
3027          "\x{a}" ~
3028          "            "
3029          s:assert [
3030            test = "not(.//db:figure)"
3031            "figure must not occur in the descendants of caption"
3032          ]
3033          "\x{a}" ~
3034          "          "
3035        ]
3036        "\x{a}" ~
3037        "        "
3038      ]
3039      s:pattern [
3040        name = "Element exclusion"
3041        "\x{a}" ~
3042        "          "
3043        s:rule [
3044          context = "db:caption"
3045          "\x{a}" ~
3046          "            "
3047          s:assert [
3048            test = "not(.//db:table)"
3049            "table must not occur in the descendants of caption"
3050          ]
3051          "\x{a}" ~
3052          "          "
3053        ]
3054        "\x{a}" ~
3055        "        "
3056      ]
3057      s:pattern [
3058        name = "Element exclusion"
3059        "\x{a}" ~
3060        "          "
3061        s:rule [
3062          context = "db:caption"
3063          "\x{a}" ~
3064          "            "
3065          s:assert [
3066            test = "not(.//db:table)"
3067            "table must not occur in the descendants of caption"
3068          ]
3069          "\x{a}" ~
3070          "          "
3071        ]
3072        "\x{a}" ~
3073        "        "
3074      ]
3075      s:pattern [
3076        name = "Element exclusion"
3077        "\x{a}" ~
3078        "          "
3079        s:rule [
3080          context = "db:caption"
3081          "\x{a}" ~
3082          "            "
3083          s:assert [
3084            test = "not(.//db:caution)"
3085            "caution must not occur in the descendants of caption"
3086          ]
3087          "\x{a}" ~
3088          "          "
3089        ]
3090        "\x{a}" ~
3091        "        "
3092      ]
3093      s:pattern [
3094        name = "Element exclusion"
3095        "\x{a}" ~
3096        "          "
3097        s:rule [
3098          context = "db:caption"
3099          "\x{a}" ~
3100          "            "
3101          s:assert [
3102            test = "not(.//db:important)"
3103            "important must not occur in the descendants of caption"
3104          ]
3105          "\x{a}" ~
3106          "          "
3107        ]
3108        "\x{a}" ~
3109        "        "
3110      ]
3111      s:pattern [
3112        name = "Element exclusion"
3113        "\x{a}" ~
3114        "          "
3115        s:rule [
3116          context = "db:caption"
3117          "\x{a}" ~
3118          "            "
3119          s:assert [
3120            test = "not(.//db:note)"
3121            "note must not occur in the descendants of caption"
3122          ]
3123          "\x{a}" ~
3124          "          "
3125        ]
3126        "\x{a}" ~
3127        "        "
3128      ]
3129      s:pattern [
3130        name = "Element exclusion"
3131        "\x{a}" ~
3132        "          "
3133        s:rule [
3134          context = "db:caption"
3135          "\x{a}" ~
3136          "            "
3137          s:assert [
3138            test = "not(.//db:tip)"
3139            "tip must not occur in the descendants of caption"
3140          ]
3141          "\x{a}" ~
3142          "          "
3143        ]
3144        "\x{a}" ~
3145        "        "
3146      ]
3147      s:pattern [
3148        name = "Element exclusion"
3149        "\x{a}" ~
3150        "          "
3151        s:rule [
3152          context = "db:caption"
3153          "\x{a}" ~
3154          "            "
3155          s:assert [
3156            test = "not(.//db:warning)"
3157            "warning must not occur in the descendants of caption"
3158          ]
3159          "\x{a}" ~
3160          "          "
3161        ]
3162        "\x{a}" ~
3163        "        "
3164      ]
3165      s:pattern [
3166        name = "Element exclusion"
3167        "\x{a}" ~
3168        "          "
3169        s:rule [
3170          context = "db:caption"
3171          "\x{a}" ~
3172          "            "
3173          s:assert [
3174            test = "not(.//db:sidebar)"
3175            "sidebar must not occur in the descendants of caption"
3176          ]
3177          "\x{a}" ~
3178          "          "
3179        ]
3180        "\x{a}" ~
3181        "        "
3182      ]
3183      s:pattern [
3184        name = "Element exclusion"
3185        "\x{a}" ~
3186        "          "
3187        s:rule [
3188          context = "db:caption"
3189          "\x{a}" ~
3190          "            "
3191          s:assert [
3192            test = "not(.//db:task)"
3193            "task must not occur in the descendants of caption"
3194          ]
3195          "\x{a}" ~
3196          "          "
3197        ]
3198        "\x{a}" ~
3199        "        "
3200      ]
3201    ]
3202    element caption {
3203      db.caption.attlist, db.caption.info, db.all.blocks+
3204    }
3205}
3206div {
3207  db.synopsis.role.attribute = attribute role { text }
3208  db.synopsis.label.attribute = db.label.attribute
3209  db.synopsis.attlist =
3210    db.synopsis.role.attribute?
3211    & db.common.attributes
3212    & db.common.linking.attributes
3213    & db.verbatim.attributes
3214    & db.synopsis.label.attribute?
3215  db.synopsis =
3216
3217    ## A general-purpose element for representing the syntax of commands or functions
3218    element synopsis { db.synopsis.attlist, db.verbatim.contentmodel }
3219}
3220div {
3221  db.cmdsynopsis.role.attribute = attribute role { text }
3222  db.cmdsynopsis.sepchar.attribute =
3223
3224    ## Specifies the character that should separate the command and its top-level arguments
3225    attribute sepchar { text }
3226  db.cmdsynopsis.cmdlength.attribute =
3227
3228    ## Indicates the displayed length of the command; this information may be used to intelligently indent command synopses which extend beyond one line
3229    attribute cmdlength { text }
3230  db.cmdsynopsis.label.attribute = db.label.attribute
3231  db.cmdsynopsis.attlist =
3232    db.cmdsynopsis.role.attribute?
3233    & db.common.attributes
3234    & db.common.linking.attributes
3235    & db.cmdsynopsis.sepchar.attribute?
3236    & db.cmdsynopsis.cmdlength.attribute?
3237    & db.cmdsynopsis.label.attribute?
3238  db.cmdsynopsis.info = db._info.title.forbidden
3239  db.cmdsynopsis =
3240
3241    ## A syntax summary for a software command
3242    element cmdsynopsis {
3243      db.cmdsynopsis.attlist,
3244      db.cmdsynopsis.info,
3245      (db.command | db.arg | db.group | db.sbr)+,
3246      db.synopfragment*
3247    }
3248}
3249db.rep.enumeration =
3250
3251  ## Can not be repeated.
3252  "norepeat"
3253  |
3254    ## Can be repeated.
3255    "repeat"
3256db.rep.attribute =
3257
3258  ## Indicates whether or not repetition is possible.
3259  [ a:defaultValue = "norepeat" ] attribute rep { db.rep.enumeration }
3260db.choice.enumeration =
3261
3262  ## Formatted to indicate that it is optional.
3263  "opt"
3264  |
3265    ## Formatted without indication.
3266    "plain"
3267  |
3268    ## Formatted to indicate that it is required.
3269    "req"
3270db.choice.opt.attribute =
3271
3272  ## Indicates optionality.
3273  [ a:defaultValue = "opt" ] attribute choice { db.choice.enumeration }
3274db.choice.req.attribute =
3275
3276  ## Indicates optionality.
3277  [ a:defaultValue = "req" ] attribute choice { db.choice.enumeration }
3278div {
3279  db.arg.role.attribute = attribute role { text }
3280  db.arg.rep.attribute = db.rep.attribute
3281  db.arg.choice.attribute = db.choice.opt.attribute
3282  db.arg.attlist =
3283    db.arg.role.attribute?
3284    & db.common.attributes
3285    & db.common.linking.attributes
3286    & db.arg.rep.attribute?
3287    & db.arg.choice.attribute?
3288  db.arg =
3289
3290    ## An argument in a CmdSynopsis
3291    element arg {
3292      db.arg.attlist,
3293      (db._text
3294       | db.arg
3295       | db.group
3296       | db.option
3297       | db.synopfragmentref
3298       | db.sbr)*
3299    }
3300}
3301div {
3302  db.group.role.attribute = attribute role { text }
3303  db.group.rep.attribute = db.rep.attribute
3304  db.group.choice.attribute = db.choice.opt.attribute
3305  db.group.attlist =
3306    db.group.role.attribute?
3307    & db.common.attributes
3308    & db.common.linking.attributes
3309    & db.group.rep.attribute?
3310    & db.group.choice.attribute?
3311  db.group =
3312
3313    ## A group of elements in a CmdSynopsis
3314    element group {
3315      db.group.attlist,
3316      (db.arg
3317       | db.group
3318       | db.option
3319       | db.synopfragmentref
3320       | db.replaceable
3321       | db.sbr)+
3322    }
3323}
3324div {
3325  db.sbr.role.attribute = attribute role { text }
3326  db.sbr.attlist = db.sbr.role.attribute? & db.common.attributes
3327  db.sbr =
3328
3329    ## An explicit line break in a command synopsis
3330    element sbr { db.sbr.attlist, empty }
3331}
3332div {
3333  db.synopfragment.role.attribute = attribute role { text }
3334  db.synopfragment.attlist =
3335    db.synopfragment.role.attribute?
3336    & db.common.attributes
3337    & db.common.linking.attributes
3338  db.synopfragment =
3339
3340    ## A portion of a CmdSynopsis broken out from the main body of the synopsis
3341    element synopfragment {
3342      db.synopfragment.attlist, (db.arg | db.group)+
3343    }
3344}
3345div {
3346  db.synopfragmentref.role.attribute = attribute role { text }
3347  db.synopfragmentref.attlist =
3348    db.synopfragmentref.role.attribute?
3349    & db.common.attributes
3350    & db.linkend.attribute
3351  db.synopfragmentref =
3352
3353    ## A reference to a fragment of a command synopsis
3354    [
3355      s:pattern [
3356        name = "Synopsis fragment type constraint"
3357        "\x{a}" ~
3358        "          "
3359        s:rule [
3360          context = "db:synopfragmentref"
3361          "\x{a}" ~
3362          "            "
3363          s:assert [
3364            test =
3365              "local-name(//*[@id=current()/@linkend]) = 'synopfragment' and namespace-uri(//*[@id=current()/@linkend]) = 'http://docbook.org/ns/docbook'"
3366            "@linkend on synopfragmentref must point to a synopfragment."
3367          ]
3368          "\x{a}" ~
3369          "          "
3370        ]
3371        "\x{a}" ~
3372        "        "
3373      ]
3374    ]
3375    element synopfragmentref { db.synopfragmentref.attlist, text }
3376}
3377div {
3378  db.funcsynopsis.role.attribute = attribute role { text }
3379  db.funcsynopsis.attlist =
3380    db.funcsynopsis.role.attribute?
3381    & db.common.attributes
3382    & db.common.linking.attributes
3383    & db.language.attribute?
3384  db.funcsynopsis.info = db._info.title.forbidden
3385  db.funcsynopsis =
3386
3387    ## The syntax summary for a function definition
3388    element funcsynopsis {
3389      db.funcsynopsis.attlist,
3390      db.funcsynopsis.info,
3391      (db.funcsynopsisinfo | db.funcprototype)+
3392    }
3393}
3394div {
3395  db.funcsynopsisinfo.role.attribute = attribute role { text }
3396  db.funcsynopsisinfo.attlist =
3397    db.funcsynopsisinfo.role.attribute?
3398    & db.common.attributes
3399    & db.common.linking.attributes
3400    & db.verbatim.attributes
3401  db.funcsynopsisinfo =
3402
3403    ## Information supplementing the FuncDefs of a FuncSynopsis
3404    element funcsynopsisinfo {
3405      db.funcsynopsisinfo.attlist, db.verbatim.contentmodel
3406    }
3407}
3408div {
3409  db.funcprototype.role.attribute = attribute role { text }
3410  db.funcprototype.attlist =
3411    db.funcprototype.role.attribute?
3412    & db.common.attributes
3413    & db.common.linking.attributes
3414  db.funcprototype =
3415
3416    ## The prototype of a function
3417    element funcprototype {
3418      db.funcprototype.attlist,
3419      db.modifier*,
3420      db.funcdef,
3421      (db.void | db.varargs | (db.paramdef+, db.varargs?)),
3422      db.modifier*
3423    }
3424}
3425div {
3426  db.funcdef.role.attribute = attribute role { text }
3427  db.funcdef.attlist =
3428    db.funcdef.role.attribute?
3429    & db.common.attributes
3430    & db.common.linking.attributes
3431  db.funcdef =
3432
3433    ## A function (subroutine) name and its return type
3434    element funcdef {
3435      db.funcdef.attlist, (db._text | db.type | db.function)*
3436    }
3437}
3438div {
3439  db.void.role.attribute = attribute role { text }
3440  db.void.attlist =
3441    db.void.role.attribute?
3442    & db.common.attributes
3443    & db.common.linking.attributes
3444  db.void =
3445
3446    ## An empty element in a function synopsis indicating that the function in question takes no arguments
3447    element void { db.void.attlist, empty }
3448}
3449div {
3450  db.varargs.role.attribute = attribute role { text }
3451  db.varargs.attlist =
3452    db.varargs.role.attribute?
3453    & db.common.attributes
3454    & db.common.linking.attributes
3455  db.varargs =
3456
3457    ## An empty element in a function synopsis indicating a variable number of arguments
3458    element varargs { db.varargs.attlist, empty }
3459}
3460div {
3461  db.paramdef.role.attribute = attribute role { text }
3462  db.paramdef.choice.enumeration =
3463
3464    ## Formatted to indicate that it is optional.
3465    "opt"
3466    |
3467      ## Formatted to indicate that it is required.
3468      "req"
3469  db.paramdef.choice.attribute =
3470
3471    ## Indicates optionality.
3472    [ a:defaultValue = "opt" ]
3473    attribute choice { db.paramdef.choice.enumeration }
3474  db.paramdef.attlist =
3475    db.paramdef.role.attribute?
3476    & db.common.attributes
3477    & db.common.linking.attributes
3478    & db.paramdef.choice.attribute?
3479  db.paramdef =
3480
3481    ## Information about a function parameter in a programming language
3482    element paramdef {
3483      db.paramdef.attlist,
3484      (db._text
3485       | db.initializer
3486       | db.type
3487       | db.parameter
3488       | db.funcparams)*
3489    }
3490}
3491div {
3492  db.funcparams.role.attribute = attribute role { text }
3493  db.funcparams.attlist =
3494    db.funcparams.role.attribute?
3495    & db.common.attributes
3496    & db.common.linking.attributes
3497  db.funcparams =
3498
3499    ## Parameters for a function referenced through a function pointer in a synopsis
3500    element funcparams { db.funcparams.attlist, db._text }
3501}
3502div {
3503  db.classsynopsis.role.attribute = attribute role { text }
3504  db.classsynopsis.class.enumeration =
3505
3506    ## This is the synopsis of a class
3507    "class"
3508    |
3509      ## This is the synopsis of an interface
3510      "interface"
3511  db.classsynopsis.class.attribute =
3512
3513    ## Specifies the nature of the synopsis
3514    attribute class { db.classsynopsis.class.enumeration }
3515  db.classsynopsis.attlist =
3516    db.classsynopsis.role.attribute?
3517    & db.common.attributes
3518    & db.common.linking.attributes
3519    & db.language.attribute?
3520    & db.classsynopsis.class.attribute?
3521  db.classsynopsis =
3522
3523    ## The syntax summary for a class definition
3524    element classsynopsis {
3525      db.classsynopsis.attlist,
3526      db.oo.inlines+,
3527      (db.classsynopsisinfo
3528       | db.methodsynopsis
3529       | db.constructorsynopsis
3530       | db.destructorsynopsis
3531       | db.fieldsynopsis)*
3532    }
3533}
3534div {
3535  db.classsynopsisinfo.role.attribute = attribute role { text }
3536  db.classsynopsisinfo.attlist =
3537    db.classsynopsisinfo.role.attribute?
3538    & db.common.attributes
3539    & db.common.linking.attributes
3540    & db.verbatim.attributes
3541  db.classsynopsisinfo =
3542
3543    ## Information supplementing the contents of a ClassSynopsis
3544    element classsynopsisinfo {
3545      db.classsynopsisinfo.attlist, db.verbatim.contentmodel
3546    }
3547}
3548div {
3549  db.ooclass.role.attribute = attribute role { text }
3550  db.ooclass.attlist =
3551    db.ooclass.role.attribute?
3552    & db.common.attributes
3553    & db.common.linking.attributes
3554  db.ooclass =
3555
3556    ## A class in an object-oriented programming language
3557    element ooclass {
3558      db.ooclass.attlist, (db.package | db.modifier)*, db.classname
3559    }
3560}
3561div {
3562  db.oointerface.role.attribute = attribute role { text }
3563  db.oointerface.attlist =
3564    db.oointerface.role.attribute?
3565    & db.common.attributes
3566    & db.common.linking.attributes
3567  db.oointerface =
3568
3569    ## An interface in an object-oriented programming language
3570    element oointerface {
3571      db.oointerface.attlist,
3572      (db.package | db.modifier)*,
3573      db.interfacename
3574    }
3575}
3576div {
3577  db.ooexception.role.attribute = attribute role { text }
3578  db.ooexception.attlist =
3579    db.ooexception.role.attribute?
3580    & db.common.attributes
3581    & db.common.linking.attributes
3582  db.ooexception =
3583
3584    ## An exception in an object-oriented programming language
3585    element ooexception {
3586      db.ooexception.attlist,
3587      (db.package | db.modifier)*,
3588      db.exceptionname
3589    }
3590}
3591db.modifier.xml.space.attribute =
3592
3593  ## Can be used to indicate that whitespace in the modifier should be preserved (for multi-line annotations, for example).
3594  attribute xml:space {
3595
3596    ## Extra whitespace and line breaks must be preserved.
3597    [
3598      # Ideally the definition of xml:space used on modifier would be
3599      # different from the definition used on the verbatim elements. The
3600      # verbatim elements forbid the use of xml:space="default" which
3601      # wouldn't be a problem on modifier. But doing that causes the
3602      # generated XSD schemas to be broken so I'm just reusing the existing
3603      # definition for now. It won't be backwards incompatible to fix this
3604      # problem in the future.
3605      #    | ## Extra whitespace and line breaks are not preserved.
3606      #      "default"
3607
3608    ]
3609    "preserve"
3610  }
3611div {
3612  db.modifier.role.attribute = attribute role { text }
3613  db.modifier.attlist =
3614    db.modifier.xml.space.attribute?
3615    & db.modifier.role.attribute?
3616    & db.common.attributes
3617    & db.common.linking.attributes
3618  db.modifier =
3619
3620    ## Modifiers in a synopsis
3621    element modifier { db.modifier.attlist, db._text }
3622}
3623div {
3624  db.interfacename.role.attribute = attribute role { text }
3625  db.interfacename.attlist =
3626    db.interfacename.role.attribute?
3627    & db.common.attributes
3628    & db.common.linking.attributes
3629  db.interfacename =
3630
3631    ## The name of an interface
3632    element interfacename { db.interfacename.attlist, db._text }
3633}
3634div {
3635  db.exceptionname.role.attribute = attribute role { text }
3636  db.exceptionname.attlist =
3637    db.exceptionname.role.attribute?
3638    & db.common.attributes
3639    & db.common.linking.attributes
3640  db.exceptionname =
3641
3642    ## The name of an exception
3643    element exceptionname { db.exceptionname.attlist, db._text }
3644}
3645div {
3646  db.fieldsynopsis.role.attribute = attribute role { text }
3647  db.fieldsynopsis.attlist =
3648    db.fieldsynopsis.role.attribute?
3649    & db.common.attributes
3650    & db.common.linking.attributes
3651    & db.language.attribute?
3652  db.fieldsynopsis =
3653
3654    ## The name of a field in a class definition
3655    element fieldsynopsis {
3656      db.fieldsynopsis.attlist,
3657      db.modifier*,
3658      db.type?,
3659      db.varname,
3660      db.initializer?
3661    }
3662}
3663div {
3664  db.initializer.role.attribute = attribute role { text }
3665  db.initializer.attlist =
3666    db.initializer.role.attribute?
3667    & db.common.attributes
3668    & db.common.linking.attributes
3669  db.initializer =
3670
3671    ## The initializer for a FieldSynopsis
3672    element initializer { db.initializer.attlist, db._text }
3673}
3674div {
3675  db.constructorsynopsis.role.attribute = attribute role { text }
3676  db.constructorsynopsis.attlist =
3677    db.constructorsynopsis.role.attribute?
3678    & db.common.attributes
3679    & db.common.linking.attributes
3680    & db.language.attribute?
3681  db.constructorsynopsis =
3682
3683    ## A syntax summary for a constructor
3684    element constructorsynopsis {
3685      db.constructorsynopsis.attlist,
3686      db.modifier*,
3687      db.methodname?,
3688      (db.methodparam+ | db.void?),
3689      db.exceptionname*
3690    }
3691}
3692div {
3693  db.destructorsynopsis.role.attribute = attribute role { text }
3694  db.destructorsynopsis.attlist =
3695    db.destructorsynopsis.role.attribute?
3696    & db.common.attributes
3697    & db.common.linking.attributes
3698    & db.language.attribute?
3699  db.destructorsynopsis =
3700
3701    ## A syntax summary for a destructor
3702    element destructorsynopsis {
3703      db.destructorsynopsis.attlist,
3704      db.modifier*,
3705      db.methodname?,
3706      (db.methodparam+ | db.void?),
3707      db.exceptionname*
3708    }
3709}
3710div {
3711  db.methodsynopsis.role.attribute = attribute role { text }
3712  db.methodsynopsis.attlist =
3713    db.methodsynopsis.role.attribute?
3714    & db.common.attributes
3715    & db.common.linking.attributes
3716    & db.language.attribute?
3717  db.methodsynopsis =
3718
3719    ## A syntax summary for a method
3720    element methodsynopsis {
3721      db.methodsynopsis.attlist,
3722      db.modifier*,
3723      (db.type | db.void)?,
3724      db.methodname,
3725      (db.methodparam+ | db.void),
3726      db.exceptionname*,
3727      db.modifier*
3728    }
3729}
3730div {
3731  db.methodname.role.attribute = attribute role { text }
3732  db.methodname.attlist =
3733    db.methodname.role.attribute?
3734    & db.common.attributes
3735    & db.common.linking.attributes
3736  db.methodname =
3737
3738    ## The name of a method
3739    element methodname { db.methodname.attlist, db._text }
3740}
3741div {
3742  db.methodparam.role.attribute = attribute role { text }
3743  db.methodparam.rep.attribute = db.rep.attribute
3744  db.methodparam.choice.attribute = db.choice.req.attribute
3745  db.methodparam.attlist =
3746    db.methodparam.role.attribute?
3747    & db.common.attributes
3748    & db.common.linking.attributes
3749    & db.methodparam.rep.attribute?
3750    & db.methodparam.choice.attribute?
3751  db.methodparam =
3752
3753    ## Parameters to a method
3754    element methodparam {
3755      db.methodparam.attlist,
3756      db.modifier*,
3757      db.type?,
3758      ((db.modifier*, db.parameter, db.initializer?) | db.funcparams),
3759      db.modifier*
3760    }
3761}
3762div {
3763  db.address.role.attribute = attribute role { text }
3764  db.address.attlist =
3765    db.address.role.attribute?
3766    & db.common.attributes
3767    & db.common.linking.attributes
3768    & db.verbatim.attributes
3769  db.address =
3770
3771    ## A real-world address, generally a postal address
3772    element address {
3773      db.address.attlist,
3774      (db._text
3775       | db.personname
3776       | db.pob
3777       | db.street
3778       | db.city
3779       | db.state
3780       | db.postcode
3781       | db.country
3782       | db.phone
3783       | db.fax
3784       | db.email
3785       | db.otheraddr)*
3786    }
3787}
3788div {
3789  db.street.role.attribute = attribute role { text }
3790  db.street.attlist =
3791    db.street.role.attribute?
3792    & db.common.attributes
3793    & db.common.linking.attributes
3794  db.street =
3795
3796    ## A street address in an address
3797    element street { db.street.attlist, db._text }
3798}
3799div {
3800  db.pob.role.attribute = attribute role { text }
3801  db.pob.attlist =
3802    db.pob.role.attribute?
3803    & db.common.attributes
3804    & db.common.linking.attributes
3805  db.pob =
3806
3807    ## A post office box in an address
3808    element pob { db.pob.attlist, db._text }
3809}
3810div {
3811  db.postcode.role.attribute = attribute role { text }
3812  db.postcode.attlist =
3813    db.postcode.role.attribute?
3814    & db.common.attributes
3815    & db.common.linking.attributes
3816  db.postcode =
3817
3818    ## A postal code in an address
3819    element postcode { db.postcode.attlist, db._text }
3820}
3821div {
3822  db.city.role.attribute = attribute role { text }
3823  db.city.attlist =
3824    db.city.role.attribute?
3825    & db.common.attributes
3826    & db.common.linking.attributes
3827  db.city =
3828
3829    ## The name of a city in an address
3830    element city { db.city.attlist, db._text }
3831}
3832div {
3833  db.state.role.attribute = attribute role { text }
3834  db.state.attlist =
3835    db.state.role.attribute?
3836    & db.common.attributes
3837    & db.common.linking.attributes
3838  db.state =
3839
3840    ## A state or province in an address
3841    element state { db.state.attlist, db._text }
3842}
3843div {
3844  db.country.role.attribute = attribute role { text }
3845  db.country.attlist =
3846    db.country.role.attribute?
3847    & db.common.attributes
3848    & db.common.linking.attributes
3849  db.country =
3850
3851    ## The name of a country
3852    element country { db.country.attlist, db._text }
3853}
3854div {
3855  db.phone.role.attribute = attribute role { text }
3856  db.phone.attlist =
3857    db.phone.role.attribute?
3858    & db.common.attributes
3859    & db.common.linking.attributes
3860  db.phone =
3861
3862    ## A telephone number
3863    element phone { db.phone.attlist, db._text }
3864}
3865div {
3866  db.fax.role.attribute = attribute role { text }
3867  db.fax.attlist =
3868    db.fax.role.attribute?
3869    & db.common.attributes
3870    & db.common.linking.attributes
3871  db.fax =
3872
3873    ## A fax number
3874    element fax { db.fax.attlist, db._text }
3875}
3876div {
3877  db.otheraddr.role.attribute = attribute role { text }
3878  db.otheraddr.attlist =
3879    db.otheraddr.role.attribute?
3880    & db.common.attributes
3881    & db.common.linking.attributes
3882  db.otheraddr =
3883
3884    ## Uncategorized information in address
3885    element otheraddr { db.otheraddr.attlist, db._text }
3886}
3887div {
3888  db.affiliation.role.attribute = attribute role { text }
3889  db.affiliation.attlist =
3890    db.affiliation.role.attribute?
3891    & db.common.attributes
3892    & db.common.linking.attributes
3893  db.affiliation =
3894
3895    ## The institutional affiliation of an individual
3896    element affiliation {
3897      db.affiliation.attlist,
3898      db.shortaffil?,
3899      db.jobtitle*,
3900      (db.org? | (db.orgname?, db.orgdiv*, db.address*))
3901    }
3902}
3903div {
3904  db.shortaffil.role.attribute = attribute role { text }
3905  db.shortaffil.attlist =
3906    db.shortaffil.role.attribute?
3907    & db.common.attributes
3908    & db.common.linking.attributes
3909  db.shortaffil =
3910
3911    ## A brief description of an affiliation
3912    element shortaffil { db.shortaffil.attlist, db._text }
3913}
3914div {
3915  db.jobtitle.role.attribute = attribute role { text }
3916  db.jobtitle.attlist =
3917    db.jobtitle.role.attribute?
3918    & db.common.attributes
3919    & db.common.linking.attributes
3920  db.jobtitle =
3921
3922    ## The title of an individual in an organization
3923    element jobtitle { db.jobtitle.attlist, db._text }
3924}
3925div {
3926  db.orgname.class.enumeration =
3927
3928    ## A consortium
3929    "consortium"
3930    |
3931      ## A corporation
3932      "corporation"
3933    |
3934      ## An informal organization
3935      "informal"
3936    |
3937      ## A non-profit organization
3938      "nonprofit"
3939  db.orgname.class-enum.attribute =
3940
3941    ## Specifies the nature of the organization
3942    attribute class { db.orgname.class.enumeration }
3943  db.orgname.class-other.attributes =
3944
3945    ## Specifies the nature of the organization
3946    attribute class {
3947
3948      ## Indicates a non-standard organization class
3949      "other"
3950    },
3951
3952    ## Identifies the non-standard nature of the organization
3953    attribute otherclass { text }
3954  db.orgname.class.attribute =
3955    db.orgname.class-enum.attribute | db.orgname.class-other.attributes
3956  db.orgname.role.attribute = attribute role { text }
3957  db.orgname.attlist =
3958    db.orgname.role.attribute?
3959    & db.common.attributes
3960    & db.common.linking.attributes
3961    & db.orgname.class.attribute?
3962  db.orgname =
3963
3964    ## The name of an organization other than a corporation
3965    element orgname { db.orgname.attlist, db._text }
3966}
3967div {
3968  db.orgdiv.role.attribute = attribute role { text }
3969  db.orgdiv.attlist =
3970    db.orgdiv.role.attribute?
3971    & db.common.attributes
3972    & db.common.linking.attributes
3973  db.orgdiv =
3974
3975    ## A division of an organization
3976    element orgdiv { db.orgdiv.attlist, db.all.inlines* }
3977}
3978div {
3979  db.artpagenums.role.attribute = attribute role { text }
3980  db.artpagenums.attlist =
3981    db.artpagenums.role.attribute?
3982    & db.common.attributes
3983    & db.common.linking.attributes
3984  db.artpagenums =
3985
3986    ## The page numbers of an article as published
3987    element artpagenums { db.artpagenums.attlist, db._text }
3988}
3989div {
3990  db.personname.role.attribute = attribute role { text }
3991  db.personname.attlist =
3992    db.personname.role.attribute?
3993    & db.common.attributes
3994    & db.common.linking.attributes
3995  db.personname =
3996
3997    ## The personal name of an individual
3998    element personname {
3999      db.personname.attlist,
4000      (db._text
4001       | (db.honorific
4002          | db.firstname
4003          | db.surname
4004          | db.lineage
4005          | db.othername)+)
4006    }
4007}
4008db.person.author.contentmodel =
4009  db.personname,
4010  (db.personblurb
4011   | db.affiliation
4012   | db.email
4013   | db.address
4014   | db.contrib)*
4015db.org.author.contentmodel =
4016  db.orgname,
4017  (db.orgdiv | db.affiliation | db.email | db.address | db.contrib)*
4018db.credit.contentmodel =
4019  db.person.author.contentmodel | db.org.author.contentmodel
4020div {
4021  db.author.role.attribute = attribute role { text }
4022  db.author.attlist =
4023    db.author.role.attribute?
4024    & db.common.attributes
4025    & db.common.linking.attributes
4026  db.author =
4027
4028    ## The name of an individual author
4029    element author { db.author.attlist, db.credit.contentmodel }
4030}
4031div {
4032  db.authorgroup.role.attribute = attribute role { text }
4033  db.authorgroup.attlist =
4034    db.authorgroup.role.attribute?
4035    & db.common.attributes
4036    & db.common.linking.attributes
4037  db.authorgroup =
4038
4039    ## Wrapper for author information when a document has multiple authors or collabarators
4040    element authorgroup {
4041      db.authorgroup.attlist, (db.author | db.editor | db.othercredit)+
4042    }
4043}
4044div {
4045  db.collab.role.attribute = attribute role { text }
4046  db.collab.attlist =
4047    db.collab.role.attribute?
4048    & db.common.attributes
4049    & db.common.linking.attributes
4050  db.collab =
4051
4052    ## Identifies a collaborator
4053    element collab {
4054      db.collab.attlist,
4055      (db.person | db.personname | db.org | db.orgname)+,
4056      db.affiliation*
4057    }
4058}
4059div {
4060  db.authorinitials.role.attribute = attribute role { text }
4061  db.authorinitials.attlist =
4062    db.authorinitials.role.attribute?
4063    & db.common.attributes
4064    & db.common.linking.attributes
4065  db.authorinitials =
4066
4067    ## The initials or other short identifier for an author
4068    element authorinitials { db.authorinitials.attlist, db._text }
4069}
4070div {
4071  db.person.role.attribute = attribute role { text }
4072  db.person.attlist =
4073    db.person.role.attribute?
4074    & db.common.attributes
4075    & db.common.linking.attributes
4076  db.person =
4077
4078    ## A person and associated metadata
4079    element person {
4080      db.person.attlist,
4081      db.personname,
4082      (db.address | db.affiliation | db.email | db.personblurb)*
4083    }
4084}
4085div {
4086  db.org.role.attribute = attribute role { text }
4087  db.org.attlist =
4088    db.org.role.attribute?
4089    & db.common.attributes
4090    & db.common.linking.attributes
4091  db.org =
4092
4093    ## An organization and associated metadata
4094    element org {
4095      db.org.attlist,
4096      db.orgname,
4097      (db.address | db.affiliation | db.email | db.orgdiv)*
4098    }
4099}
4100div {
4101  db.confgroup.role.attribute = attribute role { text }
4102  db.confgroup.attlist =
4103    db.confgroup.role.attribute?
4104    & db.common.attributes
4105    & db.common.linking.attributes
4106  db.confgroup =
4107
4108    ## A wrapper for document meta-information about a conference
4109    element confgroup {
4110      db.confgroup.attlist,
4111      (db.confdates
4112       | db.conftitle
4113       | db.confnum
4114       | db.confsponsor
4115       | db.address)*
4116    }
4117}
4118div {
4119  db.confdates.role.attribute = attribute role { text }
4120  db.confdates.attlist =
4121    db.confdates.role.attribute?
4122    & db.common.attributes
4123    & db.common.linking.attributes
4124  db.confdates =
4125
4126    ## The dates of a conference for which a document was written
4127    element confdates { db.confdates.attlist, db._text }
4128}
4129div {
4130  db.conftitle.role.attribute = attribute role { text }
4131  db.conftitle.attlist =
4132    db.conftitle.role.attribute?
4133    & db.common.attributes
4134    & db.common.linking.attributes
4135  db.conftitle =
4136
4137    ## The title of a conference for which a document was written
4138    element conftitle { db.conftitle.attlist, db._text }
4139}
4140div {
4141  db.confnum.role.attribute = attribute role { text }
4142  db.confnum.attlist =
4143    db.confnum.role.attribute?
4144    & db.common.attributes
4145    & db.common.linking.attributes
4146  db.confnum =
4147
4148    ## An identifier, frequently numerical, associated with a conference for which a document was written
4149    element confnum { db.confnum.attlist, db._text }
4150}
4151div {
4152  db.confsponsor.role.attribute = attribute role { text }
4153  db.confsponsor.attlist =
4154    db.confsponsor.role.attribute?
4155    & db.common.attributes
4156    & db.common.linking.attributes
4157  db.confsponsor =
4158
4159    ## The sponsor of a conference for which a document was written
4160    element confsponsor { db.confsponsor.attlist, db._text }
4161}
4162div {
4163  db.contractnum.role.attribute = attribute role { text }
4164  db.contractnum.attlist =
4165    db.contractnum.role.attribute?
4166    & db.common.attributes
4167    & db.common.linking.attributes
4168  db.contractnum =
4169
4170    ## The contract number of a document
4171    element contractnum { db.contractnum.attlist, db._text }
4172}
4173div {
4174  db.contractsponsor.role.attribute = attribute role { text }
4175  db.contractsponsor.attlist =
4176    db.contractsponsor.role.attribute?
4177    & db.common.attributes
4178    & db.common.linking.attributes
4179  db.contractsponsor =
4180
4181    ## The sponsor of a contract
4182    element contractsponsor { db.contractsponsor.attlist, db._text }
4183}
4184div {
4185  db.copyright.role.attribute = attribute role { text }
4186  db.copyright.attlist =
4187    db.copyright.role.attribute?
4188    & db.common.attributes
4189    & db.common.linking.attributes
4190  db.copyright =
4191
4192    ## Copyright information about a document
4193    element copyright { db.copyright.attlist, db.year+, db.holder* }
4194}
4195div {
4196  db.year.role.attribute = attribute role { text }
4197  db.year.attlist =
4198    db.year.role.attribute?
4199    & db.common.attributes
4200    & db.common.linking.attributes
4201  db.year =
4202
4203    ## The year of publication of a document
4204    element year { db.year.attlist, db._text }
4205}
4206div {
4207  db.holder.role.attribute = attribute role { text }
4208  db.holder.attlist =
4209    db.holder.role.attribute?
4210    & db.common.attributes
4211    & db.common.linking.attributes
4212  db.holder =
4213
4214    ## The name of the individual or organization that holds a copyright
4215    element holder { db.holder.attlist, db._text }
4216}
4217db.cover.contentmodel =
4218  (db.para.blocks
4219   | db.extension.blocks
4220   | db.list.blocks
4221   | db.informal.blocks
4222   | db.publishing.blocks
4223   | db.graphic.blocks
4224   | db.technical.blocks
4225   | db.verbatim.blocks
4226   | db.bridgehead
4227   | db.synopsis.blocks
4228   | db.remark
4229   | db.revhistory)+
4230div {
4231  db.cover.role.attribute = attribute role { text }
4232  db.cover.attlist =
4233    db.cover.role.attribute?
4234    & db.common.attributes
4235    & db.common.linking.attributes
4236  db.cover =
4237
4238    ## Additional content for the cover of a publication
4239    element cover { db.cover.attlist, db.cover.contentmodel }
4240}
4241db.date.contentmodel =
4242  xsd:date | xsd:dateTime | xsd:gYearMonth | xsd:gYear | text
4243div {
4244  db.date.role.attribute = attribute role { text }
4245  db.date.attlist =
4246    db.date.role.attribute?
4247    & db.common.attributes
4248    & db.common.linking.attributes
4249  db.date =
4250
4251    ## The date of publication or revision of a document
4252    element date { db.date.attlist, db.date.contentmodel }
4253}
4254div {
4255  db.edition.role.attribute = attribute role { text }
4256  db.edition.attlist =
4257    db.edition.role.attribute?
4258    & db.common.attributes
4259    & db.common.linking.attributes
4260  db.edition =
4261
4262    ## The name or number of an edition of a document
4263    element edition { db.edition.attlist, db._text }
4264}
4265div {
4266  db.editor.role.attribute = attribute role { text }
4267  db.editor.attlist =
4268    db.editor.role.attribute?
4269    & db.common.attributes
4270    & db.common.linking.attributes
4271  db.editor =
4272
4273    ## The name of the editor of a document
4274    element editor { db.editor.attlist, db.credit.contentmodel }
4275}
4276div {
4277  db.biblioid.role.attribute = attribute role { text }
4278  db.biblioid.attlist =
4279    db.biblioid.role.attribute?
4280    & db.common.attributes
4281    & db.common.linking.attributes
4282    & db.biblio.class.attribute
4283  db.biblioid =
4284
4285    ## An identifier for a document
4286    element biblioid { db.biblioid.attlist, db._text }
4287}
4288div {
4289  db.citebiblioid.role.attribute = attribute role { text }
4290  db.citebiblioid.attlist =
4291    db.citebiblioid.role.attribute?
4292    & db.common.attributes
4293    & db.common.linking.attributes
4294    & db.biblio.class.attribute
4295  db.citebiblioid =
4296
4297    ## A citation of a bibliographic identifier
4298    element citebiblioid { db.citebiblioid.attlist, db._text }
4299}
4300div {
4301  db.bibliosource.role.attribute = attribute role { text }
4302  db.bibliosource.attlist =
4303    db.bibliosource.role.attribute?
4304    & db.common.attributes
4305    & db.common.linking.attributes
4306    & db.biblio.class.attribute
4307  db.bibliosource =
4308
4309    ## The source of a document
4310    element bibliosource { db.bibliosource.attlist, db._text }
4311}
4312div {
4313  db.bibliorelation.type.enumeration =
4314
4315    ## The described resource pre-existed the referenced resource, which is essentially the same intellectual content presented in another format
4316    "hasformat"
4317    |
4318      ## The described resource includes the referenced resource either physically or logically
4319      "haspart"
4320    |
4321      ## The described resource has a version, edition, or adaptation, namely, the referenced resource
4322      "hasversion"
4323    |
4324      ## The described resource is the same intellectual content of the referenced resource, but presented in another format
4325      "isformatof"
4326    |
4327      ## The described resource is a physical or logical part of the referenced resource
4328      "ispartof"
4329    |
4330      ## The described resource is referenced, cited, or otherwise pointed to by the referenced resource
4331      "isreferencedby"
4332    |
4333      ## The described resource is supplanted, displaced, or superceded by the referenced resource
4334      "isreplacedby"
4335    |
4336      ## The described resource is required by the referenced resource, either physically or logically
4337      "isrequiredby"
4338    |
4339      ## The described resource is a version, edition, or adaptation of the referenced resource; changes in version imply substantive changes in content rather than differences in format
4340      "isversionof"
4341    |
4342      ## The described resource references, cites, or otherwise points to the referenced resource
4343      "references"
4344    |
4345      ## The described resource supplants, displaces, or supersedes the referenced resource
4346      "replaces"
4347    |
4348      ## The described resource requires the referenced resource to support its function, delivery, or coherence of content
4349      "requires"
4350  db.bibliorelation.type-enum.attribute =
4351
4352    ## Identifies the type of relationship
4353    attribute type { db.bibliorelation.type.enumeration }?
4354  db.bibliorelation.type-other.attributes =
4355
4356    ## Identifies the type of relationship
4357    attribute type {
4358
4359      ## The described resource has a non-standard relationship with the referenced resource
4360      "othertype"
4361    }?,
4362
4363    ## A keyword that identififes the type of the non-standard relationship
4364    attribute othertype { xsd:NMTOKEN }
4365  db.bibliorelation.type.attribute =
4366    db.bibliorelation.type-enum.attribute
4367    | db.bibliorelation.type-other.attributes
4368  db.bibliorelation.role.attribute = attribute role { text }
4369  db.bibliorelation.attlist =
4370    db.bibliorelation.role.attribute?
4371    & db.common.attributes
4372    & db.common.linking.attributes
4373    & db.biblio.class.attribute
4374    & db.bibliorelation.type.attribute
4375  db.bibliorelation =
4376
4377    ## The relationship of a document to another
4378    element bibliorelation { db.bibliorelation.attlist, db._text }
4379}
4380div {
4381  db.bibliocoverage.spacial.enumeration =
4382
4383    ## The DCMI Point identifies a point in space using its geographic coordinates
4384    "dcmipoint"
4385    |
4386      ## ISO 3166 Codes for the representation of names of countries
4387      "iso3166"
4388    |
4389      ## The DCMI Box identifies a region of space using its geographic limits
4390      "dcmibox"
4391    |
4392      ## The Getty Thesaurus of Geographic Names
4393      "tgn"
4394  db.bibliocoverage.spatial-enum.attribute =
4395
4396    ## Specifies the type of spatial coverage
4397    attribute spatial { db.bibliocoverage.spacial.enumeration }?
4398  db.bibliocoverage.spatial-other.attributes =
4399
4400    ## Specifies the type of spatial coverage
4401    attribute spatial {
4402
4403      ## Identifies a non-standard type of coverage
4404      "otherspatial"
4405    }?,
4406
4407    ## A keyword that identifies the type of non-standard coverage
4408    attribute otherspatial { xsd:NMTOKEN }
4409  db.bibliocoverage.spatial.attribute =
4410    db.bibliocoverage.spatial-enum.attribute
4411    | db.bibliocoverage.spatial-other.attributes
4412  db.bibliocoverage.temporal.enumeration =
4413
4414    ## A specification of the limits of a time interval
4415    "dcmiperiod"
4416    |
4417      ## W3C Encoding rules for dates and times—a profile based on ISO 8601
4418      "w3c-dtf"
4419  db.bibliocoverage.temporal-enum.attribute =
4420
4421    ## Specifies the type of temporal coverage
4422    attribute temporal { db.bibliocoverage.temporal.enumeration }?
4423  db.bibliocoverage.temporal-other.attributes =
4424
4425    ## Specifies the type of temporal coverage
4426    attribute temporal {
4427
4428      ## Specifies a non-standard type of coverage
4429      "othertemporal"
4430    }?,
4431
4432    ## A keyword that identifies the type of non-standard coverage
4433    attribute othertemporal { xsd:NMTOKEN }
4434  db.bibliocoverage.temporal.attribute =
4435    db.bibliocoverage.temporal-enum.attribute
4436    | db.bibliocoverage.temporal-other.attributes
4437  db.bibliocoverage.coverage.attrib =
4438    db.bibliocoverage.spatial.attribute
4439    & db.bibliocoverage.temporal.attribute
4440  db.bibliocoverage.role.attribute = attribute role { text }
4441  db.bibliocoverage.attlist =
4442    db.bibliocoverage.role.attribute?
4443    & db.common.attributes
4444    & db.common.linking.attributes
4445    & db.bibliocoverage.coverage.attrib
4446  db.bibliocoverage =
4447
4448    ## The spatial or temporal coverage of a document
4449    element bibliocoverage { db.bibliocoverage.attlist, db._text }
4450}
4451div {
4452  db.legalnotice.role.attribute = attribute role { text }
4453  db.legalnotice.attlist =
4454    db.legalnotice.role.attribute?
4455    & db.common.attributes
4456    & db.common.linking.attributes
4457  db.legalnotice.info = db._info.title.only
4458  db.legalnotice =
4459
4460    ## A statement of legal obligations or requirements
4461    element legalnotice {
4462      db.legalnotice.attlist, db.legalnotice.info, db.all.blocks+
4463    }
4464}
4465div {
4466  db.othercredit.class.enumeration =
4467
4468    ## A copy editor
4469    "copyeditor"
4470    |
4471      ## A graphic designer
4472      "graphicdesigner"
4473    |
4474      ## Some other contributor
4475      "other"
4476    |
4477      ## A production editor
4478      "productioneditor"
4479    |
4480      ## A technical editor
4481      "technicaleditor"
4482    |
4483      ## A translator
4484      "translator"
4485  db.othercredit.class-enum.attribute =
4486
4487    ## Identifies the nature of the contributor
4488    attribute class { db.othercredit.class.enumeration }?
4489  db.othercredit.class-other.attribute =
4490
4491    ## Identifies the nature of the non-standard contribution
4492    attribute otherclass { xsd:NMTOKEN }
4493  db.othercredit.class-other.attributes =
4494
4495    ## Identifies the nature of the contributor
4496    attribute class {
4497
4498      ## Identifies a non-standard contribution
4499      "other"
4500    }
4501    & db.othercredit.class-other.attribute
4502  db.othercredit.class.attribute =
4503    db.othercredit.class-enum.attribute
4504    | db.othercredit.class-other.attributes
4505  db.othercredit.role.attribute = attribute role { text }
4506  db.othercredit.attlist =
4507    db.othercredit.role.attribute?
4508    & db.common.attributes
4509    & db.common.linking.attributes
4510    & db.othercredit.class.attribute
4511  db.othercredit =
4512
4513    ## A person or entity, other than an author or editor, credited in a document
4514    element othercredit {
4515      db.othercredit.attlist, db.credit.contentmodel
4516    }
4517}
4518div {
4519  db.pagenums.role.attribute = attribute role { text }
4520  db.pagenums.attlist =
4521    db.pagenums.role.attribute?
4522    & db.common.attributes
4523    & db.common.linking.attributes
4524  db.pagenums =
4525
4526    ## The numbers of the pages in a book, for use in a bibliographic entry
4527    element pagenums { db.pagenums.attlist, db._text }
4528}
4529div {
4530  db.contrib.role.attribute = attribute role { text }
4531  db.contrib.attlist =
4532    db.contrib.role.attribute?
4533    & db.common.attributes
4534    & db.common.linking.attributes
4535  db.contrib =
4536
4537    ## A summary of the contributions made to a document by a credited source
4538    element contrib { db.contrib.attlist, db._text }
4539}
4540div {
4541  db.honorific.role.attribute = attribute role { text }
4542  db.honorific.attlist =
4543    db.honorific.role.attribute?
4544    & db.common.attributes
4545    & db.common.linking.attributes
4546  db.honorific =
4547
4548    ## The title of a person
4549    element honorific { db.honorific.attlist, db._text }
4550}
4551div {
4552  db.firstname.role.attribute = attribute role { text }
4553  db.firstname.attlist =
4554    db.firstname.role.attribute?
4555    & db.common.attributes
4556    & db.common.linking.attributes
4557  db.firstname =
4558
4559    ## The first name of a person
4560    element firstname { db.firstname.attlist, db._text }
4561}
4562div {
4563  db.surname.role.attribute = attribute role { text }
4564  db.surname.attlist =
4565    db.surname.role.attribute?
4566    & db.common.attributes
4567    & db.common.linking.attributes
4568  db.surname =
4569
4570    ## A family name; in western cultures the last name
4571    element surname { db.surname.attlist, db._text }
4572}
4573div {
4574  db.lineage.role.attribute = attribute role { text }
4575  db.lineage.attlist =
4576    db.lineage.role.attribute?
4577    & db.common.attributes
4578    & db.common.linking.attributes
4579  db.lineage =
4580
4581    ## The portion of a person's name indicating a relationship to ancestors
4582    element lineage { db.lineage.attlist, db._text }
4583}
4584div {
4585  db.othername.role.attribute = attribute role { text }
4586  db.othername.attlist =
4587    db.othername.role.attribute?
4588    & db.common.attributes
4589    & db.common.linking.attributes
4590  db.othername =
4591
4592    ## A component of a persons name that is not a first name, surname, or lineage
4593    element othername { db.othername.attlist, db._text }
4594}
4595div {
4596  db.printhistory.role.attribute = attribute role { text }
4597  db.printhistory.attlist =
4598    db.printhistory.role.attribute?
4599    & db.common.attributes
4600    & db.common.linking.attributes
4601  db.printhistory =
4602
4603    ## The printing history of a document
4604    element printhistory { db.printhistory.attlist, db.para.blocks+ }
4605}
4606div {
4607  db.productname.role.attribute = attribute role { text }
4608  db.productname.class.enumeration =
4609
4610    ## A name with a copyright
4611    "copyright"
4612    |
4613      ## A name with a registered copyright
4614      "registered"
4615    |
4616      ## A name of a service
4617      "service"
4618    |
4619      ## A name which is trademarked
4620      "trade"
4621  db.productname.class.attribute =
4622
4623    ## Specifies the class of product name
4624    attribute class { db.productname.class.enumeration }
4625  db.productname.attlist =
4626    db.productname.role.attribute?
4627    & db.common.attributes
4628    & db.common.linking.attributes
4629    & db.productname.class.attribute?
4630  db.productname =
4631
4632    ## The formal name of a product
4633    element productname { db.productname.attlist, db._text }
4634}
4635div {
4636  db.productnumber.role.attribute = attribute role { text }
4637  db.productnumber.attlist =
4638    db.productnumber.role.attribute?
4639    & db.common.attributes
4640    & db.common.linking.attributes
4641  db.productnumber =
4642
4643    ## A number assigned to a product
4644    element productnumber { db.productnumber.attlist, db._text }
4645}
4646div {
4647  db.pubdate.role.attribute = attribute role { text }
4648  db.pubdate.attlist =
4649    db.pubdate.role.attribute?
4650    & db.common.attributes
4651    & db.common.linking.attributes
4652  db.pubdate =
4653
4654    ## The date of publication of a document
4655    element pubdate { db.pubdate.attlist, db.date.contentmodel }
4656}
4657div {
4658  db.publisher.role.attribute = attribute role { text }
4659  db.publisher.attlist =
4660    db.publisher.role.attribute?
4661    & db.common.attributes
4662    & db.common.linking.attributes
4663  db.publisher =
4664
4665    ## The publisher of a document
4666    element publisher {
4667      db.publisher.attlist, db.publishername, db.address*
4668    }
4669}
4670div {
4671  db.publishername.role.attribute = attribute role { text }
4672  db.publishername.attlist =
4673    db.publishername.role.attribute?
4674    & db.common.attributes
4675    & db.common.linking.attributes
4676  db.publishername =
4677
4678    ## The name of the publisher of a document
4679    element publishername { db.publishername.attlist, db._text }
4680}
4681div {
4682  db.releaseinfo.role.attribute = attribute role { text }
4683  db.releaseinfo.attlist =
4684    db.releaseinfo.role.attribute?
4685    & db.common.attributes
4686    & db.common.linking.attributes
4687  db.releaseinfo =
4688
4689    ## Information about a particular release of a document
4690    element releaseinfo { db.releaseinfo.attlist, db._text }
4691}
4692div {
4693  db.revhistory.role.attribute = attribute role { text }
4694  db.revhistory.attlist =
4695    db.revhistory.role.attribute?
4696    & db.common.attributes
4697    & db.common.linking.attributes
4698  db.revhistory.info = db._info.title.only
4699  db.revhistory =
4700
4701    ## A history of the revisions to a document
4702    element revhistory {
4703      db.revhistory.attlist, db.revhistory.info, db.revision+
4704    }
4705}
4706div {
4707  db.revision.role.attribute = attribute role { text }
4708  db.revision.attlist =
4709    db.revision.role.attribute?
4710    & db.common.attributes
4711    & db.common.linking.attributes
4712  db.revision =
4713
4714    ## An entry describing a single revision in the history of the revisions to a document
4715    element revision {
4716      db.revision.attlist,
4717      db.revnumber?,
4718      db.date,
4719      (db.authorinitials | db.author)*,
4720      (db.revremark | db.revdescription)?
4721    }
4722}
4723div {
4724  db.revnumber.role.attribute = attribute role { text }
4725  db.revnumber.attlist =
4726    db.revnumber.role.attribute?
4727    & db.common.attributes
4728    & db.common.linking.attributes
4729  db.revnumber =
4730
4731    ## A document revision number
4732    element revnumber { db.revnumber.attlist, db._text }
4733}
4734div {
4735  db.revremark.role.attribute = attribute role { text }
4736  db.revremark.attlist =
4737    db.revremark.role.attribute?
4738    & db.common.attributes
4739    & db.common.linking.attributes
4740  db.revremark =
4741
4742    ## A description of a revision to a document
4743    element revremark { db.revremark.attlist, db._text }
4744}
4745div {
4746  db.revdescription.role.attribute = attribute role { text }
4747  db.revdescription.attlist =
4748    db.revdescription.role.attribute?
4749    & db.common.attributes
4750    & db.common.linking.attributes
4751  db.revdescription =
4752
4753    ## A extended description of a revision to a document
4754    element revdescription { db.revdescription.attlist, db.all.blocks* }
4755}
4756div {
4757  db.seriesvolnums.role.attribute = attribute role { text }
4758  db.seriesvolnums.attlist =
4759    db.seriesvolnums.role.attribute?
4760    & db.common.attributes
4761    & db.common.linking.attributes
4762  db.seriesvolnums =
4763
4764    ## Numbers of the volumes in a series of books
4765    element seriesvolnums { db.seriesvolnums.attlist, db._text }
4766}
4767div {
4768  db.volumenum.role.attribute = attribute role { text }
4769  db.volumenum.attlist =
4770    db.volumenum.role.attribute?
4771    & db.common.attributes
4772    & db.common.linking.attributes
4773  db.volumenum =
4774
4775    ## The volume number of a document in a set (as of books in a set or articles in a journal)
4776    element volumenum { db.volumenum.attlist, db._text }
4777}
4778div {
4779  db.issuenum.role.attribute = attribute role { text }
4780  db.issuenum.attlist =
4781    db.issuenum.role.attribute?
4782    & db.common.attributes
4783    & db.common.linking.attributes
4784  db.issuenum =
4785
4786    ## The number of an issue of a journal
4787    element issuenum { db.issuenum.attlist, db._text }
4788}
4789div {
4790  db.accel.role.attribute = attribute role { text }
4791  db.accel.attlist =
4792    db.accel.role.attribute?
4793    & db.common.attributes
4794    & db.common.linking.attributes
4795  db.accel =
4796
4797    ## A graphical user interface (GUI) keyboard shortcut
4798    element accel { db.accel.attlist, db._text }
4799}
4800div {
4801  db.application.class.enumeration =
4802
4803    ## A hardware application
4804    "hardware"
4805    |
4806      ## A software application
4807      "software"
4808  db.application.class.attribute =
4809
4810    ## Identifies the class of application
4811    attribute class { db.application.class.enumeration }
4812  db.application.role.attribute = attribute role { text }
4813  db.application.attlist =
4814    db.application.role.attribute?
4815    & db.common.attributes
4816    & db.common.linking.attributes
4817    & db.application.class.attribute?
4818  db.application =
4819
4820    ## The name of a software program
4821    element application { db.application.attlist, db._text }
4822}
4823div {
4824  db.package.role.attribute = attribute role { text }
4825  db.package.attlist =
4826    db.package.role.attribute?
4827    & db.common.attributes
4828    & db.common.linking.attributes
4829  db.package =
4830
4831    ## A software or application package
4832    element package { db.package.attlist, db._text }
4833}
4834div {
4835  db.classname.role.attribute = attribute role { text }
4836  db.classname.attlist =
4837    db.classname.role.attribute?
4838    & db.common.attributes
4839    & db.common.linking.attributes
4840  db.classname =
4841
4842    ## The name of a class, in the object-oriented programming sense
4843    element classname { db.classname.attlist, db._text }
4844}
4845div {
4846  db.command.role.attribute = attribute role { text }
4847  db.command.attlist =
4848    db.command.role.attribute?
4849    & db.common.attributes
4850    & db.common.linking.attributes
4851  db.command =
4852
4853    ## The name of an executable program or other software command
4854    element command { db.command.attlist, db._text }
4855}
4856db.computeroutput.inlines =
4857  (text
4858   | db.ubiq.inlines
4859   | db.os.inlines
4860   | db.technical.inlines
4861   | db.markup.inlines)
4862  | db.co
4863  | db.co
4864div {
4865  db.computeroutput.role.attribute = attribute role { text }
4866  db.computeroutput.attlist =
4867    db.computeroutput.role.attribute?
4868    & db.common.attributes
4869    & db.common.linking.attributes
4870  db.computeroutput =
4871
4872    ## Data, generally text, displayed or presented by a computer
4873    element computeroutput {
4874      db.computeroutput.attlist, db.computeroutput.inlines*
4875    }
4876}
4877div {
4878  db.database.class.enumeration =
4879
4880    ## An alternate or secondary key
4881    "altkey"
4882    |
4883      ## A constraint
4884      "constraint"
4885    |
4886      ## A data type
4887      "datatype"
4888    |
4889      ## A field
4890      "field"
4891    |
4892      ## A foreign key
4893      "foreignkey"
4894    |
4895      ## A group
4896      "group"
4897    |
4898      ## An index
4899      "index"
4900    |
4901      ## The first or primary key
4902      "key1"
4903    |
4904      ## An alternate or secondary key
4905      "key2"
4906    |
4907      ## A name
4908      "name"
4909    |
4910      ## The primary key
4911      "primarykey"
4912    |
4913      ## A (stored) procedure
4914      "procedure"
4915    |
4916      ## A record
4917      "record"
4918    |
4919      ## A rule
4920      "rule"
4921    |
4922      ## The secondary key
4923      "secondarykey"
4924    |
4925      ## A table
4926      "table"
4927    |
4928      ## A user
4929      "user"
4930    |
4931      ## A view
4932      "view"
4933  db.database.class.attribute =
4934
4935    ## Identifies the class of database artifact
4936    attribute class { db.database.class.enumeration }
4937  db.database.role.attribute = attribute role { text }
4938  db.database.attlist =
4939    db.database.role.attribute?
4940    & db.common.attributes
4941    & db.common.linking.attributes
4942    & db.database.class.attribute?
4943  db.database =
4944
4945    ## The name of a database, or part of a database
4946    element database { db.database.attlist, db._text }
4947}
4948div {
4949  db.email.role.attribute = attribute role { text }
4950  db.email.attlist =
4951    db.email.role.attribute?
4952    & db.common.attributes
4953    & db.common.linking.attributes
4954  db.email =
4955
4956    ## An email address
4957    element email { db.email.attlist, db._text }
4958}
4959div {
4960  db.envar.role.attribute = attribute role { text }
4961  db.envar.attlist =
4962    db.envar.role.attribute?
4963    & db.common.attributes
4964    & db.common.linking.attributes
4965  db.envar =
4966
4967    ## A software environment variable
4968    element envar { db.envar.attlist, db._text }
4969}
4970div {
4971  db.errorcode.role.attribute = attribute role { text }
4972  db.errorcode.attlist =
4973    db.errorcode.role.attribute?
4974    & db.common.attributes
4975    & db.common.linking.attributes
4976  db.errorcode =
4977
4978    ## An error code
4979    element errorcode { db.errorcode.attlist, db._text }
4980}
4981div {
4982  db.errorname.role.attribute = attribute role { text }
4983  db.errorname.attlist =
4984    db.errorname.role.attribute?
4985    & db.common.attributes
4986    & db.common.linking.attributes
4987  db.errorname =
4988
4989    ## An error name
4990    element errorname { db.errorname.attlist, db._text }
4991}
4992div {
4993  db.errortext.role.attribute = attribute role { text }
4994  db.errortext.attlist =
4995    db.errortext.role.attribute?
4996    & db.common.attributes
4997    & db.common.linking.attributes
4998  db.errortext =
4999
5000    ## An error message.
5001    element errortext { db.errortext.attlist, db._text }
5002}
5003div {
5004  db.errortype.role.attribute = attribute role { text }
5005  db.errortype.attlist =
5006    db.errortype.role.attribute?
5007    & db.common.attributes
5008    & db.common.linking.attributes
5009  db.errortype =
5010
5011    ## The classification of an error message
5012    element errortype { db.errortype.attlist, db._text }
5013}
5014div {
5015  db.filename.class.enumeration =
5016
5017    ## A device
5018    "devicefile"
5019    |
5020      ## A directory
5021      "directory"
5022    |
5023      ## A filename extension
5024      "extension"
5025    |
5026      ## A header file (as for a programming language)
5027      "headerfile"
5028    |
5029      ## A library file
5030      "libraryfile"
5031    |
5032      ## A partition (as of a hard disk)
5033      "partition"
5034    |
5035      ## A symbolic link
5036      "symlink"
5037  db.filename.class.attribute =
5038
5039    ## Identifies the class of filename
5040    attribute class { db.filename.class.enumeration }
5041  db.filename.path.attribute =
5042
5043    ## Specifies the path of the filename
5044    attribute path { text }
5045  db.filename.role.attribute = attribute role { text }
5046  db.filename.attlist =
5047    db.filename.role.attribute?
5048    & db.common.attributes
5049    & db.common.linking.attributes
5050    & db.filename.path.attribute?
5051    & db.filename.class.attribute?
5052  db.filename =
5053
5054    ## The name of a file
5055    element filename { db.filename.attlist, db._text }
5056}
5057div {
5058  db.function.role.attribute = attribute role { text }
5059  db.function.attlist =
5060    db.function.role.attribute?
5061    & db.common.attributes
5062    & db.common.linking.attributes
5063  db.function =
5064
5065    ## The name of a function or subroutine, as in a programming language
5066    element function { db.function.attlist, db._text }
5067}
5068div {
5069  db.guibutton.role.attribute = attribute role { text }
5070  db.guibutton.attlist =
5071    db.guibutton.role.attribute?
5072    & db.common.attributes
5073    & db.common.linking.attributes
5074  db.guibutton =
5075
5076    ## The text on a button in a GUI
5077    element guibutton {
5078      db.guibutton.attlist,
5079      (db._text | db.accel | db.superscript | db.subscript)*
5080    }
5081}
5082div {
5083  db.guiicon.role.attribute = attribute role { text }
5084  db.guiicon.attlist =
5085    db.guiicon.role.attribute?
5086    & db.common.attributes
5087    & db.common.linking.attributes
5088  db.guiicon =
5089
5090    ## Graphic and/or text appearing as a icon in a GUI
5091    element guiicon {
5092      db.guiicon.attlist,
5093      (db._text | db.accel | db.superscript | db.subscript)*
5094    }
5095}
5096div {
5097  db.guilabel.role.attribute = attribute role { text }
5098  db.guilabel.attlist =
5099    db.guilabel.role.attribute?
5100    & db.common.attributes
5101    & db.common.linking.attributes
5102  db.guilabel =
5103
5104    ## The text of a label in a GUI
5105    element guilabel {
5106      db.guilabel.attlist,
5107      (db._text | db.accel | db.superscript | db.subscript)*
5108    }
5109}
5110div {
5111  db.guimenu.role.attribute = attribute role { text }
5112  db.guimenu.attlist =
5113    db.guimenu.role.attribute?
5114    & db.common.attributes
5115    & db.common.linking.attributes
5116  db.guimenu =
5117
5118    ## The name of a menu in a GUI
5119    element guimenu {
5120      db.guimenu.attlist,
5121      (db._text | db.accel | db.superscript | db.subscript)*
5122    }
5123}
5124div {
5125  db.guimenuitem.role.attribute = attribute role { text }
5126  db.guimenuitem.attlist =
5127    db.guimenuitem.role.attribute?
5128    & db.common.attributes
5129    & db.common.linking.attributes
5130  db.guimenuitem =
5131
5132    ## The name of a terminal menu item in a GUI
5133    element guimenuitem {
5134      db.guimenuitem.attlist,
5135      (db._text | db.accel | db.superscript | db.subscript)*
5136    }
5137}
5138div {
5139  db.guisubmenu.role.attribute = attribute role { text }
5140  db.guisubmenu.attlist =
5141    db.guisubmenu.role.attribute?
5142    & db.common.attributes
5143    & db.common.linking.attributes
5144  db.guisubmenu =
5145
5146    ## The name of a submenu in a GUI
5147    element guisubmenu {
5148      db.guisubmenu.attlist,
5149      (db._text | db.accel | db.superscript | db.subscript)*
5150    }
5151}
5152div {
5153  db.hardware.role.attribute = attribute role { text }
5154  db.hardware.attlist =
5155    db.hardware.role.attribute?
5156    & db.common.attributes
5157    & db.common.linking.attributes
5158  db.hardware =
5159
5160    ## A physical part of a computer system
5161    element hardware { db.hardware.attlist, db._text }
5162}
5163div {
5164  db.keycap.function.enumeration =
5165
5166    ## The "Alt" key
5167    "alt"
5168    |
5169      ## The "Backspace" key
5170      "backspace"
5171    |
5172      ## The "Command" key
5173      "command"
5174    |
5175      ## The "Control" key
5176      "control"
5177    |
5178      ## The "Delete" key
5179      "delete"
5180    |
5181      ## The down arrow
5182      "down"
5183    |
5184      ## The "End" key
5185      "end"
5186    |
5187      ## The "Enter" or "Return" key
5188      "enter"
5189    |
5190      ## The "Escape" key
5191      "escape"
5192    |
5193      ## The "Home" key
5194      "home"
5195    |
5196      ## The "Insert" key
5197      "insert"
5198    |
5199      ## The left arrow
5200      "left"
5201    |
5202      ## The "Meta" key
5203      "meta"
5204    |
5205      ## The "Option" key
5206      "option"
5207    |
5208      ## The page down key
5209      "pagedown"
5210    |
5211      ## The page up key
5212      "pageup"
5213    |
5214      ## The right arrow
5215      "right"
5216    |
5217      ## The "Shift" key
5218      "shift"
5219    |
5220      ## The spacebar
5221      "space"
5222    |
5223      ## The "Tab" key
5224      "tab"
5225    |
5226      ## The up arrow
5227      "up"
5228  db.keycap.function-enum.attribute =
5229
5230    ## Identifies the function key
5231    attribute function { db.keycap.function.enumeration }?
5232  db.keycap.function-other.attributes =
5233
5234    ## Identifies the function key
5235    attribute function {
5236
5237      ## Indicates a non-standard function key
5238      "other"
5239    }?,
5240
5241    ## Specifies a keyword that identifies the non-standard key
5242    attribute otherfunction { text }
5243  db.keycap.function.attrib =
5244    db.keycap.function-enum.attribute
5245    | db.keycap.function-other.attributes
5246  db.keycap.role.attribute = attribute role { text }
5247  db.keycap.attlist =
5248    db.keycap.role.attribute?
5249    & db.common.attributes
5250    & db.common.linking.attributes
5251    & db.keycap.function.attrib
5252  db.keycap =
5253
5254    ## The text printed on a key on a keyboard
5255    element keycap { db.keycap.attlist, db._text }
5256}
5257div {
5258  db.keycode.role.attribute = attribute role { text }
5259  db.keycode.attlist =
5260    db.keycode.role.attribute?
5261    & db.common.attributes
5262    & db.common.linking.attributes
5263  db.keycode =
5264
5265    ## The internal, frequently numeric, identifier for a key on a keyboard
5266    element keycode { db.keycode.attlist, db._text }
5267}
5268div {
5269  db.keycombo.action.enumeration =
5270
5271    ## A (single) mouse click.
5272    "click"
5273    |
5274      ## A double mouse click.
5275      "double-click"
5276    |
5277      ## A mouse or key press.
5278      "press"
5279    |
5280      ## Sequential clicks or presses.
5281      "seq"
5282    |
5283      ## Simultaneous clicks or presses.
5284      "simul"
5285  db.keycombo.action-enum.attribute =
5286
5287    ## Identifies the nature of the action taken. If keycombo
5288    ##  contains more than one element, simul
5289    ##  is the default, otherwise there is no default.
5290    attribute action { db.keycombo.action.enumeration }?
5291  db.keycombo.action-other.attributes =
5292
5293    ## Identifies the nature of the action taken
5294    attribute action {
5295
5296      ## Indicates a non-standard action
5297      "other"
5298    }?,
5299
5300    ## Identifies the non-standard action in some unspecified way.
5301    attribute otheraction { text }
5302  db.keycombo.action.attrib =
5303    db.keycombo.action-enum.attribute
5304    | db.keycombo.action-other.attributes
5305  db.keycombo.role.attribute = attribute role { text }
5306  db.keycombo.attlist =
5307    db.keycombo.role.attribute?
5308    & db.common.attributes
5309    & db.common.linking.attributes
5310    & db.keycombo.action.attrib
5311  db.keycombo =
5312
5313    ## A combination of input actions
5314    element keycombo {
5315      db.keycombo.attlist,
5316      (db.keycap | db.keycombo | db.keysym | db.mousebutton)+
5317    }
5318}
5319div {
5320  db.keysym.role.attribute = attribute role { text }
5321  db.keysym.attlist =
5322    db.keysym.role.attribute?
5323    & db.common.attributes
5324    & db.common.linking.attributes
5325  db.keysym =
5326
5327    ## The symbolic name of a key on a keyboard
5328    element keysym { db.keysym.attlist, db._text }
5329}
5330div {
5331  db.lineannotation.role.attribute = attribute role { text }
5332  db.lineannotation.attlist =
5333    db.lineannotation.role.attribute?
5334    & db.common.attributes
5335    & db.common.linking.attributes
5336  db.lineannotation =
5337
5338    ## A comment on a line in a verbatim listing
5339    element lineannotation { db.lineannotation.attlist, db._text }
5340}
5341div {
5342  db.literal.role.attribute = attribute role { text }
5343  db.literal.attlist =
5344    db.literal.role.attribute?
5345    & db.common.attributes
5346    & db.common.linking.attributes
5347  db.literal =
5348
5349    ## Inline text that is some literal value
5350    element literal { db.literal.attlist, db._text }
5351}
5352div {
5353  code.language.attribute =
5354
5355    ## Identifies the (computer) language of the code fragment
5356    attribute language { text }
5357  db.code.role.attribute = attribute role { text }
5358  db.code.attlist =
5359    db.code.role.attribute?
5360    & db.common.attributes
5361    & db.common.linking.attributes
5362    & code.language.attribute?
5363  db.code =
5364
5365    ## An inline code fragment
5366    element code { db.code.attlist, db._text }
5367}
5368div {
5369  db.constant.class.attribute =
5370
5371    ## Identifies the class of constant
5372    attribute class {
5373
5374      ## The value is a limit of some kind
5375      "limit"
5376    }
5377  db.constant.role.attribute = attribute role { text }
5378  db.constant.attlist =
5379    db.constant.role.attribute?
5380    & db.common.attributes
5381    & db.common.linking.attributes
5382    & db.constant.class.attribute?
5383  db.constant =
5384
5385    ## A programming or system constant
5386    element constant { db.constant.attlist, db._text }
5387}
5388div {
5389  db.varname.role.attribute = attribute role { text }
5390  db.varname.attlist =
5391    db.varname.role.attribute?
5392    & db.common.attributes
5393    & db.common.linking.attributes
5394  db.varname =
5395
5396    ## The name of a variable
5397    element varname { db.varname.attlist, db._text }
5398}
5399div {
5400  db.markup.role.attribute = attribute role { text }
5401  db.markup.attlist =
5402    db.markup.role.attribute?
5403    & db.common.attributes
5404    & db.common.linking.attributes
5405  db.markup =
5406
5407    ## A string of formatting markup in text that is to be represented literally
5408    element markup { db.markup.attlist, db._text }
5409}
5410div {
5411  db.menuchoice.role.attribute = attribute role { text }
5412  db.menuchoice.attlist =
5413    db.menuchoice.role.attribute?
5414    & db.common.attributes
5415    & db.common.linking.attributes
5416  db.menuchoice =
5417
5418    ## A selection or series of selections from a menu
5419    element menuchoice {
5420      db.menuchoice.attlist,
5421      db.shortcut?,
5422      (db.guibutton
5423       | db.guiicon
5424       | db.guilabel
5425       | db.guimenu
5426       | db.guimenuitem
5427       | db.guisubmenu)+
5428    }
5429}
5430div {
5431  db.shortcut.action.attrib = db.keycombo.action.attrib
5432  db.shortcut.role.attribute = attribute role { text }
5433  db.shortcut.attlist =
5434    db.shortcut.role.attribute?
5435    & db.common.attributes
5436    & db.common.linking.attributes
5437    & db.shortcut.action.attrib
5438  db.shortcut =
5439
5440    ## A key combination for an action that is also accessible through a menu
5441    element shortcut {
5442      db.shortcut.attlist,
5443      (db.keycap | db.keycombo | db.keysym | db.mousebutton)+
5444    }
5445}
5446div {
5447  db.mousebutton.role.attribute = attribute role { text }
5448  db.mousebutton.attlist =
5449    db.mousebutton.role.attribute?
5450    & db.common.attributes
5451    & db.common.linking.attributes
5452  db.mousebutton =
5453
5454    ## The conventional name of a mouse button
5455    element mousebutton { db.mousebutton.attlist, db._text }
5456}
5457div {
5458  db.option.role.attribute = attribute role { text }
5459  db.option.attlist =
5460    db.option.role.attribute?
5461    & db.common.attributes
5462    & db.common.linking.attributes
5463  db.option =
5464
5465    ## An option for a software command
5466    element option { db.option.attlist, db._text }
5467}
5468div {
5469  db.optional.role.attribute = attribute role { text }
5470  db.optional.attlist =
5471    db.optional.role.attribute?
5472    & db.common.attributes
5473    & db.common.linking.attributes
5474  db.optional =
5475
5476    ## Optional information
5477    element optional { db.optional.attlist, db._text }
5478}
5479div {
5480  db.property.role.attribute = attribute role { text }
5481  db.property.attlist =
5482    db.property.role.attribute?
5483    & db.common.attributes
5484    & db.common.linking.attributes
5485  db.property =
5486
5487    ## A unit of data associated with some part of a computer system
5488    element property { db.property.attlist, db._text }
5489}
5490div {
5491  db.parameter.class.enumeration =
5492
5493    ## A command
5494    "command"
5495    |
5496      ## A function
5497      "function"
5498    |
5499      ## An option
5500      "option"
5501  db.parameter.class.attribute =
5502
5503    ## Identifies the class of parameter
5504    attribute class { db.parameter.class.enumeration }
5505  db.parameter.role.attribute = attribute role { text }
5506  db.parameter.attlist =
5507    db.parameter.role.attribute?
5508    & db.common.attributes
5509    & db.common.linking.attributes
5510    & db.parameter.class.attribute?
5511  db.parameter =
5512
5513    ## A value or a symbolic reference to a value
5514    element parameter { db.parameter.attlist, db._text }
5515}
5516db.prompt.inlines = db._text | db.co
5517div {
5518  db.prompt.role.attribute = attribute role { text }
5519  db.prompt.attlist =
5520    db.prompt.role.attribute?
5521    & db.common.attributes
5522    & db.common.linking.attributes
5523  db.prompt =
5524
5525    ## A character or string indicating the start of an input field in a  computer display
5526    element prompt { db.prompt.attlist, db.prompt.inlines* }
5527}
5528db.replaceable.inlines = db._text | db.co
5529div {
5530  db.replaceable.class.enumeration =
5531
5532    ## A command
5533    "command"
5534    |
5535      ## A function
5536      "function"
5537    |
5538      ## An option
5539      "option"
5540    |
5541      ## A parameter
5542      "parameter"
5543  db.replaceable.class.attribute =
5544
5545    ## Identifies the nature of the replaceable text
5546    attribute class { db.replaceable.class.enumeration }
5547  db.replaceable.role.attribute = attribute role { text }
5548  db.replaceable.attlist =
5549    db.replaceable.role.attribute?
5550    & db.common.attributes
5551    & db.common.linking.attributes
5552    & db.replaceable.class.attribute?
5553  db.replaceable =
5554
5555    ## Content that may or must be replaced by the user
5556    element replaceable {
5557      db.replaceable.attlist, db.replaceable.inlines*
5558    }
5559}
5560div {
5561  db.returnvalue.role.attribute = attribute role { text }
5562  db.returnvalue.attlist =
5563    db.returnvalue.role.attribute?
5564    & db.common.attributes
5565    & db.common.linking.attributes
5566  db.returnvalue =
5567
5568    ## The value returned by a function
5569    element returnvalue { db.returnvalue.attlist, db._text }
5570}
5571div {
5572  db.tag.role.attribute = attribute role { text }
5573  db.tag.class.enumeration =
5574
5575    ## An attribute
5576    "attribute"
5577    |
5578      ## An attribute value
5579      "attvalue"
5580    |
5581      ## An element
5582      "element"
5583    |
5584      ## An empty element tag
5585      "emptytag"
5586    |
5587      ## An end tag
5588      "endtag"
5589    |
5590      ## A general entity
5591      "genentity"
5592    |
5593      ## A numeric character reference
5594      "numcharref"
5595    |
5596      ## A parameter entity
5597      "paramentity"
5598    |
5599      ## A processing instruction
5600      "pi"
5601    |
5602      ## An SGML comment
5603      "comment"
5604    |
5605      ## A start tag
5606      "starttag"
5607    |
5608      ## An XML processing instruction
5609      "xmlpi"
5610  db.tag.class.attribute =
5611
5612    ## Identifies the nature of the tag content
5613    attribute class { db.tag.class.enumeration }
5614  db.tag.namespace.attribute =
5615
5616    ## Identifies the namespace of the tag content
5617    attribute namespace { xsd:anyURI }
5618  db.tag.attlist =
5619    db.tag.role.attribute?
5620    & db.common.attributes
5621    & db.common.linking.attributes
5622    & db.tag.class.attribute?
5623    & db.tag.namespace.attribute?
5624  db.tag =
5625
5626    ## A component of XML (or SGML) markup
5627    element tag { db.tag.attlist, db._text }
5628}
5629div {
5630  db.symbol.class.attribute =
5631
5632    ## Identifies the class of symbol
5633    attribute class {
5634
5635      ## The value is a limit of some kind
5636      "limit"
5637    }
5638  db.symbol.role.attribute = attribute role { text }
5639  db.symbol.attlist =
5640    db.symbol.role.attribute?
5641    & db.common.attributes
5642    & db.common.linking.attributes
5643    & db.symbol.class.attribute?
5644  db.symbol =
5645
5646    ## A name that is replaced by a value before processing
5647    element symbol { db.symbol.attlist, db._text }
5648}
5649db.systemitem.inlines = db._text | db.co
5650div {
5651  db.systemitem.class.enumeration =
5652
5653    ## A daemon or other system process (syslogd)
5654    "daemon"
5655    |
5656      ## A domain name (example.com)
5657      "domainname"
5658    |
5659      ## An ethernet address (00:05:4E:49:FD:8E)
5660      "etheraddress"
5661    |
5662      ## An event of some sort (SIGHUP)
5663      "event"
5664    |
5665      ## An event handler of some sort (hangup)
5666      "eventhandler"
5667    |
5668      ## A filesystem (ext3)
5669      "filesystem"
5670    |
5671      ## A fully qualified domain name (my.example.com)
5672      "fqdomainname"
5673    |
5674      ## A group name (wheel)
5675      "groupname"
5676    |
5677      ## An IP address (127.0.0.1)
5678      "ipaddress"
5679    |
5680      ## A library (libncurses)
5681      "library"
5682    |
5683      ## A macro
5684      "macro"
5685    |
5686      ## A netmask (255.255.255.192)
5687      "netmask"
5688    |
5689      ## A newsgroup (comp.text.xml)
5690      "newsgroup"
5691    |
5692      ## An operating system name (Hurd)
5693      "osname"
5694    |
5695      ## A process (gnome-cups-icon)
5696      "process"
5697    |
5698      ## A protocol (ftp)
5699      "protocol"
5700    |
5701      ## A resource
5702      "resource"
5703    |
5704      ## A server (mail.example.com)
5705      "server"
5706    |
5707      ## A service (ppp)
5708      "service"
5709    |
5710      ## A system name (hephaistos)
5711      "systemname"
5712    |
5713      ## A user name (ndw)
5714      "username"
5715  db.systemitem.class.attribute =
5716
5717    ## Identifies the nature of the system item
5718    attribute class { db.systemitem.class.enumeration }
5719  db.systemitem.role.attribute = attribute role { text }
5720  db.systemitem.attlist =
5721    db.systemitem.role.attribute?
5722    & db.common.attributes
5723    & db.common.linking.attributes
5724    & db.systemitem.class.attribute?
5725  db.systemitem =
5726
5727    ## A system-related item or term
5728    element systemitem { db.systemitem.attlist, db.systemitem.inlines* }
5729}
5730div {
5731  db.uri.type.attribute =
5732
5733    ## Identifies the type of URI specified
5734    attribute type { text }?
5735  db.uri.role.attribute = attribute role { text }
5736  db.uri.attlist =
5737    db.uri.role.attribute?
5738    & db.common.attributes
5739    & db.common.linking.attributes
5740    & db.uri.type.attribute
5741  db.uri =
5742
5743    ## A Uniform Resource Identifier
5744    element uri { db.uri.attlist, db._text }
5745}
5746div {
5747  db.token.role.attribute = attribute role { text }
5748  db.token.attlist =
5749    db.token.role.attribute?
5750    & db.common.attributes
5751    & db.common.linking.attributes
5752  db.token =
5753
5754    ## A unit of information
5755    element token { db.token.attlist, db._text }
5756}
5757div {
5758  db.type.role.attribute = attribute role { text }
5759  db.type.attlist =
5760    db.type.role.attribute?
5761    & db.common.attributes
5762    & db.common.linking.attributes
5763  db.type =
5764
5765    ## The classification of a value
5766    element type { db.type.attlist, db._text }
5767}
5768db.userinput.inlines =
5769  (text
5770   | db.ubiq.inlines
5771   | db.os.inlines
5772   | db.technical.inlines
5773   | db.markup.inlines)
5774  | db.co
5775div {
5776  db.userinput.role.attribute = attribute role { text }
5777  db.userinput.attlist =
5778    db.userinput.role.attribute?
5779    & db.common.attributes
5780    & db.common.linking.attributes
5781  db.userinput =
5782
5783    ## Data entered by the user
5784    element userinput { db.userinput.attlist, db.userinput.inlines* }
5785}
5786div {
5787  db.abbrev.role.attribute = attribute role { text }
5788  db.abbrev.attlist =
5789    db.abbrev.role.attribute?
5790    & db.common.attributes
5791    & db.common.linking.attributes
5792  db.abbrev =
5793
5794    ## An abbreviation, especially one followed by a period
5795    element abbrev {
5796      db.abbrev.attlist,
5797      (db._text | db.superscript | db.subscript | db.trademark)*
5798    }
5799}
5800div {
5801  db.acronym.role.attribute = attribute role { text }
5802  db.acronym.attlist =
5803    db.acronym.role.attribute?
5804    & db.common.attributes
5805    & db.common.linking.attributes
5806  db.acronym =
5807
5808    ## An often pronounceable word made from the initial (or selected) letters of a name or phrase
5809    element acronym {
5810      db.acronym.attlist,
5811      (db._text | db.superscript | db.subscript | db.trademark)*
5812    }
5813}
5814div {
5815  db.citation.role.attribute = attribute role { text }
5816  db.citation.attlist =
5817    db.citation.role.attribute?
5818    & db.common.attributes
5819    & db.common.linking.attributes
5820  db.citation =
5821
5822    ## An inline bibliographic reference to another published work
5823    element citation { db.citation.attlist, db.all.inlines* }
5824}
5825div {
5826  db.citerefentry.role.attribute = attribute role { text }
5827  db.citerefentry.attlist =
5828    db.citerefentry.role.attribute?
5829    & db.common.attributes
5830    & db.common.linking.attributes
5831  db.citerefentry =
5832
5833    ## A citation to a reference page
5834    element citerefentry {
5835      db.citerefentry.attlist, db.refentrytitle, db.manvolnum?
5836    }
5837}
5838div {
5839  db.refentrytitle.role.attribute = attribute role { text }
5840  db.refentrytitle.attlist =
5841    db.refentrytitle.role.attribute?
5842    & db.common.attributes
5843    & db.common.linking.attributes
5844  db.refentrytitle =
5845
5846    ## The title of a reference page
5847    element refentrytitle { db.refentrytitle.attlist, db.all.inlines* }
5848}
5849div {
5850  db.manvolnum.role.attribute = attribute role { text }
5851  db.manvolnum.attlist =
5852    db.manvolnum.role.attribute?
5853    & db.common.attributes
5854    & db.common.linking.attributes
5855  db.manvolnum =
5856
5857    ## A reference volume number
5858    element manvolnum { db.manvolnum.attlist, db._text }
5859}
5860div {
5861  db.citetitle.pubwork.enumeration =
5862
5863    ## An article
5864    "article"
5865    |
5866      ## A bulletin board system
5867      "bbs"
5868    |
5869      ## A book
5870      "book"
5871    |
5872      ## A CD-ROM
5873      "cdrom"
5874    |
5875      ## A chapter (as of a book)
5876      "chapter"
5877    |
5878      ## A DVD
5879      "dvd"
5880    |
5881      ## An email message
5882      "emailmessage"
5883    |
5884      ## A gopher page
5885      "gopher"
5886    |
5887      ## A journal
5888      "journal"
5889    |
5890      ## A manuscript
5891      "manuscript"
5892    |
5893      ## A posting to a newsgroup
5894      "newsposting"
5895    |
5896      ## A part (as of a book)
5897      "part"
5898    |
5899      ## A reference entry
5900      "refentry"
5901    |
5902      ## A section (as of a book or article)
5903      "section"
5904    |
5905      ## A series
5906      "series"
5907    |
5908      ## A set (as of books)
5909      "set"
5910    |
5911      ## A web page
5912      "webpage"
5913    |
5914      ## A wiki page
5915      "wiki"
5916  db.citetitle.pubwork.attribute =
5917
5918    ## Identifies the nature of the publication being cited
5919    attribute pubwork { db.citetitle.pubwork.enumeration }
5920  db.citetitle.role.attribute = attribute role { text }
5921  db.citetitle.attlist =
5922    db.citetitle.role.attribute?
5923    & db.common.attributes
5924    & db.common.linking.attributes
5925    & db.citetitle.pubwork.attribute?
5926  db.citetitle =
5927
5928    ## The title of a cited work
5929    element citetitle { db.citetitle.attlist, db.all.inlines* }
5930}
5931div {
5932  db.emphasis.role.attribute = attribute role { text }
5933  db.emphasis.attlist =
5934    db.emphasis.role.attribute?
5935    & db.common.attributes
5936    & db.common.linking.attributes
5937  db.emphasis =
5938
5939    ## Emphasized text
5940    element emphasis { db.emphasis.attlist, db.all.inlines* }
5941}
5942div {
5943  db._emphasis =
5944
5945    ## A limited span of emphasized text
5946    element emphasis { db.emphasis.attlist, (db._text | db._emphasis)* }
5947}
5948div {
5949  db.foreignphrase.role.attribute = attribute role { text }
5950  db.foreignphrase.attlist =
5951    db.foreignphrase.role.attribute?
5952    & db.common.attributes
5953    & db.common.linking.attributes
5954  db.foreignphrase =
5955
5956    ## A word or phrase in a language other than the primary language of the document
5957    element foreignphrase {
5958      db.foreignphrase.attlist, (text | db.general.inlines)*
5959    }
5960}
5961div {
5962  db.phrase.role.attribute = attribute role { text }
5963  db.phrase.attlist =
5964    db.phrase.role.attribute?
5965    & db.common.attributes
5966    & db.common.linking.attributes
5967  db.phrase =
5968
5969    ## A span of text
5970    element phrase { db.phrase.attlist, db.all.inlines* }
5971}
5972div {
5973  db._phrase =
5974
5975    ## A limited span of text
5976    element phrase { db.phrase.attlist, db._text }
5977}
5978div {
5979  db.quote.role.attribute = attribute role { text }
5980  db.quote.attlist =
5981    db.quote.role.attribute?
5982    & db.common.attributes
5983    & db.common.linking.attributes
5984  db.quote =
5985
5986    ## An inline quotation
5987    element quote { db.quote.attlist, db.all.inlines* }
5988}
5989div {
5990  db.subscript.role.attribute = attribute role { text }
5991  db.subscript.attlist =
5992    db.subscript.role.attribute?
5993    & db.common.attributes
5994    & db.common.linking.attributes
5995  db.subscript =
5996
5997    ## A subscript (as in H2
5998    ## O, the molecular formula for water)
5999    element subscript { db.subscript.attlist, db._text }
6000}
6001div {
6002  db.superscript.role.attribute = attribute role { text }
6003  db.superscript.attlist =
6004    db.superscript.role.attribute?
6005    & db.common.attributes
6006    & db.common.linking.attributes
6007  db.superscript =
6008
6009    ## A superscript (as in x^2, the mathematical notation for x multiplied by itself)
6010    element superscript { db.superscript.attlist, db._text }
6011}
6012div {
6013  db.trademark.class.enumeration =
6014
6015    ## A copyright
6016    "copyright"
6017    |
6018      ## A registered copyright
6019      "registered"
6020    |
6021      ## A service
6022      "service"
6023    |
6024      ## A trademark
6025      "trade"
6026  db.trademark.class.attribute =
6027
6028    ## Identifies the class of trade mark
6029    attribute class { db.trademark.class.enumeration }
6030  db.trademark.role.attribute = attribute role { text }
6031  db.trademark.attlist =
6032    db.trademark.role.attribute?
6033    & db.common.attributes
6034    & db.common.linking.attributes
6035    & db.trademark.class.attribute?
6036  db.trademark =
6037
6038    ## A trademark
6039    element trademark { db.trademark.attlist, db._text }
6040}
6041div {
6042  db.wordasword.role.attribute = attribute role { text }
6043  db.wordasword.attlist =
6044    db.wordasword.role.attribute?
6045    & db.common.attributes
6046    & db.common.linking.attributes
6047  db.wordasword =
6048
6049    ## A word meant specifically as a word and not representing anything else
6050    element wordasword { db.wordasword.attlist, db._text }
6051}
6052div {
6053  db.footnoteref.role.attribute = attribute role { text }
6054  db.footnoteref.label.attribute = db.label.attribute
6055  db.footnoteref.attlist =
6056    db.footnoteref.role.attribute?
6057    & db.common.attributes
6058    & db.linkend.attribute
6059    & db.footnoteref.label.attribute?
6060  db.footnoteref =
6061
6062    ## A cross reference to a footnote (a footnote mark)
6063    [
6064      s:pattern [
6065        name = "Footnote reference type constraint"
6066        "\x{a}" ~
6067        "          "
6068        s:rule [
6069          context = "db:footnoteref"
6070          "\x{a}" ~
6071          "            "
6072          s:assert [
6073            test =
6074              "local-name(//*[@id=current()/@linkend]) = 'footnote' and namespace-uri(//*[@id=current()/@linkend]) = 'http://docbook.org/ns/docbook'"
6075            "@linkend on footnoteref must point to a footnote."
6076          ]
6077          "\x{a}" ~
6078          "          "
6079        ]
6080        "\x{a}" ~
6081        "        "
6082      ]
6083    ]
6084    element footnoteref { db.footnoteref.attlist, empty }
6085}
6086div {
6087  db.xref.role.attribute = attribute role { text }
6088  db.xref.xrefstyle.attribute = db.xrefstyle.attribute
6089  db.xref.endterm.attribute = db.endterm.attribute
6090  db.xref.attlist =
6091    db.xref.role.attribute?
6092    & db.common.attributes
6093    & db.common.req.linking.attributes
6094    & db.xref.xrefstyle.attribute?
6095    & db.xref.endterm.attribute?
6096  db.xref =
6097
6098    ## A cross reference to another part of the document
6099    element xref { db.xref.attlist, empty }
6100}
6101div {
6102  db.link.role.attribute = attribute role { text }
6103  db.link.xrefstyle.attribute = db.xrefstyle.attribute
6104  db.link.endterm.attribute = db.endterm.attribute
6105  db.link.attlist =
6106    db.link.role.attribute?
6107    & db.common.attributes
6108    & db.common.req.linking.attributes
6109    & db.link.xrefstyle.attribute?
6110    & db.link.endterm.attribute?
6111  db.link =
6112
6113    ## A hypertext link
6114    element link { db.link.attlist, db.all.inlines* }
6115}
6116div {
6117  db.olink.role.attribute = attribute role { text }
6118  db.olink.xrefstyle.attribute = db.xrefstyle.attribute
6119  db.olink.localinfo.attribute =
6120
6121    ## Holds additional information that may be used by the applicatoin when resolving the link
6122    attribute localinfo { text }
6123  db.olink.targetdoc.attribute =
6124
6125    ## Specifies the URI of the document in which the link target appears
6126    attribute targetdoc { xsd:anyURI }
6127  db.olink.targetptr.attribute =
6128
6129    ## Specifies the location of the link target in the document
6130    attribute targetptr { text }
6131  db.olink.type.attribute =
6132
6133    ## Identifies application-specific customization of the link behavior
6134    attribute type { text }
6135  db.olink.attlist =
6136    db.common.attributes
6137    & db.olink.targetdoc.attribute
6138    & db.olink.role.attribute?
6139    & db.olink.xrefstyle.attribute?
6140    & db.olink.localinfo.attribute?
6141    & db.olink.targetptr.attribute?
6142    & db.olink.type.attribute?
6143  db.olink =
6144
6145    ## A link that addresses its target indirectly
6146    element olink { db.olink.attlist, db.all.inlines* }
6147}
6148div {
6149  db.anchor.role.attribute = attribute role { text }
6150  db.anchor.attlist =
6151    db.anchor.role.attribute? & db.common.idreq.attributes
6152  db.anchor =
6153
6154    ## A spot in the document
6155    element anchor { db.anchor.attlist, empty }
6156}
6157div {
6158  db.alt.role.attribute = attribute role { text }
6159  db.alt.attlist = db.alt.role.attribute? & db.common.attributes
6160  db.alt =
6161
6162    ## A text-only annotation, often used for accessibility
6163    element alt { db.alt.attlist, (text | db.inlinemediaobject)* }
6164}
6165db.annotations.attribute =
6166
6167  ## Identifies one or more annotations that apply to this element
6168  attribute annotations { text }
6169div {
6170  db.annotation.role.attribute = attribute role { text }
6171  db.annotation.annotates.attribute =
6172
6173    ## Identifies one ore more elements to which this annotation applies
6174    attribute annotates { text }
6175  db.annotation.attlist =
6176    db.annotation.role.attribute?
6177    & db.annotation.annotates.attribute?
6178    & db.common.attributes
6179  db.annotation.info = db._info.title.only
6180  db.annotation =
6181
6182    ## An annotation
6183    [
6184      s:pattern [
6185        name = "Element exclusion"
6186        "\x{a}" ~
6187        "          "
6188        s:rule [
6189          context = "db:annotation"
6190          "\x{a}" ~
6191          "            "
6192          s:assert [
6193            test = "not(.//db:annotation)"
6194            "annotation must not occur in the descendants of annotation"
6195          ]
6196          "\x{a}" ~
6197          "          "
6198        ]
6199        "\x{a}" ~
6200        "        "
6201      ]
6202    ]
6203    element annotation {
6204      db.annotation.attlist, db.annotation.info, db.all.blocks+
6205    }
6206}
6207db.xlink.from.attribute =
6208
6209  ## Specifies the XLink traversal-from
6210  attribute xlink:from { xsd:NMTOKEN }?
6211db.xlink.label.attribute =
6212
6213  ## Specifies the XLink label
6214  attribute xlink:label { xsd:NMTOKEN }?
6215db.xlink.to.attribute =
6216
6217  ## Specifies the XLink traversal-to
6218  attribute xlink:to { xsd:NMTOKEN }?
6219div {
6220  db.extendedlink.role.attribute = attribute role { text }
6221  db.extendedlink.attlist =
6222    db.extendedlink.role.attribute?
6223    & db.common.attributes
6224    &
6225      ## Identifies the XLink link type
6226      [ a:defaultValue = "extended" ]
6227      attribute xlink:type {
6228
6229        ## An XLink extended link
6230        "extended"
6231      }?
6232    & db.xlink.role.attribute?
6233    & db.xlink.title.attribute?
6234  db.extendedlink =
6235
6236    ## An XLink extended link
6237    element extendedlink {
6238      db.extendedlink.attlist, (db.locator | db.arc)+
6239    }
6240}
6241div {
6242  db.locator.role.attribute = attribute role { text }
6243  db.locator.attlist =
6244    db.locator.role.attribute?
6245    & db.common.attributes
6246    &
6247      ## Identifies the XLink link type
6248      [ a:defaultValue = "locator" ]
6249      attribute xlink:type {
6250
6251        ## An XLink locator link
6252        "locator"
6253      }?
6254    & db.xlink.href.attribute
6255    & db.xlink.role.attribute?
6256    & db.xlink.title.attribute?
6257    & db.xlink.label.attribute?
6258  db.locator =
6259
6260    ## An XLink locator in an extendedlink
6261    element locator { db.locator.attlist, empty }
6262}
6263div {
6264  db.arc.role.attribute = attribute role { text }
6265  db.arc.attlist =
6266    db.arc.role.attribute?
6267    & db.common.attributes
6268    &
6269      ## Identifies the XLink link type
6270      [ a:defaultValue = "arc" ]
6271      attribute xlink:type {
6272
6273        ## An XLink arc link
6274        "arc"
6275      }?
6276    & db.xlink.arcrole.attribute?
6277    & db.xlink.title.attribute?
6278    & db.xlink.show.attribute?
6279    & db.xlink.actuate.attribute?
6280    & db.xlink.from.attribute?
6281    & db.xlink.to.attribute?
6282  db.arc =
6283
6284    ## An XLink arc in an extendedlink
6285    element arc { db.arc.attlist, empty }
6286}
6287db.status.attribute =
6288
6289  ## Identifies the editorial or publication status of the element on which it occurs
6290  attribute status { text }
6291db.toplevel.sections =
6292  ((db.section+, db.simplesect*) | db.simplesect+)
6293  | (db.sect1+, db.simplesect*)
6294  | db.refentry+
6295db.toplevel.blocks.or.sections =
6296  (db.all.blocks+, db.toplevel.sections?) | db.toplevel.sections
6297db.recursive.sections =
6298  ((db.section+, db.simplesect*) | db.simplesect+)
6299  | db.refentry+
6300db.recursive.blocks.or.sections =
6301  (db.all.blocks+, db.recursive.sections?) | db.recursive.sections
6302db.divisions = db.part | db.reference
6303db.components =
6304  db.dedication
6305  | db.preface
6306  | db.chapter
6307  | db.appendix
6308  | db.article
6309  | db.colophon
6310db.navigation.components =
6311  notAllowed | db.glossary | db.bibliography | db.index | db.toc
6312db.component.contentmodel =
6313  db.navigation.components*,
6314  db.toplevel.blocks.or.sections,
6315  db.navigation.components*
6316db.setindex.components = notAllowed | db.setindex
6317db.toc.components = notAllowed | db.toc
6318db.set.components = db.set | db.book
6319div {
6320  db.set.status.attribute = db.status.attribute
6321  db.set.role.attribute = attribute role { text }
6322  db.set.attlist =
6323    db.set.role.attribute?
6324    & db.common.attributes
6325    & db.common.linking.attributes
6326    & db.label.attribute?
6327    & db.set.status.attribute?
6328  db.set.info = db._info.title.req
6329  db.set =
6330
6331    ## A collection of books
6332    [
6333      s:pattern [
6334        name = "Root must have version"
6335        "\x{a}" ~
6336        "          "
6337        s:rule [
6338          context = "/db:set"
6339          "\x{a}" ~
6340          "            "
6341          s:assert [
6342            test = "@version"
6343            "The root element must have a version attribute."
6344          ]
6345          "\x{a}" ~
6346          "          "
6347        ]
6348        "\x{a}" ~
6349        "        "
6350      ]
6351    ]
6352    element set {
6353      db.set.attlist,
6354      db.set.info,
6355      db.toc.components?,
6356      db.set.components+,
6357      db.setindex.components?
6358    }
6359}
6360div {
6361  db.book.status.attribute = db.status.attribute
6362  db.book.role.attribute = attribute role { text }
6363  db.book.attlist =
6364    db.book.role.attribute?
6365    & db.common.attributes
6366    & db.common.linking.attributes
6367    & db.label.attribute?
6368    & db.book.status.attribute?
6369  db.book.info = db._info.title.req
6370  db.book =
6371
6372    ## A book
6373    [
6374      s:pattern [
6375        name = "Root must have version"
6376        "\x{a}" ~
6377        "          "
6378        s:rule [
6379          context = "/db:book"
6380          "\x{a}" ~
6381          "            "
6382          s:assert [
6383            test = "@version"
6384            "The root element must have a version attribute."
6385          ]
6386          "\x{a}" ~
6387          "          "
6388        ]
6389        "\x{a}" ~
6390        "        "
6391      ]
6392    ]
6393    element book {
6394      db.book.attlist,
6395      db.book.info,
6396      (db.navigation.components | db.components | db.divisions)+
6397    }
6398}
6399div {
6400  db.dedication.status.attribute = db.status.attribute
6401  db.dedication.role.attribute = attribute role { text }
6402  db.dedication.attlist =
6403    db.dedication.role.attribute?
6404    & db.common.attributes
6405    & db.common.linking.attributes
6406    & db.label.attribute?
6407    & db.dedication.status.attribute?
6408  db.dedication.info = db._info
6409  db.dedication =
6410
6411    ## A wrapper for the dedication section of a book
6412    [
6413      s:pattern [
6414        name = "Root must have version"
6415        "\x{a}" ~
6416        "          "
6417        s:rule [
6418          context = "/db:dedication"
6419          "\x{a}" ~
6420          "            "
6421          s:assert [
6422            test = "@version"
6423            "The root element must have a version attribute."
6424          ]
6425          "\x{a}" ~
6426          "          "
6427        ]
6428        "\x{a}" ~
6429        "        "
6430      ]
6431    ]
6432    element dedication {
6433      db.dedication.attlist, db.dedication.info, db.all.blocks+
6434    }
6435}
6436div {
6437  db.colophon.status.attribute = db.status.attribute
6438  db.colophon.role.attribute = attribute role { text }
6439  db.colophon.attlist =
6440    db.colophon.role.attribute?
6441    & db.common.attributes
6442    & db.common.linking.attributes
6443    & db.label.attribute?
6444    & db.colophon.status.attribute?
6445  db.colophon.info = db._info
6446  db.colophon =
6447
6448    ## Text at the back of a book describing facts about its production
6449    [
6450      s:pattern [
6451        name = "Root must have version"
6452        "\x{a}" ~
6453        "          "
6454        s:rule [
6455          context = "/db:colophon"
6456          "\x{a}" ~
6457          "            "
6458          s:assert [
6459            test = "@version"
6460            "The root element must have a version attribute."
6461          ]
6462          "\x{a}" ~
6463          "          "
6464        ]
6465        "\x{a}" ~
6466        "        "
6467      ]
6468    ]
6469    element colophon {
6470      db.colophon.attlist, db.colophon.info, db.all.blocks+
6471    }
6472}
6473div {
6474  db.appendix.status.attribute = db.status.attribute
6475  db.appendix.role.attribute = attribute role { text }
6476  db.appendix.attlist =
6477    db.appendix.role.attribute?
6478    & db.common.attributes
6479    & db.common.linking.attributes
6480    & db.label.attribute?
6481    & db.appendix.status.attribute?
6482  db.appendix.info = db._info.title.req
6483  db.appendix =
6484
6485    ## An appendix in a Book or Article
6486    [
6487      s:pattern [
6488        name = "Root must have version"
6489        "\x{a}" ~
6490        "          "
6491        s:rule [
6492          context = "/db:appendix"
6493          "\x{a}" ~
6494          "            "
6495          s:assert [
6496            test = "@version"
6497            "The root element must have a version attribute."
6498          ]
6499          "\x{a}" ~
6500          "          "
6501        ]
6502        "\x{a}" ~
6503        "        "
6504      ]
6505    ]
6506    element appendix {
6507      db.appendix.attlist, db.appendix.info, db.component.contentmodel
6508    }
6509}
6510div {
6511  db.chapter.status.attribute = db.status.attribute
6512  db.chapter.role.attribute = attribute role { text }
6513  db.chapter.attlist =
6514    db.chapter.role.attribute?
6515    & db.common.attributes
6516    & db.common.linking.attributes
6517    & db.label.attribute?
6518    & db.chapter.status.attribute?
6519  db.chapter.info = db._info.title.req
6520  db.chapter =
6521
6522    ## A chapter, as of a book
6523    [
6524      s:pattern [
6525        name = "Root must have version"
6526        "\x{a}" ~
6527        "          "
6528        s:rule [
6529          context = "/db:chapter"
6530          "\x{a}" ~
6531          "            "
6532          s:assert [
6533            test = "@version"
6534            "The root element must have a version attribute."
6535          ]
6536          "\x{a}" ~
6537          "          "
6538        ]
6539        "\x{a}" ~
6540        "        "
6541      ]
6542    ]
6543    element chapter {
6544      db.chapter.attlist, db.chapter.info, db.component.contentmodel
6545    }
6546}
6547db.part.components =
6548  (db.navigation.components | db.components)
6549  | (db.refentry | db.reference)
6550div {
6551  db.part.status.attribute = db.status.attribute
6552  db.part.role.attribute = attribute role { text }
6553  db.part.attlist =
6554    db.part.role.attribute?
6555    & db.common.attributes
6556    & db.common.linking.attributes
6557    & db.label.attribute?
6558    & db.part.status.attribute?
6559  db.part.info = db._info.title.req
6560  db.part =
6561
6562    ## A division in a book
6563    [
6564      s:pattern [
6565        name = "Root must have version"
6566        "\x{a}" ~
6567        "          "
6568        s:rule [
6569          context = "/db:part"
6570          "\x{a}" ~
6571          "            "
6572          s:assert [
6573            test = "@version"
6574            "The root element must have a version attribute."
6575          ]
6576          "\x{a}" ~
6577          "          "
6578        ]
6579        "\x{a}" ~
6580        "        "
6581      ]
6582    ]
6583    element part {
6584      db.part.attlist, db.part.info, db.partintro?, db.part.components+
6585    }
6586}
6587div {
6588  db.preface.status.attribute = db.status.attribute
6589  db.preface.role.attribute = attribute role { text }
6590  db.preface.attlist =
6591    db.preface.role.attribute?
6592    & db.common.attributes
6593    & db.common.linking.attributes
6594    & db.label.attribute?
6595    & db.preface.status.attribute?
6596  db.preface.info = db._info.title.req
6597  db.preface =
6598
6599    ## Introductory matter preceding the first chapter of a book
6600    [
6601      s:pattern [
6602        name = "Root must have version"
6603        "\x{a}" ~
6604        "          "
6605        s:rule [
6606          context = "/db:preface"
6607          "\x{a}" ~
6608          "            "
6609          s:assert [
6610            test = "@version"
6611            "The root element must have a version attribute."
6612          ]
6613          "\x{a}" ~
6614          "          "
6615        ]
6616        "\x{a}" ~
6617        "        "
6618      ]
6619    ]
6620    element preface {
6621      db.preface.attlist, db.preface.info, db.component.contentmodel
6622    }
6623}
6624div {
6625  db.partintro.status.attribute = db.status.attribute
6626  db.partintro.role.attribute = attribute role { text }
6627  db.partintro.attlist =
6628    db.partintro.role.attribute?
6629    & db.common.attributes
6630    & db.common.linking.attributes
6631    & db.label.attribute?
6632    & db.partintro.status.attribute?
6633  db.partintro.info = db._info
6634  db.partintro =
6635
6636    ## An introduction to the contents of a part
6637    element partintro {
6638      db.partintro.attlist,
6639      db.partintro.info,
6640      db.toplevel.blocks.or.sections
6641    }
6642}
6643div {
6644  db.section.status.attribute = db.status.attribute
6645  db.section.role.attribute = attribute role { text }
6646  db.section.attlist =
6647    db.section.role.attribute?
6648    & db.common.attributes
6649    & db.common.linking.attributes
6650    & db.label.attribute?
6651    & db.section.status.attribute?
6652  db.section.info = db._info.title.req
6653  db.section =
6654
6655    ## A recursive section
6656    [
6657      s:pattern [
6658        name = "Root must have version"
6659        "\x{a}" ~
6660        "          "
6661        s:rule [
6662          context = "/db:section"
6663          "\x{a}" ~
6664          "            "
6665          s:assert [
6666            test = "@version"
6667            "The root element must have a version attribute."
6668          ]
6669          "\x{a}" ~
6670          "          "
6671        ]
6672        "\x{a}" ~
6673        "        "
6674      ]
6675    ]
6676    element section {
6677      db.section.attlist,
6678      db.section.info,
6679      db.recursive.blocks.or.sections,
6680      db.navigation.components*
6681    }
6682}
6683div {
6684  db.simplesect.status.attribute = db.status.attribute
6685  db.simplesect.role.attribute = attribute role { text }
6686  db.simplesect.attlist =
6687    db.simplesect.role.attribute?
6688    & db.common.attributes
6689    & db.common.linking.attributes
6690    & db.label.attribute?
6691    & db.simplesect.status.attribute?
6692  db.simplesect.info = db._info.title.req
6693  db.simplesect =
6694
6695    ## A section of a document with no subdivisions
6696    element simplesect {
6697      db.simplesect.attlist, db.simplesect.info, db.all.blocks+
6698    }
6699}
6700div {
6701  db.ackno.role.attribute = attribute role { text }
6702  db.ackno.attlist =
6703    db.ackno.role.attribute?
6704    & db.common.attributes
6705    & db.common.linking.attributes
6706  db.ackno =
6707
6708    ## Acknowledgements in an Article
6709    element ackno { db.ackno.attlist, db.para.blocks+ }
6710}
6711db.article.components = db.toplevel.sections
6712div {
6713  db.article.status.attribute = db.status.attribute
6714  db.article.class.enumeration =
6715
6716    ## A collection of frequently asked questions.
6717    "faq"
6718    |
6719      ## An article in a journal or other periodical.
6720      "journalarticle"
6721    |
6722      ## A description of a product.
6723      "productsheet"
6724    |
6725      ## A specification.
6726      "specification"
6727    |
6728      ## A technical report.
6729      "techreport"
6730    |
6731      ## A white paper.
6732      "whitepaper"
6733  db.article.class.attribute =
6734
6735    ## Identifies the nature of the article
6736    attribute class { db.article.class.enumeration }
6737  db.article.role.attribute = attribute role { text }
6738  db.article.attlist =
6739    db.article.role.attribute?
6740    & db.common.attributes
6741    & db.common.linking.attributes
6742    & db.label.attribute?
6743    & db.article.status.attribute?
6744    & db.article.class.attribute?
6745  db.article.info = db._info.title.req
6746  db.article =
6747
6748    ## An article
6749    [
6750      s:pattern [
6751        name = "Root must have version"
6752        "\x{a}" ~
6753        "          "
6754        s:rule [
6755          context = "/db:article"
6756          "\x{a}" ~
6757          "            "
6758          s:assert [
6759            test = "@version"
6760            "The root element must have a version attribute."
6761          ]
6762          "\x{a}" ~
6763          "          "
6764        ]
6765        "\x{a}" ~
6766        "        "
6767      ]
6768    ]
6769    element article {
6770      db.article.attlist,
6771      db.article.info,
6772      db.navigation.components*,
6773      ((db.all.blocks+, db.article.components?)
6774       | db.article.components),
6775      (db.appendix | db.navigation.components | db.ackno | db.colophon)*
6776    }
6777}
6778db.sect1.sections = (db.sect2+, db.simplesect*) | db.simplesect+
6779div {
6780  db.sect1.status.attribute = db.status.attribute
6781  db.sect1.role.attribute = attribute role { text }
6782  db.sect1.attlist =
6783    db.sect1.role.attribute?
6784    & db.common.attributes
6785    & db.common.linking.attributes
6786    & db.label.attribute?
6787    & db.sect1.status.attribute?
6788  db.sect1.info = db._info.title.req
6789  db.sect1 =
6790
6791    ## A top-level section of document
6792    [
6793      s:pattern [
6794        name = "Root must have version"
6795        "\x{a}" ~
6796        "          "
6797        s:rule [
6798          context = "/db:sect1"
6799          "\x{a}" ~
6800          "            "
6801          s:assert [
6802            test = "@version"
6803            "The root element must have a version attribute."
6804          ]
6805          "\x{a}" ~
6806          "          "
6807        ]
6808        "\x{a}" ~
6809        "        "
6810      ]
6811    ]
6812    element sect1 {
6813      db.sect1.attlist,
6814      db.sect1.info,
6815      ((db.all.blocks+, db.sect1.sections?) | db.sect1.sections),
6816      db.navigation.components*
6817    }
6818}
6819db.sect2.sections = (db.sect3+, db.simplesect*) | db.simplesect+
6820div {
6821  db.sect2.status.attribute = db.status.attribute
6822  db.sect2.role.attribute = attribute role { text }
6823  db.sect2.attlist =
6824    db.sect2.role.attribute?
6825    & db.common.attributes
6826    & db.common.linking.attributes
6827    & db.label.attribute?
6828    & db.sect2.status.attribute?
6829  db.sect2.info = db._info.title.req
6830  db.sect2 =
6831
6832    ## A subsection within a Sect1
6833    [
6834      s:pattern [
6835        name = "Root must have version"
6836        "\x{a}" ~
6837        "          "
6838        s:rule [
6839          context = "/db:sect2"
6840          "\x{a}" ~
6841          "            "
6842          s:assert [
6843            test = "@version"
6844            "The root element must have a version attribute."
6845          ]
6846          "\x{a}" ~
6847          "          "
6848        ]
6849        "\x{a}" ~
6850        "        "
6851      ]
6852    ]
6853    element sect2 {
6854      db.sect2.attlist,
6855      db.sect2.info,
6856      ((db.all.blocks+, db.sect2.sections?) | db.sect2.sections),
6857      db.navigation.components*
6858    }
6859}
6860db.sect3.sections = (db.sect4+, db.simplesect*) | db.simplesect+
6861div {
6862  db.sect3.status.attribute = db.status.attribute
6863  db.sect3.role.attribute = attribute role { text }
6864  db.sect3.attlist =
6865    db.sect3.role.attribute?
6866    & db.common.attributes
6867    & db.common.linking.attributes
6868    & db.label.attribute?
6869    & db.sect3.status.attribute?
6870  db.sect3.info = db._info.title.req
6871  db.sect3 =
6872
6873    ## A subsection within a Sect2
6874    [
6875      s:pattern [
6876        name = "Root must have version"
6877        "\x{a}" ~
6878        "          "
6879        s:rule [
6880          context = "/db:sect3"
6881          "\x{a}" ~
6882          "            "
6883          s:assert [
6884            test = "@version"
6885            "The root element must have a version attribute."
6886          ]
6887          "\x{a}" ~
6888          "          "
6889        ]
6890        "\x{a}" ~
6891        "        "
6892      ]
6893    ]
6894    element sect3 {
6895      db.sect3.attlist,
6896      db.sect3.info,
6897      ((db.all.blocks+, db.sect3.sections?) | db.sect3.sections),
6898      db.navigation.components*
6899    }
6900}
6901db.sect4.sections = (db.sect5+, db.simplesect*) | db.simplesect+
6902div {
6903  db.sect4.status.attribute = db.status.attribute
6904  db.sect4.role.attribute = attribute role { text }
6905  db.sect4.attlist =
6906    db.sect4.role.attribute?
6907    & db.common.attributes
6908    & db.common.linking.attributes
6909    & db.label.attribute?
6910    & db.sect4.status.attribute?
6911  db.sect4.info = db._info.title.req
6912  db.sect4 =
6913
6914    ## A subsection within a Sect3
6915    [
6916      s:pattern [
6917        name = "Root must have version"
6918        "\x{a}" ~
6919        "          "
6920        s:rule [
6921          context = "/db:sect4"
6922          "\x{a}" ~
6923          "            "
6924          s:assert [
6925            test = "@version"
6926            "The root element must have a version attribute."
6927          ]
6928          "\x{a}" ~
6929          "          "
6930        ]
6931        "\x{a}" ~
6932        "        "
6933      ]
6934    ]
6935    element sect4 {
6936      db.sect4.attlist,
6937      db.sect4.info,
6938      ((db.all.blocks+, db.sect4.sections?) | db.sect4.sections),
6939      db.navigation.components*
6940    }
6941}
6942db.sect5.sections = db.simplesect+
6943div {
6944  db.sect5.status.attribute = db.status.attribute
6945  db.sect5.role.attribute = attribute role { text }
6946  db.sect5.attlist =
6947    db.sect5.role.attribute?
6948    & db.common.attributes
6949    & db.common.linking.attributes
6950    & db.label.attribute?
6951    & db.sect5.status.attribute?
6952  db.sect5.info = db._info.title.req
6953  db.sect5 =
6954
6955    ## A subsection within a Sect4
6956    [
6957      s:pattern [
6958        name = "Root must have version"
6959        "\x{a}" ~
6960        "          "
6961        s:rule [
6962          context = "/db:sect5"
6963          "\x{a}" ~
6964          "            "
6965          s:assert [
6966            test = "@version"
6967            "The root element must have a version attribute."
6968          ]
6969          "\x{a}" ~
6970          "          "
6971        ]
6972        "\x{a}" ~
6973        "        "
6974      ]
6975    ]
6976    element sect5 {
6977      db.sect5.attlist,
6978      db.sect5.info,
6979      ((db.all.blocks+, db.sect5.sections?) | db.sect5.sections),
6980      db.navigation.components*
6981    }
6982}
6983db.toplevel.refsection = db.refsection+ | db.refsect1+
6984db.secondlevel.refsection = db.refsection+ | db.refsect2+
6985db.reference.components = db.refentry
6986div {
6987  db.reference.role.attribute = attribute role { text }
6988  db.reference.attlist =
6989    db.reference.role.attribute?
6990    & db.common.attributes
6991    & db.common.linking.attributes
6992    & db.status.attribute?
6993    & db.label.attribute?
6994  db.reference.info = db._info.title.req
6995  db.reference =
6996
6997    ## A collection of reference entries
6998    [
6999      s:pattern [
7000        name = "Root must have version"
7001        "\x{a}" ~
7002        "          "
7003        s:rule [
7004          context = "/db:reference"
7005          "\x{a}" ~
7006          "            "
7007          s:assert [
7008            test = "@version"
7009            "The root element must have a version attribute."
7010          ]
7011          "\x{a}" ~
7012          "          "
7013        ]
7014        "\x{a}" ~
7015        "        "
7016      ]
7017    ]
7018    element reference {
7019      db.reference.attlist,
7020      db.reference.info,
7021      db.partintro?,
7022      db.reference.components+
7023    }
7024}
7025div {
7026  db.refentry.role.attribute = attribute role { text }
7027  db.refentry.attlist =
7028    db.refentry.role.attribute?
7029    & db.common.attributes
7030    & db.common.linking.attributes
7031    & db.status.attribute?
7032    & db.label.attribute?
7033  db.refentry.info = db._info.title.forbidden
7034  db.refentry =
7035
7036    ## A reference page (originally a UNIX man-style reference page)
7037    [
7038      s:pattern [
7039        name = "Root must have version"
7040        "\x{a}" ~
7041        "          "
7042        s:rule [
7043          context = "/db:refentry"
7044          "\x{a}" ~
7045          "            "
7046          s:assert [
7047            test = "@version"
7048            "The root element must have a version attribute."
7049          ]
7050          "\x{a}" ~
7051          "          "
7052        ]
7053        "\x{a}" ~
7054        "        "
7055      ]
7056    ]
7057    element refentry {
7058      db.refentry.attlist,
7059      db.indexterm*,
7060      db.refentry.info,
7061      db.refmeta?,
7062      db.refnamediv+,
7063      db.refsynopsisdiv?,
7064      db.toplevel.refsection
7065    }
7066}
7067div {
7068  db.refmeta.role.attribute = attribute role { text }
7069  db.refmeta.attlist =
7070    db.refmeta.role.attribute?
7071    & db.common.attributes
7072    & db.common.linking.attributes
7073  db.refmeta =
7074
7075    ## Meta-information for a reference entry
7076    element refmeta {
7077      db.refmeta.attlist,
7078      db.indexterm*,
7079      db.refentrytitle,
7080      db.manvolnum?,
7081      db.refmiscinfo*,
7082      db.indexterm*
7083    }
7084}
7085db.refmiscinfo.class.enumeration =
7086
7087  ## The name of the software product or component to which this topic applies
7088  "source"
7089  |
7090    ## The version of the software product or component to which this topic applies
7091    "version"
7092  |
7093    ## The section title of the reference page (e.g., User Commands)
7094    "manual"
7095  |
7096    ## The section title of the reference page (believed synonymous with "manual" but in wide use)
7097    "sectdesc"
7098  |
7099    ## The name of the software product or component to which this topic applies (e.g., SunOS x.y; believed synonymous with "source" but in wide use)
7100    "software"
7101db.refmiscinfo.class-enum.attribute =
7102
7103  ## Identifies the kind of miscellaneous information
7104  attribute class { db.refmiscinfo.class.enumeration }?
7105db.refmiscinfo.class-other.attribute =
7106
7107  ## Identifies the nature of non-standard miscellaneous information
7108  attribute otherclass { text }
7109db.refmiscinfo.class-other.attributes =
7110
7111  ## Identifies the kind of miscellaneious information
7112  attribute class {
7113
7114    ## Indicates that the information is some 'other' kind.
7115    "other"
7116  }
7117  & db.refmiscinfo.class-other.attribute
7118db.refmiscinfo.class.attribute =
7119  db.refmiscinfo.class-enum.attribute
7120  | db.refmiscinfo.class-other.attributes
7121div {
7122  db.refmiscinfo.role.attribute = attribute role { text }
7123  db.refmiscinfo.attlist =
7124    db.refmiscinfo.role.attribute?
7125    & db.common.attributes
7126    & db.common.linking.attributes
7127    & db.refmiscinfo.class.attribute?
7128  db.refmiscinfo =
7129
7130    ## Meta-information for a reference entry other than the title and volume number
7131    element refmiscinfo { db.refmiscinfo.attlist, db._text }
7132}
7133div {
7134  db.refnamediv.role.attribute = attribute role { text }
7135  db.refnamediv.attlist =
7136    db.refnamediv.role.attribute?
7137    & db.common.attributes
7138    & db.common.linking.attributes
7139  db.refnamediv =
7140
7141    ## The name, purpose, and classification of a reference page
7142    element refnamediv {
7143      db.refnamediv.attlist,
7144      db.refdescriptor?,
7145      db.refname+,
7146      db.refpurpose,
7147      db.refclass*
7148    }
7149}
7150div {
7151  db.refdescriptor.role.attribute = attribute role { text }
7152  db.refdescriptor.attlist =
7153    db.refdescriptor.role.attribute?
7154    & db.common.attributes
7155    & db.common.linking.attributes
7156  db.refdescriptor =
7157
7158    ## A description of the topic of a reference page
7159    element refdescriptor { db.refdescriptor.attlist, db.all.inlines* }
7160}
7161div {
7162  db.refname.role.attribute = attribute role { text }
7163  db.refname.attlist =
7164    db.refname.role.attribute?
7165    & db.common.attributes
7166    & db.common.linking.attributes
7167  db.refname =
7168
7169    ## The name of (one of) the subject(s) of a reference page
7170    element refname { db.refname.attlist, db.all.inlines* }
7171}
7172div {
7173  db.refpurpose.role.attribute = attribute role { text }
7174  db.refpurpose.attlist =
7175    db.refpurpose.role.attribute?
7176    & db.common.attributes
7177    & db.common.linking.attributes
7178  db.refpurpose =
7179
7180    ## A short (one sentence) synopsis of the topic of a reference page
7181    element refpurpose { db.refpurpose.attlist, db.all.inlines* }
7182}
7183div {
7184  db.refclass.role.attribute = attribute role { text }
7185  db.refclass.attlist =
7186    db.refclass.role.attribute?
7187    & db.common.attributes
7188    & db.common.linking.attributes
7189  db.refclass =
7190
7191    ## The scope or other indication of applicability of a reference entry
7192    element refclass { db.refclass.attlist, (text | db.application)* }
7193}
7194div {
7195  db.refsynopsisdiv.role.attribute = attribute role { text }
7196  db.refsynopsisdiv.attlist =
7197    db.refsynopsisdiv.role.attribute?
7198    & db.common.attributes
7199    & db.common.linking.attributes
7200  db.refsynopsisdiv.info = db._info
7201  db.refsynopsisdiv =
7202
7203    ## A syntactic synopsis of the subject of the reference page
7204    element refsynopsisdiv {
7205      db.refsynopsisdiv.attlist,
7206      db.refsynopsisdiv.info,
7207      ((db.all.blocks+, db.secondlevel.refsection?)
7208       | db.secondlevel.refsection)
7209    }
7210}
7211div {
7212  db.refsection.role.attribute = attribute role { text }
7213  db.refsection.attlist =
7214    db.refsection.role.attribute?
7215    & db.common.attributes
7216    & db.common.linking.attributes
7217    & db.status.attribute?
7218    & db.label.attribute?
7219  db.refsection.info = db._info.title.req
7220  db.refsection =
7221
7222    ## A recursive section in a refentry
7223    [
7224      s:pattern [
7225        name = "Root must have version"
7226        "\x{a}" ~
7227        "          "
7228        s:rule [
7229          context = "/db:refsection"
7230          "\x{a}" ~
7231          "            "
7232          s:assert [
7233            test = "@version"
7234            "The root element must have a version attribute."
7235          ]
7236          "\x{a}" ~
7237          "          "
7238        ]
7239        "\x{a}" ~
7240        "        "
7241      ]
7242    ]
7243    element refsection {
7244      db.refsection.attlist,
7245      db.refsection.info,
7246      ((db.all.blocks+, db.refsection*) | db.refsection+)
7247    }
7248}
7249db.refsect1.sections = db.refsect2+
7250div {
7251  db.refsect1.status.attribute = db.status.attribute
7252  db.refsect1.role.attribute = attribute role { text }
7253  db.refsect1.attlist =
7254    db.refsect1.role.attribute?
7255    & db.common.attributes
7256    & db.common.linking.attributes
7257    & db.label.attribute?
7258    & db.refsect1.status.attribute?
7259  db.refsect1.info = db._info.title.req
7260  db.refsect1 =
7261
7262    ## A major subsection of a reference entry
7263    [
7264      s:pattern [
7265        name = "Root must have version"
7266        "\x{a}" ~
7267        "          "
7268        s:rule [
7269          context = "/db:refsect1"
7270          "\x{a}" ~
7271          "            "
7272          s:assert [
7273            test = "@version"
7274            "The root element must have a version attribute."
7275          ]
7276          "\x{a}" ~
7277          "          "
7278        ]
7279        "\x{a}" ~
7280        "        "
7281      ]
7282    ]
7283    element refsect1 {
7284      db.refsect1.attlist,
7285      db.refsect1.info,
7286      ((db.all.blocks+, db.refsect1.sections?) | db.refsect1.sections)
7287    }
7288}
7289db.refsect2.sections = db.refsect3+
7290div {
7291  db.refsect2.status.attribute = db.status.attribute
7292  db.refsect2.role.attribute = attribute role { text }
7293  db.refsect2.attlist =
7294    db.refsect2.role.attribute?
7295    & db.common.attributes
7296    & db.common.linking.attributes
7297    & db.label.attribute?
7298    & db.refsect2.status.attribute?
7299  db.refsect2.info = db._info.title.req
7300  db.refsect2 =
7301
7302    ## A subsection of a refsect1
7303    [
7304      s:pattern [
7305        name = "Root must have version"
7306        "\x{a}" ~
7307        "          "
7308        s:rule [
7309          context = "/db:refsect2"
7310          "\x{a}" ~
7311          "            "
7312          s:assert [
7313            test = "@version"
7314            "The root element must have a version attribute."
7315          ]
7316          "\x{a}" ~
7317          "          "
7318        ]
7319        "\x{a}" ~
7320        "        "
7321      ]
7322    ]
7323    element refsect2 {
7324      db.refsect2.attlist,
7325      db.refsect2.info,
7326      ((db.all.blocks+, db.refsect2.sections?) | db.refsect2.sections)
7327    }
7328}
7329div {
7330  db.refsect3.status.attribute = db.status.attribute
7331  db.refsect3.role.attribute = attribute role { text }
7332  db.refsect3.attlist =
7333    db.refsect3.role.attribute?
7334    & db.common.attributes
7335    & db.common.linking.attributes
7336    & db.label.attribute?
7337    & db.refsect3.status.attribute?
7338  db.refsect3.info = db._info.title.req
7339  db.refsect3 =
7340
7341    ## A subsection of a refsect2
7342    [
7343      s:pattern [
7344        name = "Root must have version"
7345        "\x{a}" ~
7346        "          "
7347        s:rule [
7348          context = "/db:refsect3"
7349          "\x{a}" ~
7350          "            "
7351          s:assert [
7352            test = "@version"
7353            "The root element must have a version attribute."
7354          ]
7355          "\x{a}" ~
7356          "          "
7357        ]
7358        "\x{a}" ~
7359        "        "
7360      ]
7361    ]
7362    element refsect3 {
7363      db.refsect3.attlist, db.refsect3.info, db.all.blocks+
7364    }
7365}
7366db.glossary.inlines = db.firstterm | db.glossterm
7367db.baseform.attribute =
7368
7369  ## Specifies the base form of the term, the one that appears in the glossary. This allows adjectival, plural, and other variations of the term to appear in the element. The element content is the default base form.
7370  attribute baseform { text }?
7371div {
7372  db.glosslist.role.attribute = attribute role { text }
7373  db.glosslist.attlist =
7374    db.glosslist.role.attribute?
7375    & db.common.attributes
7376    & db.common.linking.attributes
7377  db.glosslist.info = db._info.title.only
7378  db.glosslist =
7379
7380    ## A wrapper for a list of glossary entries
7381    element glosslist {
7382      db.glosslist.attlist,
7383      db.glosslist.info?,
7384      db.all.blocks*,
7385      db.glossentry+
7386    }
7387}
7388div {
7389  db.glossentry.role.attribute = attribute role { text }
7390  db.glossentry.sortas.attribute =
7391
7392    ## Specifies the string by which the element's content is to be sorted; if unspecified, the content is used
7393    attribute sortas { text }
7394  db.glossentry.attlist =
7395    db.glossentry.role.attribute?
7396    & db.common.attributes
7397    & db.common.linking.attributes
7398    & db.glossentry.sortas.attribute?
7399  db.glossentry =
7400
7401    ## An entry in a Glossary or GlossList
7402    element glossentry {
7403      db.glossentry.attlist,
7404      db.glossterm,
7405      db.acronym?,
7406      db.abbrev?,
7407      db.indexterm*,
7408      (db.glosssee | db.glossdef+)
7409    }
7410}
7411div {
7412  db.glossdef.role.attribute = attribute role { text }
7413  db.glossdef.subject.attribute =
7414
7415    ## Specifies a list of keywords for the definition
7416    attribute subject { text }
7417  db.glossdef.attlist =
7418    db.glossdef.role.attribute?
7419    & db.common.attributes
7420    & db.common.linking.attributes
7421    & db.glossdef.subject.attribute?
7422  db.glossdef =
7423
7424    ## A definition in a GlossEntry
7425    element glossdef {
7426      db.glossdef.attlist, db.all.blocks+, db.glossseealso*
7427    }
7428}
7429div {
7430  db.glosssee.role.attribute = attribute role { text }
7431  db.glosssee.otherterm.attribute =
7432
7433    ## Identifies the other term
7434    attribute otherterm { xsd:IDREF }
7435  db.glosssee.attlist =
7436    db.glosssee.role.attribute?
7437    & db.common.attributes
7438    & db.common.linking.attributes
7439    & db.glosssee.otherterm.attribute?
7440  db.glosssee =
7441
7442    ## A cross-reference from one glossentry
7443    ##  to another
7444    [
7445      s:pattern [
7446        name = "Glosssary 'see' type constraint"
7447        "\x{a}" ~
7448        "          "
7449        s:rule [
7450          context = "db:glosssee[@otherterm]"
7451          "\x{a}" ~
7452          "            "
7453          s:assert [
7454            test =
7455              "local-name(//*[@id=current()/@otherterm]) = 'glossentry' and namespace-uri(//*[@id=current()/@otherterm]) = 'http://docbook.org/ns/docbook'"
7456            "@otherterm on glosssee must point to a glossentry."
7457          ]
7458          "\x{a}" ~
7459          "          "
7460        ]
7461        "\x{a}" ~
7462        "        "
7463      ]
7464    ]
7465    element glosssee { db.glosssee.attlist, db.all.inlines* }
7466}
7467div {
7468  db.glossseealso.role.attribute = attribute role { text }
7469  db.glossseealso.otherterm.attribute =
7470
7471    ## Identifies the other term
7472    attribute otherterm { xsd:IDREF }
7473  db.glossseealso.attlist =
7474    db.glossseealso.role.attribute?
7475    & db.common.attributes
7476    & db.common.linking.attributes
7477    & db.glossseealso.otherterm.attribute?
7478  db.glossseealso =
7479
7480    ## A cross-reference from one GlossEntry to another
7481    [
7482      s:pattern [
7483        name = "Glossary 'seealso' type constraint"
7484        "\x{a}" ~
7485        "          "
7486        s:rule [
7487          context = "db:glossseealso[@otherterm]"
7488          "\x{a}" ~
7489          "            "
7490          s:assert [
7491            test =
7492              "local-name(//*[@id=current()/@otherterm]) = 'glossentry' and namespace-uri(//*[@id=current()/@otherterm]) = 'http://docbook.org/ns/docbook'"
7493            "@otherterm on glossseealso must point to a glossentry."
7494          ]
7495          "\x{a}" ~
7496          "          "
7497        ]
7498        "\x{a}" ~
7499        "        "
7500      ]
7501    ]
7502    element glossseealso { db.glossseealso.attlist, db.all.inlines* }
7503}
7504div {
7505  db.firstterm.role.attribute = attribute role { text }
7506  db.firstterm.attlist =
7507    db.firstterm.role.attribute?
7508    & db.common.attributes
7509    & db.common.linking.attributes
7510    & db.baseform.attribute
7511  db.firstterm =
7512
7513    ## The first occurrence of a term
7514    [
7515      s:pattern [
7516        name = "Glossary 'firstterm' type constraint"
7517        "\x{a}" ~
7518        "          "
7519        s:rule [
7520          context = "db:firstterm[@linkend]"
7521          "\x{a}" ~
7522          "            "
7523          s:assert [
7524            test =
7525              "local-name(//*[@id=current()/@linkend]) = 'glossentry' and namespace-uri(//*[@id=current()/@linkend]) = 'http://docbook.org/ns/docbook'"
7526            "@linkend on firstterm must point to a glossentry."
7527          ]
7528          "\x{a}" ~
7529          "          "
7530        ]
7531        "\x{a}" ~
7532        "        "
7533      ]
7534    ]
7535    element firstterm { db.firstterm.attlist, db.all.inlines* }
7536}
7537div {
7538  db.glossterm.role.attribute = attribute role { text }
7539  db.glossterm.attlist =
7540    db.glossterm.role.attribute?
7541    & db.common.attributes
7542    & db.common.linking.attributes
7543    & db.baseform.attribute
7544  db.glossterm =
7545
7546    ## A glossary term
7547    [
7548      s:pattern [
7549        name = "Glossary 'glossterm' type constraint"
7550        "\x{a}" ~
7551        "          "
7552        s:rule [
7553          context = "db:glossterm[@linkend]"
7554          "\x{a}" ~
7555          "            "
7556          s:assert [
7557            test =
7558              "local-name(//*[@id=current()/@linkend]) = 'glossentry' and namespace-uri(//*[@id=current()/@linkend]) = 'http://docbook.org/ns/docbook'"
7559            "@linkend on glossterm must point to a glossentry."
7560          ]
7561          "\x{a}" ~
7562          "          "
7563        ]
7564        "\x{a}" ~
7565        "        "
7566      ]
7567    ]
7568    element glossterm { db.glossterm.attlist, db.all.inlines* }
7569}
7570div {
7571  db.glossary.status.attribute = db.status.attribute
7572  db.glossary.role.attribute = attribute role { text }
7573  db.glossary.attlist =
7574    db.glossary.role.attribute?
7575    & db.common.attributes
7576    & db.common.linking.attributes
7577    & db.label.attribute?
7578    & db.glossary.status.attribute?
7579  db.glossary.info = db._info
7580  db.glossary =
7581
7582    ## A glossary
7583    [
7584      s:pattern [
7585        name = "Root must have version"
7586        "\x{a}" ~
7587        "          "
7588        s:rule [
7589          context = "/db:glossary"
7590          "\x{a}" ~
7591          "            "
7592          s:assert [
7593            test = "@version"
7594            "The root element must have a version attribute."
7595          ]
7596          "\x{a}" ~
7597          "          "
7598        ]
7599        "\x{a}" ~
7600        "        "
7601      ]
7602    ]
7603    element glossary {
7604      db.glossary.attlist,
7605      db.glossary.info,
7606      db.all.blocks*,
7607      (db.glossdiv+ | db.glossentry+),
7608      db.bibliography?
7609    }
7610}
7611div {
7612  db.glossdiv.status.attribute = db.status.attribute
7613  db.glossdiv.role.attribute = attribute role { text }
7614  db.glossdiv.attlist =
7615    db.glossdiv.role.attribute?
7616    & db.common.attributes
7617    & db.common.linking.attributes
7618    & db.label.attribute?
7619    & db.glossdiv.status.attribute?
7620  db.glossdiv.info = db._info.title.req
7621  db.glossdiv =
7622
7623    ## A division in a Glossary
7624    element glossdiv {
7625      db.glossdiv.attlist,
7626      db.glossdiv.info,
7627      db.all.blocks*,
7628      db.glossentry+
7629    }
7630}
7631div {
7632  db.termdef.role.attribute = attribute role { text }
7633  db.termdef.attlist =
7634    db.termdef.role.attribute?
7635    & db.common.attributes
7636    & db.common.linking.attributes
7637    & db.baseform.attribute
7638  db.termdef =
7639
7640    ## An inline definition of a term
7641    [
7642      s:pattern [
7643        name = "Glossary term definition constraint"
7644        "\x{a}" ~
7645        "          "
7646        s:rule [
7647          context = "db:termdef"
7648          "\x{a}" ~
7649          "            "
7650          s:assert [
7651            test = "count(db:glossterm) != 1"
7652            "A termdef must contain a glossterm"
7653          ]
7654          "\x{a}" ~
7655          "          "
7656        ]
7657        "\x{a}" ~
7658        "        "
7659      ]
7660    ]
7661    element termdef { db.termdef.attlist, db.all.inlines* }
7662}
7663db.relation.attribute =
7664
7665  ## Identifies the relationship between the bibliographic elemnts
7666  attribute relation { text }
7667div {
7668  db.biblioentry.role.attribute = attribute role { text }
7669  db.biblioentry.attlist =
7670    db.biblioentry.role.attribute?
7671    & db.common.attributes
7672    & db.common.linking.attributes
7673  db.biblioentry =
7674
7675    ## An entry in a Bibliography
7676    element biblioentry {
7677      db.biblioentry.attlist, db.bibliographic.elements+
7678    }
7679}
7680div {
7681  db.bibliomixed.role.attribute = attribute role { text }
7682  db.bibliomixed.attlist =
7683    db.bibliomixed.role.attribute?
7684    & db.common.attributes
7685    & db.common.linking.attributes
7686  db.bibliomixed =
7687
7688    ## An entry in a Bibliography
7689    element bibliomixed {
7690      db.bibliomixed.attlist, (text | db.bibliographic.elements)*
7691    }
7692}
7693div {
7694  db.biblioset.relation.attribute = db.relation.attribute
7695  db.biblioset.role.attribute = attribute role { text }
7696  db.biblioset.attlist =
7697    db.biblioset.role.attribute?
7698    & db.common.attributes
7699    & db.common.linking.attributes
7700    & db.biblioset.relation.attribute?
7701  db.biblioset =
7702
7703    ## A raw container for related bibliographic information
7704    element biblioset {
7705      db.biblioset.attlist, db.bibliographic.elements+
7706    }
7707}
7708div {
7709  db.bibliomset.relation.attribute = db.relation.attribute
7710  db.bibliomset.role.attribute = attribute role { text }
7711  db.bibliomset.attlist =
7712    db.bibliomset.role.attribute?
7713    & db.common.attributes
7714    & db.common.linking.attributes
7715    & db.bibliomset.relation.attribute?
7716  db.bibliomset =
7717
7718    ## A cooked container for related bibliographic information
7719    element bibliomset {
7720      db.bibliomset.attlist, (db._text | db.bibliographic.elements)*
7721    }
7722}
7723div {
7724  db.bibliomisc.role.attribute = attribute role { text }
7725  db.bibliomisc.attlist =
7726    db.bibliomisc.role.attribute?
7727    & db.common.attributes
7728    & db.common.linking.attributes
7729  db.bibliomisc =
7730
7731    ## Untyped bibliographic information
7732    element bibliomisc { db.bibliomisc.attlist, db._text }
7733}
7734div {
7735  db.bibliography.status.attrib = db.status.attribute
7736  db.bibliography.role.attribute = attribute role { text }
7737  db.bibliography.attlist =
7738    db.bibliography.role.attribute?
7739    & db.common.attributes
7740    & db.common.linking.attributes
7741    & db.label.attribute?
7742    & db.bibliography.status.attrib?
7743  db.bibliography.info = db._info
7744  db.bibliography =
7745
7746    ## A bibliography
7747    [
7748      s:pattern [
7749        name = "Root must have version"
7750        "\x{a}" ~
7751        "          "
7752        s:rule [
7753          context = "/db:bibliography"
7754          "\x{a}" ~
7755          "            "
7756          s:assert [
7757            test = "@version"
7758            "The root element must have a version attribute."
7759          ]
7760          "\x{a}" ~
7761          "          "
7762        ]
7763        "\x{a}" ~
7764        "        "
7765      ]
7766    ]
7767    element bibliography {
7768      db.bibliography.attlist,
7769      db.bibliography.info,
7770      db.all.blocks*,
7771      (db.bibliodiv+ | (db.biblioentry | db.bibliomixed)+)
7772    }
7773}
7774div {
7775  db.bibliodiv.status.attrib = db.status.attribute
7776  db.bibliodiv.role.attribute = attribute role { text }
7777  db.bibliodiv.attlist =
7778    db.bibliodiv.role.attribute?
7779    & db.common.attributes
7780    & db.common.linking.attributes
7781    & db.label.attribute?
7782    & db.bibliodiv.status.attrib?
7783  db.bibliodiv.info = db._info.title.req
7784  db.bibliodiv =
7785
7786    ## A section of a Bibliography
7787    element bibliodiv {
7788      db.bibliodiv.attlist,
7789      db.bibliodiv.info,
7790      db.all.blocks*,
7791      (db.biblioentry | db.bibliomixed)+
7792    }
7793}
7794div {
7795  db.bibliolist.role.attribute = attribute role { text }
7796  db.bibliolist.attlist =
7797    db.bibliolist.role.attribute?
7798    & db.common.attributes
7799    & db.common.linking.attributes
7800  db.bibliolist.info = db._info.title.only
7801  db.bibliolist =
7802
7803    ## A wrapper for a list of bibliography entries
7804    element bibliolist {
7805      db.bibliolist.attlist,
7806      db.bibliolist.info?,
7807      db.all.blocks*,
7808      (db.biblioentry | db.bibliomixed)+
7809    }
7810}
7811div {
7812  db.biblioref.role.attribute = attribute role { text }
7813  db.biblioref.xrefstyle.attribute = db.xrefstyle.attribute
7814  db.biblioref.endterm.attribute = db.endterm.attribute
7815  db.biblioref.units.attribute =
7816
7817    ## The units (for example, pages) used to identify the beginning and ending of a reference.
7818    attribute units { xsd:token }
7819  db.biblioref.begin.attribute =
7820
7821    ## Identifies the beginning of a reference; the location within the work that is being referenced.
7822    attribute begin { xsd:token }
7823  db.biblioref.end.attribute =
7824
7825    ## Identifies the end of a reference.
7826    attribute end { xsd:token }
7827  db.biblioref.attlist =
7828    db.biblioref.role.attribute?
7829    & db.common.attributes
7830    & db.common.req.linking.attributes
7831    & db.biblioref.xrefstyle.attribute?
7832    & db.biblioref.endterm.attribute?
7833    & db.biblioref.units.attribute?
7834    & db.biblioref.begin.attribute?
7835    & db.biblioref.end.attribute?
7836  db.biblioref =
7837
7838    ## A cross-reference to a bibliographic entry
7839    element biblioref { db.biblioref.attlist, empty }
7840}
7841db.significance.enumeration =
7842
7843  ## Normal
7844  "normal"
7845  |
7846    ## Preferred
7847    "preferred"
7848db.significance.attribute =
7849
7850  ## Specifies the significance of the term
7851  attribute significance { db.significance.enumeration }
7852db.zone.attribute =
7853
7854  ## Specifies the IDs of the elements to which this term applies
7855  attribute zone { xsd:IDREFS }
7856db.indexterm.pagenum.attribute =
7857
7858  ## Indicates the page on which this index term occurs in some version of the printed document
7859  attribute pagenum { text }
7860db.scope.enumeration =
7861
7862  ## All indexes
7863  "all"
7864  |
7865    ## The global index (as for a combined index of a set of box)
7866    "global"
7867  |
7868    ## The local index (the index for this document only)
7869    "local"
7870db.scope.attribute =
7871
7872  ## Specifies the scope of the index term
7873  attribute scope { db.scope.enumeration }
7874db.sortas.attribute =
7875
7876  ## Specifies the string by which the term is to be sorted; if unspecified, the term content is used
7877  attribute sortas { text }
7878db.index.type.attribute =
7879
7880  ## Specifies the target index for this term
7881  attribute type { text }
7882div {
7883  db.itermset.role.attribute = attribute role { text }
7884  db.itermset.attlist =
7885    db.itermset.role.attribute?
7886    & db.common.attributes
7887    & db.common.linking.attributes
7888  db.itermset =
7889
7890    ## A set of index terms in the meta-information of a document
7891    element itermset { db.itermset.attlist, db.indexterm.singular+ }
7892}
7893db.indexterm.contentmodel =
7894  db.primary?,
7895  ((db.secondary,
7896    ((db.tertiary, (db.see | db.seealso+)?)
7897     | db.see
7898     | db.seealso+)?)
7899   | db.see
7900   | db.seealso+)?
7901div {
7902  db.indexterm.singular.role.attribute = attribute role { text }
7903  db.indexterm.singular.class.attribute =
7904
7905    ## Identifies the class of index term
7906    attribute class {
7907
7908      ## A singular index term
7909      "singular"
7910    }
7911  db.indexterm.singular.attlist =
7912    db.indexterm.singular.role.attribute?
7913    & db.common.attributes
7914    & db.common.linking.attributes
7915    & db.significance.attribute?
7916    & db.zone.attribute?
7917    & db.indexterm.pagenum.attribute?
7918    & db.scope.attribute?
7919    & db.index.type.attribute?
7920    & db.indexterm.singular.class.attribute?
7921  db.indexterm.singular =
7922
7923    ## A wrapper for an indexed term
7924    element indexterm {
7925      db.indexterm.singular.attlist, db.indexterm.contentmodel
7926    }
7927}
7928div {
7929  db.indexterm.startofrange.role.attribute = attribute role { text }
7930  db.indexterm.startofrange.class.attribute =
7931
7932    ## Identifies the class of index term
7933    attribute class {
7934
7935      ## The start of a range
7936      "startofrange"
7937    }
7938  db.indexterm.startofrange.attlist =
7939    db.indexterm.startofrange.role.attribute?
7940    & db.common.attributes
7941    & db.common.linking.attributes
7942    & db.significance.attribute?
7943    & db.zone.attribute?
7944    & db.indexterm.pagenum.attribute?
7945    & db.scope.attribute?
7946    & db.index.type.attribute?
7947    & db.indexterm.startofrange.class.attribute
7948  db.indexterm.startofrange =
7949
7950    ## A wrapper for an indexed term that covers a range
7951    element indexterm {
7952      db.indexterm.startofrange.attlist, db.indexterm.contentmodel
7953    }
7954}
7955div {
7956  db.indexterm.endofrange.role.attribute = attribute role { text }
7957  db.indexterm.endofrange.class.attribute =
7958
7959    ## Identifies the class of index term
7960    attribute class {
7961
7962      ## The end of a range
7963      "endofrange"
7964    }
7965  db.indexterm.endofrange.startref.attribute =
7966
7967    ## Points to the start of the range
7968    attribute startref { xsd:IDREF }
7969  db.indexterm.endofrange.attlist =
7970    db.indexterm.endofrange.role.attribute?
7971    & db.common.attributes
7972    & db.common.linking.attributes
7973    & db.indexterm.endofrange.class.attribute
7974    & db.indexterm.endofrange.startref.attribute
7975  db.indexterm.endofrange =
7976
7977    ## Identifies the end of a range associated with an indexed term
7978    element indexterm { db.indexterm.endofrange.attlist, empty }
7979}
7980div {
7981  db.indexterm =
7982    db.indexterm.singular
7983    | db.indexterm.startofrange
7984    | db.indexterm.endofrange
7985}
7986div {
7987  db.primary.role.attribute = attribute role { text }
7988  db.primary.attlist =
7989    db.primary.role.attribute?
7990    & db.common.attributes
7991    & db.common.linking.attributes
7992    & db.sortas.attribute?
7993  db.primary =
7994
7995    ## The primary word or phrase under which an index term should be sorted
7996    element primary { db.primary.attlist, db.all.inlines* }
7997}
7998div {
7999  db.secondary.role.attribute = attribute role { text }
8000  db.secondary.attlist =
8001    db.secondary.role.attribute?
8002    & db.common.attributes
8003    & db.common.linking.attributes
8004    & db.sortas.attribute?
8005  db.secondary =
8006
8007    ## A secondary word or phrase in an index term
8008    element secondary { db.secondary.attlist, db.all.inlines* }
8009}
8010div {
8011  db.tertiary.role.attribute = attribute role { text }
8012  db.tertiary.attlist =
8013    db.tertiary.role.attribute?
8014    & db.common.attributes
8015    & db.common.linking.attributes
8016    & db.sortas.attribute?
8017  db.tertiary =
8018
8019    ## A tertiary word or phrase in an index term
8020    element tertiary { db.tertiary.attlist, db.all.inlines* }
8021}
8022div {
8023  db.see.role.attribute = attribute role { text }
8024  db.see.attlist =
8025    db.see.role.attribute?
8026    & db.common.attributes
8027    & db.common.linking.attributes
8028  db.see =
8029
8030    ## Part of an index term directing the reader instead to another entry in the index
8031    element see { db.see.attlist, db.all.inlines* }
8032}
8033div {
8034  db.seealso.role.attribute = attribute role { text }
8035  db.seealso.attlist =
8036    db.seealso.role.attribute?
8037    & db.common.attributes
8038    & db.common.linking.attributes
8039  db.seealso =
8040
8041    ## Part of an index term directing the reader also to another entry in the index
8042    element seealso { db.seealso.attlist, db.all.inlines* }
8043}
8044div {
8045  db.index.status.attribute = db.status.attribute
8046  db.index.role.attribute = attribute role { text }
8047  db.index.attlist =
8048    db.index.role.attribute?
8049    & db.common.attributes
8050    & db.common.linking.attributes
8051    & db.label.attribute?
8052    & db.index.status.attribute?
8053    & db.index.type.attribute?
8054  db.index.info = db._info
8055  #
8056  # Yes, db.indexdiv* and db.indexentry*; that way an <index/> is valid.
8057  # Authors can use an empty index to indicate where a generated index should
8058  # appear.
8059  db.index =
8060
8061    ## An index to a book or part of a book
8062    [
8063      s:pattern [
8064        name = "Root must have version"
8065        "\x{a}" ~
8066        "          "
8067        s:rule [
8068          context = "/db:index"
8069          "\x{a}" ~
8070          "            "
8071          s:assert [
8072            test = "@version"
8073            "The root element must have a version attribute."
8074          ]
8075          "\x{a}" ~
8076          "          "
8077        ]
8078        "\x{a}" ~
8079        "        "
8080      ]
8081    ]
8082    element index {
8083      db.index.attlist,
8084      db.index.info,
8085      db.all.blocks*,
8086      (db.indexdiv* | db.indexentry* | db.segmentedlist)
8087    }
8088}
8089div {
8090  db.setindex.status.attribute = db.status.attribute
8091  db.setindex.role.attribute = attribute role { text }
8092  db.setindex.attlist =
8093    db.setindex.role.attribute?
8094    & db.common.attributes
8095    & db.common.linking.attributes
8096    & db.label.attribute?
8097    & db.setindex.status.attribute?
8098    & db.index.type.attribute?
8099  db.setindex.info = db._info
8100  db.setindex =
8101
8102    ## An index to a set of books
8103    [
8104      s:pattern [
8105        name = "Root must have version"
8106        "\x{a}" ~
8107        "          "
8108        s:rule [
8109          context = "/db:setindex"
8110          "\x{a}" ~
8111          "            "
8112          s:assert [
8113            test = "@version"
8114            "The root element must have a version attribute."
8115          ]
8116          "\x{a}" ~
8117          "          "
8118        ]
8119        "\x{a}" ~
8120        "        "
8121      ]
8122    ]
8123    element setindex {
8124      db.setindex.attlist,
8125      db.setindex.info,
8126      db.all.blocks*,
8127      (db.indexdiv* | db.indexentry*)
8128    }
8129}
8130div {
8131  db.indexdiv.status.attribute = db.status.attribute
8132  db.indexdiv.role.attribute = attribute role { text }
8133  db.indexdiv.attlist =
8134    db.indexdiv.role.attribute?
8135    & db.common.attributes
8136    & db.common.linking.attributes
8137    & db.label.attribute?
8138    & db.indexdiv.status.attribute?
8139  db.indexdiv.info = db._info.title.req
8140  db.indexdiv =
8141
8142    ## A division in an index
8143    element indexdiv {
8144      db.indexdiv.attlist,
8145      db.indexdiv.info,
8146      db.all.blocks*,
8147      (db.indexentry+ | db.segmentedlist)
8148    }
8149}
8150div {
8151  db.indexentry.role.attribute = attribute role { text }
8152  db.indexentry.attlist =
8153    db.indexentry.role.attribute?
8154    & db.common.attributes
8155    & db.common.linking.attributes
8156  db.indexentry =
8157
8158    ## An entry in an index
8159    element indexentry {
8160      db.indexentry.attlist,
8161      db.primaryie,
8162      (db.seeie | db.seealsoie)*,
8163      (db.secondaryie, (db.seeie | db.seealsoie | db.tertiaryie)*)*
8164    }
8165}
8166div {
8167  db.primaryie.role.attribute = attribute role { text }
8168  db.primaryie.attlist =
8169    db.primaryie.role.attribute?
8170    & db.common.attributes
8171    & db.linkends.attribute?
8172  db.primaryie =
8173
8174    ## A primary term in an index entry, not in the text
8175    element primaryie { db.primaryie.attlist, db.all.inlines* }
8176}
8177div {
8178  db.secondaryie.role.attribute = attribute role { text }
8179  db.secondaryie.attlist =
8180    db.secondaryie.role.attribute?
8181    & db.common.attributes
8182    & db.linkends.attribute?
8183  db.secondaryie =
8184
8185    ## A secondary term in an index entry, rather than in the text
8186    element secondaryie { db.secondaryie.attlist, db.all.inlines* }
8187}
8188div {
8189  db.tertiaryie.role.attribute = attribute role { text }
8190  db.tertiaryie.attlist =
8191    db.tertiaryie.role.attribute?
8192    & db.common.attributes
8193    & db.linkends.attribute?
8194  db.tertiaryie =
8195
8196    ## A tertiary term in an index entry, rather than in the text
8197    element tertiaryie { db.tertiaryie.attlist, db.all.inlines* }
8198}
8199div {
8200  db.seeie.role.attribute = attribute role { text }
8201  db.seeie.attlist =
8202    db.seeie.role.attribute?
8203    & db.common.attributes
8204    & db.linkend.attribute?
8205  db.seeie =
8206
8207    ## A See
8208    ## entry in an index, rather than in the text
8209    element seeie { db.seeie.attlist, db.all.inlines* }
8210}
8211div {
8212  db.seealsoie.role.attribute = attribute role { text }
8213  db.seealsoie.attlist =
8214    db.seealsoie.role.attribute?
8215    & db.common.attributes
8216    & db.linkends.attribute?
8217  db.seealsoie =
8218
8219    ## A See also
8220    ##  entry in an index, rather than in the text
8221    element seealsoie { db.seealsoie.attlist, db.all.inlines* }
8222}
8223db.toc.pagenum.attribute =
8224
8225  ## Indicates the page on which this element occurs in some version of the printed document
8226  attribute pagenum { text }
8227div {
8228  db.toc.role.attribute = attribute role { text }
8229  db.toc.attlist =
8230    db.toc.role.attribute?
8231    & db.common.attributes
8232    & db.common.linking.attributes
8233  db.toc.info = db._info.title.only
8234  db.toc =
8235
8236    ## A table of contents
8237    [
8238      s:pattern [
8239        name = "Root must have version"
8240        "\x{a}" ~
8241        "          "
8242        s:rule [
8243          context = "/db:toc"
8244          "\x{a}" ~
8245          "            "
8246          s:assert [
8247            test = "@version"
8248            "The root element must have a version attribute."
8249          ]
8250          "\x{a}" ~
8251          "          "
8252        ]
8253        "\x{a}" ~
8254        "        "
8255      ]
8256    ]
8257    element toc {
8258      db.toc.attlist,
8259      db.toc.info,
8260      db.all.blocks*,
8261      (db.tocdiv | db.tocentry)*
8262    }
8263}
8264div {
8265  db.tocdiv.role.attribute = attribute role { text }
8266  db.tocdiv.pagenum.attribute = db.toc.pagenum.attribute
8267  db.tocdiv.attlist =
8268    db.tocdiv.role.attribute?
8269    & db.common.attributes
8270    & db.tocdiv.pagenum.attribute?
8271    & db.linkend.attribute?
8272  db.tocdiv.info = db._info
8273  db.tocdiv =
8274
8275    ## A division in a table of contents
8276    element tocdiv {
8277      db.tocdiv.attlist,
8278      db.tocdiv.info,
8279      db.all.blocks*,
8280      (db.tocdiv | db.tocentry)+
8281    }
8282}
8283div {
8284  db.tocentry.role.attribute = attribute role { text }
8285  db.tocentry.pagenum.attribute = db.toc.pagenum.attribute
8286  db.tocentry.attlist =
8287    db.tocentry.role.attribute?
8288    & db.common.attributes
8289    & db.tocentry.pagenum.attribute?
8290    & db.linkend.attribute?
8291  db.tocentry =
8292
8293    ## A component title in a table of contents
8294    element tocentry { db.tocentry.attlist, db.all.inlines* }
8295}
8296db.task.info = db._info.title.only
8297div {
8298  db.task.role.attribute = attribute role { text }
8299  db.task.attlist =
8300    db.task.role.attribute?
8301    & db.common.attributes
8302    & db.common.linking.attributes
8303  db.task =
8304
8305    ## A task to be completed
8306    element task {
8307      db.task.attlist,
8308      db.task.info,
8309      db.tasksummary?,
8310      db.taskprerequisites?,
8311      db.procedure,
8312      db.example*,
8313      db.taskrelated?
8314    }
8315}
8316div {
8317  db.tasksummary.role.attribute = attribute role { text }
8318  db.tasksummary.attlist =
8319    db.tasksummary.role.attribute?
8320    & db.common.attributes
8321    & db.common.linking.attributes
8322  db.tasksummary.info = db._info.title.only
8323  db.tasksummary =
8324
8325    ## A summary of a task
8326    element tasksummary {
8327      db.tasksummary.attlist, db.tasksummary.info, db.all.blocks+
8328    }
8329}
8330div {
8331  db.taskprerequisites.role.attribute = attribute role { text }
8332  db.taskprerequisites.attlist =
8333    db.taskprerequisites.role.attribute?
8334    & db.common.attributes
8335    & db.common.linking.attributes
8336  db.taskprerequisites.info = db._info.title.only
8337  db.taskprerequisites =
8338
8339    ## The prerequisites for a task
8340    element taskprerequisites {
8341      db.taskprerequisites.attlist,
8342      db.taskprerequisites.info,
8343      db.all.blocks+
8344    }
8345}
8346div {
8347  db.taskrelated.role.attribute = attribute role { text }
8348  db.taskrelated.attlist =
8349    db.taskrelated.role.attribute?
8350    & db.common.attributes
8351    & db.common.linking.attributes
8352  db.taskrelated.info = db._info.title.only
8353  db.taskrelated =
8354
8355    ## Information related to a task
8356    element taskrelated {
8357      db.taskrelated.attlist, db.taskrelated.info, db.all.blocks+
8358    }
8359}
8360db.area.units.enumeration =
8361
8362  ## Coordinates expressed as a pair of CALS graphic coordinates.
8363  "calspair"
8364  |
8365    ## Coordinates expressed as a line and column.
8366    "linecolumn"
8367  |
8368    ## Coordinates expressed as a pair of lines and columns.
8369    "linecolumnpair"
8370  |
8371    ## Coordinates expressed as a line range.
8372    "linerange"
8373db.area.units-enum.attribute =
8374
8375  ## Identifies the units used in the coords attribute The default units vary according to the type of callout specified: calspair
8376  ##  for graphics and linecolumn
8377  ##  for line-oriented elements.
8378  attribute units { db.area.units.enumeration }?
8379db.area.units-other.attributes =
8380
8381  ## Indicates that non-standard units are used for this area
8382  ## . In this case otherunits
8383  ##  must be specified.
8384  attribute units {
8385
8386    ## Coordinates expressed in some non-standard units.
8387    "other"
8388  }?,
8389
8390  ## Identifies the units used in the coords
8391  ##  attribute when the units
8392  ##  attribute is other
8393  ## . This attribute is forbidden otherwise.
8394  attribute otherunits { xsd:NMTOKEN }
8395db.area.units.attribute =
8396  db.area.units-enum.attribute | db.area.units-other.attributes
8397div {
8398  db.calloutlist.role.attribute = attribute role { text }
8399  db.calloutlist.attlist =
8400    db.calloutlist.role.attribute?
8401    & db.common.attributes
8402    & db.common.linking.attributes
8403  db.calloutlist.info = db._info.title.only
8404  db.calloutlist =
8405
8406    ## A list of callout
8407    ## s
8408    element calloutlist {
8409      db.calloutlist.attlist,
8410      db.calloutlist.info,
8411      db.all.blocks*,
8412      db.callout+
8413    }
8414}
8415div {
8416  db.callout.role.attribute = attribute role { text }
8417  db.callout.arearefs.attribute =
8418
8419    ## Identifies the areas described by this callout.
8420    attribute arearefs { xsd:IDREFS }
8421  db.callout.attlist =
8422    db.callout.role.attribute?
8423    & db.common.attributes
8424    & db.callout.arearefs.attribute
8425  db.callout =
8426
8427    ## A called out
8428    ##  description of a marked Area
8429    element callout { db.callout.attlist, db.all.blocks+ }
8430}
8431div {
8432  db.programlistingco.role.attribute = attribute role { text }
8433  db.programlistingco.attlist =
8434    db.programlistingco.role.attribute?
8435    & db.common.attributes
8436    & db.common.linking.attributes
8437  db.programlistingco.info = db._info.title.forbidden
8438  db.programlistingco =
8439
8440    ## A program listing with associated areas used in callouts
8441    element programlistingco {
8442      db.programlistingco.attlist,
8443      db.programlistingco.info,
8444      db.areaspec,
8445      db.programlisting,
8446      db.calloutlist*
8447    }
8448}
8449div {
8450  db.areaspec.role.attribute = attribute role { text }
8451  db.areaspec.attlist =
8452    db.areaspec.role.attribute?
8453    & db.common.attributes
8454    & db.common.linking.attributes
8455    & db.area.units.attribute
8456  db.areaspec =
8457
8458    ## A collection of regions in a graphic or code example
8459    element areaspec { db.areaspec.attlist, (db.area | db.areaset)+ }
8460}
8461div {
8462  db.area.role.attribute = attribute role { text }
8463  db.area.linkends.attribute =
8464
8465    ## Point to the callout
8466    ## s which refer to this area. (This provides bidirectional linking which may be useful in online presentation.)
8467    attribute linkends { xsd:IDREFS }
8468  db.area.label.attribute =
8469
8470    ## Specifies an identifying number or string that may be used in presentation. The area label might be drawn on top of the figure, for example, at the position indicated by the coords attribute.
8471    attribute label { text }
8472  db.area.coords.attribute =
8473
8474    ## Provides the coordinates of the area. The coordinates must be interpreted using the units
8475    ##  specified.
8476    attribute coords { text }
8477  db.area.attlist =
8478    db.area.role.attribute?
8479    & db.common.idreq.attributes
8480    & db.area.units.attribute
8481    & (db.area.linkends.attribute | db.href.attribute)?
8482    & db.area.label.attribute?
8483    & db.area.coords.attribute
8484  db.area =
8485
8486    ## A region defined for a Callout in a graphic or code example
8487    element area { db.area.attlist, db.alt? }
8488}
8489div {
8490  # The only difference is that xml:id is optional
8491  db.area.inareaset.attlist =
8492    db.area.role.attribute?
8493    & db.common.attributes
8494    & db.area.units.attribute
8495    & (db.area.linkends.attribute | db.href.attribute)?
8496    & db.area.label.attribute?
8497    & db.area.coords.attribute
8498  db.area.inareaset =
8499
8500    ## A region defined for a Callout in a graphic or code example
8501    element area { db.area.inareaset.attlist, db.alt? }
8502}
8503div {
8504  db.areaset.role.attribute = attribute role { text }
8505  db.areaset.linkends.attribute = db.linkends.attribute
8506  db.areaset.label.attribute = db.label.attribute
8507  db.areaset.attlist =
8508    db.areaset.role.attribute?
8509    & db.common.idreq.attributes
8510    & db.area.units.attribute
8511    & (db.areaset.linkends.attribute | db.href.attribute)?
8512    & db.areaset.label.attribute?
8513  db.areaset =
8514
8515    ## A set of related areas in a graphic or code example
8516    element areaset { db.areaset.attlist, db.area.inareaset+ }
8517}
8518div {
8519  db.screenco.role.attribute = attribute role { text }
8520  db.screenco.attlist =
8521    db.screenco.role.attribute?
8522    & db.common.attributes
8523    & db.common.linking.attributes
8524  db.screenco.info = db._info.title.forbidden
8525  db.screenco =
8526
8527    ## A screen with associated areas used in callouts
8528    element screenco {
8529      db.screenco.attlist,
8530      db.screenco.info,
8531      db.areaspec,
8532      db.screen,
8533      db.calloutlist*
8534    }
8535}
8536div {
8537  db.imageobjectco.role.attribute = attribute role { text }
8538  db.imageobjectco.attlist =
8539    db.imageobjectco.role.attribute?
8540    & db.common.attributes
8541    & db.common.linking.attributes
8542  db.imageobjectco.info = db._info.title.forbidden
8543  db.imageobjectco =
8544
8545    ## A wrapper for an image object with callouts
8546    element imageobjectco {
8547      db.imageobjectco.attlist,
8548      db.imageobjectco.info,
8549      db.areaspec,
8550      db.imageobject+,
8551      db.calloutlist*
8552    }
8553}
8554div {
8555  db.co.role.attribute = attribute role { text }
8556  db.co.linkends.attribute = db.linkends.attribute
8557  db.co.label.attribute = db.label.attribute
8558  db.co.attlist =
8559    db.co.role.attribute?
8560    & db.common.idreq.attributes
8561    & db.co.linkends.attribute?
8562    & db.co.label.attribute?
8563  db.co =
8564
8565    ## The location of a callout embedded in text
8566    element co { db.co.attlist, empty }
8567}
8568div {
8569  db.coref.role.attribute = attribute role { text }
8570  db.coref.label.attribute = db.label.attribute
8571  db.coref.attlist =
8572    db.coref.role.attribute?
8573    & db.common.attributes
8574    & db.linkend.attribute
8575    & db.coref.label.attribute?
8576  db.coref =
8577
8578    ## A cross reference to a co
8579    element coref { db.coref.attlist, empty }
8580}
8581div {
8582  db.productionset.role.attribute = attribute role { text }
8583  db.productionset.attlist =
8584    db.productionset.role.attribute?
8585    & db.common.attributes
8586    & db.common.linking.attributes
8587  db.productionset.info = db._info.title.only
8588  db.productionset =
8589
8590    ## A set of EBNF productions
8591    element productionset {
8592      db.productionset.attlist,
8593      db.productionset.info,
8594      (db.production | db.productionrecap)+
8595    }
8596}
8597div {
8598  db.production.role.attribute = attribute role { text }
8599  db.production.attlist =
8600    db.production.role.attribute?
8601    & db.common.idreq.attributes
8602    & db.common.linking.attributes
8603  db.production =
8604
8605    ## A production in a set of EBNF productions
8606    element production {
8607      db.production.attlist, db.lhs, db.rhs, db.constraint*
8608    }
8609}
8610div {
8611  db.lhs.role.attribute = attribute role { text }
8612  db.lhs.attlist =
8613    db.lhs.role.attribute?
8614    & db.common.attributes
8615    & db.common.linking.attributes
8616  db.lhs =
8617
8618    ## The left-hand side of an EBNF production
8619    element lhs { db.lhs.attlist, text }
8620}
8621div {
8622  db.rhs.role.attribute = attribute role { text }
8623  db.rhs.attlist =
8624    db.rhs.role.attribute?
8625    & db.common.attributes
8626    & db.common.linking.attributes
8627  db.rhs =
8628
8629    ## The right-hand side of an EBNF production
8630    element rhs {
8631      db.rhs.attlist,
8632      (text | db.nonterminal | db.lineannotation | db.sbr)*
8633    }
8634}
8635div {
8636  db.nonterminal.role.attribute = attribute role { text }
8637  db.nonterminal.def.attribute =
8638
8639    ## Specifies a URI that points to a production
8640    ## where the nonterminal
8641    ##  is defined
8642    attribute def { xsd:anyURI }
8643  db.nonterminal.attlist =
8644    db.nonterminal.role.attribute?
8645    & db.common.attributes
8646    & db.common.linking.attributes
8647    & db.nonterminal.def.attribute
8648  db.nonterminal =
8649
8650    ## A non-terminal in an EBNF production
8651    element nonterminal { db.nonterminal.attlist, text }
8652}
8653div {
8654  db.constraint.role.attribute = attribute role { text }
8655  db.constraint.attlist =
8656    db.constraint.role.attribute?
8657    & db.common.attributes
8658    & db.common.req.linking.attributes
8659  db.constraint =
8660
8661    ## A constraint in an EBNF production
8662    element constraint { db.constraint.attlist, empty }
8663}
8664div {
8665  db.productionrecap.role.attribute = attribute role { text }
8666  db.productionrecap.attlist =
8667    db.productionrecap.role.attribute?
8668    & db.common.attributes
8669    & db.common.req.linking.attributes
8670  db.productionrecap =
8671
8672    ## A cross-reference to an EBNF production
8673    element productionrecap { db.productionrecap.attlist, empty }
8674}
8675div {
8676  db.constraintdef.role.attribute = attribute role { text }
8677  db.constraintdef.attlist =
8678    db.constraintdef.role.attribute?
8679    & db.common.attributes
8680    & db.common.linking.attributes
8681  db.constraintdef.info = db._info.title.only
8682  db.constraintdef =
8683
8684    ## The definition of a constraint in an EBNF production
8685    element constraintdef {
8686      db.constraintdef.attlist, db.constraintdef.info, db.all.blocks+
8687    }
8688}
8689db.char.attribute =
8690
8691  ## Specifies the alignment character when align
8692  ##  is set to char
8693  ## .
8694  attribute char { text }
8695db.charoff.attribute =
8696
8697  ## Specifies the percentage of the column's total width that should appear to the left of the first occurance of the character identified in char
8698  ##  when align
8699  ##  is set to char
8700  ## .
8701  attribute charoff {
8702    xsd:decimal { minExclusive = "0" maxExclusive = "100" }
8703  }
8704db.frame.attribute =
8705
8706  ## Specifies how the table is to be framed. Note that there is no way to obtain a border on only the starting edge (left, in left-to-right writing systems) of the table.
8707  attribute frame {
8708
8709    ## Frame all four sides of the table. In some environments with limited control over table border formatting, such as HTML, this may imply additional borders.
8710    "all"
8711    |
8712      ## Frame only the bottom of the table.
8713      "bottom"
8714    |
8715      ## Place no border on the table. In some environments with limited control over table border formatting, such as HTML, this may disable other borders as well.
8716      "none"
8717    |
8718      ## Frame the left and right sides of the table.
8719      "sides"
8720    |
8721      ## Frame the top of the table.
8722      "top"
8723    |
8724      ## Frame the top and bottom of the table.
8725      "topbot"
8726  }
8727db.colsep.attribute =
8728
8729  ## Specifies the presence or absence of the column separator
8730  attribute colsep {
8731
8732    ## No column separator rule.
8733    "0"
8734    |
8735      ## Provide a column separator rule on the right
8736      "1"
8737  }
8738db.rowsep.attribute =
8739
8740  ## Specifies the presence or absence of the row separator
8741  attribute rowsep {
8742
8743    ## No row separator rule.
8744    "0"
8745    |
8746      ## Provide a row separator rule below
8747      "1"
8748  }
8749db.orient.attribute =
8750
8751  ## Specifies the orientation of the table
8752  attribute orient {
8753
8754    ## 90 degrees counter-clockwise from the rest of the text flow.
8755    "land"
8756    |
8757      ## The same orientation as the rest of the text flow.
8758      "port"
8759  }
8760db.tabstyle.attribute =
8761
8762  ## Specifies the table style
8763  attribute tabstyle { text }
8764db.rowheader.attribute =
8765
8766  ## Indicates whether or not the entries in the first column should be considered row headers
8767  attribute rowheader {
8768
8769    ## Indicates that entries in the first column of the table are functionally row headers (analogous to the way that a thead provides column headers).
8770    "firstcol"
8771    |
8772      ## Indicates that entries in the first column have no special significance with respect to column headers.
8773      "norowheader"
8774  }
8775db.align.attribute =
8776
8777  ## Specifies the horizontal alignment of text in an entry.
8778  attribute align {
8779
8780    ## Centered.
8781    "center"
8782    |
8783      ## Aligned on a particular character.
8784      "char"
8785    |
8786      ## Left and right justified.
8787      "justify"
8788    |
8789      ## Left justified.
8790      "left"
8791    |
8792      ## Right justified.
8793      "right"
8794  }
8795db.valign.attribute =
8796
8797  ## Specifies the vertical alignment of text in an entry.
8798  attribute valign {
8799
8800    ## Aligned on the bottom of the entry.
8801    "bottom"
8802    |
8803      ## Aligned in the middle.
8804      "middle"
8805    |
8806      ## Aligned at the top of the entry.
8807      "top"
8808  }
8809db.specify-col-by-colname.attributes =
8810
8811  ## Specifies a column specification by name.
8812  attribute colname { text }
8813db.specify-col-by-namest.attributes =
8814
8815  ## Specifies a starting column by name.
8816  attribute namest { text }
8817db.specify-span-by-spanspec.attributes =
8818
8819  ## Specifies a span by name.
8820  attribute spanname { text }
8821db.specify-span-directly.attributes =
8822
8823  ## Specifies a starting column by name.
8824  attribute namest { text }
8825  &
8826    ## Specifies an ending column by name.
8827    attribute nameend { text }
8828db.column-spec.attributes =
8829  db.specify-col-by-colname.attributes
8830  | db.specify-col-by-namest.attributes
8831  | db.specify-span-by-spanspec.attributes
8832  | db.specify-span-directly.attributes
8833db.colname.attribute =
8834
8835  ## Provides a name for a column specification.
8836  attribute colname { text }
8837db.spanname.attribute =
8838
8839  ## Provides a name for a span specification.
8840  attribute spanname { text }
8841div {
8842  db.tgroup.role.attribute = attribute role { text }
8843  db.tgroup.tgroupstyle.attribute =
8844
8845    ## Additional style information for downstream processing; typically the name of a style.
8846    attribute tgroupstyle { text }
8847  db.tgroup.cols.attribute =
8848
8849    ## The number of columns in the table. Must be an integer greater than zero.
8850    attribute cols { xsd:positiveInteger }
8851  db.tgroup.attlist =
8852    db.tgroup.role.attribute?
8853    & db.common.attributes
8854    & db.common.linking.attributes
8855    & db.char.attribute?
8856    & db.charoff.attribute?
8857    & db.tgroup.tgroupstyle.attribute?
8858    & db.tgroup.cols.attribute
8859    & db.colsep.attribute?
8860    & db.rowsep.attribute?
8861    & db.align.attribute?
8862  db.tgroup =
8863
8864    ## A wrapper for the main content of a table, or part of a table
8865    element tgroup {
8866      db.tgroup.attlist,
8867      db.colspec*,
8868      db.spanspec*,
8869      db.cals.thead?,
8870      db.cals.tfoot?,
8871      db.cals.tbody
8872    }
8873}
8874div {
8875  db.colspec.role.attribute = attribute role { text }
8876  db.colspec.colnum.attribute =
8877
8878    ## The number of the column to which this specification applies. Must be greater than any preceding column number. Defaults to one more than the number of the preceding column, if there is one, or one.
8879    attribute colnum { xsd:positiveInteger }
8880  db.colspec.colwidth.attribute =
8881
8882    ## Specifies the width of the column.
8883    attribute colwidth { text }
8884  db.colspec.attlist =
8885    db.colspec.role.attribute?
8886    & db.common.attributes
8887    & db.common.linking.attributes
8888    & db.colspec.colnum.attribute?
8889    & db.char.attribute?
8890    & db.colsep.attribute?
8891    & db.colspec.colwidth.attribute?
8892    & db.charoff.attribute?
8893    & db.colname.attribute?
8894    & db.rowsep.attribute?
8895    & db.align.attribute?
8896  db.colspec =
8897
8898    ## Specifications for a column in a table
8899    element colspec { db.colspec.attlist, empty }
8900}
8901div {
8902  db.spanspec.role.attribute = attribute role { text }
8903  db.spanspec.namest.attribute =
8904
8905    ## Specifies a starting column by name.
8906    attribute namest { text }
8907  db.spanspec.nameend.attribute =
8908
8909    ## Specifies an ending column by name.
8910    attribute nameend { text }
8911  db.spanspec.attlist =
8912    db.spanspec.role.attribute?
8913    & db.common.attributes
8914    & db.common.linking.attributes
8915    & db.spanname.attribute
8916    & db.spanspec.namest.attribute
8917    & db.spanspec.nameend.attribute
8918    & db.char.attribute?
8919    & db.colsep.attribute?
8920    & db.charoff.attribute?
8921    & db.rowsep.attribute?
8922    & db.align.attribute?
8923  db.spanspec =
8924
8925    ## Formatting information for a spanned column in a table
8926    element spanspec { db.spanspec.attlist, empty }
8927}
8928div {
8929  db.cals.thead.role.attribute = attribute role { text }
8930  db.cals.thead.attlist =
8931    db.cals.thead.role.attribute?
8932    & db.common.attributes
8933    & db.common.linking.attributes
8934    & db.valign.attribute?
8935  db.cals.thead =
8936
8937    ## A table header consisting of one or more rows
8938    element thead { db.cals.thead.attlist, db.colspec*, db.row+ }
8939}
8940div {
8941  db.cals.tfoot.role.attribute = attribute role { text }
8942  db.cals.tfoot.attlist =
8943    db.cals.tfoot.role.attribute?
8944    & db.common.attributes
8945    & db.common.linking.attributes
8946    & db.valign.attribute?
8947  db.cals.tfoot =
8948
8949    ## A table footer consisting of one or more rows
8950    element tfoot { db.cals.tfoot.attlist, db.colspec*, db.row+ }
8951}
8952div {
8953  db.cals.tbody.role.attribute = attribute role { text }
8954  db.cals.tbody.attlist =
8955    db.cals.tbody.role.attribute?
8956    & db.common.attributes
8957    & db.common.linking.attributes
8958    & db.valign.attribute?
8959  db.cals.tbody =
8960
8961    ## A wrapper for the rows of a table or informal table
8962    element tbody { db.cals.tbody.attlist, db.row+ }
8963}
8964div {
8965  db.row.role.attribute = attribute role { text }
8966  db.row.attlist =
8967    db.row.role.attribute?
8968    & db.common.attributes
8969    & db.common.linking.attributes
8970    & db.rowsep.attribute?
8971    & db.valign.attribute?
8972  db.row =
8973
8974    ## A row in a table
8975    element row { db.row.attlist, (db.entry | db.entrytbl)+ }
8976}
8977div {
8978  db.entry.role.attribute = attribute role { text }
8979  db.entry.morerows.attribute =
8980
8981    ## Specifies the number of additional rows which this entry occupies. Defaults to zero.
8982    attribute morerows { xsd:integer }
8983  db.entry.rotate.attribute =
8984
8985    ## Specifies the rotation of this entry. A value of 1 (true) rotates the cell 90 degrees counter-clockwise. A value of 0 (false) leaves the cell unrotated.
8986    attribute rotate {
8987
8988      ## Do not rotate the cell.
8989      "0"
8990      |
8991        ## Rotate the cell 90 degrees counter-clockwise.
8992        "1"
8993    }
8994  db.entry.attlist =
8995    db.entry.role.attribute?
8996    & db.common.attributes
8997    & db.common.linking.attributes
8998    & db.valign.attribute?
8999    & db.char.attribute?
9000    & db.colsep.attribute?
9001    & db.charoff.attribute?
9002    & db.entry.morerows.attribute?
9003    & db.column-spec.attributes?
9004    & db.rowsep.attribute?
9005    & db.entry.rotate.attribute?
9006    & db.align.attribute?
9007  db.entry =
9008
9009    ## A cell in a table
9010    element entry {
9011      db.entry.attlist, (db.all.inlines* | db.all.blocks*)
9012    }
9013}
9014div {
9015  db.entrytbl.role.attribute = attribute role { text }
9016  db.entrytbl.tgroupstyle.attribute =
9017
9018    ## Additional style information for downstream processing; typically the name of a style.
9019    attribute tgroupstyle { text }
9020  db.entrytbl.cols.attribute =
9021
9022    ## The number of columns in the entry table. Must be an integer greater than zero.
9023    attribute cols { xsd:positiveInteger }
9024  db.entrytbl.attlist =
9025    db.entrytbl.role.attribute?
9026    & db.common.attributes
9027    & db.common.linking.attributes
9028    & db.char.attribute?
9029    & db.charoff.attribute?
9030    & db.column-spec.attributes?
9031    & db.entrytbl.tgroupstyle.attribute?
9032    & db.entrytbl.cols.attribute?
9033    & db.colsep.attribute?
9034    & db.rowsep.attribute?
9035    & db.align.attribute?
9036  db.entrytbl =
9037
9038    ## A subtable appearing in place of an Entry in a table
9039    element entrytbl {
9040      db.entrytbl.attlist,
9041      db.colspec*,
9042      db.spanspec*,
9043      db.cals.entrytbl.thead?,
9044      db.cals.entrytbl.tbody
9045    }
9046}
9047div {
9048  db.cals.entrytbl.thead.role.attribute = attribute role { text }
9049  db.cals.entrytbl.thead.attlist =
9050    db.cals.entrytbl.thead.role.attribute?
9051    & db.common.attributes
9052    & db.common.linking.attributes
9053    & db.valign.attribute?
9054  db.cals.entrytbl.thead =
9055
9056    ## A table header consisting of one or more rows
9057    element thead {
9058      db.cals.entrytbl.thead.attlist, db.colspec*, db.entrytbl.row+
9059    }
9060}
9061div {
9062  db.cals.entrytbl.tbody.role.attribute = attribute role { text }
9063  db.cals.entrytbl.tbody.attlist =
9064    db.cals.entrytbl.tbody.role.attribute?
9065    & db.common.attributes
9066    & db.common.linking.attributes
9067    & db.valign.attribute?
9068  db.cals.entrytbl.tbody =
9069
9070    ## A wrapper for the rows of a table or informal table
9071    element tbody { db.cals.entrytbl.tbody.attlist, db.entrytbl.row+ }
9072}
9073div {
9074  db.entrytbl.row.role.attribute = attribute role { text }
9075  db.entrytbl.row.attlist =
9076    db.entrytbl.row.role.attribute?
9077    & db.common.attributes
9078    & db.common.linking.attributes
9079    & db.rowsep.attribute?
9080    & db.valign.attribute?
9081  db.entrytbl.row =
9082
9083    ## A row in a table
9084    element row { db.entrytbl.row.attlist, db.entry+ }
9085}
9086div {
9087  db.cals.table.role.attribute = attribute role { text }
9088  db.cals.table.attlist =
9089    db.cals.table.role.attribute?
9090    & db.common.attributes
9091    & db.common.linking.attributes
9092    & db.tabstyle.attribute?
9093    & db.floatstyle.attribute?
9094    & db.orient.attribute?
9095    & db.colsep.attribute?
9096    & db.rowsep.attribute?
9097    & db.frame.attribute?
9098    & db.pgwide.attribute?
9099    &
9100      ## Indicates if the short or long title should be used in a List of Tables
9101      attribute shortentry {
9102
9103        ## Indicates that the full title should be used.
9104        "0"
9105        |
9106          ## Indicates that the short short title (titleabbrev) should be used.
9107          "1"
9108      }?
9109    &
9110      ## Indicates if the table should appear in a List of Tables
9111      attribute tocentry {
9112
9113        ## Indicates that the table should not occur in the List of Tables.
9114        "0"
9115        |
9116          ## Indicates that the table should appear in the List of Tables.
9117          "1"
9118      }?
9119    & db.rowheader.attribute?
9120  db.cals.table.info = db._info.title.onlyreq
9121  db.cals.table =
9122
9123    ## A formal table in a document
9124    [
9125      s:pattern [
9126        name = "Element exclusion"
9127        "\x{a}" ~
9128        "          "
9129        s:rule [
9130          context = "db:table"
9131          "\x{a}" ~
9132          "            "
9133          s:assert [
9134            test = "not(.//db:example)"
9135            "example must not occur in the descendants of table"
9136          ]
9137          "\x{a}" ~
9138          "          "
9139        ]
9140        "\x{a}" ~
9141        "        "
9142      ]
9143      s:pattern [
9144        name = "Element exclusion"
9145        "\x{a}" ~
9146        "          "
9147        s:rule [
9148          context = "db:table"
9149          "\x{a}" ~
9150          "            "
9151          s:assert [
9152            test = "not(.//db:figure)"
9153            "figure must not occur in the descendants of table"
9154          ]
9155          "\x{a}" ~
9156          "          "
9157        ]
9158        "\x{a}" ~
9159        "        "
9160      ]
9161      s:pattern [
9162        name = "Element exclusion"
9163        "\x{a}" ~
9164        "          "
9165        s:rule [
9166          context = "db:table"
9167          "\x{a}" ~
9168          "            "
9169          s:assert [
9170            test = "not(.//db:table)"
9171            "table must not occur in the descendants of table"
9172          ]
9173          "\x{a}" ~
9174          "          "
9175        ]
9176        "\x{a}" ~
9177        "        "
9178      ]
9179      s:pattern [
9180        name = "Element exclusion"
9181        "\x{a}" ~
9182        "          "
9183        s:rule [
9184          context = "db:table"
9185          "\x{a}" ~
9186          "            "
9187          s:assert [
9188            test = "not(.//db:table)"
9189            "table must not occur in the descendants of table"
9190          ]
9191          "\x{a}" ~
9192          "          "
9193        ]
9194        "\x{a}" ~
9195        "        "
9196      ]
9197      s:pattern [
9198        name = "Element exclusion"
9199        "\x{a}" ~
9200        "          "
9201        s:rule [
9202          context = "db:table"
9203          "\x{a}" ~
9204          "            "
9205          s:assert [
9206            test = "not(.//db:caution)"
9207            "caution must not occur in the descendants of table"
9208          ]
9209          "\x{a}" ~
9210          "          "
9211        ]
9212        "\x{a}" ~
9213        "        "
9214      ]
9215      s:pattern [
9216        name = "Element exclusion"
9217        "\x{a}" ~
9218        "          "
9219        s:rule [
9220          context = "db:table"
9221          "\x{a}" ~
9222          "            "
9223          s:assert [
9224            test = "not(.//db:important)"
9225            "important must not occur in the descendants of table"
9226          ]
9227          "\x{a}" ~
9228          "          "
9229        ]
9230        "\x{a}" ~
9231        "        "
9232      ]
9233      s:pattern [
9234        name = "Element exclusion"
9235        "\x{a}" ~
9236        "          "
9237        s:rule [
9238          context = "db:table"
9239          "\x{a}" ~
9240          "            "
9241          s:assert [
9242            test = "not(.//db:note)"
9243            "note must not occur in the descendants of table"
9244          ]
9245          "\x{a}" ~
9246          "          "
9247        ]
9248        "\x{a}" ~
9249        "        "
9250      ]
9251      s:pattern [
9252        name = "Element exclusion"
9253        "\x{a}" ~
9254        "          "
9255        s:rule [
9256          context = "db:table"
9257          "\x{a}" ~
9258          "            "
9259          s:assert [
9260            test = "not(.//db:tip)"
9261            "tip must not occur in the descendants of table"
9262          ]
9263          "\x{a}" ~
9264          "          "
9265        ]
9266        "\x{a}" ~
9267        "        "
9268      ]
9269      s:pattern [
9270        name = "Element exclusion"
9271        "\x{a}" ~
9272        "          "
9273        s:rule [
9274          context = "db:table"
9275          "\x{a}" ~
9276          "            "
9277          s:assert [
9278            test = "not(.//db:warning)"
9279            "warning must not occur in the descendants of table"
9280          ]
9281          "\x{a}" ~
9282          "          "
9283        ]
9284        "\x{a}" ~
9285        "        "
9286      ]
9287      s:pattern [
9288        name = "Element exclusion"
9289        "\x{a}" ~
9290        "          "
9291        s:rule [
9292          context = "db:table"
9293          "\x{a}" ~
9294          "            "
9295          s:assert [
9296            test = "not(.//db:table)"
9297            "table must not occur in the descendants of table"
9298          ]
9299          "\x{a}" ~
9300          "          "
9301        ]
9302        "\x{a}" ~
9303        "        "
9304      ]
9305      s:pattern [
9306        name = "Element exclusion"
9307        "\x{a}" ~
9308        "          "
9309        s:rule [
9310          context = "db:table"
9311          "\x{a}" ~
9312          "            "
9313          s:assert [
9314            test = "not(.//db:informaltable)"
9315            "informaltable must not occur in the descendants of table"
9316          ]
9317          "\x{a}" ~
9318          "          "
9319        ]
9320        "\x{a}" ~
9321        "        "
9322      ]
9323    ]
9324    element table {
9325      db.cals.table.attlist,
9326      db.cals.table.info,
9327      (db.alt? & db.indexing.inlines* & db.textobject*),
9328      (db.mediaobject+ | db.tgroup+),
9329      db.caption?
9330    }
9331}
9332div {
9333  db.cals.informaltable.role.attribute = attribute role { text }
9334  db.cals.informaltable.attlist =
9335    db.cals.informaltable.role.attribute?
9336    & db.common.attributes
9337    & db.common.linking.attributes
9338    & db.tabstyle.attribute?
9339    & db.floatstyle.attribute?
9340    & db.orient.attribute?
9341    & db.colsep.attribute?
9342    & db.rowsep.attribute?
9343    & db.frame.attribute?
9344    & db.pgwide.attribute?
9345    & db.rowheader.attribute?
9346  db.cals.informaltable.info = db._info.title.forbidden
9347  db.cals.informaltable =
9348
9349    ## A table without a title
9350    element informaltable {
9351      db.cals.informaltable.attlist,
9352      db.cals.informaltable.info,
9353      (db.alt? & db.indexing.inlines* & db.textobject*),
9354      (db.mediaobject+ | db.tgroup+),
9355      db.caption?
9356    }
9357}
9358db.html.coreattrs =
9359
9360  ## This attribute assigns a class name or set of class names to an element. Any number of elements may be assigned the same class name or names. Multiple class names must be separated by white space characters.
9361  attribute class { text }?
9362  &
9363    ## This attribute specifies style information for the current element.
9364    attribute style { text }?
9365  &
9366    ## This attribute offers advisory information about the element for which it is set.
9367    attribute title { text }?
9368db.html.i18n =
9369
9370  ## This attribute specifies the base language of an element's attribute values and text content. The default value of this attribute is unknown.
9371  attribute lang { text }?
9372db.html.events =
9373
9374  ## Occurs when the pointing device button is clicked over an element.
9375  attribute onclick { text }?
9376  &
9377    ## Occurs when the pointing device button is double clicked over an element.
9378    attribute ondblclick { text }?
9379  &
9380    ## Occurs when the pointing device button is pressed over an element.
9381    attribute onmousedown { text }?
9382  &
9383    ## Occurs when the pointing device button is released over an element.
9384    attribute onmouseup { text }?
9385  &
9386    ## Occurs when the pointing device is moved onto an element.
9387    attribute onmouseover { text }?
9388  &
9389    ## Occurs when the pointing device is moved while it is over an element.
9390    attribute onmousemove { text }?
9391  &
9392    ## Occurs when the pointing device is moved away from an element.
9393    attribute onmouseout { text }?
9394  &
9395    ## Occurs when a key is pressed and released over an element.
9396    attribute onkeypress { text }?
9397  &
9398    ## Occurs when a key is pressed down over an element.
9399    attribute onkeydown { text }?
9400  &
9401    ## Occurs when a key is released over an element.
9402    attribute onkeyup { text }?
9403db.html.attrs =
9404  db.common.attributes
9405  & db.html.coreattrs
9406  & db.html.i18n
9407  & db.html.events
9408db.html.cellhalign =
9409
9410  ## Specifies the alignment of data and the justification of text in a cell.
9411  attribute align {
9412
9413    ## Left-flush data/Left-justify text. This is the default value for table data.
9414    "left"
9415    |
9416      ## Center data/Center-justify text. This is the default value for table headers.
9417      "center"
9418    |
9419      ## Right-flush data/Right-justify text.
9420      "right"
9421    |
9422      ## Double-justify text.
9423      "justify"
9424    |
9425      ## Align text around a specific character. If a user agent doesn't support character alignment, behavior in the presence of this value is unspecified.
9426      "char"
9427  }?
9428  &
9429    ## This attribute specifies a single character within a text fragment to act as an axis for alignment. The default value for this attribute is the decimal point character for the current language as set by the lang attribute (e.g., the period in English and the comma in French). User agents are not required to support this attribute.
9430    attribute char { text }?
9431  &
9432    ## When present, this attribute specifies the offset to the first occurrence of the alignment character on each line. If a line doesn't include the alignment character, it should be horizontally shifted to end at the alignment position. When charoff is used to set the offset of an alignment character, the direction of offset is determined by the current text direction (set by the dir attribute). In left-to-right texts (the default), offset is from the left margin. In right-to-left texts, offset is from the right margin. User agents are not required to support this attribute.
9433    attribute charoff {
9434      xsd:integer
9435      | xsd:string { pattern = "[0-9]+%" }
9436    }?
9437db.html.cellvalign =
9438
9439  ## Specifies the vertical position of data within a cell.
9440  attribute valign {
9441
9442    ## Cell data is flush with the top of the cell.
9443    "top"
9444    |
9445      ## Cell data is centered vertically within the cell. This is the default value.
9446      "middle"
9447    |
9448      ## Cell data is flush with the bottom of the cell.
9449      "bottom"
9450    |
9451      ## All cells in the same row as a cell whose valign attribute has this value should have their textual data positioned so that the first text line occurs on a baseline common to all cells in the row. This constraint does not apply to subsequent text lines in these cells.
9452      "baseline"
9453  }?
9454db.html.table.attributes =
9455
9456  ## Provides a summary of the table's purpose and structure for user agents rendering to non-visual media such as speech and Braille.
9457  attribute summary { text }?
9458  &
9459    ## Specifies the desired width of the entire table and is intended for visual user agents. When the value is a percentage value, the value is relative to the user agent's available horizontal space. In the absence of any width specification, table width is determined by the user agent.
9460    attribute width {
9461      xsd:integer
9462      | xsd:string { pattern = "[0-9]+%" }
9463    }?
9464  &
9465    ## Specifies the width (in pixels only) of the frame around a table.
9466    attribute border { xsd:nonNegativeInteger }?
9467  &
9468    ## Specifies which sides of the frame surrounding a table will be visible.
9469    attribute frame {
9470
9471      ## No sides. This is the default value.
9472      "void"
9473      |
9474        ## The top side only.
9475        "above"
9476      |
9477        ## The bottom side only.
9478        "below"
9479      |
9480        ## The top and bottom sides only.
9481        "hsides"
9482      |
9483        ## The left-hand side only.
9484        "lhs"
9485      |
9486        ## The right-hand side only.
9487        "rhs"
9488      |
9489        ## The right and left sides only.
9490        "vsides"
9491      |
9492        ## All four sides.
9493        "box"
9494      |
9495        ## All four sides.
9496        "border"
9497    }?
9498  &
9499    ## Specifies which rules will appear between cells within a table. The rendering of rules is user agent dependent.
9500    attribute rules {
9501
9502      ## No rules. This is the default value.
9503      "none"
9504      |
9505        ## Rules will appear between row groups (see thead, tfoot, and tbody) and column groups (see colgroup and col) only.
9506        "groups"
9507      |
9508        ## Rules will appear between rows only.
9509        "rows"
9510      |
9511        ## Rules will appear between columns only.
9512        "cols"
9513      |
9514        ## Rules will appear between all rows and columns.
9515        "all"
9516    }?
9517  &
9518    ## Specifies how much space the user agent should leave between the left side of the table and the left-hand side of the leftmost column, the top of the table and the top side of the topmost row, and so on for the right and bottom of the table. The attribute also specifies the amount of space to leave between cells.
9519    attribute cellspacing {
9520      xsd:integer
9521      | xsd:string { pattern = "[0-9]+%" }
9522    }?
9523  &
9524    ## Specifies the amount of space between the border of the cell and its contents. If the value of this attribute is a pixel length, all four margins should be this distance from the contents. If the value of the attribute is a percentage length, the top and bottom margins should be equally separated from the content based on a percentage of the available vertical space, and the left and right margins should be equally separated from the content based on a percentage of the available horizontal space.
9525    attribute cellpadding {
9526      xsd:integer
9527      | xsd:string { pattern = "[0-9]+%" }
9528    }?
9529db.html.tablecell.attributes =
9530
9531  ## Provides an abbreviated form of the cell's content and may be rendered by user agents when appropriate in place of the cell's content. Abbreviated names should be short since user agents may render them repeatedly. For instance, speech synthesizers may render the abbreviated headers relating to a particular cell before rendering that cell's content.
9532  attribute abbr { text }?
9533  &
9534    ## This attribute may be used to place a cell into conceptual categories that can be considered to form axes in an n-dimensional space. User agents may give users access to these categories (e.g., the user may query the user agent for all cells that belong to certain categories, the user agent may present a table in the form of a table of contents, etc.). Please consult an HTML reference for more details.
9535    attribute axis { text }?
9536  &
9537    ## Specifies the list of header cells that provide header information for the current data cell. The value of this attribute is a space-separated list of cell names; those cells must be named by setting their id attribute. Authors generally use the headers attribute to help non-visual user agents render header information about data cells (e.g., header information is spoken prior to the cell data), but the attribute may also be used in conjunction with style sheets.
9538    attribute headers { text }?
9539  &
9540    ## Specifies the set of data cells for which the current header cell provides header information. This attribute may be used in place of the headers attribute, particularly for simple tables.
9541    attribute scope {
9542
9543      ## The current cell provides header information for the rest of the row that contains it
9544      "row"
9545      |
9546        ## The current cell provides header information for the rest of the column that contains it.
9547        "col"
9548      |
9549        ## The header cell provides header information for the rest of the row group that contains it.
9550        "rowgroup"
9551      |
9552        ## The header cell provides header information for the rest of the column group that contains it.
9553        "colgroup"
9554    }?
9555  &
9556    ## Specifies the number of rows spanned by the current cell. The default value of this attribute is one (1
9557    ## ). The value zero (0
9558    ## ) means that the cell spans all rows from the current row to the last row of the table section (thead
9559    ## , tbody
9560    ## , or tfoot
9561    ## ) in which the cell is defined.
9562    attribute rowspan { xsd:nonNegativeInteger }?
9563  &
9564    ## Specifies the number of columns spanned by the current cell. The default value of this attribute is one (1
9565    ## ). The value zero (0
9566    ## ) means that the cell spans all columns from the current column to the last column of the column group (colgroup
9567    ## ) in which the cell is defined.
9568    attribute colspan { xsd:nonNegativeInteger }?
9569db.html.table.model =
9570  db.html.caption,
9571  (db.html.col* | db.html.colgroup*),
9572  db.html.thead?,
9573  db.html.tfoot?,
9574  (db.html.tbody+ | db.html.tr+)
9575db.html.informaltable.model =
9576  (db.html.col* | db.html.colgroup*),
9577  db.html.thead?,
9578  db.html.tfoot?,
9579  (db.html.tbody+ | db.html.tr+)
9580div {
9581  db.html.table.attlist =
9582    db.html.attrs
9583    & db.html.table.attributes
9584    & db.orient.attribute?
9585    & db.pgwide.attribute?
9586    & db.tabstyle.attribute?
9587    & db.floatstyle.attribute?
9588  db.html.table =
9589
9590    ## A formal (captioned) HTML table in a document
9591    [
9592      s:pattern [
9593        name = "Element exclusion"
9594        "\x{a}" ~
9595        "          "
9596        s:rule [
9597          context = "db:table"
9598          "\x{a}" ~
9599          "            "
9600          s:assert [
9601            test = "not(.//db:example)"
9602            "example must not occur in the descendants of table"
9603          ]
9604          "\x{a}" ~
9605          "          "
9606        ]
9607        "\x{a}" ~
9608        "        "
9609      ]
9610      s:pattern [
9611        name = "Element exclusion"
9612        "\x{a}" ~
9613        "          "
9614        s:rule [
9615          context = "db:table"
9616          "\x{a}" ~
9617          "            "
9618          s:assert [
9619            test = "not(.//db:figure)"
9620            "figure must not occur in the descendants of table"
9621          ]
9622          "\x{a}" ~
9623          "          "
9624        ]
9625        "\x{a}" ~
9626        "        "
9627      ]
9628      s:pattern [
9629        name = "Element exclusion"
9630        "\x{a}" ~
9631        "          "
9632        s:rule [
9633          context = "db:table"
9634          "\x{a}" ~
9635          "            "
9636          s:assert [
9637            test = "not(.//db:table)"
9638            "table must not occur in the descendants of table"
9639          ]
9640          "\x{a}" ~
9641          "          "
9642        ]
9643        "\x{a}" ~
9644        "        "
9645      ]
9646      s:pattern [
9647        name = "Element exclusion"
9648        "\x{a}" ~
9649        "          "
9650        s:rule [
9651          context = "db:table"
9652          "\x{a}" ~
9653          "            "
9654          s:assert [
9655            test = "not(.//db:table)"
9656            "table must not occur in the descendants of table"
9657          ]
9658          "\x{a}" ~
9659          "          "
9660        ]
9661        "\x{a}" ~
9662        "        "
9663      ]
9664      s:pattern [
9665        name = "Element exclusion"
9666        "\x{a}" ~
9667        "          "
9668        s:rule [
9669          context = "db:table"
9670          "\x{a}" ~
9671          "            "
9672          s:assert [
9673            test = "not(.//db:caution)"
9674            "caution must not occur in the descendants of table"
9675          ]
9676          "\x{a}" ~
9677          "          "
9678        ]
9679        "\x{a}" ~
9680        "        "
9681      ]
9682      s:pattern [
9683        name = "Element exclusion"
9684        "\x{a}" ~
9685        "          "
9686        s:rule [
9687          context = "db:table"
9688          "\x{a}" ~
9689          "            "
9690          s:assert [
9691            test = "not(.//db:important)"
9692            "important must not occur in the descendants of table"
9693          ]
9694          "\x{a}" ~
9695          "          "
9696        ]
9697        "\x{a}" ~
9698        "        "
9699      ]
9700      s:pattern [
9701        name = "Element exclusion"
9702        "\x{a}" ~
9703        "          "
9704        s:rule [
9705          context = "db:table"
9706          "\x{a}" ~
9707          "            "
9708          s:assert [
9709            test = "not(.//db:note)"
9710            "note must not occur in the descendants of table"
9711          ]
9712          "\x{a}" ~
9713          "          "
9714        ]
9715        "\x{a}" ~
9716        "        "
9717      ]
9718      s:pattern [
9719        name = "Element exclusion"
9720        "\x{a}" ~
9721        "          "
9722        s:rule [
9723          context = "db:table"
9724          "\x{a}" ~
9725          "            "
9726          s:assert [
9727            test = "not(.//db:tip)"
9728            "tip must not occur in the descendants of table"
9729          ]
9730          "\x{a}" ~
9731          "          "
9732        ]
9733        "\x{a}" ~
9734        "        "
9735      ]
9736      s:pattern [
9737        name = "Element exclusion"
9738        "\x{a}" ~
9739        "          "
9740        s:rule [
9741          context = "db:table"
9742          "\x{a}" ~
9743          "            "
9744          s:assert [
9745            test = "not(.//db:warning)"
9746            "warning must not occur in the descendants of table"
9747          ]
9748          "\x{a}" ~
9749          "          "
9750        ]
9751        "\x{a}" ~
9752        "        "
9753      ]
9754      s:pattern [
9755        name = "Element exclusion"
9756        "\x{a}" ~
9757        "          "
9758        s:rule [
9759          context = "db:table"
9760          "\x{a}" ~
9761          "            "
9762          s:assert [
9763            test = "not(.//db:table)"
9764            "table must not occur in the descendants of table"
9765          ]
9766          "\x{a}" ~
9767          "          "
9768        ]
9769        "\x{a}" ~
9770        "        "
9771      ]
9772      s:pattern [
9773        name = "Element exclusion"
9774        "\x{a}" ~
9775        "          "
9776        s:rule [
9777          context = "db:table"
9778          "\x{a}" ~
9779          "            "
9780          s:assert [
9781            test = "not(.//db:informaltable)"
9782            "informaltable must not occur in the descendants of table"
9783          ]
9784          "\x{a}" ~
9785          "          "
9786        ]
9787        "\x{a}" ~
9788        "        "
9789      ]
9790    ]
9791    element table { db.html.table.attlist, db.html.table.model }
9792}
9793div {
9794  db.html.informaltable.attlist =
9795    db.html.attrs & db.html.table.attributes
9796  db.html.informaltable =
9797
9798    ## An HTML table without a title
9799    element informaltable {
9800      db.html.informaltable.attlist, db.html.informaltable.model
9801    }
9802}
9803div {
9804  db.html.caption.attlist = db.html.attrs
9805  db.html.caption =
9806
9807    ## An HTML table caption
9808    [
9809      s:pattern [
9810        name = "Element exclusion"
9811        "\x{a}" ~
9812        "          "
9813        s:rule [
9814          context = "db:caption"
9815          "\x{a}" ~
9816          "            "
9817          s:assert [
9818            test = "not(.//db:example)"
9819            "example must not occur in the descendants of caption"
9820          ]
9821          "\x{a}" ~
9822          "          "
9823        ]
9824        "\x{a}" ~
9825        "        "
9826      ]
9827      s:pattern [
9828        name = "Element exclusion"
9829        "\x{a}" ~
9830        "          "
9831        s:rule [
9832          context = "db:caption"
9833          "\x{a}" ~
9834          "            "
9835          s:assert [
9836            test = "not(.//db:figure)"
9837            "figure must not occur in the descendants of caption"
9838          ]
9839          "\x{a}" ~
9840          "          "
9841        ]
9842        "\x{a}" ~
9843        "        "
9844      ]
9845      s:pattern [
9846        name = "Element exclusion"
9847        "\x{a}" ~
9848        "          "
9849        s:rule [
9850          context = "db:caption"
9851          "\x{a}" ~
9852          "            "
9853          s:assert [
9854            test = "not(.//db:table)"
9855            "table must not occur in the descendants of caption"
9856          ]
9857          "\x{a}" ~
9858          "          "
9859        ]
9860        "\x{a}" ~
9861        "        "
9862      ]
9863      s:pattern [
9864        name = "Element exclusion"
9865        "\x{a}" ~
9866        "          "
9867        s:rule [
9868          context = "db:caption"
9869          "\x{a}" ~
9870          "            "
9871          s:assert [
9872            test = "not(.//db:table)"
9873            "table must not occur in the descendants of caption"
9874          ]
9875          "\x{a}" ~
9876          "          "
9877        ]
9878        "\x{a}" ~
9879        "        "
9880      ]
9881      s:pattern [
9882        name = "Element exclusion"
9883        "\x{a}" ~
9884        "          "
9885        s:rule [
9886          context = "db:caption"
9887          "\x{a}" ~
9888          "            "
9889          s:assert [
9890            test = "not(.//db:caution)"
9891            "caution must not occur in the descendants of caption"
9892          ]
9893          "\x{a}" ~
9894          "          "
9895        ]
9896        "\x{a}" ~
9897        "        "
9898      ]
9899      s:pattern [
9900        name = "Element exclusion"
9901        "\x{a}" ~
9902        "          "
9903        s:rule [
9904          context = "db:caption"
9905          "\x{a}" ~
9906          "            "
9907          s:assert [
9908            test = "not(.//db:important)"
9909            "important must not occur in the descendants of caption"
9910          ]
9911          "\x{a}" ~
9912          "          "
9913        ]
9914        "\x{a}" ~
9915        "        "
9916      ]
9917      s:pattern [
9918        name = "Element exclusion"
9919        "\x{a}" ~
9920        "          "
9921        s:rule [
9922          context = "db:caption"
9923          "\x{a}" ~
9924          "            "
9925          s:assert [
9926            test = "not(.//db:note)"
9927            "note must not occur in the descendants of caption"
9928          ]
9929          "\x{a}" ~
9930          "          "
9931        ]
9932        "\x{a}" ~
9933        "        "
9934      ]
9935      s:pattern [
9936        name = "Element exclusion"
9937        "\x{a}" ~
9938        "          "
9939        s:rule [
9940          context = "db:caption"
9941          "\x{a}" ~
9942          "            "
9943          s:assert [
9944            test = "not(.//db:tip)"
9945            "tip must not occur in the descendants of caption"
9946          ]
9947          "\x{a}" ~
9948          "          "
9949        ]
9950        "\x{a}" ~
9951        "        "
9952      ]
9953      s:pattern [
9954        name = "Element exclusion"
9955        "\x{a}" ~
9956        "          "
9957        s:rule [
9958          context = "db:caption"
9959          "\x{a}" ~
9960          "            "
9961          s:assert [
9962            test = "not(.//db:warning)"
9963            "warning must not occur in the descendants of caption"
9964          ]
9965          "\x{a}" ~
9966          "          "
9967        ]
9968        "\x{a}" ~
9969        "        "
9970      ]
9971      s:pattern [
9972        name = "Element exclusion"
9973        "\x{a}" ~
9974        "          "
9975        s:rule [
9976          context = "db:caption"
9977          "\x{a}" ~
9978          "            "
9979          s:assert [
9980            test = "not(.//db:sidebar)"
9981            "sidebar must not occur in the descendants of caption"
9982          ]
9983          "\x{a}" ~
9984          "          "
9985        ]
9986        "\x{a}" ~
9987        "        "
9988      ]
9989      s:pattern [
9990        name = "Element exclusion"
9991        "\x{a}" ~
9992        "          "
9993        s:rule [
9994          context = "db:caption"
9995          "\x{a}" ~
9996          "            "
9997          s:assert [
9998            test = "not(.//db:task)"
9999            "task must not occur in the descendants of caption"
10000          ]
10001          "\x{a}" ~
10002          "          "
10003        ]
10004        "\x{a}" ~
10005        "        "
10006      ]
10007    ]
10008    element caption { db.html.caption.attlist, text }
10009}
10010div {
10011  db.html.col.attlist =
10012    db.html.attrs
10013    &
10014      ## This attribute, whose value must be an integer > 0, specifies the number of columns spanned
10015      ##  by the col
10016      ##  element; the col
10017      ##  element shares its attributes with all the columns it spans. The default value for this attribute is 1 (i.e., a single column). If the span attribute is set to N > 1, the current col
10018      ##  element shares its attributes with the next N-1 columns.
10019      attribute span { xsd:nonNegativeInteger }?
10020    &
10021      ## Specifies a default width for each column spanned by the current col
10022      ##  element. It has the same meaning as the width
10023      ##  attribute for the colgroup
10024      ##  element and overrides it.
10025      attribute width { text }?
10026    & db.html.cellhalign
10027    & db.html.cellvalign
10028  db.html.col =
10029
10030    ## Specifications for a column in an HTML table
10031    element col { db.html.col.attlist, empty }
10032}
10033div {
10034  db.html.colgroup.attlist =
10035    db.html.attrs
10036    &
10037      ## This attribute, which must be an integer > 0, specifies the number of columns in a column group. In the absence of a span attribute, each colgroup
10038      ##  defines a column group containing one column. If the span attribute is set to N > 0, the current colgroup
10039      ##  element defines a column group containing N columns. User agents must ignore this attribute if the colgroup
10040      ##  element contains one or more col
10041      ##  elements.
10042      attribute span { xsd:nonNegativeInteger }?
10043    &
10044      ## This attribute specifies a default width for each column in the current column group. In addition to the standard pixel, percentage, and relative values, this attribute allows the special form 0*
10045      ##  (zero asterisk) which means that the width of the each column in the group should be the minimum width necessary to hold the column's contents. This implies that a column's entire contents must be known before its width may be correctly computed. Authors should be aware that specifying 0*
10046      ##  will prevent visual user agents from rendering a table incrementally. This attribute is overridden for any column in the column group whose width is specified via a col
10047      ##  element.
10048      attribute width { text }?
10049    & db.html.cellhalign
10050    & db.html.cellvalign
10051  db.html.colgroup =
10052
10053    ## A group of columns in an HTML table
10054    element colgroup { db.html.colgroup.attlist, db.html.col* }
10055}
10056div {
10057  db.html.thead.attlist =
10058    db.html.attrs & db.html.cellhalign & db.html.cellvalign
10059  db.html.thead =
10060
10061    ## A table header consisting of one or more rows in an HTML table
10062    element thead { db.html.thead.attlist, db.html.tr+ }
10063}
10064div {
10065  db.html.tfoot.attlist =
10066    db.html.attrs & db.html.cellhalign & db.html.cellvalign
10067  db.html.tfoot =
10068
10069    ## A table footer consisting of one or more rows in an HTML table
10070    element tfoot { db.html.tfoot.attlist, db.html.tr+ }
10071}
10072div {
10073  db.html.tbody.attlist =
10074    db.html.attrs & db.html.cellhalign & db.html.cellvalign
10075  db.html.tbody =
10076
10077    ## A wrapper for the rows of an HTML table or informal HTML table
10078    element tbody { db.html.tbody.attlist, db.html.tr+ }
10079}
10080div {
10081  db.html.tr.attlist =
10082    db.html.attrs & db.html.cellhalign & db.html.cellvalign
10083  db.html.tr =
10084
10085    ## A row in an HTML table
10086    element tr { db.html.tr.attlist, (db.html.th | db.html.td)+ }
10087}
10088div {
10089  db.html.th.attlist =
10090    db.html.attrs
10091    & db.html.tablecell.attributes
10092    & db.html.cellhalign
10093    & db.html.cellvalign
10094  db.html.th =
10095
10096    ## A table header entry in an HTML table
10097    element th {
10098      db.html.th.attlist, (db.all.inlines* | db.all.blocks*)
10099    }
10100}
10101div {
10102  db.html.td.attlist =
10103    db.html.attrs
10104    & db.html.tablecell.attributes
10105    & db.html.cellhalign
10106    & db.html.cellvalign
10107  db.html.td =
10108
10109    ## A table entry in an HTML table
10110    element td {
10111      db.html.td.attlist, (db.all.inlines* | db.all.blocks*)
10112    }
10113}
10114div {
10115  db.msgset.role.attribute = attribute role { text }
10116  db.msgset.attlist =
10117    db.msgset.role.attribute?
10118    & db.common.attributes
10119    & db.common.linking.attributes
10120  db.msgset.info = db._info.title.only
10121  db.msgset =
10122
10123    ## A detailed set of messages, usually error messages
10124    element msgset {
10125      db.msgset.attlist,
10126      db.msgset.info,
10127      (db.msgentry+ | db.simplemsgentry+)
10128    }
10129}
10130div {
10131  db.msgentry.role.attribute = attribute role { text }
10132  db.msgentry.attlist =
10133    db.msgentry.role.attribute?
10134    & db.common.attributes
10135    & db.common.linking.attributes
10136  db.msgentry =
10137
10138    ## A wrapper for an entry in a message set
10139    element msgentry {
10140      db.msgentry.attlist, db.msg+, db.msginfo?, db.msgexplan*
10141    }
10142}
10143div {
10144  db.simplemsgentry.role.attribute = attribute role { text }
10145  db.simplemsgentry.msgaud.attribute =
10146
10147    ## The audience to which the message relevant
10148    attribute msgaud { text }
10149  db.simplemsgentry.msgorig.attribute =
10150
10151    ## The origin of the message
10152    attribute msgorig { text }
10153  db.simplemsgentry.msglevel.attribute =
10154
10155    ## The level of importance or severity of a message
10156    attribute msglevel { text }
10157  db.simplemsgentry.attlist =
10158    db.simplemsgentry.role.attribute?
10159    & db.common.attributes
10160    & db.common.linking.attributes
10161    & db.simplemsgentry.msgaud.attribute?
10162    & db.simplemsgentry.msgorig.attribute?
10163    & db.simplemsgentry.msglevel.attribute?
10164  db.simplemsgentry =
10165
10166    ## A wrapper for a simpler entry in a message set
10167    element simplemsgentry {
10168      db.simplemsgentry.attlist, db.msgtext, db.msgexplan+
10169    }
10170}
10171div {
10172  db.msg.role.attribute = attribute role { text }
10173  db.msg.attlist =
10174    db.msg.role.attribute?
10175    & db.common.attributes
10176    & db.common.linking.attributes
10177  db.msg.info = db._info.title.only
10178  db.msg =
10179
10180    ## A message in a message set
10181    element msg {
10182      db.msg.attlist, db.msg.info, db.msgmain, (db.msgsub | db.msgrel)*
10183    }
10184}
10185div {
10186  db.msgmain.role.attribute = attribute role { text }
10187  db.msgmain.attlist =
10188    db.msgmain.role.attribute?
10189    & db.common.attributes
10190    & db.common.linking.attributes
10191  db.msgmain.info = db._info.title.only
10192  db.msgmain =
10193
10194    ## The primary component of a message in a message set
10195    element msgmain { db.msgmain.attlist, db.msgmain.info, db.msgtext }
10196}
10197div {
10198  db.msgsub.role.attribute = attribute role { text }
10199  db.msgsub.attlist =
10200    db.msgsub.role.attribute?
10201    & db.common.attributes
10202    & db.common.linking.attributes
10203  db.msgsub.info = db._info.title.only
10204  db.msgsub =
10205
10206    ## A subcomponent of a message in a message set
10207    element msgsub { db.msgsub.attlist, db.msgsub.info, db.msgtext }
10208}
10209div {
10210  db.msgrel.role.attribute = attribute role { text }
10211  db.msgrel.attlist =
10212    db.msgrel.role.attribute?
10213    & db.common.attributes
10214    & db.common.linking.attributes
10215  db.msgrel.info = db._info.title.only
10216  db.msgrel =
10217
10218    ## A related component of a message in a message set
10219    element msgrel { db.msgrel.attlist, db.msgrel.info, db.msgtext }
10220}
10221div {
10222  db.msgtext.role.attribute = attribute role { text }
10223  db.msgtext.attlist =
10224    db.msgtext.role.attribute?
10225    & db.common.attributes
10226    & db.common.linking.attributes
10227  db.msgtext =
10228
10229    ## The actual text of a message component in a message set
10230    element msgtext { db.msgtext.attlist, db.all.blocks+ }
10231}
10232div {
10233  db.msginfo.role.attribute = attribute role { text }
10234  db.msginfo.attlist =
10235    db.msginfo.role.attribute?
10236    & db.common.attributes
10237    & db.common.linking.attributes
10238  db.msginfo =
10239
10240    ## Information about a message in a message set
10241    element msginfo {
10242      db.msginfo.attlist, (db.msglevel | db.msgorig | db.msgaud)*
10243    }
10244}
10245div {
10246  db.msglevel.role.attribute = attribute role { text }
10247  db.msglevel.attlist =
10248    db.msglevel.role.attribute?
10249    & db.common.attributes
10250    & db.common.linking.attributes
10251  db.msglevel =
10252
10253    ## The level of importance or severity of a message in a message set
10254    element msglevel { db.msglevel.attlist, db._text }
10255}
10256div {
10257  db.msgorig.role.attribute = attribute role { text }
10258  db.msgorig.attlist =
10259    db.msgorig.role.attribute?
10260    & db.common.attributes
10261    & db.common.linking.attributes
10262  db.msgorig =
10263
10264    ## The origin of a message in a message set
10265    element msgorig { db.msgorig.attlist, db._text }
10266}
10267div {
10268  db.msgaud.role.attribute = attribute role { text }
10269  db.msgaud.attlist =
10270    db.msgaud.role.attribute?
10271    & db.common.attributes
10272    & db.common.linking.attributes
10273  db.msgaud =
10274
10275    ## The audience to which a message in a message set is relevant
10276    element msgaud { db.msgaud.attlist, db._text }
10277}
10278div {
10279  db.msgexplan.role.attribute = attribute role { text }
10280  db.msgexplan.attlist =
10281    db.msgexplan.role.attribute?
10282    & db.common.attributes
10283    & db.common.linking.attributes
10284  db.msgexplan.info = db._info.title.only
10285  db.msgexplan =
10286
10287    ## Explanatory material relating to a message in a message set
10288    element msgexplan {
10289      db.msgexplan.attlist, db.msgexplan.info, db.all.blocks+
10290    }
10291}
10292div {
10293  db.qandaset.role.attribute = attribute role { text }
10294  db.qandaset.defaultlabel.enumeration =
10295
10296    ## No labels
10297    "none"
10298    |
10299      ## Numeric labels
10300      "number"
10301    |
10302      ## "Q:" and "A:" labels
10303      "qanda"
10304  db.qandaset.defaultlabel.attribute =
10305
10306    ## Specifies the default labelling
10307    attribute defaultlabel { db.qandaset.defaultlabel.enumeration }
10308  db.qandaset.attlist =
10309    db.qandaset.role.attribute?
10310    & db.common.attributes
10311    & db.common.linking.attributes
10312    & db.qandaset.defaultlabel.attribute?
10313  db.qandaset.info = db._info.title.only
10314  db.qandaset =
10315
10316    ## A question-and-answer set
10317    element qandaset {
10318      db.qandaset.attlist,
10319      db.qandaset.info,
10320      db.all.blocks*,
10321      (db.qandadiv+ | db.qandaentry+)
10322    }
10323}
10324div {
10325  db.qandadiv.role.attribute = attribute role { text }
10326  db.qandadiv.attlist =
10327    db.qandadiv.role.attribute?
10328    & db.common.attributes
10329    & db.common.linking.attributes
10330  db.qandadiv.info = db._info.title.only
10331  db.qandadiv =
10332
10333    ## A titled division in a QandASet
10334    element qandadiv {
10335      db.qandadiv.attlist,
10336      db.qandadiv.info,
10337      db.all.blocks*,
10338      (db.qandadiv+ | db.qandaentry+)
10339    }
10340}
10341div {
10342  db.qandaentry.role.attribute = attribute role { text }
10343  db.qandaentry.attlist =
10344    db.qandaentry.role.attribute?
10345    & db.common.attributes
10346    & db.common.linking.attributes
10347  db.qandaentry.info = db._info.title.forbidden
10348  db.qandaentry =
10349
10350    ## A question/answer set within a QandASet
10351    element qandaentry {
10352      db.qandaentry.attlist, db.qandaentry.info, db.question, db.answer*
10353    }
10354}
10355div {
10356  db.question.role.attribute = attribute role { text }
10357  db.question.attlist =
10358    db.question.role.attribute?
10359    & db.common.attributes
10360    & db.common.linking.attributes
10361  db.question =
10362
10363    ## A question in a QandASet
10364    element question { db.question.attlist, db.label?, db.all.blocks+ }
10365}
10366div {
10367  db.answer.role.attribute = attribute role { text }
10368  db.answer.attlist =
10369    db.answer.role.attribute?
10370    & db.common.attributes
10371    & db.common.linking.attributes
10372  db.answer =
10373
10374    ## An answer to a question posed in a QandASet
10375    element answer { db.answer.attlist, db.label?, db.all.blocks+ }
10376}
10377div {
10378  db.label.role.attribute = attribute role { text }
10379  db.label.attlist =
10380    db.label.role.attribute?
10381    & db.common.attributes
10382    & db.common.linking.attributes
10383  db.label =
10384
10385    ## A label on a Question or Answer
10386    element label { db.label.attlist, db._text }
10387}
10388db.math.inlines = db.inlineequation
10389db.math.blocks = db.equation | db.informalequation
10390db.equation.content = (db.mediaobject+ | db.mathphrase+) | db._any.mml+
10391db.inlineequation.content = db.inlinemediaobject+ | db.mathphrase+
10392div {
10393  db.equation.role.attribute = attribute role { text }
10394  db.equation.label.attribute = db.label.attribute
10395  db.equation.attlist =
10396    db.equation.role.attribute?
10397    & db.common.attributes
10398    & db.common.linking.attributes
10399    & db.equation.label.attribute?
10400    & db.pgwide.attribute?
10401    & db.floatstyle.attribute?
10402  db.equation.info = db._info.title.only
10403  db.equation =
10404
10405    ## A displayed mathematical equation
10406    element equation {
10407      db.equation.attlist,
10408      db.equation.info,
10409      db.alt?,
10410      db.equation.content,
10411      db.caption?
10412    }
10413}
10414div {
10415  db.informalequation.role.attribute = attribute role { text }
10416  db.informalequation.attlist =
10417    db.informalequation.role.attribute?
10418    & db.common.attributes
10419    & db.common.linking.attributes
10420  db.informalequation.info = db._info.title.forbidden
10421  db.informalequation =
10422
10423    ## A displayed mathematical equation without a title
10424    element informalequation {
10425      db.informalequation.attlist,
10426      db.informalequation.info,
10427      db.alt?,
10428      db.equation.content,
10429      db.caption?
10430    }
10431}
10432div {
10433  db.inlineequation.role.attribute = attribute role { text }
10434  db.inlineequation.attlist =
10435    db.inlineequation.role.attribute?
10436    & db.common.attributes
10437    & db.common.linking.attributes
10438  db.inlineequation =
10439
10440    ## A mathematical equation or expression occurring inline
10441    element inlineequation {
10442      db.inlineequation.attlist, db.alt?, db.inlineequation.content
10443    }
10444}
10445div {
10446  db.mathphrase.role.attribute = attribute role { text }
10447  db.mathphrase.attlist =
10448    db.mathphrase.role.attribute?
10449    & db.common.attributes
10450    & db.common.linking.attributes
10451  db.mathphrase =
10452
10453    ## A mathematical phrase, an expression that can be represented with ordinary text and a small amount of markup
10454    element mathphrase {
10455      db.mathphrase.attlist,
10456      (db._text | db.ubiq.inlines | db._emphasis)*
10457    }
10458}
10459div {
10460  db.imagedata.mathml.role.attribute = attribute role { text }
10461  db.imagedata.mathml.attlist =
10462    db.imagedata.mathml.role.attribute?
10463    & db.common.attributes
10464    &
10465      ## Specifies that the format of the data is MathML
10466      attribute format {
10467
10468        ## Specifies MathML.
10469        "mathml"
10470      }?
10471    & db.imagedata.align.attribute?
10472    & db.imagedata.valign.attribute?
10473    & db.imagedata.width.attribute?
10474    & db.imagedata.contentwidth.attribute?
10475    & db.imagedata.scalefit.attribute?
10476    & db.imagedata.scale.attribute?
10477    & db.imagedata.depth.attribute?
10478    & db.imagedata.contentdepth.attribute?
10479  db.imagedata.mathml.info = db._info.title.forbidden
10480  db.imagedata.mathml =
10481
10482    ## A MathML expression in a media object
10483    element imagedata {
10484      db.imagedata.mathml.attlist,
10485      db.imagedata.mathml.info,
10486      db._any.mml+
10487    }
10488}
10489div {
10490  db._any.mml =
10491
10492    ## Any element from the MathML namespace
10493    element mml:* { (db._any.attribute | text | db._any)* }
10494}
10495div {
10496  db.imagedata.svg.role.attribute = attribute role { text }
10497  db.imagedata.svg.attlist =
10498    db.imagedata.svg.role.attribute?
10499    & db.common.attributes
10500    &
10501      ## Specifies that the format of the data is SVG
10502      attribute format {
10503
10504        ## Specifies SVG.
10505        "svg"
10506      }?
10507    & db.imagedata.align.attribute?
10508    & db.imagedata.valign.attribute?
10509    & db.imagedata.width.attribute?
10510    & db.imagedata.contentwidth.attribute?
10511    & db.imagedata.scalefit.attribute?
10512    & db.imagedata.scale.attribute?
10513    & db.imagedata.depth.attribute?
10514    & db.imagedata.contentdepth.attribute?
10515  db.imagedata.svg.info = db._info.title.forbidden
10516  db.imagedata.svg =
10517
10518    ## An SVG drawing in a media object
10519    element imagedata {
10520      db.imagedata.svg.attlist, db.imagedata.svg.info, db._any.svg+
10521    }
10522}
10523div {
10524  db._any.svg =
10525
10526    ## Any element from the SVG namespace
10527    element svg:* { (db._any.attribute | text | db._any)* }
10528}
10529