#4 AsciiDoc version of the Defensive Coding Guide
Closed 6 years ago by bex. Opened 6 years ago by mjahoda.
https://gitlab.com/redhat-sectech/defensive-coding-guide master  into  master

.gitlab-ci.yml: corrected copy of generated files
Nikos Mavrogiannopoulos • 6 years ago  
.gitlab-ci.yml: install python
Nikos Mavrogiannopoulos • 6 years ago  
Syntax highlighting for Example 3 added
Mirek Jahoda • 6 years ago  
Markup issues resolved
Mirek Jahoda • 6 years ago  
Additional markup fixes
Mirek Jahoda • 6 years ago  
Section numbering & source code syntax highlighting added
Mirek Jahoda • 6 years ago  
ToC added, several markup issues fixed
Mirek Jahoda • 6 years ago  
.gitlab-ci.yml: updated for asciidoctor generation
Nikos Mavrogiannopoulos • 6 years ago  
include snippets from main doc
Nikos Mavrogiannopoulos • 6 years ago  
updated makefile for asciidoctor
Nikos Mavrogiannopoulos • 6 years ago  
updated snippets generation for adoc format
Nikos Mavrogiannopoulos • 6 years ago  
Adding adoc files & several conversion errors fixed
Mirek Jahoda • 7 years ago  
Converted to AsciiDoc
Mirek Jahoda • 7 years ago  
Update Tasks-Processes.xml - title case + adj.
Mirek Jahoda • 7 years ago  
Update CXX-Std.xml - title case
Mirek Jahoda • 7 years ago  
Update CXX-Language.xml - title case
Mirek Jahoda • 7 years ago  
Update README.md - internal link removed
Mirek Jahoda • 7 years ago  
Update README.md - the Emender URL added
Mirek Jahoda • 7 years ago  
Update Features-HSM.xml - grammar fixes
Mirek Jahoda • 7 years ago  
Update Features-TLS.xml - a typo fixed
Mirek Jahoda • 7 years ago  
Update Features-Authentication.xml - grammar fixes
Mirek Jahoda • 7 years ago  
Update Tasks-Cryptography.xml - grammar fixes
Mirek Jahoda • 7 years ago  
Update Tasks-Packaging.xml - title case
Mirek Jahoda • 7 years ago  
Update Tasks-Serialization.xml - grammar fixes
Mirek Jahoda • 7 years ago  
Update Tasks-Descriptors.xml - typos fixed
Mirek Jahoda • 7 years ago  
Update Tasks-Library_Design.xml - typos, title case
Mirek Jahoda • 7 years ago  
Update Go.xml - title case
Mirek Jahoda • 7 years ago  
Update Shell.xml - title case
Mirek Jahoda • 7 years ago  
Update Python.xml - title case
Mirek Jahoda • 7 years ago  
Update Java-SecurityManager.xml - title case
Mirek Jahoda • 7 years ago  
Update Java-LowLevel.xml - title case
Mirek Jahoda • 7 years ago  
Update Java-Language.xml - title case
Mirek Jahoda • 7 years ago  
Update C-Other.xml - title case
Mirek Jahoda • 7 years ago  
Update C-Allocators.xml - typos, title case
Mirek Jahoda • 7 years ago  
Update C-Libc.xml - typos, title case
Mirek Jahoda • 7 years ago  
Update C-Language.xml - Title Case
Mirek Jahoda • 7 years ago  
Update Tasks-Packaging.xml - Title Case
Mirek Jahoda • 7 years ago  
Update Tasks-Serialization.xml - Title Case and an adj. fixed
Mirek Jahoda • 7 years ago  
Update Tasks-Processes.xml - Title Case and an adj. fixed
Mirek Jahoda • 7 years ago  
Update Tasks-Temporary_Files.xml - Title Case fixed
Mirek Jahoda • 7 years ago  
Update Tasks-Descriptors.xml - Title case fixed
Mirek Jahoda • 7 years ago  
Update Tasks-File_System.xml - Title Case fixed
Mirek Jahoda • 7 years ago  
Update Java-Language.xml - a typo in a title fixed
Mirek Jahoda • 7 years ago  
Merge branch 'tmp-update-self-signed-section' into 'master'
Nikos Mavrogiannopoulos • 7 years ago  
link to packaging guidelines on generating certificates
Nikos Mavrogiannopoulos • 7 years ago  
added known issues text
Nikos Mavrogiannopoulos • 7 years ago  
serialization: mention protocol buffers
Nikos Mavrogiannopoulos • 7 years ago  
Merge branch 'tmp-remove-snippets' into 'master'
Nikos Mavrogiannopoulos • 7 years ago  
removed auto-generated files
Nikos Mavrogiannopoulos • 7 years ago  
mark it as unofficial
Nikos Mavrogiannopoulos • 7 years ago  
corrected brand
Nikos Mavrogiannopoulos • 7 years ago  
updated copyright date
Nikos Mavrogiannopoulos • 7 years ago  
Makefile: removed legacy upload option
Nikos Mavrogiannopoulos • 7 years ago  
getrandom: documented addition to glibc
Nikos Mavrogiannopoulos • 7 years ago  
crypto: added getentropy syscall
Nikos Mavrogiannopoulos • 7 years ago  
Merge branch '5.3-tinyfix' into 'master'
Nikos Mavrogiannopoulos • 7 years ago  
change "Completely isolation" to "Complete isolation"
Ryan Sawhill Aroha • 7 years ago  
Merge branch 'tmp-jobs' into 'master'
Nikos Mavrogiannopoulos • 7 years ago  
.gitlab-ci.yml: added CI job for testing when not in master
Nikos Mavrogiannopoulos • 7 years ago  
Merge branch 'tmp-use-gnutls_set_default_priority' into 'master'
Nikos Mavrogiannopoulos • 7 years ago  
gnutls: recommend the use of gnutls_set_default_priority()
Nikos Mavrogiannopoulos • 7 years ago  
README.md: added
Nikos Mavrogiannopoulos • 7 years ago  
.gitlab-ci.yml: added auto-generation of code
Nikos Mavrogiannopoulos • 7 years ago  
Added contributing authors
Nikos Mavrogiannopoulos • 7 years ago  
crypto primitives: added text on getrandom
Nikos Mavrogiannopoulos • 7 years ago  
TLS: mention upstream documentation for libraries
Nikos Mavrogiannopoulos • 7 years ago  
TLS-Client-NSS: enable AES-GCM
Nikos Mavrogiannopoulos • 7 years ago  
TLS: document the update-ca-trust
Nikos Mavrogiannopoulos • 7 years ago  
Mention only gnutls_certificate_verify_peers3()
Nikos Mavrogiannopoulos • 7 years ago  
TLS: gnutls: use gnutls_certificate_set_x509_system_trust
Nikos Mavrogiannopoulos • 7 years ago  
mention TLS in Transport Layer Security section title
Nikos Mavrogiannopoulos • 7 years ago  
Removed pitfalls mentioned for old versions of GnuTLS
Nikos Mavrogiannopoulos • 7 years ago  
Added a section on usage of Hardware Security Modules (HSM).
Nikos Mavrogiannopoulos • 7 years ago  
.gitlab-ci.yml
file added
+30
@@ -0,0 +1,30 @@

+ pages:

+   image: fedora:27

+   script:

+   - dnf install -y python asciidoctor gnutls-devel openssl-devel nss-devel gcc-go gcc make java-devel gcc-c++ expat-devel qt-devel

+   - gem install pygments.rb

+   - make

+   - make build-manual

+   - mkdir -p public

+   - cp -ar html/* public

+   - cp -ar html/master.html public/index.html

+   tags:

+   - shared

+   only:

+     - master

+   artifacts:

+     when: on_success

+     paths:

+       - public

+ 

+ test:

+   image: fedora:27

+   script:

+   - dnf install -y python asciidoctor gnutls-devel openssl-devel nss-devel gcc-go gcc make java-devel gcc-c++ expat-devel qt-devel

+   - gem install pygments.rb

+   - make

+   tags:

+   - shared

+   except:

+     - master

+ 

KNOWN-ISSUES.md
file added
+7
@@ -0,0 +1,7 @@

+ # Known issues

+ 

+  * No mention of rust

+  * Enhance sections on serialization with examples of protocol buffers

+  * No mention of process isolation mechanisms/sandboxing (seccomp)

+  * No mention of programming with SELinux for safety

+ 

Makefile
file modified
+9 -13
@@ -2,9 +2,10 @@

  

  include src/src.mk

  

- .PHONY: all build build-manual build-snippets build-manual-html build-manual-epub force clean upload

+ .PHONY: all build build-manual build-snippets build-manual-html build-manual-epub force clean

  

- build: build-src build-manual

+ #build: build-src build-manual

+ build: build-manual

  

  build-snippets:

  	mkdir -p en-US/snippets
@@ -12,23 +13,18 @@

  	  src/*.c src/*.cpp src/*.java src/*.py src/*.go src/*.sh

  

  build-manual: build-snippets

- 	publican build --formats=html,epub,pdf --langs=en-US

+ 	rm -rf html && mkdir html

+ 	cd en-US && asciidoctor -n master.adoc -D ../html && cp -ar Common_Content/ ../html/

  

- build-manual-html: build-snippets

- 	publican build --formats=html --langs=en-US

+ build-manual-html: build-manual

  

  build-manual-epub: build-snippets

- 	publican build --formats=epub --langs=en-US

+ 	false

  

  build-manual-pdf: build-snippets

- 	publican build --formats=pdf --langs=en-US

+ 	false

  

  clean: clean-src

- 	-rm -rf tmp

+ 	-rm -rf html

  	-rm -rf en-US/*/snippets

  

- upload:	clean build

- 	rsync -avP --delete tmp/en-US/html/. file.rdu.redhat.com:public_html/defensive-coding/.

- 	rsync -avP tmp/en-US/Defensive_Coding*.epub file.rdu.redhat.com:public_html/defensive-coding.epub

- 	rsync -avP tmp/en-US/pdf/Defensive_Coding*.pdf file.rdu.redhat.com:public_html/defensive-coding.pdf

- 

README
file removed
-26
@@ -1,26 +0,0 @@

- TODO and bug tracking

- ---------------------

- 

- The secure-coding guide has its own component in Bugzilla:

- 

- https://bugzilla.redhat.com/enter_bug.cgi?product=Fedora%20Documentation&component=defensive-coding-guide

- 

- Please file bugs and suggestions there.

- 

- Building HTML documentation

- ---------------------------

- 

- Just type "make".  If you do not want to build the example code, run

- "make build-manual".

- 

- When you type "make", the code examples in src/ are compiled (mainly

- to check for obvious syntax errors, but also for manual testing).  If

- you lack the necessary libraries, you can type "make build-manual"

- instead, which will skip this step.  The code examples are still

- included in the manual.

- 

- Dependencies

- ------------

- 

- Building the manual needs the "publican" and the "publican-fedora"

- packages.

README.md
file added
+26
@@ -0,0 +1,26 @@

+ # Security coding guide

+ 

+ This is a fork of the Fedora secure coding guide.

+ 

+ The guide is present in HTML form (auto-generated from this

+ repository) at:

+ 

+  * http://redhat-sectech.gitlab.io/defensive-coding-guide

+ 

+ 

+ # Building HTML documentation

+ 

+ Just type "make".  If you do not want to build the example code, run

+ "make build-manual".

+ 

+ When you type "make", the code examples in src/ are compiled (mainly

+ to check for obvious syntax errors, but also for manual testing).  If

+ you lack the necessary libraries, you can type "make build-manual"

+ instead, which will skip this step.  The code examples are still

+ included in the manual.

+ 

+ 

+ # Dependencies

+ 

+ Building the manual pages needs the "publican" and the "publican-fedora"

+ packages. 

\ No newline at end of file

docbook-schema/README
file removed
-3
@@ -1,3 +0,0 @@

- This directory contains Relax NG Compact schema files, for use with

- Emacs.  These files were download from http://www.docbook.org/rng/4.5/

- on 2012-07-16.

docbook-schema/calstblx.rnc
file removed
-164
@@ -1,164 +0,0 @@

- # ......................................................................

- 

- # DocBook CALS Table Model V4.5 ........................................

- 

- # File calstblx.mod ....................................................

- 

- # Copyright 1992-2002 HaL Computer Systems, Inc.,

- # O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software

- # Corporation, Norman Walsh, Sun Microsystems, Inc., and the

- # Organization for the Advancement of Structured Information

- # Standards (OASIS).

- # 

- # This DTD is based on the CALS Table Model

- # PUBLIC "-//USA-DOD//DTD Table Model 951010//EN"

- # 

- # $Id: calstblx.dtd 6340 2006-10-03 13:23:24Z nwalsh $

- # 

- # Permission to use, copy, modify and distribute the DocBook DTD

- # and its accompanying documentation for any purpose and without fee

- # is hereby granted in perpetuity, provided that the above copyright

- # notice and this paragraph appear in all copies.  The copyright

- # holders make no representation about the suitability of the DTD for

- # any purpose.  It is provided "as is" without expressed or implied

- # warranty.

- # 

- # If you modify the DocBook DTD in any way, except for declaring and

- # referencing additional sets of general entities and declaring

- # additional notations, label your DTD as a variant of DocBook.  See

- # the maintenance documentation for more information.

- # 

- # Please direct all questions, bug reports, or suggestions for

- # changes to the docbook@lists.oasis-open.org mailing list. For more

- # information, see http://www.oasis-open.org/docbook/.

- 

- # ......................................................................

- 

- # This module contains the definitions for the CALS Table Model

- # converted to XML. It has been modified slightly for use in the

- # combined HTML/CALS models supported by DocBook V4.5.

- 

- # These definitions are not directly related to the table model, but are

- # used in the default CALS table model and are usually defined elsewhere

- # (and prior to the inclusion of this table module) in a CALS DTD.

- 

- # no if zero(s),

- # yes if any other digits value

- 

- yesorno = string

- titles = title?

- # default for use in entry content

- 

- # The parameter entities as defined below provide the CALS table model

- # as published (as part of the Example DTD) in MIL-HDBK-28001.

- # 

- # These following declarations provide the CALS-compliant default definitions

- # for these entities.  However, these entities can and should be redefined

- # (by giving the appropriate parameter entity declaration(s) prior to the

- # reference to this Table Model declaration set entity) to fit the needs

- # of the current application.

- tbl.table-titles.mdl = titles

- tbl.table-main.mdl = tgroup+ | graphic+

- tbl.tgroup.mdl = colspec*, spanspec*, thead?, tfoot?, tbody

- tbl.tgroup.att = attribute tgroupstyle { text }?

- tbl.row.mdl = (entry | entrytbl)+

- tbl.entrytbl.mdl = colspec*, spanspec*, thead?, tbody

- # =====  Element and attribute declarations follow. =====

- 

- # doc:A formal table in a document.

- table = element table { table.attlist, tbl.table.mdl }

- table.attlist &=

-   attribute frame { tbl.frame.attval }?,

-   attribute colsep { yesorno }?,

-   attribute rowsep { yesorno }?,

-   tbl.table.att,

-   bodyatt,

-   secur

- # doc:A wrapper for the main content of a table, or part of a table.

- tgroup = element tgroup { tgroup.attlist, tbl.tgroup.mdl }

- tgroup.attlist &=

-   attribute cols { text },

-   tbl.tgroup.att,

-   attribute colsep { yesorno }?,

-   attribute rowsep { yesorno }?,

-   attribute align { "left" | "right" | "center" | "justify" | "char" }?,

-   attribute char { text }?,

-   attribute charoff { text }?,

-   secur

- # doc:Specifications for a column in a table.

- colspec = element colspec { colspec.attlist, empty }

- colspec.attlist &=

-   attribute colnum { text }?,

-   attribute colname { text }?,

-   attribute colwidth { text }?,

-   attribute colsep { yesorno }?,

-   attribute rowsep { yesorno }?,

-   attribute align { "left" | "right" | "center" | "justify" | "char" }?,

-   attribute char { text }?,

-   attribute charoff { text }?

- # doc:Formatting information for a spanned column in a table.

- spanspec = element spanspec { spanspec.attlist, empty }

- spanspec.attlist &=

-   attribute namest { text },

-   attribute nameend { text },

-   attribute spanname { text },

-   attribute colsep { yesorno }?,

-   attribute rowsep { yesorno }?,

-   attribute align { "left" | "right" | "center" | "justify" | "char" }?,

-   attribute char { text }?,

-   attribute charoff { text }?

- # doc:A table header consisting of one or more rows.

- thead = element thead { thead.attlist, tbl.hdft.mdl }

- thead.attlist &=

-   attribute valign { "top" | "middle" | "bottom" }?,

-   secur

- # doc:A table footer consisting of one or more rows.

- tfoot = element tfoot { tfoot.attlist, tbl.hdft.mdl }

- tfoot.attlist &=

-   attribute valign { "top" | "middle" | "bottom" }?,

-   secur

- # doc:A wrapper for the rows of a table or informal table.

- tbody = element tbody { tbody.attlist, tbl.tbody.mdl }

- tbody.attlist &=

-   attribute valign { "top" | "middle" | "bottom" }?,

-   secur

- # doc:A row in a table.

- row = element row { row.attlist, tbl.row.mdl }

- row.attlist &=

-   attribute rowsep { yesorno }?,

-   attribute valign { "top" | "middle" | "bottom" }?,

-   secur

- # doc:A subtable appearing in place of an Entry in a table.

- entrytbl = element entrytbl { entrytbl.attlist, tbl.entrytbl.mdl }

- entrytbl.attlist &=

-   attribute cols { text },

-   tbl.tgroup.att,

-   attribute colname { text }?,

-   attribute spanname { text }?,

-   attribute namest { text }?,

-   attribute nameend { text }?,

-   attribute colsep { yesorno }?,

-   attribute rowsep { yesorno }?,

-   attribute align { "left" | "right" | "center" | "justify" | "char" }?,

-   attribute char { text }?,

-   attribute charoff { text }?,

-   secur

- # doc:A cell in a table.

- entry = element entry { entry.attlist, tbl.entry.mdl* }

- entry.attlist &=

-   attribute colname { text }?,

-   attribute namest { text }?,

-   attribute nameend { text }?,

-   attribute spanname { text }?,

-   attribute morerows { text }?,

-   attribute colsep { yesorno }?,

-   attribute rowsep { yesorno }?,

-   attribute align { "left" | "right" | "center" | "justify" | "char" }?,

-   attribute char { text }?,

-   attribute charoff { text }?,

-   attribute rotate { yesorno }?,

-   attribute valign { "top" | "middle" | "bottom" }?,

-   secur

- # End of DocBook CALS Table Model V4.5 .................................

- 

- # ......................................................................

docbook-schema/dbhierx.rnc
file removed
-1549
@@ -1,1549 +0,0 @@

- # ......................................................................

- 

- # DocBook document hierarchy module V4.5 ...............................

- 

- # File dbhierx.mod .....................................................

- 

- # Copyright 1992-2004 HaL Computer Systems, Inc.,

- # O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software

- # Corporation, Norman Walsh, Sun Microsystems, Inc., and the

- # Organization for the Advancement of Structured Information

- # Standards (OASIS).

- # 

- # $Id: dbhierx.mod 6340 2006-10-03 13:23:24Z nwalsh $

- # 

- # Permission to use, copy, modify and distribute the DocBook DTD

- # and its accompanying documentation for any purpose and without fee

- # is hereby granted in perpetuity, provided that the above copyright

- # notice and this paragraph appear in all copies.  The copyright

- # holders make no representation about the suitability of the DTD for

- # any purpose.  It is provided "as is" without expressed or implied

- # warranty.

- # 

- # If you modify the DocBook DTD in any way, except for declaring and

- # referencing additional sets of general entities and declaring

- # additional notations, label your DTD as a variant of DocBook.  See

- # the maintenance documentation for more information.

- # 

- # Please direct all questions, bug reports, or suggestions for

- # changes to the docbook@lists.oasis-open.org mailing list. For more

- # information, see http://www.oasis-open.org/docbook/.

- 

- # ......................................................................

- 

- # This module contains the definitions for the overall document

- # hierarchies of DocBook documents.  It covers computer documentation

- # manuals and manual fragments, as well as reference entries (such as

- # man pages) and technical journals or anthologies containing

- # articles.

- # 

- # This module depends on the DocBook information pool module.  All

- # elements and entities referenced but not defined here are assumed

- # to be defined in the information pool module.

- # 

- # In DTD driver files referring to this module, please use an entity

- # declaration that uses the public identifier shown below:

- # 

- # <!ENTITY % dbhier PUBLIC

- # "-//OASIS//ELEMENTS DocBook Document Hierarchy V4.5//EN"

- # "dbhierx.mod">

- # %dbhier;

- # 

- # See the documentation for detailed information on the parameter

- # entity and module scheme used in DocBook, customizing DocBook and

- # planning for interchange, and changes made since the last release

- # of DocBook.

- 

- # ......................................................................

- 

- # Entities for module inclusions .......................................

- 

- # ......................................................................

- 

- # Entities for element classes .........................................

- 

- local.appendix.class = notAllowed

- appendix.class = appendix | local.appendix.class

- local.article.class = notAllowed

- article.class = article | local.article.class

- local.book.class = notAllowed

- book.class = book | local.book.class

- local.chapter.class = notAllowed

- chapter.class = chapter | local.chapter.class

- local.index.class = notAllowed

- index.class = index | setindex | local.index.class

- local.refentry.class = notAllowed

- refentry.class = refentry | local.refentry.class

- local.section.class = notAllowed

- section.class = section | local.section.class

- local.nav.class = notAllowed

- nav.class =

-   toc | lot | index | glossary | bibliography | local.nav.class

- # Redeclaration placeholder ............................................

- 

- # For redeclaring entities that are declared after this point while

- # retaining their references to the entities that are declared before

- # this point

- 

- # ......................................................................

- 

- # Entities for element mixtures ........................................

- local.divcomponent.mix = notAllowed

- divcomponent.mix =

-   list.class

-   | admon.class

-   | linespecific.class

-   | synop.class

-   | para.class

-   | informal.class

-   | formal.class

-   | compound.class

-   | genobj.class

-   | descobj.class

-   | ndxterm.class

-   | beginpage

-   | forms.hook

-   | local.divcomponent.mix

- local.refcomponent.mix = notAllowed

- refcomponent.mix =

-   list.class

-   | admon.class

-   | linespecific.class

-   | synop.class

-   | para.class

-   | informal.class

-   | formal.class

-   | compound.class

-   | genobj.class

-   | descobj.class

-   | ndxterm.class

-   | beginpage

-   | forms.hook

-   | local.refcomponent.mix

- local.indexdivcomponent.mix = notAllowed

- indexdivcomponent.mix =

-   itemizedlist

-   | orderedlist

-   | variablelist

-   | simplelist

-   | linespecific.class

-   | synop.class

-   | para.class

-   | informal.class

-   | anchor

-   | remark

-   | link.char.class

-   | beginpage

-   | local.indexdivcomponent.mix

- local.refname.char.mix = notAllowed

- refname.char.mix = text | tech.char.class | local.refname.char.mix

- local.partcontent.mix = notAllowed

- partcontent.mix =

-   appendix.class

-   | chapter.class

-   | nav.class

-   | article.class

-   | preface

-   | refentry.class

-   | reference

-   | local.partcontent.mix

- local.refinline.char.mix = notAllowed

- refinline.char.mix =

-   text

-   | xref.char.class

-   | gen.char.class

-   | link.char.class

-   | tech.char.class

-   | base.char.class

-   | docinfo.char.class

-   | other.char.class

-   | ndxterm.class

-   | beginpage

-   | local.refinline.char.mix

- local.refclass.char.mix = notAllowed

- refclass.char.mix = text | application | local.refclass.char.mix

- # Redeclaration placeholder 2 ..........................................

- 

- # For redeclaring entities that are declared after this point while

- # retaining their references to the entities that are declared before

- # this point

- 

- # ......................................................................

- 

- # Entities for content models ..........................................

- div.title.content = title, subtitle?, titleabbrev?

- bookcomponent.title.content = title, subtitle?, titleabbrev?

- sect.title.content = title, subtitle?, titleabbrev?

- refsect.title.content = title, subtitle?, titleabbrev?

- bookcomponent.content =

-   (divcomponent.mix+,

-    (sect1* | refentry.class* | simplesect* | section.class*))

-   | (sect1+ | refentry.class+ | simplesect+ | section.class+)

- # ......................................................................

- 

- # Set and SetInfo ......................................................

- local.set.attrib = empty

- set.role.attrib = role.attrib

- # doc:A collection of books.

- set =

-   element set {

-     set.attlist,

-     div.title.content?,

-     setinfo?,

-     toc?,

-     (set | book.class)+,

-     setindex?

-   }

- # end of set.element

- 

- # FPI: SGML formal public identifier

- set.attlist &=

-   attribute fpi { text }?,

-   status.attrib,

-   common.attrib,

-   set.role.attrib,

-   local.set.attrib

- # end of set.attlist

- 

- # end of set.module

- local.setinfo.attrib = empty

- setinfo.role.attrib = role.attrib

- # doc:Meta-information for a Set.

- setinfo = element setinfo { setinfo.attlist, info.class+ }

- # end of setinfo.element

- 

- # Contents: IDs of the ToC, Books, and SetIndex that comprise

- # the set, in the order of their appearance

- setinfo.attlist &=

-   attribute contents { xsd:IDREFS }?,

-   common.attrib,

-   setinfo.role.attrib,

-   local.setinfo.attrib

- # end of setinfo.attlist

- 

- # end of setinfo.module

- 

- # end of set.content.module

- 

- # ......................................................................

- 

- # Book and BookInfo ....................................................

- local.book.attrib = empty

- book.role.attrib = role.attrib

- # doc:A book.

- book =

-   element book {

-     book.attlist,

-     div.title.content?,

-     bookinfo?,

-     (dedication

-      | toc

-      | lot

-      | glossary

-      | bibliography

-      | preface

-      | chapter.class

-      | reference

-      | part

-      | article.class

-      | appendix.class

-      | index.class

-      | colophon)*

-   }

- # end of book.element

- 

- # FPI: SGML formal public identifier

- book.attlist &=

-   attribute fpi { text }?,

-   label.attrib,

-   status.attrib,

-   common.attrib,

-   book.role.attrib,

-   local.book.attrib

- # end of book.attlist

- 

- # end of book.module

- local.bookinfo.attrib = empty

- bookinfo.role.attrib = role.attrib

- # doc:Meta-information for a Book.

- bookinfo = element bookinfo { bookinfo.attlist, info.class+ }

- # end of bookinfo.element

- 

- # Contents: IDs of the ToC, LoTs, Prefaces, Parts, Chapters,

- # Appendixes, References, GLossary, Bibliography, and indexes

- # comprising the Book, in the order of their appearance

- bookinfo.attlist &=

-   attribute contents { xsd:IDREFS }?,

-   common.attrib,

-   bookinfo.role.attrib,

-   local.bookinfo.attrib

- # end of bookinfo.attlist

- 

- # end of bookinfo.module

- 

- # end of book.content.module

- 

- # ......................................................................

- 

- # Dedication, ToC, and LoT .............................................

- local.dedication.attrib = empty

- dedication.role.attrib = role.attrib

- # doc:A wrapper for the dedication section of a book.

- dedication =

-   element dedication {

-     dedication.attlist, sect.title.content?, legalnotice.mix+

-   }

- # end of dedication.element

- dedication.attlist &=

-   status.attrib,

-   common.attrib,

-   dedication.role.attrib,

-   local.dedication.attrib

- # end of dedication.attlist

- 

- # end of dedication.module

- local.colophon.attrib = empty

- colophon.role.attrib = role.attrib

- # doc:Text at the back of a book describing facts about its production.

- colophon =

-   element colophon {

-     colophon.attlist, sect.title.content?, textobject.mix+

-   }

- # end of colophon.element

- colophon.attlist &=

-   status.attrib,

-   common.attrib,

-   colophon.role.attrib,

-   local.colophon.attrib

- # end of colophon.attlist

- 

- # end of colophon.module

- local.toc.attrib = empty

- toc.role.attrib = role.attrib

- # doc:A table of contents.

- toc =

-   element toc {

-     toc.attlist,

-     beginpage?,

-     bookcomponent.title.content?,

-     tocfront*,

-     (tocpart | tocchap)*,

-     tocback*

-   }

- # end of toc.element

- toc.attlist &=

-   pagenum.attrib, common.attrib, toc.role.attrib, local.toc.attrib

- # end of toc.attlist

- 

- # end of toc.module

- local.tocfront.attrib = empty

- tocfront.role.attrib = role.attrib

- # doc:An entry in a table of contents for a front matter component.

- tocfront = element tocfront { tocfront.attlist, para.char.mix* }

- # end of tocfront.element

- 

- # to element that this entry represents

- tocfront.attlist &=

-   label.attrib,

-   linkend.attrib,

-   pagenum.attrib,

-   common.attrib,

-   tocfront.role.attrib,

-   local.tocfront.attrib

- # end of tocfront.attlist

- 

- # end of tocfront.module

- local.tocentry.attrib = empty

- tocentry.role.attrib = role.attrib

- # doc:A component title in a table of contents.

- tocentry = element tocentry { tocentry.attlist, para.char.mix* }

- # end of tocentry.element

- 

- # to element that this entry represents

- tocentry.attlist &=

-   linkend.attrib,

-   pagenum.attrib,

-   common.attrib,

-   tocentry.role.attrib,

-   local.tocentry.attrib

- # end of tocentry.attlist

- 

- # end of tocentry.module

- local.tocpart.attrib = empty

- tocpart.role.attrib = role.attrib

- # doc:An entry in a table of contents for a part of a book.

- tocpart = element tocpart { tocpart.attlist, tocentry+, tocchap* }

- # end of tocpart.element

- tocpart.attlist &=

-   common.attrib, tocpart.role.attrib, local.tocpart.attrib

- # end of tocpart.attlist

- 

- # end of tocpart.module

- local.tocchap.attrib = empty

- tocchap.role.attrib = role.attrib

- # doc:An entry in a table of contents for a component in the body of a document.

- tocchap = element tocchap { tocchap.attlist, tocentry+, toclevel1* }

- # end of tocchap.element

- tocchap.attlist &=

-   label.attrib, common.attrib, tocchap.role.attrib, local.tocchap.attrib

- # end of tocchap.attlist

- 

- # end of tocchap.module

- local.toclevel1.attrib = empty

- toclevel1.role.attrib = role.attrib

- # doc:A top-level entry within a table of contents entry for a chapter-like component.

- toclevel1 =

-   element toclevel1 { toclevel1.attlist, tocentry+, toclevel2* }

- # end of toclevel1.element

- toclevel1.attlist &=

-   common.attrib, toclevel1.role.attrib, local.toclevel1.attrib

- # end of toclevel1.attlist

- 

- # end of toclevel1.module

- local.toclevel2.attrib = empty

- toclevel2.role.attrib = role.attrib

- # doc:A second-level entry within a table of contents entry for a chapter-like component.

- toclevel2 =

-   element toclevel2 { toclevel2.attlist, tocentry+, toclevel3* }

- # end of toclevel2.element

- toclevel2.attlist &=

-   common.attrib, toclevel2.role.attrib, local.toclevel2.attrib

- # end of toclevel2.attlist

- 

- # end of toclevel2.module

- local.toclevel3.attrib = empty

- toclevel3.role.attrib = role.attrib

- # doc:A third-level entry within a table of contents entry for a chapter-like component.

- toclevel3 =

-   element toclevel3 { toclevel3.attlist, tocentry+, toclevel4* }

- # end of toclevel3.element

- toclevel3.attlist &=

-   common.attrib, toclevel3.role.attrib, local.toclevel3.attrib

- # end of toclevel3.attlist

- 

- # end of toclevel3.module

- local.toclevel4.attrib = empty

- toclevel4.role.attrib = role.attrib

- # doc:A fourth-level entry within a table of contents entry for a chapter-like component.

- toclevel4 =

-   element toclevel4 { toclevel4.attlist, tocentry+, toclevel5* }

- # end of toclevel4.element

- toclevel4.attlist &=

-   common.attrib, toclevel4.role.attrib, local.toclevel4.attrib

- # end of toclevel4.attlist

- 

- # end of toclevel4.module

- local.toclevel5.attrib = empty

- toclevel5.role.attrib = role.attrib

- # doc:A fifth-level entry within a table of contents entry for a chapter-like component.

- toclevel5 = element toclevel5 { toclevel5.attlist, tocentry+ }

- # end of toclevel5.element

- toclevel5.attlist &=

-   common.attrib, toclevel5.role.attrib, local.toclevel5.attrib

- # end of toclevel5.attlist

- 

- # end of toclevel5.module

- local.tocback.attrib = empty

- tocback.role.attrib = role.attrib

- # doc:An entry in a table of contents for a back matter component.

- tocback = element tocback { tocback.attlist, para.char.mix* }

- # end of tocback.element

- 

- # to element that this entry represents

- tocback.attlist &=

-   label.attrib,

-   linkend.attrib,

-   pagenum.attrib,

-   common.attrib,

-   tocback.role.attrib,

-   local.tocback.attrib

- # end of tocback.attlist

- 

- # end of tocback.module

- 

- # end of toc.content.module

- local.lot.attrib = empty

- lot.role.attrib = role.attrib

- # doc:A list of the titles of formal objects (as tables or figures) in a document.

- lot =

-   element lot {

-     lot.attlist, beginpage?, bookcomponent.title.content?, lotentry*

-   }

- # end of lot.element

- lot.attlist &=

-   label.attrib, common.attrib, lot.role.attrib, local.lot.attrib

- # end of lot.attlist

- 

- # end of lot.module

- local.lotentry.attrib = empty

- lotentry.role.attrib = role.attrib

- # doc:An entry in a list of titles.

- lotentry = element lotentry { lotentry.attlist, para.char.mix* }

- # end of lotentry.element

- 

- # SrcCredit: Information about the source of the entry,

- # as for a list of illustrations

- 

- # linkend: to element that this entry represents

- lotentry.attlist &=

-   linkend.attrib,

-   pagenum.attrib,

-   attribute srccredit { text }?,

-   common.attrib,

-   lotentry.role.attrib,

-   local.lotentry.attrib

- # end of lotentry.attlist

- 

- # end of lotentry.module

- 

- # end of lot.content.module

- 

- # ......................................................................

- 

- # Appendix, Chapter, Part, Preface, Reference, PartIntro ...............

- local.appendix.attrib = empty

- appendix.role.attrib = role.attrib

- # doc:An appendix in a Book or Article.

- appendix =

-   element appendix {

-     appendix.attlist,

-     beginpage?,

-     appendixinfo?,

-     bookcomponent.title.content,

-     nav.class*,

-     tocchap?,

-     bookcomponent.content,

-     nav.class*

-   }

- # end of appendix.element

- appendix.attlist &=

-   label.attrib,

-   status.attrib,

-   common.attrib,

-   appendix.role.attrib,

-   local.appendix.attrib

- # end of appendix.attlist

- 

- # end of appendix.module

- local.chapter.attrib = empty

- chapter.role.attrib = role.attrib

- # doc:A chapter, as of a book.

- chapter =

-   element chapter {

-     chapter.attlist,

-     beginpage?,

-     chapterinfo?,

-     bookcomponent.title.content,

-     nav.class*,

-     tocchap?,

-     bookcomponent.content,

-     nav.class*

-   }

- # end of chapter.element

- chapter.attlist &=

-   label.attrib,

-   status.attrib,

-   common.attrib,

-   chapter.role.attrib,

-   local.chapter.attrib

- # end of chapter.attlist

- 

- # end of chapter.module

- 

- # Note that Part was to have its content model reduced in V4.5.  This

- # change will not be made after all.

- local.part.attrib = empty

- part.role.attrib = role.attrib

- # doc:A division in a book.

- part =

-   element part {

-     part.attlist,

-     beginpage?,

-     partinfo?,

-     bookcomponent.title.content,

-     partintro?,

-     partcontent.mix+

-   }

- # end of part.element

- part.attlist &=

-   label.attrib,

-   status.attrib,

-   common.attrib,

-   part.role.attrib,

-   local.part.attrib

- # end of part.attlist

- 

- # ELEMENT PartIntro (defined below)

- 

- # end of part.module

- local.preface.attrib = empty

- preface.role.attrib = role.attrib

- # doc:Introductory matter preceding the first chapter of a book.

- preface =

-   element preface {

-     preface.attlist,

-     beginpage?,

-     prefaceinfo?,

-     bookcomponent.title.content,

-     nav.class*,

-     tocchap?,

-     bookcomponent.content,

-     nav.class*

-   }

- # end of preface.element

- preface.attlist &=

-   status.attrib,

-   common.attrib,

-   preface.role.attrib,

-   local.preface.attrib

- # end of preface.attlist

- 

- # end of preface.module

- local.reference.attrib = empty

- reference.role.attrib = role.attrib

- # doc:A collection of reference entries.

- reference =

-   element reference {

-     reference.attlist,

-     beginpage?,

-     referenceinfo?,

-     bookcomponent.title.content,

-     partintro?,

-     refentry.class+

-   }

- # end of reference.element

- reference.attlist &=

-   label.attrib,

-   status.attrib,

-   common.attrib,

-   reference.role.attrib,

-   local.reference.attrib

- # end of reference.attlist

- 

- # ELEMENT PartIntro (defined below)

- 

- # end of reference.module

- local.partintro.attrib = empty

- partintro.role.attrib = role.attrib

- # doc:An introduction to the contents of a part.

- partintro =

-   element partintro {

-     partintro.attlist, div.title.content?, bookcomponent.content

-   }

- # end of partintro.element

- partintro.attlist &=

-   label.attrib,

-   common.attrib,

-   partintro.role.attrib,

-   local.partintro.attrib

- # end of partintro.attlist

- 

- # end of partintro.module

- 

- # ......................................................................

- 

- # Other Info elements ..................................................

- local.appendixinfo.attrib = empty

- appendixinfo.role.attrib = role.attrib

- # doc:Meta-information for an Appendix.

- appendixinfo =

-   element appendixinfo { appendixinfo.attlist, info.class+ }

- # end of appendixinfo.element

- appendixinfo.attlist &=

-   common.attrib, appendixinfo.role.attrib, local.appendixinfo.attrib

- # end of appendixinfo.attlist

- 

- # end of appendixinfo.module

- local.bibliographyinfo.attrib = empty

- bibliographyinfo.role.attrib = role.attrib

- # doc:Meta-information for a Bibliography.

- bibliographyinfo =

-   element bibliographyinfo { bibliographyinfo.attlist, info.class+ }

- # end of bibliographyinfo.element

- bibliographyinfo.attlist &=

-   common.attrib,

-   bibliographyinfo.role.attrib,

-   local.bibliographyinfo.attrib

- # end of bibliographyinfo.attlist

- 

- # end of bibliographyinfo.module

- local.chapterinfo.attrib = empty

- chapterinfo.role.attrib = role.attrib

- # doc:Meta-information for a Chapter.

- chapterinfo = element chapterinfo { chapterinfo.attlist, info.class+ }

- # end of chapterinfo.element

- chapterinfo.attlist &=

-   common.attrib, chapterinfo.role.attrib, local.chapterinfo.attrib

- # end of chapterinfo.attlist

- 

- # end of chapterinfo.module

- local.glossaryinfo.attrib = empty

- glossaryinfo.role.attrib = role.attrib

- # doc:Meta-information for a Glossary.

- glossaryinfo =

-   element glossaryinfo { glossaryinfo.attlist, info.class+ }

- # end of glossaryinfo.element

- glossaryinfo.attlist &=

-   common.attrib, glossaryinfo.role.attrib, local.glossaryinfo.attrib

- # end of glossaryinfo.attlist

- 

- # end of glossaryinfo.module

- local.indexinfo.attrib = empty

- indexinfo.role.attrib = role.attrib

- # doc:Meta-information for an Index.

- indexinfo = element indexinfo { indexinfo.attlist, info.class+ }

- # end of indexinfo.element

- indexinfo.attlist &=

-   common.attrib, indexinfo.role.attrib, local.indexinfo.attrib

- # end of indexinfo.attlist

- 

- # end of indexinfo.module

- local.setindexinfo.attrib = empty

- setindexinfo.role.attrib = role.attrib

- # doc:Meta-information for a SetIndex.

- setindexinfo =

-   element setindexinfo { setindexinfo.attlist, info.class+ }

- # end of setindexinfo.element

- setindexinfo.attlist &=

-   common.attrib, setindexinfo.role.attrib, local.setindexinfo.attrib

- # end of setindexinfo.attlist

- 

- # end of setindexinfo.module

- local.partinfo.attrib = empty

- partinfo.role.attrib = role.attrib

- # doc:Meta-information for a Part.

- partinfo = element partinfo { partinfo.attlist, info.class+ }

- # end of partinfo.element

- partinfo.attlist &=

-   common.attrib, partinfo.role.attrib, local.partinfo.attrib

- # end of partinfo.attlist

- 

- # end of partinfo.module

- local.prefaceinfo.attrib = empty

- prefaceinfo.role.attrib = role.attrib

- # doc:Meta-information for a Preface.

- prefaceinfo = element prefaceinfo { prefaceinfo.attlist, info.class+ }

- # end of prefaceinfo.element

- prefaceinfo.attlist &=

-   common.attrib, prefaceinfo.role.attrib, local.prefaceinfo.attrib

- # end of prefaceinfo.attlist

- 

- # end of prefaceinfo.module

- local.refentryinfo.attrib = empty

- refentryinfo.role.attrib = role.attrib

- # doc:Meta-information for a Refentry.

- refentryinfo =

-   element refentryinfo { refentryinfo.attlist, info.class+ }

- # end of refentryinfo.element

- refentryinfo.attlist &=

-   common.attrib, refentryinfo.role.attrib, local.refentryinfo.attrib

- # end of refentryinfo.attlist

- 

- # end of refentryinfo.module

- local.refsectioninfo.attrib = empty

- refsectioninfo.role.attrib = role.attrib

- # doc:Meta-information for a refsection.

- refsectioninfo =

-   element refsectioninfo { refsectioninfo.attlist, info.class+ }

- # end of refsectioninfo.element

- refsectioninfo.attlist &=

-   common.attrib, refsectioninfo.role.attrib, local.refsectioninfo.attrib

- # end of refsectioninfo.attlist

- 

- # end of refsectioninfo.module

- local.refsect1info.attrib = empty

- refsect1info.role.attrib = role.attrib

- # doc:Meta-information for a RefSect1.

- refsect1info =

-   element refsect1info { refsect1info.attlist, info.class+ }

- # end of refsect1info.element

- refsect1info.attlist &=

-   common.attrib, refsect1info.role.attrib, local.refsect1info.attrib

- # end of refsect1info.attlist

- 

- # end of refsect1info.module

- local.refsect2info.attrib = empty

- refsect2info.role.attrib = role.attrib

- # doc:Meta-information for a RefSect2.

- refsect2info =

-   element refsect2info { refsect2info.attlist, info.class+ }

- # end of refsect2info.element

- refsect2info.attlist &=

-   common.attrib, refsect2info.role.attrib, local.refsect2info.attrib

- # end of refsect2info.attlist

- 

- # end of refsect2info.module

- local.refsect3info.attrib = empty

- refsect3info.role.attrib = role.attrib

- # doc:Meta-information for a RefSect3.

- refsect3info =

-   element refsect3info { refsect3info.attlist, info.class+ }

- # end of refsect3info.element

- refsect3info.attlist &=

-   common.attrib, refsect3info.role.attrib, local.refsect3info.attrib

- # end of refsect3info.attlist

- 

- # end of refsect3info.module

- local.refsynopsisdivinfo.attrib = empty

- refsynopsisdivinfo.role.attrib = role.attrib

- # doc:Meta-information for a RefSynopsisDiv.

- refsynopsisdivinfo =

-   element refsynopsisdivinfo { refsynopsisdivinfo.attlist, info.class+ }

- # end of refsynopsisdivinfo.element

- refsynopsisdivinfo.attlist &=

-   common.attrib,

-   refsynopsisdivinfo.role.attrib,

-   local.refsynopsisdivinfo.attrib

- # end of refsynopsisdivinfo.attlist

- 

- # end of refsynopsisdivinfo.module

- local.referenceinfo.attrib = empty

- referenceinfo.role.attrib = role.attrib

- # doc:Meta-information for a Reference.

- referenceinfo =

-   element referenceinfo { referenceinfo.attlist, info.class+ }

- # end of referenceinfo.element

- referenceinfo.attlist &=

-   common.attrib, referenceinfo.role.attrib, local.referenceinfo.attrib

- # end of referenceinfo.attlist

- 

- # end of referenceinfo.module

- local.sect1info.attrib = empty

- sect1info.role.attrib = role.attrib

- # doc:Meta-information for a Sect1.

- sect1info = element sect1info { sect1info.attlist, info.class+ }

- # end of sect1info.element

- sect1info.attlist &=

-   common.attrib, sect1info.role.attrib, local.sect1info.attrib

- # end of sect1info.attlist

- local.sect2info.attrib = empty

- sect2info.role.attrib = role.attrib

- # doc:Meta-information for a Sect2.

- sect2info = element sect2info { sect2info.attlist, info.class+ }

- # end of sect2info.element

- sect2info.attlist &=

-   common.attrib, sect2info.role.attrib, local.sect2info.attrib

- # end of sect2info.attlist

- local.sect3info.attrib = empty

- sect3info.role.attrib = role.attrib

- # doc:Meta-information for a Sect3.

- sect3info = element sect3info { sect3info.attlist, info.class+ }

- # end of sect3info.element

- sect3info.attlist &=

-   common.attrib, sect3info.role.attrib, local.sect3info.attrib

- # end of sect3info.attlist

- local.sect4info.attrib = empty

- sect4info.role.attrib = role.attrib

- # doc:Meta-information for a Sect4.

- sect4info = element sect4info { sect4info.attlist, info.class+ }

- # end of sect4info.element

- sect4info.attlist &=

-   common.attrib, sect4info.role.attrib, local.sect4info.attrib

- # end of sect4info.attlist

- local.sect5info.attrib = empty

- sect5info.role.attrib = role.attrib

- # doc:Meta-information for a Sect5.

- sect5info = element sect5info { sect5info.attlist, info.class+ }

- # end of sect5info.element

- sect5info.attlist &=

-   common.attrib, sect5info.role.attrib, local.sect5info.attrib

- # end of sect5info.attlist

- 

- # ......................................................................

- 

- # Section (parallel to Sect*) .........................................

- local.section.attrib = empty

- section.role.attrib = role.attrib

- # doc:A recursive section.

- section =

-   element section {

-     section.attlist,

-     sectioninfo?,

-     sect.title.content,

-     nav.class*,

-     ((divcomponent.mix+,

-       (refentry.class* | section.class* | simplesect*))

-      | refentry.class+

-      | section.class+

-      | simplesect+),

-     nav.class*

-   }

- # end of section.element

- section.attlist &=

-   label.attrib,

-   status.attrib,

-   common.attrib,

-   section.role.attrib,

-   local.section.attrib

- # end of section.attlist

- 

- # end of section.module

- sectioninfo.role.attrib = role.attrib

- local.sectioninfo.attrib = empty

- # doc:Meta-information for a recursive section.

- sectioninfo = element sectioninfo { sectioninfo.attlist, info.class+ }

- # end of sectioninfo.element

- sectioninfo.attlist &=

-   common.attrib, sectioninfo.role.attrib, local.sectioninfo.attrib

- # end of sectioninfo.attlist

- 

- # end of sectioninfo.module

- 

- # end of section.content.module

- 

- # ......................................................................

- 

- # Sect1, Sect2, Sect3, Sect4, Sect5 ....................................

- local.sect1.attrib = empty

- sect1.role.attrib = role.attrib

- # doc:A top-level section of document.

- sect1 =

-   element sect1 {

-     sect1.attlist,

-     sect1info?,

-     sect.title.content,

-     nav.class*,

-     ((divcomponent.mix+, (refentry.class* | sect2* | simplesect*))

-      | refentry.class+

-      | sect2+

-      | simplesect+),

-     nav.class*

-   }

- # end of sect1.element

- 

- # Renderas: Indicates the format in which the heading should

- # appear

- sect1.attlist &=

-   attribute renderas { "sect2" | "sect3" | "sect4" | "sect5" }?,

-   label.attrib,

-   status.attrib,

-   common.attrib,

-   sect1.role.attrib,

-   local.sect1.attrib

- # end of sect1.attlist

- 

- # end of sect1.module

- local.sect2.attrib = empty

- sect2.role.attrib = role.attrib

- # doc:A subsection within a Sect1.

- sect2 =

-   element sect2 {

-     sect2.attlist,

-     sect2info?,

-     sect.title.content,

-     nav.class*,

-     ((divcomponent.mix+, (refentry.class* | sect3* | simplesect*))

-      | refentry.class+

-      | sect3+

-      | simplesect+),

-     nav.class*

-   }

- # end of sect2.element

- 

- # Renderas: Indicates the format in which the heading should

- # appear

- sect2.attlist &=

-   attribute renderas { "sect1" | "sect3" | "sect4" | "sect5" }?,

-   label.attrib,

-   status.attrib,

-   common.attrib,

-   sect2.role.attrib,

-   local.sect2.attrib

- # end of sect2.attlist

- 

- # end of sect2.module

- local.sect3.attrib = empty

- sect3.role.attrib = role.attrib

- # doc:A subsection within a Sect2.

- sect3 =

-   element sect3 {

-     sect3.attlist,

-     sect3info?,

-     sect.title.content,

-     nav.class*,

-     ((divcomponent.mix+, (refentry.class* | sect4* | simplesect*))

-      | refentry.class+

-      | sect4+

-      | simplesect+),

-     nav.class*

-   }

- # end of sect3.element

- 

- # Renderas: Indicates the format in which the heading should

- # appear

- sect3.attlist &=

-   attribute renderas { "sect1" | "sect2" | "sect4" | "sect5" }?,

-   label.attrib,

-   status.attrib,

-   common.attrib,

-   sect3.role.attrib,

-   local.sect3.attrib

- # end of sect3.attlist

- 

- # end of sect3.module

- local.sect4.attrib = empty

- sect4.role.attrib = role.attrib

- # doc:A subsection within a Sect3.

- sect4 =

-   element sect4 {

-     sect4.attlist,

-     sect4info?,

-     sect.title.content,

-     nav.class*,

-     ((divcomponent.mix+, (refentry.class* | sect5* | simplesect*))

-      | refentry.class+

-      | sect5+

-      | simplesect+),

-     nav.class*

-   }

- # end of sect4.element

- 

- # Renderas: Indicates the format in which the heading should

- # appear

- sect4.attlist &=

-   attribute renderas { "sect1" | "sect2" | "sect3" | "sect5" }?,

-   label.attrib,

-   status.attrib,

-   common.attrib,

-   sect4.role.attrib,

-   local.sect4.attrib

- # end of sect4.attlist

- 

- # end of sect4.module

- local.sect5.attrib = empty

- sect5.role.attrib = role.attrib

- # doc:A subsection within a Sect4.

- sect5 =

-   element sect5 {

-     sect5.attlist,

-     sect5info?,

-     sect.title.content,

-     nav.class*,

-     ((divcomponent.mix+, (refentry.class* | simplesect*))

-      | refentry.class+

-      | simplesect+),

-     nav.class*

-   }

- # end of sect5.element

- 

- # Renderas: Indicates the format in which the heading should

- # appear

- sect5.attlist &=

-   attribute renderas { "sect1" | "sect2" | "sect3" | "sect4" }?,

-   label.attrib,

-   status.attrib,

-   common.attrib,

-   sect5.role.attrib,

-   local.sect5.attrib

- # end of sect5.attlist

- 

- # end of sect5.module

- local.simplesect.attrib = empty

- simplesect.role.attrib = role.attrib

- # doc:A section of a document with no subdivisions.

- simplesect =

-   element simplesect {

-     simplesect.attlist, sect.title.content, divcomponent.mix+

-   }

- # end of simplesect.element

- simplesect.attlist &=

-   common.attrib, simplesect.role.attrib, local.simplesect.attrib

- # end of simplesect.attlist

- 

- # end of simplesect.module

- 

- # ......................................................................

- 

- # Bibliography .........................................................

- local.bibliography.attrib = empty

- bibliography.role.attrib = role.attrib

- # doc:A bibliography.

- bibliography =

-   element bibliography {

-     bibliography.attlist,

-     bibliographyinfo?,

-     bookcomponent.title.content?,

-     component.mix*,

-     (bibliodiv+ | (biblioentry | bibliomixed)+)

-   }

- # end of bibliography.element

- bibliography.attlist &=

-   status.attrib,

-   common.attrib,

-   bibliography.role.attrib,

-   local.bibliography.attrib

- # end of bibliography.attlist

- 

- # end of bibliography.module

- local.bibliodiv.attrib = empty

- bibliodiv.role.attrib = role.attrib

- # doc:A section of a Bibliography.

- bibliodiv =

-   element bibliodiv {

-     bibliodiv.attlist,

-     sect.title.content?,

-     component.mix*,

-     (biblioentry | bibliomixed)+

-   }

- # end of bibliodiv.element

- bibliodiv.attlist &=

-   status.attrib,

-   common.attrib,

-   bibliodiv.role.attrib,

-   local.bibliodiv.attrib

- # end of bibliodiv.attlist

- 

- # end of bibliodiv.module

- 

- # end of bibliography.content.module

- 

- # ......................................................................

- 

- # Glossary .............................................................

- local.glossary.attrib = empty

- glossary.role.attrib = role.attrib

- # doc:A glossary.

- glossary =

-   element glossary {

-     glossary.attlist,

-     glossaryinfo?,

-     bookcomponent.title.content?,

-     component.mix*,

-     (glossdiv+ | glossentry+),

-     bibliography?

-   }

- # end of glossary.element

- glossary.attlist &=

-   status.attrib,

-   common.attrib,

-   glossary.role.attrib,

-   local.glossary.attrib

- # end of glossary.attlist

- 

- # end of glossary.module

- local.glossdiv.attrib = empty

- glossdiv.role.attrib = role.attrib

- # doc:A division in a Glossary.

- glossdiv =

-   element glossdiv {

-     glossdiv.attlist, sect.title.content, component.mix*, glossentry+

-   }

- # end of glossdiv.element

- glossdiv.attlist &=

-   status.attrib,

-   common.attrib,

-   glossdiv.role.attrib,

-   local.glossdiv.at