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