summaryrefslogtreecommitdiff
path: root/etc/schema
diff options
context:
space:
mode:
authorMark A. Hershberger <mah@everybody.org>2007-11-23 06:58:00 +0000
committerMark A. Hershberger <mah@everybody.org>2007-11-23 06:58:00 +0000
commit8cd39fb3c4cf47d2464f00eaa69c587e17dd11cc (patch)
tree7bcd47a7dcbbad100dd3e8f8a7e08b48353c58a8 /etc/schema
parentf7cf8b2009b0bc2526d50c3455f737a543122dd4 (diff)
downloademacs-8cd39fb3c4cf47d2464f00eaa69c587e17dd11cc.tar.gz
Initial merge of nxml
Diffstat (limited to 'etc/schema')
-rw-r--r--etc/schema/calstbl.rnc184
-rw-r--r--etc/schema/dbcalstbl.rnc25
-rw-r--r--etc/schema/dbdyntbl.rnc116
-rw-r--r--etc/schema/dbhier.rnc1467
-rw-r--r--etc/schema/dbnotn.rnc84
-rw-r--r--etc/schema/dbpool.rnc5083
-rw-r--r--etc/schema/dbsoextbl.rnc30
-rw-r--r--etc/schema/dbstart.rnc23
-rw-r--r--etc/schema/docbook-dyntbl.rnc18
-rw-r--r--etc/schema/docbook-soextbl.rnc17
-rw-r--r--etc/schema/docbook.rnc48
-rw-r--r--etc/schema/locate.rnc200
-rw-r--r--etc/schema/rdfxml.rnc205
-rw-r--r--etc/schema/relaxng.rnc63
-rw-r--r--etc/schema/schemas.xml36
-rw-r--r--etc/schema/soextbl.rnc260
-rw-r--r--etc/schema/xhtml-applet.rnc19
-rw-r--r--etc/schema/xhtml-attribs.rnc14
-rw-r--r--etc/schema/xhtml-base.rnc5
-rw-r--r--etc/schema/xhtml-basic-form.rnc63
-rw-r--r--etc/schema/xhtml-basic-table.rnc28
-rw-r--r--etc/schema/xhtml-bdo.rnc7
-rw-r--r--etc/schema/xhtml-csismap.rnc29
-rw-r--r--etc/schema/xhtml-datatypes.rnc47
-rw-r--r--etc/schema/xhtml-edit.rnc12
-rw-r--r--etc/schema/xhtml-events.rnc47
-rw-r--r--etc/schema/xhtml-form.rnc49
-rw-r--r--etc/schema/xhtml-frames.rnc26
-rw-r--r--etc/schema/xhtml-hypertext.rnc16
-rw-r--r--etc/schema/xhtml-iframe.rnc14
-rw-r--r--etc/schema/xhtml-image.rnc11
-rw-r--r--etc/schema/xhtml-inlstyle.rnc3
-rw-r--r--etc/schema/xhtml-legacy.rnc100
-rw-r--r--etc/schema/xhtml-link.rnc13
-rw-r--r--etc/schema/xhtml-list.rnc16
-rw-r--r--etc/schema/xhtml-meta.rnc10
-rw-r--r--etc/schema/xhtml-nameident.rnc10
-rw-r--r--etc/schema/xhtml-object.rnc24
-rw-r--r--etc/schema/xhtml-param.rnc9
-rw-r--r--etc/schema/xhtml-pres.rnc18
-rw-r--r--etc/schema/xhtml-ruby.rnc21
-rw-r--r--etc/schema/xhtml-script.rnc15
-rw-r--r--etc/schema/xhtml-ssismap.rnc5
-rw-r--r--etc/schema/xhtml-struct.rnc14
-rw-r--r--etc/schema/xhtml-style.rnc10
-rw-r--r--etc/schema/xhtml-table.rnc67
-rw-r--r--etc/schema/xhtml-target.rnc8
-rw-r--r--etc/schema/xhtml-text.rnc73
-rw-r--r--etc/schema/xhtml.rnc37
-rw-r--r--etc/schema/xslt.rnc356
50 files changed, 9055 insertions, 0 deletions
diff --git a/etc/schema/calstbl.rnc b/etc/schema/calstbl.rnc
new file mode 100644
index 00000000000..5d334e8ebd2
--- /dev/null
+++ b/etc/schema/calstbl.rnc
@@ -0,0 +1,184 @@
+# This file was generated automatically by Trang, and then manually
+# edited to add back definitions for overridden parameter entities and
+# undefined elements, specifically: bodyatt, secur, paracon,
+# tbl.table.mdl, tbl.entry.mdl, caution, graphic, legend, note, para,
+# title, warning. This makes the semantics of this module as close as
+# possible to the original DTD and also allows this schema to be used
+# independently of DocBook.
+
+# ......................................................................
+
+# DocBook CALS Table Model V4.2 ........................................
+
+# 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: calstbl.rnc,v 1.2 2003/08/30 06:04:02 jjc Exp $
+#
+# 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.
+
+# 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.
+
+bodyatt = empty
+secur = empty
+
+# no if zero(s),
+# yes if any other digits value
+
+yesorno = string
+titles = title?
+# default for use in entry content
+paracon = text
+
+# 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.table.mdl = tbl.table-titles.mdl | tbl.table-main.mdl
+tbl.table.att =
+ attribute tabstyle { text }?,
+ attribute tocentry { yesorno }?,
+ attribute shortentry { yesorno }?,
+ attribute orient { "port" | "land" }?,
+ attribute pgwide { yesorno }?
+tbl.tgroup.mdl = colspec*, spanspec*, thead?, tfoot?, tbody
+tbl.tgroup.att = attribute tgroupstyle { text }?
+tbl.hdft.mdl = colspec*, row+
+tbl.row.mdl = (entry | entrytbl)+
+tbl.entrytbl.mdl = colspec*, spanspec*, thead?, tbody
+tbl.entry.mdl = paracon | para | warning | caution | note | legend
+# ===== Element and attribute declarations follow. =====
+start = table
+table = element table { table.attlist, tbl.table.mdl }
+table.attlist &=
+ attribute frame {
+ "top" | "bottom" | "topbot" | "all" | "sides" | "none"
+ }?,
+ attribute colsep { yesorno }?,
+ attribute rowsep { yesorno }?,
+ tbl.table.att,
+ bodyatt,
+ secur
+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
+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 }?
+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 }?
+thead = element thead { thead.attlist, tbl.hdft.mdl }
+thead.attlist &=
+ attribute valign { "top" | "middle" | "bottom" }?,
+ secur
+tfoot = element tfoot { tfoot.attlist, tbl.hdft.mdl }
+tfoot.attlist &=
+ attribute valign { "top" | "middle" | "bottom" }?,
+ secur
+tbody = element tbody { tbody.attlist, row+ }
+tbody.attlist &=
+ attribute valign { "top" | "middle" | "bottom" }?,
+ secur
+row = element row { row.attlist, tbl.row.mdl }
+row.attlist &=
+ attribute rowsep { yesorno }?,
+ attribute valign { "top" | "middle" | "bottom" }?,
+ secur
+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
+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
+caution |= notAllowed
+graphic |= notAllowed
+legend |= notAllowed
+note |= notAllowed
+para |= notAllowed
+title |= notAllowed
+warning |= notAllowed
+
+# End of DocBook CALS Table Model V4.2 .................................
+
+# ......................................................................
diff --git a/etc/schema/dbcalstbl.rnc b/etc/schema/dbcalstbl.rnc
new file mode 100644
index 00000000000..9841df2d734
--- /dev/null
+++ b/etc/schema/dbcalstbl.rnc
@@ -0,0 +1,25 @@
+# Definitions specific to the CALS Table Model.
+
+# Reference CALS Table Model
+include "calstbl.rnc" {
+ # Override definition of start
+ start |= notAllowed
+ # Add label and role attributes to table and informaltable
+ bodyatt = label.attrib
+ # Add common attributes to Table, TGroup, TBody, THead, TFoot, Row,
+ # EntryTbl, and Entry (and InformalTable element).
+ secur = common.attrib, tables.role.attrib
+ # Content model for Table.
+ tbl.table.mdl =
+ blockinfo?,
+ formalobject.title.content,
+ ndxterm.class*,
+ textobject*,
+ (graphic+ | mediaobject+ | tgroup+)
+ # Allow either objects or inlines; beware of REs between elements.
+ tbl.entry.mdl = para.char.mix | tabentry.mix
+}
+
+common.table.attribs = bodyatt, secur
+
+# end of table.module
diff --git a/etc/schema/dbdyntbl.rnc b/etc/schema/dbdyntbl.rnc
new file mode 100644
index 00000000000..8e859145fd0
--- /dev/null
+++ b/etc/schema/dbdyntbl.rnc
@@ -0,0 +1,116 @@
+# This is an alternative to dbsoextbl.rnc and dbcalstbl.rnc that
+# allows the table model to be selected dynamically based on the
+# definitions of cals.table.module and exchange.table.module.
+#
+# To use this copy, docbook.rnc to docbook-dyntbl.rnc replacing
+# "dbcalstbl.rnc" by "dbdyntbl.rnc". Then, you can override the
+# choice of table model by doing
+#
+# include "docbook-dyntbl.rnc" {
+# cals.table.model = IGNORE
+# exchange.table.model = INCLUDE
+# }
+
+INCLUDE = empty
+IGNORE = notAllowed
+cals.table.module = INCLUDE
+exchange.table.module = IGNORE
+
+# Add common attributes and the Label attribute to Table and
+# InformalTable.
+bodyatt = common.attrib, label.attrib, tables.role.attrib
+
+# Content model for Table.
+tbl.table.mdl =
+ blockinfo?,
+ formalobject.title.content,
+ ndxterm.class*,
+ textobject*,
+ (graphic+ | mediaobject+ | tgroup+)
+
+table = cals.table | exchange.table
+
+cals.table =
+ cals.table.module,
+ grammar {
+ # Reference CALS Table Model
+ include "calstbl.rnc" {
+ # Add label and role attributes to table and informaltable
+ bodyatt = parent label.attrib
+ # Add common attributes to Table, TGroup, TBody, THead, TFoot, Row,
+ # EntryTbl, and Entry (and InformalTable element).
+ secur = parent common.attrib, parent tables.role.attrib
+ tbl.table.mdl = parent tbl.table.mdl
+ }
+ }
+
+exchange.table =
+ exchange.table.module,
+ grammar {
+ # Reference OASIS Exchange Table Model
+ include "soextbl.rnc" {
+ # Add common attributes and the Label attribute to Table and
+ # InformalTable.
+ bodyatt = parent bodyatt
+ tbl.table.mdl = parent tbl.table.mdl
+ }
+ }
+
+tgroup = cals.tgroup | exchange.tgroup
+
+cals.tgroup =
+ cals.table.module,
+ grammar {
+ # Reference CALS Table Model
+ include "calstbl.rnc" {
+ start = tgroup
+ # Add label and role attributes to table and informaltable
+ bodyatt = parent label.attrib
+ # Add common attributes to Table, TGroup, TBody, THead, TFoot, Row,
+ # EntryTbl, and Entry (and InformalTable element).
+ secur = parent common.attrib, parent tables.role.attrib
+ # Allow either objects or inlines; beware of REs between elements.
+ tbl.entry.mdl = parent para.char.mix | parent tabentry.mix
+ }
+ }
+
+exchange.tgroup =
+ exchange.table.module,
+ grammar {
+ # Reference OASIS Exchange Table Model
+ include "soextbl.rnc" {
+ start = tgroup
+ bodyatt = parent bodyatt
+ # Add common attributes to TGroup, ColSpec, TBody, THead, Row, Entry
+ tbl.tgroup.att = parent common.attrib
+ tbl.colspec.att = parent common.attrib
+ tbl.tbody.att = parent common.attrib
+ tbl.thead.att = parent common.attrib
+ tbl.row.att = parent common.attrib
+ tbl.entry.att = parent common.attrib
+ # Allow either objects or inlines; beware of REs between elements.
+ tbl.entry.mdl = (parent para.char.mix | parent tabentry.mix)*
+ }
+ }
+
+tbl.table.att = cals.tbl.table.att | exchange.tbl.table.att
+
+cals.tbl.table.att =
+ cals.table.module,
+ grammar {
+ include "calstbl.rnc" {
+ start = tbl.table.att
+ }
+ }
+
+exchange.tbl.table.att =
+ exchange.table.module,
+ grammar {
+ include "soextbl.rnc" {
+ start = tbl.table.att
+ }
+ }
+
+common.table.attribs = bodyatt
+
+# end of table.module
diff --git a/etc/schema/dbhier.rnc b/etc/schema/dbhier.rnc
new file mode 100644
index 00000000000..1671b01fbce
--- /dev/null
+++ b/etc/schema/dbhier.rnc
@@ -0,0 +1,1467 @@
+# ......................................................................
+
+# DocBook document hierarchy module V4.2 ...............................
+
+# File dbhierx.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).
+#
+# $Id: dbhier.rnc,v 1.1 2003/08/30 04:19:27 jjc Exp $
+#
+# 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.2//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 ........................................
+
+# The DocBook TC may produce an official forms module for DocBook.
+
+# This PE provides the hook by which it can be inserted into the DTD.
+forms.hook = notAllowed
+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
+ | 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
+set =
+ element set {
+ set.attlist,
+ div.title.content?,
+ setinfo?,
+ toc?,
+ 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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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.2. This
+# change will not be made after all.
+local.part.attrib = empty
+part.role.attrib = role.attrib
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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.attrib
+# end of glossdiv.attlist
+
+# end of glossdiv.module
+
+# end of glossary.content.module
+
+# ......................................................................
+
+# Index and SetIndex ...................................................
+local.indexes.attrib = empty
+indexes.role.attrib = role.attrib
+index =
+ element index {
+ index.attlist,
+ indexinfo?,
+ bookcomponent.title.content?,
+ component.mix*,
+ (indexdiv* | indexentry*)
+ }
+# end of index.element
+index.attlist &=
+ common.attrib, indexes.role.attrib, local.indexes.attrib
+# end of index.attlist
+setindex =
+ element setindex {
+ setindex.attlist,
+ setindexinfo?,
+ bookcomponent.title.content?,
+ component.mix*,
+ (indexdiv* | indexentry*)
+ }
+# end of setindex.element
+setindex.attlist &=
+ common.attrib, indexes.role.attrib, local.indexes.attrib
+# end of setindex.attlist
+
+# end of indexes.module
+
+# SegmentedList in this content is useful for marking up permuted
+# indices.
+local.indexdiv.attrib = empty
+indexdiv.role.attrib = role.attrib
+indexdiv =
+ element indexdiv {
+ indexdiv.attlist,
+ sect.title.content?,
+ (indexdivcomponent.mix*, (indexentry+ | segmentedlist))
+ }
+# end of indexdiv.element
+indexdiv.attlist &=
+ common.attrib, indexdiv.role.attrib, local.indexdiv.attrib
+# end of indexdiv.attlist
+
+# end of indexdiv.module
+
+# Index entries appear in the index, not the text.
+local.indexentry.attrib = empty
+indexentry.role.attrib = role.attrib
+indexentry =
+ element indexentry {
+ indexentry.attlist,
+ primaryie,
+ (seeie | seealsoie)*,
+ (secondaryie, (seeie | seealsoie | tertiaryie)*)*
+ }
+# end of indexentry.element
+indexentry.attlist &=
+ common.attrib, indexentry.role.attrib, local.indexentry.attrib
+# end of indexentry.attlist
+
+# end of indexentry.module
+local.primsecterie.attrib = empty
+primsecterie.role.attrib = role.attrib
+primaryie = element primaryie { primaryie.attlist, ndxterm.char.mix* }
+# end of primaryie.element
+
+# to IndexTerms that these entries represent
+primaryie.attlist &=
+ linkends.attrib,
+ common.attrib,
+ primsecterie.role.attrib,
+ local.primsecterie.attrib
+# end of primaryie.attlist
+secondaryie =
+ element secondaryie { secondaryie.attlist, ndxterm.char.mix* }
+# end of secondaryie.element
+
+# to IndexTerms that these entries represent
+secondaryie.attlist &=
+ linkends.attrib,
+ common.attrib,
+ primsecterie.role.attrib,
+ local.primsecterie.attrib
+# end of secondaryie.attlist
+tertiaryie =
+ element tertiaryie { tertiaryie.attlist, ndxterm.char.mix* }
+# end of tertiaryie.element
+
+# to IndexTerms that these entries represent
+tertiaryie.attlist &=
+ linkends.attrib,
+ common.attrib,
+ primsecterie.role.attrib,
+ local.primsecterie.attrib
+# end of tertiaryie.attlist
+
+# end of primsecterie.module
+local.seeie.attrib = empty
+seeie.role.attrib = role.attrib
+seeie = element seeie { seeie.attlist, ndxterm.char.mix* }
+# end of seeie.element
+
+# to IndexEntry to look up
+seeie.attlist &=
+ linkend.attrib, common.attrib, seeie.role.attrib, local.seeie.attrib
+# end of seeie.attlist
+
+# end of seeie.module
+local.seealsoie.attrib = empty
+seealsoie.role.attrib = role.attrib
+seealsoie = element seealsoie { seealsoie.attlist, ndxterm.char.mix* }
+# end of seealsoie.element
+
+# to related IndexEntries
+seealsoie.attlist &=
+ linkends.attrib,
+ common.attrib,
+ seealsoie.role.attrib,
+ local.seealsoie.attrib
+# end of seealsoie.attlist
+
+# end of seealsoie.module
+
+# end of index.content.module
+
+# ......................................................................
+
+# RefEntry .............................................................
+local.refentry.attrib = empty
+refentry.role.attrib = role.attrib
+refentry =
+ element refentry {
+ refentry.attlist,
+ beginpage?,
+ ndxterm.class*,
+ refentryinfo?,
+ refmeta?,
+ (remark | link.char.class)*,
+ refnamediv,
+ refsynopsisdiv?,
+ (refsect1+ | refsection+)
+ }
+# end of refentry.element
+refentry.attlist &=
+ status.attrib,
+ common.attrib,
+ refentry.role.attrib,
+ local.refentry.attrib
+# end of refentry.attlist
+
+# end of refentry.module
+local.refmeta.attrib = empty
+refmeta.role.attrib = role.attrib
+refmeta =
+ element refmeta {
+ refmeta.attlist,
+ ndxterm.class*,
+ refentrytitle,
+ manvolnum?,
+ refmiscinfo*,
+ ndxterm.class*
+ }
+# end of refmeta.element
+refmeta.attlist &=
+ common.attrib, refmeta.role.attrib, local.refmeta.attrib
+# end of refmeta.attlist
+
+# end of refmeta.module
+local.refmiscinfo.attrib = empty
+refmiscinfo.role.attrib = role.attrib
+refmiscinfo =
+ element refmiscinfo { refmiscinfo.attlist, docinfo.char.mix* }
+# end of refmiscinfo.element
+
+# Class: Freely assignable parameter; no default
+refmiscinfo.attlist &=
+ attribute class { text }?,
+ common.attrib,
+ refmiscinfo.role.attrib,
+ local.refmiscinfo.attrib
+# end of refmiscinfo.attlist
+
+# end of refmiscinfo.module
+local.refnamediv.attrib = empty
+refnamediv.role.attrib = role.attrib
+refnamediv =
+ element refnamediv {
+ refnamediv.attlist,
+ refdescriptor?,
+ refname+,
+ refpurpose,
+ refclass*,
+ (remark | link.char.class)*
+ }
+# end of refnamediv.element
+refnamediv.attlist &=
+ common.attrib, refnamediv.role.attrib, local.refnamediv.attrib
+# end of refnamediv.attlist
+
+# end of refnamediv.module
+local.refdescriptor.attrib = empty
+refdescriptor.role.attrib = role.attrib
+refdescriptor =
+ element refdescriptor { refdescriptor.attlist, refname.char.mix* }
+# end of refdescriptor.element
+refdescriptor.attlist &=
+ common.attrib, refdescriptor.role.attrib, local.refdescriptor.attrib
+# end of refdescriptor.attlist
+
+# end of refdescriptor.module
+local.refname.attrib = empty
+refname.role.attrib = role.attrib
+refname = element refname { refname.attlist, refname.char.mix* }
+# end of refname.element
+refname.attlist &=
+ common.attrib, refname.role.attrib, local.refname.attrib
+# end of refname.attlist
+
+# end of refname.module
+local.refpurpose.attrib = empty
+refpurpose.role.attrib = role.attrib
+refpurpose =
+ element refpurpose { refpurpose.attlist, refinline.char.mix* }
+# end of refpurpose.element
+refpurpose.attlist &=
+ common.attrib, refpurpose.role.attrib, local.refpurpose.attrib
+# end of refpurpose.attlist
+
+# end of refpurpose.module
+local.refclass.attrib = empty
+refclass.role.attrib = role.attrib
+refclass = element refclass { refclass.attlist, refclass.char.mix* }
+# end of refclass.element
+refclass.attlist &=
+ common.attrib, refclass.role.attrib, local.refclass.attrib
+# end of refclass.attlist
+
+# end of refclass.module
+local.refsynopsisdiv.attrib = empty
+refsynopsisdiv.role.attrib = role.attrib
+refsynopsisdiv =
+ element refsynopsisdiv {
+ refsynopsisdiv.attlist,
+ refsynopsisdivinfo?,
+ refsect.title.content?,
+ ((refcomponent.mix+, refsect2*) | refsect2+)
+ }
+# end of refsynopsisdiv.element
+refsynopsisdiv.attlist &=
+ common.attrib, refsynopsisdiv.role.attrib, local.refsynopsisdiv.attrib
+# end of refsynopsisdiv.attlist
+
+# end of refsynopsisdiv.module
+local.refsection.attrib = empty
+refsection.role.attrib = role.attrib
+refsection =
+ element refsection {
+ refsection.attlist,
+ refsectioninfo?,
+ refsect.title.content,
+ ((refcomponent.mix+, refsection*) | refsection+)
+ }
+# end of refsection.element
+refsection.attlist &=
+ status.attrib,
+ common.attrib,
+ refsection.role.attrib,
+ local.refsection.attrib
+# end of refsection.attlist
+
+# end of refsection.module
+local.refsect1.attrib = empty
+refsect1.role.attrib = role.attrib
+refsect1 =
+ element refsect1 {
+ refsect1.attlist,
+ refsect1info?,
+ refsect.title.content,
+ ((refcomponent.mix+, refsect2*) | refsect2+)
+ }
+# end of refsect1.element
+refsect1.attlist &=
+ status.attrib,
+ common.attrib,
+ refsect1.role.attrib,
+ local.refsect1.attrib
+# end of refsect1.attlist
+
+# end of refsect1.module
+local.refsect2.attrib = empty
+refsect2.role.attrib = role.attrib
+refsect2 =
+ element refsect2 {
+ refsect2.attlist,
+ refsect2info?,
+ refsect.title.content,
+ ((refcomponent.mix+, refsect3*) | refsect3+)
+ }
+# end of refsect2.element
+refsect2.attlist &=
+ status.attrib,
+ common.attrib,
+ refsect2.role.attrib,
+ local.refsect2.attrib
+# end of refsect2.attlist
+
+# end of refsect2.module
+local.refsect3.attrib = empty
+refsect3.role.attrib = role.attrib
+refsect3 =
+ element refsect3 {
+ refsect3.attlist,
+ refsect3info?,
+ refsect.title.content,
+ refcomponent.mix+
+ }
+# end of refsect3.element
+refsect3.attlist &=
+ status.attrib,
+ common.attrib,
+ refsect3.role.attrib,
+ local.refsect3.attrib
+# end of refsect3.attlist
+
+# end of refsect3.module
+
+# end of refentry.content.module
+
+# ......................................................................
+
+# Article ..............................................................
+
+# An Article is a chapter-level, stand-alone document that is often,
+# but need not be, collected into a Book.
+local.article.attrib = empty
+article.role.attrib = role.attrib
+article =
+ element article {
+ article.attlist,
+ div.title.content?,
+ articleinfo?,
+ tocchap?,
+ lot*,
+ bookcomponent.content,
+ (nav.class | appendix.class | ackno)*
+ }
+# end of article.element
+
+# Class: Indicates the type of a particular article;
+# all articles have the same structure and general purpose.
+# No default.
+
+# ParentBook: ID of the enclosing Book
+article.attlist &=
+ attribute class {
+ "journalarticle"
+ | "productsheet"
+ | "whitepaper"
+ | "techreport"
+ | "specification"
+ | "faq"
+ }?,
+ attribute parentbook { xsd:IDREF }?,
+ status.attrib,
+ common.attrib,
+ article.role.attrib,
+ local.article.attrib
+# end of article.attlist
+
+# end of article.module
+
+# End of DocBook document hierarchy module V4.2 ........................
+
+# ......................................................................
diff --git a/etc/schema/dbnotn.rnc b/etc/schema/dbnotn.rnc
new file mode 100644
index 00000000000..2a6185f27fd
--- /dev/null
+++ b/etc/schema/dbnotn.rnc
@@ -0,0 +1,84 @@
+# ......................................................................
+
+# DocBook notations module V4.2 ........................................
+
+# File dbnotnx.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).
+#
+# $Id: dbnotn.rnc,v 1.1 2003/08/30 04:19:27 jjc Exp $
+#
+# 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 entity declarations for the standard ISO
+# entity sets used by DocBook.
+#
+# In DTD driver files referring to this module, please use an entity
+# declaration that uses the public identifier shown below:
+#
+# <!ENTITY % dbnotn PUBLIC
+# "-//OASIS//ENTITIES DocBook Notations V4.2//EN"
+# "dbnotnx.mod">
+# %dbnotn;
+#
+# 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.
+
+local.notation.class = notAllowed
+notation.class =
+ "BMP"
+ | "CGM-CHAR"
+ | "CGM-BINARY"
+ | "CGM-CLEAR"
+ | "DITROFF"
+ | "DVI"
+ | "EPS"
+ | "EQN"
+ | "FAX"
+ | "GIF"
+ | "GIF87a"
+ | "GIF89a"
+ | "JPG"
+ | "JPEG"
+ | "IGES"
+ | "PCX"
+ | "PIC"
+ | "PNG"
+ | "PS"
+ | "SGML"
+ | "TBL"
+ | "TEX"
+ | "TIFF"
+ | "WMF"
+ | "WPG"
+ | "SVG"
+ | "linespecific"
+ | local.notation.class
+# WordPerfect Graphic format
+
+# End of DocBook notations module V4.2 .................................
+
+# ......................................................................
diff --git a/etc/schema/dbpool.rnc b/etc/schema/dbpool.rnc
new file mode 100644
index 00000000000..46236eb7b7b
--- /dev/null
+++ b/etc/schema/dbpool.rnc
@@ -0,0 +1,5083 @@
+# This file was generated automatically by Trang. The table model
+# dependent definitions have been moved into separate files.
+
+# ......................................................................
+
+# DocBook XML information pool module V4.2 .............................
+
+# File dbpoolx.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).
+#
+# $Id: dbpool.rnc,v 1.4 2003/08/30 07:48:31 jjc Exp $
+#
+# Permission to use, copy, modify and distribute the DocBook XML 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 XML 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 objects, inline
+# elements, and so on that are available to be used as the main
+# content of DocBook documents. Some elements are useful for general
+# publishing, and others are useful specifically for computer
+# documentation.
+#
+# This module has the following dependencies on other modules:
+#
+# o It assumes that a %notation.class; entity is defined by the
+# driver file or other high-level module. This entity is
+# referenced in the NOTATION attributes for the graphic-related and
+# ModeSpec elements.
+#
+# o It assumes that an appropriately parameterized table module is
+# available for use with the table-related elements.
+#
+# In DTD driver files referring to this module, please use an entity
+# declaration that uses the public identifier shown below:
+#
+# <!ENTITY % dbpool PUBLIC
+# "-//OASIS//ELEMENTS DocBook XML Information Pool V4.2//EN"
+# "dbpoolx.mod">
+# %dbpool;
+#
+# 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.
+
+# ......................................................................
+
+# General-purpose semantics entities ...................................
+
+namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"
+
+yesorno.attvals = string
+# ......................................................................
+
+# Entities for module inclusions .......................................
+
+# ......................................................................
+
+# Entities for element classes and mixtures ............................
+
+# "Ubiquitous" classes: ndxterm.class and beginpage
+local.ndxterm.class = notAllowed
+ndxterm.class = indexterm | local.ndxterm.class
+# Object-level classes .................................................
+local.list.class = notAllowed
+list.class =
+ calloutlist
+ | glosslist
+ | itemizedlist
+ | orderedlist
+ | segmentedlist
+ | simplelist
+ | variablelist
+ | local.list.class
+local.admon.class = notAllowed
+admon.class =
+ caution | important | note | tip | warning | local.admon.class
+local.linespecific.class = notAllowed
+linespecific.class =
+ literallayout
+ | programlisting
+ | programlistingco
+ | screen
+ | screenco
+ | screenshot
+ | local.linespecific.class
+local.method.synop.class = notAllowed
+method.synop.class =
+ constructorsynopsis
+ | destructorsynopsis
+ | methodsynopsis
+ | local.method.synop.class
+local.synop.class = notAllowed
+synop.class =
+ synopsis
+ | cmdsynopsis
+ | funcsynopsis
+ | classsynopsis
+ | fieldsynopsis
+ | method.synop.class
+ | local.synop.class
+local.para.class = notAllowed
+para.class = formalpara | para | simpara | local.para.class
+local.informal.class = notAllowed
+informal.class =
+ address
+ | blockquote
+ | graphic
+ | graphicco
+ | mediaobject
+ | mediaobjectco
+ | informalequation
+ | informalexample
+ | informalfigure
+ | informaltable
+ | local.informal.class
+local.formal.class = notAllowed
+formal.class = equation | example | figure | table | local.formal.class
+# The DocBook TC may produce an official EBNF module for DocBook.
+
+# This PE provides the hook by which it can be inserted into the DTD.
+ebnf.block.hook = notAllowed
+local.compound.class = notAllowed
+compound.class =
+ msgset
+ | procedure
+ | sidebar
+ | qandaset
+ | ebnf.block.hook
+ | local.compound.class
+local.genobj.class = notAllowed
+genobj.class =
+ anchor | bridgehead | remark | highlights | local.genobj.class
+local.descobj.class = notAllowed
+descobj.class = abstract | authorblurb | epigraph | local.descobj.class
+# Character-level classes ..............................................
+local.xref.char.class = notAllowed
+xref.char.class = footnoteref | xref | local.xref.char.class
+local.gen.char.class = notAllowed
+gen.char.class =
+ abbrev
+ | acronym
+ | citation
+ | citerefentry
+ | citetitle
+ | emphasis
+ | firstterm
+ | foreignphrase
+ | glossterm
+ | footnote
+ | phrase
+ | quote
+ | trademark
+ | wordasword
+ | personname
+ | local.gen.char.class
+local.link.char.class = notAllowed
+link.char.class = link | olink | ulink | local.link.char.class
+# The DocBook TC may produce an official EBNF module for DocBook.
+
+# This PE provides the hook by which it can be inserted into the DTD.
+ebnf.inline.hook = notAllowed
+local.tech.char.class = notAllowed
+tech.char.class =
+ action
+ | application
+ | classname
+ | methodname
+ | interfacename
+ | exceptionname
+ | ooclass
+ | oointerface
+ | ooexception
+ | command
+ | computeroutput
+ | database
+ | email
+ | envar
+ | errorcode
+ | errorname
+ | errortype
+ | errortext
+ | filename
+ | function
+ | guibutton
+ | guiicon
+ | guilabel
+ | guimenu
+ | guimenuitem
+ | guisubmenu
+ | hardware
+ | interface
+ | keycap
+ | keycode
+ | keycombo
+ | keysym
+ | literal
+ | constant
+ | markup
+ | medialabel
+ | menuchoice
+ | mousebutton
+ | option
+ | optional
+ | parameter
+ | prompt
+ | property
+ | replaceable
+ | returnvalue
+ | sgmltag
+ | structfield
+ | structname
+ | symbol
+ | systemitem
+ | \token
+ | type
+ | userinput
+ | varname
+ | ebnf.inline.hook
+ | local.tech.char.class
+local.base.char.class = notAllowed
+base.char.class = anchor | local.base.char.class
+local.docinfo.char.class = notAllowed
+docinfo.char.class =
+ author
+ | authorinitials
+ | corpauthor
+ | modespec
+ | othercredit
+ | productname
+ | productnumber
+ | revhistory
+ | local.docinfo.char.class
+local.other.char.class = notAllowed
+other.char.class =
+ remark | subscript | superscript | local.other.char.class
+local.inlineobj.char.class = notAllowed
+inlineobj.char.class =
+ inlinegraphic
+ | inlinemediaobject
+ | inlineequation
+ | local.inlineobj.char.class
+# ......................................................................
+
+# Entities for content models ..........................................
+formalobject.title.content = title, titleabbrev?
+# Redeclaration placeholder ............................................
+
+# For redeclaring entities that are declared after this point while
+# retaining their references to the entities that are declared before
+# this point
+
+# Object-level mixtures ................................................
+
+# list admn line synp para infm form cmpd gen desc
+# Component mixture X X X X X X X X X X
+# Sidebar mixture X X X X X X X a X
+# Footnote mixture X X X X X
+# Example mixture X X X X X
+# Highlights mixture X X X
+# Paragraph mixture X X X X
+# Admonition mixture X X X X X X b c
+# Figure mixture X X X
+# Table entry mixture X X X X d
+# Glossary def mixture X X X X X e
+# Legal notice mixture X X X X f
+#
+# a. Just Procedure; not Sidebar itself or MsgSet.
+# b. No MsgSet.
+# c. No Highlights.
+# d. Just Graphic; no other informal objects.
+# e. No Anchor, BridgeHead, or Highlights.
+# f. Just BlockQuote; no other informal objects.
+local.component.mix = notAllowed
+component.mix =
+ list.class
+ | admon.class
+ | linespecific.class
+ | synop.class
+ | para.class
+ | informal.class
+ | formal.class
+ | compound.class
+ | genobj.class
+ | descobj.class
+ | ndxterm.class
+ | beginpage
+ | local.component.mix
+local.sidebar.mix = notAllowed
+sidebar.mix =
+ list.class
+ | admon.class
+ | linespecific.class
+ | synop.class
+ | para.class
+ | informal.class
+ | formal.class
+ | procedure
+ | genobj.class
+ | ndxterm.class
+ | beginpage
+ | local.sidebar.mix
+local.qandaset.mix = notAllowed
+qandaset.mix =
+ list.class
+ | admon.class
+ | linespecific.class
+ | synop.class
+ | para.class
+ | informal.class
+ | formal.class
+ | procedure
+ | genobj.class
+ | ndxterm.class
+ | local.qandaset.mix
+local.revdescription.mix = notAllowed
+revdescription.mix =
+ list.class
+ | admon.class
+ | linespecific.class
+ | synop.class
+ | para.class
+ | informal.class
+ | formal.class
+ | procedure
+ | genobj.class
+ | ndxterm.class
+ | local.revdescription.mix
+local.footnote.mix = notAllowed
+footnote.mix =
+ list.class
+ | linespecific.class
+ | synop.class
+ | para.class
+ | informal.class
+ | local.footnote.mix
+local.example.mix = notAllowed
+example.mix =
+ list.class
+ | linespecific.class
+ | synop.class
+ | para.class
+ | informal.class
+ | ndxterm.class
+ | beginpage
+ | local.example.mix
+local.highlights.mix = notAllowed
+highlights.mix =
+ list.class
+ | admon.class
+ | para.class
+ | ndxterm.class
+ | local.highlights.mix
+# %formal.class; is explicitly excluded from many contexts in which
+# paragraphs are used
+local.para.mix = notAllowed
+para.mix =
+ list.class
+ | admon.class
+ | linespecific.class
+ | informal.class
+ | formal.class
+ | local.para.mix
+local.admon.mix = notAllowed
+admon.mix =
+ list.class
+ | linespecific.class
+ | synop.class
+ | para.class
+ | informal.class
+ | formal.class
+ | procedure
+ | sidebar
+ | anchor
+ | bridgehead
+ | remark
+ | ndxterm.class
+ | beginpage
+ | local.admon.mix
+local.figure.mix = notAllowed
+figure.mix =
+ linespecific.class
+ | synop.class
+ | informal.class
+ | ndxterm.class
+ | beginpage
+ | local.figure.mix
+local.tabentry.mix = notAllowed
+tabentry.mix =
+ list.class
+ | admon.class
+ | linespecific.class
+ | para.class
+ | graphic
+ | mediaobject
+ | local.tabentry.mix
+local.glossdef.mix = notAllowed
+glossdef.mix =
+ list.class
+ | linespecific.class
+ | synop.class
+ | para.class
+ | informal.class
+ | formal.class
+ | remark
+ | ndxterm.class
+ | beginpage
+ | local.glossdef.mix
+local.legalnotice.mix = notAllowed
+legalnotice.mix =
+ list.class
+ | admon.class
+ | linespecific.class
+ | para.class
+ | blockquote
+ | ndxterm.class
+ | beginpage
+ | local.legalnotice.mix
+local.textobject.mix = notAllowed
+textobject.mix =
+ list.class
+ | admon.class
+ | linespecific.class
+ | para.class
+ | blockquote
+ | local.textobject.mix
+local.mediaobject.mix = notAllowed
+mediaobject.mix =
+ videoobject
+ | audioobject
+ | imageobject
+ | textobject
+ | local.mediaobject.mix
+local.listpreamble.mix = notAllowed
+listpreamble.mix =
+ admon.class
+ | linespecific.class
+ | synop.class
+ | para.class
+ | informal.class
+ | genobj.class
+ | descobj.class
+ | ndxterm.class
+ | beginpage
+ | local.listpreamble.mix
+# Character-level mixtures .............................................
+
+# sgml.features
+
+# not [sgml.features[
+
+# ]] not sgml.features
+
+# #PCD xref word link cptr base dnfo othr inob (synop)
+# para.char.mix X X X X X X X X X
+# title.char.mix X X X X X X X X X
+# ndxterm.char.mix X X X X X X X X a
+# cptr.char.mix X X X X X a
+# smallcptr.char.mix X b a
+# word.char.mix X c X X X a
+# docinfo.char.mix X d X b X a
+#
+# a. Just InlineGraphic; no InlineEquation.
+# b. Just Replaceable; no other computer terms.
+# c. Just Emphasis and Trademark; no other word elements.
+# d. Just Acronym, Emphasis, and Trademark; no other word elements.
+
+# The DocBook TC may produce an official forms module for DocBook.
+
+# This PE provides the hook by which it can be inserted into the DTD.
+forminlines.hook = notAllowed
+local.para.char.mix = notAllowed
+para.char.mix =
+ text
+ | xref.char.class
+ | gen.char.class
+ | link.char.class
+ | tech.char.class
+ | base.char.class
+ | docinfo.char.class
+ | other.char.class
+ | inlineobj.char.class
+ | synop.class
+ | ndxterm.class
+ | beginpage
+ | forminlines.hook
+ | local.para.char.mix
+local.title.char.mix = notAllowed
+title.char.mix =
+ text
+ | xref.char.class
+ | gen.char.class
+ | link.char.class
+ | tech.char.class
+ | base.char.class
+ | docinfo.char.class
+ | other.char.class
+ | inlineobj.char.class
+ | ndxterm.class
+ | local.title.char.mix
+local.ndxterm.char.mix = notAllowed
+ndxterm.char.mix =
+ text
+ | xref.char.class
+ | gen.char.class
+ | link.char.class
+ | tech.char.class
+ | base.char.class
+ | docinfo.char.class
+ | other.char.class
+ | inlinegraphic
+ | inlinemediaobject
+ | local.ndxterm.char.mix
+local.cptr.char.mix = notAllowed
+cptr.char.mix =
+ text
+ | link.char.class
+ | tech.char.class
+ | base.char.class
+ | other.char.class
+ | inlinegraphic
+ | inlinemediaobject
+ | ndxterm.class
+ | beginpage
+ | local.cptr.char.mix
+local.smallcptr.char.mix = notAllowed
+smallcptr.char.mix =
+ text
+ | replaceable
+ | inlinegraphic
+ | inlinemediaobject
+ | ndxterm.class
+ | beginpage
+ | local.smallcptr.char.mix
+local.word.char.mix = notAllowed
+word.char.mix =
+ text
+ | acronym
+ | emphasis
+ | trademark
+ | link.char.class
+ | base.char.class
+ | other.char.class
+ | inlinegraphic
+ | inlinemediaobject
+ | ndxterm.class
+ | beginpage
+ | local.word.char.mix
+local.docinfo.char.mix = notAllowed
+docinfo.char.mix =
+ text
+ | link.char.class
+ | emphasis
+ | trademark
+ | replaceable
+ | other.char.class
+ | inlinegraphic
+ | inlinemediaobject
+ | ndxterm.class
+ | local.docinfo.char.mix
+# ENTITY % bibliocomponent.mix (see Bibliographic section, below)
+
+# ENTITY % person.ident.mix (see Bibliographic section, below)
+
+# ......................................................................
+
+# Entities for attributes and attribute components .....................
+
+# Effectivity attributes ...............................................
+
+# Arch: Computer or chip architecture to which element applies; no
+# default
+arch.attrib = attribute arch { text }?
+# Condition: General-purpose effectivity attribute
+condition.attrib = attribute condition { text }?
+# Conformance: Standards conformance characteristics
+conformance.attrib = attribute conformance { xsd:NMTOKENS }?
+# OS: Operating system to which element applies; no default
+os.attrib = attribute os { text }?
+# Revision: Editorial revision to which element belongs; no default
+revision.attrib = attribute revision { text }?
+# Security: Security classification; no default
+security.attrib = attribute security { text }?
+# UserLevel: Level of user experience to which element applies; no
+# default
+userlevel.attrib = attribute userlevel { text }?
+# Vendor: Computer vendor to which element applies; no default
+vendor.attrib = attribute vendor { text }?
+local.effectivity.attrib = empty
+effectivity.attrib =
+ arch.attrib,
+ condition.attrib,
+ conformance.attrib,
+ os.attrib,
+ revision.attrib,
+ security.attrib,
+ userlevel.attrib,
+ vendor.attrib,
+ local.effectivity.attrib
+# Common attributes ....................................................
+
+# Id: Unique identifier of element; no default
+id.attrib = attribute id { xsd:ID }?
+# Id: Unique identifier of element; a value must be supplied; no
+# default
+idreq.attrib = attribute id { xsd:ID }
+# Lang: Indicator of language in which element is written, for
+# translation, character set management, etc.; no default
+lang.attrib = attribute lang { text }?
+# Remap: Previous role of element before conversion; no default
+remap.attrib = attribute remap { text }?
+# Role: New role of element in local environment; no default
+role.attrib = attribute role { text }?
+# XRefLabel: Alternate labeling string for XRef text generation;
+# default is usually title or other appropriate label text already
+# contained in element
+xreflabel.attrib = attribute xreflabel { text }?
+# RevisionFlag: Revision status of element; default is that element
+# wasn't revised
+revisionflag.attrib =
+ attribute revisionflag { "changed" | "added" | "deleted" | "off" }?
+local.common.attrib = empty
+# Role is included explicitly on each element
+common.attrib =
+ id.attrib,
+ lang.attrib,
+ remap.attrib,
+ xreflabel.attrib,
+ revisionflag.attrib,
+ effectivity.attrib,
+ local.common.attrib
+# Role is included explicitly on each element
+idreq.common.attrib =
+ idreq.attrib,
+ lang.attrib,
+ remap.attrib,
+ xreflabel.attrib,
+ revisionflag.attrib,
+ effectivity.attrib,
+ local.common.attrib
+# Semi-common attributes and other attribute entities ..................
+local.graphics.attrib = empty
+# EntityRef: Name of an external entity containing the content
+# of the graphic
+
+# FileRef: Filename, qualified by a pathname if desired,
+# designating the file containing the content of the graphic
+
+# Format: Notation of the element content, if any
+
+# SrcCredit: Information about the source of the Graphic
+
+# Width: Same as CALS reprowid (desired width)
+
+# Depth: Same as CALS reprodep (desired depth)
+
+# Align: Same as CALS hplace with 'none' removed; #IMPLIED means
+# application-specific
+
+# Scale: Conflation of CALS hscale and vscale
+
+# Scalefit: Same as CALS scalefit
+graphics.attrib =
+ attribute entityref { xsd:ENTITY }?,
+ attribute fileref { text }?,
+ attribute format { notation.class }?,
+ attribute srccredit { text }?,
+ attribute width { text }?,
+ attribute contentwidth { text }?,
+ attribute depth { text }?,
+ attribute contentdepth { text }?,
+ attribute align { "left" | "right" | "center" }?,
+ attribute valign { "top" | "middle" | "bottom" }?,
+ attribute scale { text }?,
+ attribute scalefit { yesorno.attvals }?,
+ local.graphics.attrib
+local.keyaction.attrib = empty
+# Action: Key combination type; default is unspecified if one
+# child element, Simul if there is more than one; if value is
+# Other, the OtherAction attribute must have a nonempty value
+
+# OtherAction: User-defined key combination type
+keyaction.attrib =
+ attribute action {
+ "click" | "double-click" | "press" | "seq" | "simul" | "other"
+ }?,
+ attribute otheraction { text }?,
+ local.keyaction.attrib
+# Label: Identifying number or string; default is usually the
+# appropriate number or string autogenerated by a formatter
+label.attrib = attribute label { text }?
+# Format: whether element is assumed to contain significant white
+# space
+linespecific.attrib =
+ [ a:defaultValue = "linespecific" ]
+ attribute format { "linespecific" }?,
+ attribute linenumbering { "numbered" | "unnumbered" }?
+# Linkend: link to related information; no default
+linkend.attrib = attribute linkend { xsd:IDREF }?
+# Linkend: required link to related information
+linkendreq.attrib = attribute linkend { xsd:IDREF }
+# Linkends: link to one or more sets of related information; no
+# default
+linkends.attrib = attribute linkends { xsd:IDREFS }?
+local.mark.attrib = empty
+mark.attrib =
+ attribute mark { text }?,
+ local.mark.attrib
+# MoreInfo: whether element's content has an associated RefEntry
+moreinfo.attrib =
+ [ a:defaultValue = "none" ]
+ attribute moreinfo { "refentry" | "none" }?
+# Pagenum: number of page on which element appears; no default
+pagenum.attrib = attribute pagenum { text }?
+local.status.attrib = empty
+# Status: Editorial or publication status of the element
+# it applies to, such as "in review" or "approved for distribution"
+status.attrib =
+ attribute status { text }?,
+ local.status.attrib
+# Width: width of the longest line in the element to which it
+# pertains, in number of characters
+width.attrib = attribute width { text }?
+# ......................................................................
+
+# Title elements .......................................................
+local.title.attrib = empty
+title.role.attrib = role.attrib
+title = element title { title.attlist, title.char.mix* }
+# end of title.element
+title.attlist &=
+ pagenum.attrib, common.attrib, title.role.attrib, local.title.attrib
+# end of title.attlist
+
+# end of title.module
+local.titleabbrev.attrib = empty
+titleabbrev.role.attrib = role.attrib
+titleabbrev =
+ element titleabbrev { titleabbrev.attlist, title.char.mix* }
+# end of titleabbrev.element
+titleabbrev.attlist &=
+ common.attrib, titleabbrev.role.attrib, local.titleabbrev.attrib
+# end of titleabbrev.attlist
+
+# end of titleabbrev.module
+local.subtitle.attrib = empty
+subtitle.role.attrib = role.attrib
+subtitle = element subtitle { subtitle.attlist, title.char.mix* }
+# end of subtitle.element
+subtitle.attlist &=
+ common.attrib, subtitle.role.attrib, local.subtitle.attrib
+# end of subtitle.attlist
+
+# end of subtitle.module
+
+# ......................................................................
+
+# Bibliographic entities and elements ..................................
+
+# The bibliographic elements are typically used in the document
+# hierarchy. They do not appear in content models of information
+# pool elements. See also the document information elements,
+# below.
+local.person.ident.mix = notAllowed
+person.ident.mix =
+ honorific
+ | firstname
+ | surname
+ | lineage
+ | othername
+ | affiliation
+ | authorblurb
+ | contrib
+ | local.person.ident.mix
+local.bibliocomponent.mix = notAllowed
+bibliocomponent.mix =
+ abbrev
+ | abstract
+ | address
+ | artpagenums
+ | author
+ | authorgroup
+ | authorinitials
+ | bibliomisc
+ | biblioset
+ | collab
+ | confgroup
+ | contractnum
+ | contractsponsor
+ | copyright
+ | corpauthor
+ | corpname
+ | date
+ | edition
+ | editor
+ | invpartnumber
+ | isbn
+ | issn
+ | issuenum
+ | orgname
+ | biblioid
+ | citebiblioid
+ | bibliosource
+ | bibliorelation
+ | bibliocoverage
+ | othercredit
+ | pagenums
+ | printhistory
+ | productname
+ | productnumber
+ | pubdate
+ | publisher
+ | publishername
+ | pubsnumber
+ | releaseinfo
+ | revhistory
+ | seriesvolnums
+ | subtitle
+ | title
+ | titleabbrev
+ | volumenum
+ | citetitle
+ | personname
+ | person.ident.mix
+ | ndxterm.class
+ | local.bibliocomponent.mix
+# I don't think this is well placed, but it needs to be here because of
+
+# the reference to bibliocomponent.mix
+local.info.class = notAllowed
+info.class =
+ graphic
+ | mediaobject
+ | legalnotice
+ | modespec
+ | subjectset
+ | keywordset
+ | itermset
+ | bibliocomponent.mix
+ | local.info.class
+local.biblioentry.attrib = empty
+biblioentry.role.attrib = role.attrib
+biblioentry =
+ element biblioentry {
+ biblioentry.attlist, (articleinfo | bibliocomponent.mix)+
+ }
+# end of biblioentry.element
+biblioentry.attlist &=
+ common.attrib, biblioentry.role.attrib, local.biblioentry.attrib
+# end of biblioentry.attlist
+
+# end of biblioentry.module
+local.bibliomixed.attrib = empty
+bibliomixed.role.attrib = role.attrib
+bibliomixed =
+ element bibliomixed {
+ bibliomixed.attlist, (text | bibliocomponent.mix | bibliomset)*
+ }
+# end of bibliomixed.element
+bibliomixed.attlist &=
+ common.attrib, bibliomixed.role.attrib, local.bibliomixed.attrib
+# end of bibliomixed.attlist
+
+# end of bibliomixed.module
+local.articleinfo.attrib = empty
+articleinfo.role.attrib = role.attrib
+articleinfo = element articleinfo { articleinfo.attlist, info.class+ }
+# end of articleinfo.element
+articleinfo.attlist &=
+ common.attrib, articleinfo.role.attrib, local.articleinfo.attrib
+# end of articleinfo.attlist
+
+# end of articleinfo.module
+local.biblioset.attrib = empty
+biblioset.role.attrib = role.attrib
+biblioset =
+ element biblioset { biblioset.attlist, bibliocomponent.mix+ }
+# end of biblioset.element
+
+# Relation: Relationship of elements contained within BiblioSet
+biblioset.attlist &=
+ attribute relation { text }?,
+ common.attrib,
+ biblioset.role.attrib,
+ local.biblioset.attrib
+# end of biblioset.attlist
+
+# end of biblioset.module
+bibliomset.role.attrib = role.attrib
+local.bibliomset.attrib = empty
+bibliomset =
+ element bibliomset {
+ bibliomset.attlist, (text | bibliocomponent.mix | bibliomset)*
+ }
+# end of bibliomset.element
+
+# Relation: Relationship of elements contained within BiblioMSet
+bibliomset.attlist &=
+ attribute relation { text }?,
+ common.attrib,
+ bibliomset.role.attrib,
+ local.bibliomset.attrib
+# end of bibliomset.attlist
+
+# end of bibliomset.module
+local.bibliomisc.attrib = empty
+bibliomisc.role.attrib = role.attrib
+bibliomisc = element bibliomisc { bibliomisc.attlist, para.char.mix* }
+# end of bibliomisc.element
+bibliomisc.attlist &=
+ common.attrib, bibliomisc.role.attrib, local.bibliomisc.attrib
+# end of bibliomisc.attlist
+
+# end of bibliomisc.module
+
+# ......................................................................
+
+# Subject, Keyword, and ITermSet elements ..............................
+local.subjectset.attrib = empty
+subjectset.role.attrib = role.attrib
+subjectset = element subjectset { subjectset.attlist, subject+ }
+# end of subjectset.element
+
+# Scheme: Controlled vocabulary employed in SubjectTerms
+subjectset.attlist &=
+ attribute scheme { xsd:NMTOKEN }?,
+ common.attrib,
+ subjectset.role.attrib,
+ local.subjectset.attrib
+# end of subjectset.attlist
+
+# end of subjectset.module
+local.subject.attrib = empty
+subject.role.attrib = role.attrib
+subject = element subject { subject.attlist, subjectterm+ }
+# end of subject.element
+
+# Weight: Ranking of this group of SubjectTerms relative
+# to others, 0 is low, no highest value specified
+subject.attlist &=
+ attribute weight { text }?,
+ common.attrib,
+ subject.role.attrib,
+ local.subject.attrib
+# end of subject.attlist
+
+# end of subject.module
+local.subjectterm.attrib = empty
+subjectterm.role.attrib = role.attrib
+subjectterm = element subjectterm { subjectterm.attlist, text }
+# end of subjectterm.element
+subjectterm.attlist &=
+ common.attrib, subjectterm.role.attrib, local.subjectterm.attrib
+# end of subjectterm.attlist
+
+# end of subjectterm.module
+
+# end of subjectset.content.module
+local.keywordset.attrib = empty
+keywordset.role.attrib = role.attrib
+keywordset = element keywordset { keywordset.attlist, keyword+ }
+# end of keywordset.element
+keywordset.attlist &=
+ common.attrib, keywordset.role.attrib, local.keywordset.attrib
+# end of keywordset.attlist
+
+# end of keywordset.module
+local.keyword.attrib = empty
+keyword.role.attrib = role.attrib
+keyword = element keyword { keyword.attlist, text }
+# end of keyword.element
+keyword.attlist &=
+ common.attrib, keyword.role.attrib, local.keyword.attrib
+# end of keyword.attlist
+
+# end of keyword.module
+
+# end of keywordset.content.module
+local.itermset.attrib = empty
+itermset.role.attrib = role.attrib
+itermset = element itermset { itermset.attlist, indexterm+ }
+# end of itermset.element
+itermset.attlist &=
+ common.attrib, itermset.role.attrib, local.itermset.attrib
+# end of itermset.attlist
+
+# end of itermset.module
+
+# Bibliographic info for "blocks"
+local.blockinfo.attrib = empty
+blockinfo.role.attrib = role.attrib
+blockinfo = element blockinfo { blockinfo.attlist, info.class+ }
+# end of blockinfo.element
+blockinfo.attlist &=
+ common.attrib, blockinfo.role.attrib, local.blockinfo.attrib
+# end of blockinfo.attlist
+
+# end of blockinfo.module
+
+# ......................................................................
+
+# Compound (section-ish) elements ......................................
+
+# Message set ......................
+local.msgset.attrib = empty
+msgset.role.attrib = role.attrib
+msgset =
+ element msgset {
+ msgset.attlist,
+ blockinfo?,
+ formalobject.title.content?,
+ (msgentry+ | simplemsgentry+)
+ }
+# end of msgset.element
+msgset.attlist &= common.attrib, msgset.role.attrib, local.msgset.attrib
+# end of msgset.attlist
+
+# end of msgset.module
+local.msgentry.attrib = empty
+msgentry.role.attrib = role.attrib
+msgentry =
+ element msgentry { msgentry.attlist, msg+, msginfo?, msgexplan* }
+# end of msgentry.element
+msgentry.attlist &=
+ common.attrib, msgentry.role.attrib, local.msgentry.attrib
+# end of msgentry.attlist
+
+# end of msgentry.module
+local.simplemsgentry.attrib = empty
+simplemsgentry.role.attrib = role.attrib
+simplemsgentry =
+ element simplemsgentry { simplemsgentry.attlist, msgtext, msgexplan+ }
+# end of simplemsgentry.element
+simplemsgentry.attlist &=
+ attribute audience { text }?,
+ attribute level { text }?,
+ attribute origin { text }?,
+ common.attrib,
+ simplemsgentry.role.attrib,
+ local.simplemsgentry.attrib
+# end of simplemsgentry.attlist
+
+# end of simplemsgentry.module
+local.msg.attrib = empty
+msg.role.attrib = role.attrib
+msg = element msg { msg.attlist, title?, msgmain, (msgsub | msgrel)* }
+# end of msg.element
+msg.attlist &= common.attrib, msg.role.attrib, local.msg.attrib
+# end of msg.attlist
+
+# end of msg.module
+local.msgmain.attrib = empty
+msgmain.role.attrib = role.attrib
+msgmain = element msgmain { msgmain.attlist, title?, msgtext }
+# end of msgmain.element
+msgmain.attlist &=
+ common.attrib, msgmain.role.attrib, local.msgmain.attrib
+# end of msgmain.attlist
+
+# end of msgmain.module
+local.msgsub.attrib = empty
+msgsub.role.attrib = role.attrib
+msgsub = element msgsub { msgsub.attlist, title?, msgtext }
+# end of msgsub.element
+msgsub.attlist &= common.attrib, msgsub.role.attrib, local.msgsub.attrib
+# end of msgsub.attlist
+
+# end of msgsub.module
+local.msgrel.attrib = empty
+msgrel.role.attrib = role.attrib
+msgrel = element msgrel { msgrel.attlist, title?, msgtext }
+# end of msgrel.element
+msgrel.attlist &= common.attrib, msgrel.role.attrib, local.msgrel.attrib
+# end of msgrel.attlist
+
+# end of msgrel.module
+
+# MsgText (defined in the Inlines section, below)
+local.msginfo.attrib = empty
+msginfo.role.attrib = role.attrib
+msginfo =
+ element msginfo { msginfo.attlist, (msglevel | msgorig | msgaud)* }
+# end of msginfo.element
+msginfo.attlist &=
+ common.attrib, msginfo.role.attrib, local.msginfo.attrib
+# end of msginfo.attlist
+
+# end of msginfo.module
+local.msglevel.attrib = empty
+msglevel.role.attrib = role.attrib
+msglevel = element msglevel { msglevel.attlist, smallcptr.char.mix* }
+# end of msglevel.element
+msglevel.attlist &=
+ common.attrib, msglevel.role.attrib, local.msglevel.attrib
+# end of msglevel.attlist
+
+# end of msglevel.module
+local.msgorig.attrib = empty
+msgorig.role.attrib = role.attrib
+msgorig = element msgorig { msgorig.attlist, smallcptr.char.mix* }
+# end of msgorig.element
+msgorig.attlist &=
+ common.attrib, msgorig.role.attrib, local.msgorig.attrib
+# end of msgorig.attlist
+
+# end of msgorig.module
+local.msgaud.attrib = empty
+msgaud.role.attrib = role.attrib
+msgaud = element msgaud { msgaud.attlist, para.char.mix* }
+# end of msgaud.element
+msgaud.attlist &= common.attrib, msgaud.role.attrib, local.msgaud.attrib
+# end of msgaud.attlist
+
+# end of msgaud.module
+local.msgexplan.attrib = empty
+msgexplan.role.attrib = role.attrib
+msgexplan =
+ element msgexplan { msgexplan.attlist, title?, component.mix+ }
+# end of msgexplan.element
+msgexplan.attlist &=
+ common.attrib, msgexplan.role.attrib, local.msgexplan.attrib
+# end of msgexplan.attlist
+
+# end of msgexplan.module
+
+# end of msgset.content.module
+
+# QandASet ........................
+local.qandaset.attrib = empty
+qandaset.role.attrib = role.attrib
+qandaset =
+ element qandaset {
+ qandaset.attlist,
+ blockinfo?,
+ formalobject.title.content?,
+ qandaset.mix*,
+ (qandadiv+ | qandaentry+)
+ }
+# end of qandaset.element
+qandaset.attlist &=
+ attribute defaultlabel { "qanda" | "number" | "none" }?,
+ common.attrib,
+ qandaset.role.attrib,
+ local.qandaset.attrib
+# end of qandaset.attlist
+
+# end of qandaset.module
+local.qandadiv.attrib = empty
+qandadiv.role.attrib = role.attrib
+qandadiv =
+ element qandadiv {
+ qandadiv.attlist,
+ blockinfo?,
+ formalobject.title.content?,
+ qandaset.mix*,
+ (qandadiv+ | qandaentry+)
+ }
+# end of qandadiv.element
+qandadiv.attlist &=
+ common.attrib, qandadiv.role.attrib, local.qandadiv.attrib
+# end of qandadiv.attlist
+
+# end of qandadiv.module
+local.qandaentry.attrib = empty
+qandaentry.role.attrib = role.attrib
+qandaentry =
+ element qandaentry {
+ qandaentry.attlist, blockinfo?, revhistory?, question, answer*
+ }
+# end of qandaentry.element
+qandaentry.attlist &=
+ common.attrib, qandaentry.role.attrib, local.qandaentry.attrib
+# end of qandaentry.attlist
+
+# end of qandaentry.module
+local.question.attrib = empty
+question.role.attrib = role.attrib
+question = element question { question.attlist, label?, qandaset.mix+ }
+# end of question.element
+question.attlist &=
+ common.attrib, question.role.attrib, local.question.attrib
+# end of question.attlist
+
+# end of question.module
+local.answer.attrib = empty
+answer.role.attrib = role.attrib
+answer =
+ element answer { answer.attlist, label?, qandaset.mix*, qandaentry* }
+# end of answer.element
+answer.attlist &= common.attrib, answer.role.attrib, local.answer.attrib
+# end of answer.attlist
+
+# end of answer.module
+local.label.attrib = empty
+label.role.attrib = role.attrib
+label = element label { label.attlist, word.char.mix* }
+# end of label.element
+label.attlist &= common.attrib, label.role.attrib, local.label.attrib
+# end of label.attlist
+
+# end of label.module
+
+# end of qandaset.content.module
+
+# Procedure ........................
+local.procedure.attrib = empty
+procedure.role.attrib = role.attrib
+procedure =
+ element procedure {
+ procedure.attlist,
+ blockinfo?,
+ formalobject.title.content?,
+ component.mix*,
+ step+
+ }
+# end of procedure.element
+procedure.attlist &=
+ common.attrib, procedure.role.attrib, local.procedure.attrib
+# end of procedure.attlist
+
+# end of procedure.module
+local.step.attrib = empty
+step.role.attrib = role.attrib
+step =
+ element step {
+ step.attlist,
+ title?,
+ ((component.mix+, (substeps, component.mix*)?)
+ | (substeps, component.mix*))
+ }
+# end of step.element
+
+# Performance: Whether the Step must be performed
+
+# not #REQUIRED!
+step.attlist &=
+ [ a:defaultValue = "required" ]
+ attribute performance { "optional" | "required" }?,
+ common.attrib,
+ step.role.attrib,
+ local.step.attrib
+# end of step.attlist
+
+# end of step.module
+local.substeps.attrib = empty
+substeps.role.attrib = role.attrib
+substeps = element substeps { substeps.attlist, step+ }
+# end of substeps.element
+
+# Performance: whether entire set of substeps must be performed
+
+# not #REQUIRED!
+substeps.attlist &=
+ [ a:defaultValue = "required" ]
+ attribute performance { "optional" | "required" }?,
+ common.attrib,
+ substeps.role.attrib,
+ local.substeps.attrib
+# end of substeps.attlist
+
+# end of substeps.module
+
+# end of procedure.content.module
+
+# Sidebar ..........................
+local.sidebarinfo.attrib = empty
+sidebarinfo.role.attrib = role.attrib
+sidebarinfo = element sidebarinfo { sidebarinfo.attlist, info.class+ }
+# end of sidebarinfo.element
+sidebarinfo.attlist &=
+ common.attrib, sidebarinfo.role.attrib, local.sidebarinfo.attrib
+# end of sidebarinfo.attlist
+
+# end of sidebarinfo.module
+local.sidebar.attrib = empty
+sidebar.role.attrib = role.attrib
+sidebar =
+ element sidebar {
+ sidebar.attlist,
+ sidebarinfo?,
+ formalobject.title.content?,
+ sidebar.mix+
+ }
+# end of sidebar.element
+sidebar.attlist &=
+ common.attrib, sidebar.role.attrib, local.sidebar.attrib
+# end of sidebar.attlist
+
+# end of sidebar.module
+
+# end of sidebar.content.model
+
+# ......................................................................
+
+# Paragraph-related elements ...........................................
+local.abstract.attrib = empty
+abstract.role.attrib = role.attrib
+abstract = element abstract { abstract.attlist, title?, para.class+ }
+# end of abstract.element
+abstract.attlist &=
+ common.attrib, abstract.role.attrib, local.abstract.attrib
+# end of abstract.attlist
+
+# end of abstract.module
+local.authorblurb.attrib = empty
+authorblurb.role.attrib = role.attrib
+authorblurb =
+ element authorblurb { authorblurb.attlist, title?, para.class+ }
+# end of authorblurb.element
+authorblurb.attlist &=
+ common.attrib, authorblurb.role.attrib, local.authorblurb.attrib
+# end of authorblurb.attlist
+
+# end of authorblurb.module
+local.personblurb.attrib = empty
+personblurb.role.attrib = role.attrib
+personblurb =
+ element personblurb { personblurb.attlist, title?, para.class+ }
+# end of personblurb.element
+personblurb.attlist &=
+ common.attrib, personblurb.role.attrib, local.personblurb.attrib
+# end of personblurb.attlist
+
+# end of personblurb.module
+local.blockquote.attrib = empty
+blockquote.role.attrib = role.attrib
+blockquote =
+ element blockquote {
+ blockquote.attlist, title?, attribution?, component.mix+
+ }
+# end of blockquote.element
+blockquote.attlist &=
+ common.attrib, blockquote.role.attrib, local.blockquote.attrib
+# end of blockquote.attlist
+
+# end of blockquote.module
+local.attribution.attrib = empty
+attribution.role.attrib = role.attrib
+attribution =
+ element attribution { attribution.attlist, para.char.mix* }
+# end of attribution.element
+attribution.attlist &=
+ common.attrib, attribution.role.attrib, local.attribution.attrib
+# end of attribution.attlist
+
+# end of attribution.module
+local.bridgehead.attrib = empty
+bridgehead.role.attrib = role.attrib
+bridgehead = element bridgehead { bridgehead.attlist, title.char.mix* }
+# end of bridgehead.element
+
+# Renderas: Indicates the format in which the BridgeHead
+# should appear
+bridgehead.attlist &=
+ attribute renderas {
+ "other" | "sect1" | "sect2" | "sect3" | "sect4" | "sect5"
+ }?,
+ common.attrib,
+ bridgehead.role.attrib,
+ local.bridgehead.attrib
+# end of bridgehead.attlist
+
+# end of bridgehead.module
+local.remark.attrib = empty
+remark.role.attrib = role.attrib
+remark = element remark { remark.attlist, para.char.mix* }
+# end of remark.element
+remark.attlist &= common.attrib, remark.role.attrib, local.remark.attrib
+# end of remark.attlist
+
+# end of remark.module
+local.epigraph.attrib = empty
+epigraph.role.attrib = role.attrib
+epigraph =
+ element epigraph {
+ epigraph.attlist, attribution?, (para.class | literallayout)+
+ }
+# end of epigraph.element
+epigraph.attlist &=
+ common.attrib, epigraph.role.attrib, local.epigraph.attrib
+# end of epigraph.attlist
+
+# Attribution (defined above)
+
+# end of epigraph.module
+local.footnote.attrib = empty
+footnote.role.attrib = role.attrib
+footnote = element footnote { footnote.attlist, footnote.mix+ }
+# end of footnote.element
+footnote.attlist &=
+ label.attrib,
+ common.attrib,
+ footnote.role.attrib,
+ local.footnote.attrib
+# end of footnote.attlist
+
+# end of footnote.module
+local.highlights.attrib = empty
+highlights.role.attrib = role.attrib
+highlights = element highlights { highlights.attlist, highlights.mix+ }
+# end of highlights.element
+highlights.attlist &=
+ common.attrib, highlights.role.attrib, local.highlights.attrib
+# end of highlights.attlist
+
+# end of highlights.module
+local.formalpara.attrib = empty
+formalpara.role.attrib = role.attrib
+formalpara =
+ element formalpara { formalpara.attlist, title, ndxterm.class*, para }
+# end of formalpara.element
+formalpara.attlist &=
+ common.attrib, formalpara.role.attrib, local.formalpara.attrib
+# end of formalpara.attlist
+
+# end of formalpara.module
+local.para.attrib = empty
+para.role.attrib = role.attrib
+para = element para { para.attlist, (para.char.mix | para.mix)* }
+# end of para.element
+para.attlist &= common.attrib, para.role.attrib, local.para.attrib
+# end of para.attlist
+
+# end of para.module
+local.simpara.attrib = empty
+simpara.role.attrib = role.attrib
+simpara = element simpara { simpara.attlist, para.char.mix* }
+# end of simpara.element
+simpara.attlist &=
+ common.attrib, simpara.role.attrib, local.simpara.attrib
+# end of simpara.attlist
+
+# end of simpara.module
+local.admon.attrib = empty
+admon.role.attrib = role.attrib
+caution = element caution { caution.attlist, title?, admon.mix+ }
+# end of caution.element
+caution.attlist &= common.attrib, admon.role.attrib, local.admon.attrib
+# end of caution.attlist
+important = element important { important.attlist, title?, admon.mix+ }
+# end of important.element
+important.attlist &=
+ common.attrib, admon.role.attrib, local.admon.attrib
+# end of important.attlist
+note = element note { note.attlist, title?, admon.mix+ }
+# end of note.element
+note.attlist &= common.attrib, admon.role.attrib, local.admon.attrib
+# end of note.attlist
+tip = element tip { tip.attlist, title?, admon.mix+ }
+# end of tip.element
+tip.attlist &= common.attrib, admon.role.attrib, local.admon.attrib
+# end of tip.attlist
+warning = element warning { warning.attlist, title?, admon.mix+ }
+# end of warning.element
+warning.attlist &= common.attrib, admon.role.attrib, local.admon.attrib
+# end of warning.attlist
+
+# end of admon.module
+
+# ......................................................................
+
+# Lists ................................................................
+
+# GlossList ........................
+local.glosslist.attrib = empty
+glosslist.role.attrib = role.attrib
+glosslist = element glosslist { glosslist.attlist, glossentry+ }
+# end of glosslist.element
+glosslist.attlist &=
+ common.attrib, glosslist.role.attrib, local.glosslist.attrib
+# end of glosslist.attlist
+
+# end of glosslist.module
+local.glossentry.attrib = empty
+glossentry.role.attrib = role.attrib
+glossentry =
+ element glossentry {
+ glossentry.attlist,
+ glossterm,
+ acronym?,
+ abbrev?,
+ ndxterm.class*,
+ revhistory?,
+ (glosssee | glossdef+)
+ }
+# end of glossentry.element
+
+# SortAs: String by which the GlossEntry is to be sorted
+# (alphabetized) in lieu of its proper content
+glossentry.attlist &=
+ attribute sortas { text }?,
+ common.attrib,
+ glossentry.role.attrib,
+ local.glossentry.attrib
+# end of glossentry.attlist
+
+# end of glossentry.module
+
+# GlossTerm (defined in the Inlines section, below)
+local.glossdef.attrib = empty
+glossdef.role.attrib = role.attrib
+glossdef =
+ element glossdef { glossdef.attlist, glossdef.mix+, glossseealso* }
+# end of glossdef.element
+
+# Subject: List of subjects; keywords for the definition
+glossdef.attlist &=
+ attribute subject { text }?,
+ common.attrib,
+ glossdef.role.attrib,
+ local.glossdef.attrib
+# end of glossdef.attlist
+
+# end of glossdef.module
+local.glosssee.attrib = empty
+glosssee.role.attrib = role.attrib
+glosssee = element glosssee { glosssee.attlist, para.char.mix* }
+# end of glosssee.element
+
+# OtherTerm: Reference to the GlossEntry whose GlossTerm
+# should be displayed at the point of the GlossSee
+glosssee.attlist &=
+ attribute otherterm { xsd:IDREF }?,
+ common.attrib,
+ glosssee.role.attrib,
+ local.glosssee.attrib
+# end of glosssee.attlist
+
+# end of glosssee.module
+local.glossseealso.attrib = empty
+glossseealso.role.attrib = role.attrib
+glossseealso =
+ element glossseealso { glossseealso.attlist, para.char.mix* }
+# end of glossseealso.element
+
+# OtherTerm: Reference to the GlossEntry whose GlossTerm
+# should be displayed at the point of the GlossSeeAlso
+glossseealso.attlist &=
+ attribute otherterm { xsd:IDREF }?,
+ common.attrib,
+ glossseealso.role.attrib,
+ local.glossseealso.attrib
+# end of glossseealso.attlist
+
+# end of glossseealso.module
+
+# end of glossentry.content.module
+
+# ItemizedList and OrderedList .....
+local.itemizedlist.attrib = empty
+itemizedlist.role.attrib = role.attrib
+itemizedlist =
+ element itemizedlist {
+ itemizedlist.attlist,
+ blockinfo?,
+ formalobject.title.content?,
+ listpreamble.mix*,
+ listitem+
+ }
+# end of itemizedlist.element
+
+# Spacing: Whether the vertical space in the list should be
+# compressed
+
+# Mark: Keyword, e.g., bullet, dash, checkbox, none;
+# list of keywords and defaults are implementation specific
+itemizedlist.attlist &=
+ attribute spacing { "normal" | "compact" }?,
+ mark.attrib,
+ common.attrib,
+ itemizedlist.role.attrib,
+ local.itemizedlist.attrib
+# end of itemizedlist.attlist
+
+# end of itemizedlist.module
+local.orderedlist.attrib = empty
+orderedlist.role.attrib = role.attrib
+orderedlist =
+ element orderedlist {
+ orderedlist.attlist,
+ blockinfo?,
+ formalobject.title.content?,
+ listpreamble.mix*,
+ listitem+
+ }
+# end of orderedlist.element
+
+# Numeration: Style of ListItem numbered; default is expected
+# to be Arabic
+
+# InheritNum: Specifies for a nested list that the numbering
+# of ListItems should include the number of the item
+# within which they are nested (e.g., 1a and 1b within 1,
+# rather than a and b)
+
+# Continuation: Where list numbering begins afresh (Restarts,
+# the default) or continues that of the immediately preceding
+# list (Continues)
+
+# Spacing: Whether the vertical space in the list should be
+# compressed
+orderedlist.attlist &=
+ attribute numeration {
+ "arabic" | "upperalpha" | "loweralpha" | "upperroman" | "lowerroman"
+ }?,
+ [ a:defaultValue = "ignore" ]
+ attribute inheritnum { "inherit" | "ignore" }?,
+ [ a:defaultValue = "restarts" ]
+ attribute continuation { "continues" | "restarts" }?,
+ attribute spacing { "normal" | "compact" }?,
+ common.attrib,
+ orderedlist.role.attrib,
+ local.orderedlist.attrib
+# end of orderedlist.attlist
+
+# end of orderedlist.module
+local.listitem.attrib = empty
+listitem.role.attrib = role.attrib
+listitem = element listitem { listitem.attlist, component.mix+ }
+# end of listitem.element
+
+# Override: Indicates the mark to be used for this ListItem
+# instead of the default mark or the mark specified by
+# the Mark attribute on the enclosing ItemizedList
+listitem.attlist &=
+ attribute override { text }?,
+ common.attrib,
+ listitem.role.attrib,
+ local.listitem.attrib
+# end of listitem.attlist
+
+# end of listitem.module
+
+# SegmentedList ....................
+local.segmentedlist.attrib = empty
+segmentedlist.role.attrib = role.attrib
+segmentedlist =
+ element segmentedlist {
+ segmentedlist.attlist,
+ formalobject.title.content?,
+ segtitle+,
+ seglistitem+
+ }
+# end of segmentedlist.element
+segmentedlist.attlist &=
+ common.attrib, segmentedlist.role.attrib, local.segmentedlist.attrib
+# end of segmentedlist.attlist
+
+# end of segmentedlist.module
+local.segtitle.attrib = empty
+segtitle.role.attrib = role.attrib
+segtitle = element segtitle { segtitle.attlist, title.char.mix* }
+# end of segtitle.element
+segtitle.attlist &=
+ common.attrib, segtitle.role.attrib, local.segtitle.attrib
+# end of segtitle.attlist
+
+# end of segtitle.module
+local.seglistitem.attrib = empty
+seglistitem.role.attrib = role.attrib
+seglistitem = element seglistitem { seglistitem.attlist, seg+ }
+# end of seglistitem.element
+seglistitem.attlist &=
+ common.attrib, seglistitem.role.attrib, local.seglistitem.attrib
+# end of seglistitem.attlist
+
+# end of seglistitem.module
+local.seg.attrib = empty
+seg.role.attrib = role.attrib
+seg = element seg { seg.attlist, para.char.mix* }
+# end of seg.element
+seg.attlist &= common.attrib, seg.role.attrib, local.seg.attrib
+# end of seg.attlist
+
+# end of seg.module
+
+# end of segmentedlist.content.module
+
+# SimpleList .......................
+local.simplelist.attrib = empty
+simplelist.role.attrib = role.attrib
+simplelist = element simplelist { simplelist.attlist, member+ }
+# end of simplelist.element
+
+# Columns: The number of columns the array should contain
+
+# Type: How the Members of the SimpleList should be
+# formatted: Inline (members separated with commas etc.
+# inline), Vert (top to bottom in n Columns), or Horiz (in
+# the direction of text flow) in n Columns. If Column
+# is 1 or implied, Type=Vert and Type=Horiz give the same
+# results.
+simplelist.attlist &=
+ attribute columns { text }?,
+ [ a:defaultValue = "vert" ]
+ attribute type { "inline" | "vert" | "horiz" }?,
+ common.attrib,
+ simplelist.role.attrib,
+ local.simplelist.attrib
+# end of simplelist.attlist
+
+# end of simplelist.module
+local.member.attrib = empty
+member.role.attrib = role.attrib
+member = element member { member.attlist, para.char.mix* }
+# end of member.element
+member.attlist &= common.attrib, member.role.attrib, local.member.attrib
+# end of member.attlist
+
+# end of member.module
+
+# end of simplelist.content.module
+
+# VariableList .....................
+local.variablelist.attrib = empty
+variablelist.role.attrib = role.attrib
+variablelist =
+ element variablelist {
+ variablelist.attlist,
+ blockinfo?,
+ formalobject.title.content?,
+ listpreamble.mix*,
+ varlistentry+
+ }
+# end of variablelist.element
+
+# TermLength: Length beyond which the presentation engine
+# may consider the Term too long and select an alternate
+# presentation of the Term and, or, its associated ListItem.
+variablelist.attlist &=
+ attribute termlength { text }?,
+ common.attrib,
+ variablelist.role.attrib,
+ local.variablelist.attrib
+# end of variablelist.attlist
+
+# end of variablelist.module
+local.varlistentry.attrib = empty
+varlistentry.role.attrib = role.attrib
+varlistentry =
+ element varlistentry { varlistentry.attlist, term+, listitem }
+# end of varlistentry.element
+varlistentry.attlist &=
+ common.attrib, varlistentry.role.attrib, local.varlistentry.attrib
+# end of varlistentry.attlist
+
+# end of varlistentry.module
+local.term.attrib = empty
+term.role.attrib = role.attrib
+term = element term { term.attlist, para.char.mix* }
+# end of term.element
+term.attlist &= common.attrib, term.role.attrib, local.term.attrib
+# end of term.attlist
+
+# end of term.module
+
+# ListItem (defined above)
+
+# end of variablelist.content.module
+
+# CalloutList ......................
+local.calloutlist.attrib = empty
+calloutlist.role.attrib = role.attrib
+calloutlist =
+ element calloutlist {
+ calloutlist.attlist, formalobject.title.content?, callout+
+ }
+# end of calloutlist.element
+calloutlist.attlist &=
+ common.attrib, calloutlist.role.attrib, local.calloutlist.attrib
+# end of calloutlist.attlist
+
+# end of calloutlist.module
+local.callout.attrib = empty
+callout.role.attrib = role.attrib
+callout = element callout { callout.attlist, component.mix+ }
+# end of callout.element
+
+# AreaRefs: IDs of one or more Areas or AreaSets described
+# by this Callout
+callout.attlist &=
+ attribute arearefs { xsd:IDREFS },
+ common.attrib,
+ callout.role.attrib,
+ local.callout.attrib
+# end of callout.attlist
+
+# end of callout.module
+
+# end of calloutlist.content.module
+
+# ......................................................................
+
+# Objects ..............................................................
+
+# Examples etc. ....................
+local.example.attrib = empty
+example.role.attrib = role.attrib
+example =
+ element example {
+ example.attlist,
+ blockinfo?,
+ formalobject.title.content,
+ example.mix+
+ }
+# end of example.element
+example.attlist &=
+ label.attrib,
+ width.attrib,
+ common.attrib,
+ example.role.attrib,
+ local.example.attrib
+# end of example.attlist
+
+# end of example.module
+local.informalexample.attrib = empty
+informalexample.role.attrib = role.attrib
+informalexample =
+ element informalexample {
+ informalexample.attlist, blockinfo?, example.mix+
+ }
+# end of informalexample.element
+informalexample.attlist &=
+ width.attrib,
+ common.attrib,
+ informalexample.role.attrib,
+ local.informalexample.attrib
+# end of informalexample.attlist
+
+# end of informalexample.module
+local.programlistingco.attrib = empty
+programlistingco.role.attrib = role.attrib
+programlistingco =
+ element programlistingco {
+ programlistingco.attlist, areaspec, programlisting, calloutlist*
+ }
+# end of programlistingco.element
+programlistingco.attlist &=
+ common.attrib,
+ programlistingco.role.attrib,
+ local.programlistingco.attrib
+# end of programlistingco.attlist
+
+# CalloutList (defined above in Lists)
+
+# end of informalexample.module
+local.areaspec.attrib = empty
+areaspec.role.attrib = role.attrib
+areaspec = element areaspec { areaspec.attlist, (area | areaset)+ }
+# end of areaspec.element
+
+# Units: global unit of measure in which coordinates in
+# this spec are expressed:
+#
+# - CALSPair "x1,y1 x2,y2": lower-left and upper-right
+# coordinates in a rectangle describing repro area in which
+# graphic is placed, where X and Y dimensions are each some
+# number 0..10000 (taken from CALS graphic attributes)
+#
+# - LineColumn "line column": line number and column number
+# at which to start callout text in "linespecific" content
+#
+# - LineRange "startline endline": whole lines from startline
+# to endline in "linespecific" content
+#
+# - LineColumnPair "line1 col1 line2 col2": starting and ending
+# points of area in "linespecific" content that starts at
+# first position and ends at second position (including the
+# beginnings of any intervening lines)
+#
+# - Other: directive to look at value of OtherUnits attribute
+# to get implementation-specific keyword
+#
+# The default is implementation-specific; usually dependent on
+# the parent element (GraphicCO gets CALSPair, ProgramListingCO
+# and ScreenCO get LineColumn)
+
+# OtherUnits: User-defined units
+areaspec.attlist &=
+ attribute units {
+ "calspair" | "linecolumn" | "linerange" | "linecolumnpair" | "other"
+ }?,
+ attribute otherunits { xsd:NMTOKEN }?,
+ common.attrib,
+ areaspec.role.attrib,
+ local.areaspec.attrib
+# end of areaspec.attlist
+
+# end of areaspec.module
+local.area.attrib = empty
+area.role.attrib = role.attrib
+area = element area { area.attlist, empty }
+# end of area.element
+
+# bug number/symbol override or initialization
+
+# to any related information
+
+# Units: unit of measure in which coordinates in this
+# area are expressed; inherits from AreaSet and AreaSpec
+
+# OtherUnits: User-defined units
+area.attlist &=
+ label.attrib,
+ linkends.attrib,
+ attribute units {
+ "calspair" | "linecolumn" | "linerange" | "linecolumnpair" | "other"
+ }?,
+ attribute otherunits { xsd:NMTOKEN }?,
+ attribute coords { text },
+ idreq.common.attrib,
+ area.role.attrib,
+ local.area.attrib
+# end of area.attlist
+
+# end of area.module
+local.areaset.attrib = empty
+areaset.role.attrib = role.attrib
+areaset = element areaset { areaset.attlist, area+ }
+# end of areaset.element
+
+# bug number/symbol override or initialization
+
+# Units: unit of measure in which coordinates in this
+# area are expressed; inherits from AreaSpec
+areaset.attlist &=
+ label.attrib,
+ attribute units {
+ "calspair" | "linecolumn" | "linerange" | "linecolumnpair" | "other"
+ }?,
+ attribute otherunits { xsd:NMTOKEN }?,
+ attribute coords { text },
+ idreq.common.attrib,
+ areaset.role.attrib,
+ local.areaset.attrib
+# end of areaset.attlist
+
+# end of areaset.module
+
+# end of areaspec.content.module
+local.programlisting.attrib = empty
+programlisting.role.attrib = role.attrib
+programlisting =
+ element programlisting {
+ programlisting.attlist,
+ (para.char.mix | co | coref | lineannotation | textobject)*
+ }
+# end of programlisting.element
+programlisting.attlist &=
+ width.attrib,
+ linespecific.attrib,
+ common.attrib,
+ programlisting.role.attrib,
+ local.programlisting.attrib
+# end of programlisting.attlist
+
+# end of programlisting.module
+local.literallayout.attrib = empty
+literallayout.role.attrib = role.attrib
+literallayout =
+ element literallayout {
+ literallayout.attlist,
+ (para.char.mix | co | coref | textobject | lineannotation)*
+ }
+# end of literallayout.element
+literallayout.attlist &=
+ width.attrib,
+ linespecific.attrib,
+ [ a:defaultValue = "normal" ]
+ attribute class { "monospaced" | "normal" }?,
+ common.attrib,
+ literallayout.role.attrib,
+ local.literallayout.attrib
+# end of literallayout.attlist
+
+# LineAnnotation (defined in the Inlines section, below)
+
+# end of literallayout.module
+local.screenco.attrib = empty
+screenco.role.attrib = role.attrib
+screenco =
+ element screenco { screenco.attlist, areaspec, screen, calloutlist* }
+# end of screenco.element
+screenco.attlist &=
+ common.attrib, screenco.role.attrib, local.screenco.attrib
+# end of screenco.attlist
+
+# AreaSpec (defined above)
+
+# CalloutList (defined above in Lists)
+
+# end of screenco.module
+local.screen.attrib = empty
+screen.role.attrib = role.attrib
+screen =
+ element screen {
+ screen.attlist,
+ (para.char.mix | co | coref | textobject | lineannotation)*
+ }
+# end of screen.element
+screen.attlist &=
+ width.attrib,
+ linespecific.attrib,
+ common.attrib,
+ screen.role.attrib,
+ local.screen.attrib
+# end of screen.attlist
+
+# end of screen.module
+local.screenshot.attrib = empty
+screenshot.role.attrib = role.attrib
+screenshot =
+ element screenshot {
+ screenshot.attlist,
+ screeninfo?,
+ (graphic | graphicco | mediaobject | mediaobjectco)
+ }
+# end of screenshot.element
+screenshot.attlist &=
+ common.attrib, screenshot.role.attrib, local.screenshot.attrib
+# end of screenshot.attlist
+
+# end of screenshot.module
+local.screeninfo.attrib = empty
+screeninfo.role.attrib = role.attrib
+screeninfo = element screeninfo { screeninfo.attlist, para.char.mix* }
+# end of screeninfo.element
+screeninfo.attlist &=
+ common.attrib, screeninfo.role.attrib, local.screeninfo.attrib
+# end of screeninfo.attlist
+
+# end of screeninfo.module
+
+# end of screenshot.content.module
+
+# Figures etc. .....................
+local.figure.attrib = empty
+figure.role.attrib = role.attrib
+figure =
+ element figure {
+ figure.attlist,
+ blockinfo?,
+ formalobject.title.content,
+ (figure.mix | link.char.class)+
+ }
+# end of figure.element
+
+# Float: Whether the Figure is supposed to be rendered
+# where convenient (yes (1) value) or at the place it occurs
+# in the text (no (0) value, the default)
+figure.attlist &=
+ [ a:defaultValue = "0" ] attribute float { yesorno.attvals }?,
+ attribute pgwide { yesorno.attvals }?,
+ label.attrib,
+ common.attrib,
+ figure.role.attrib,
+ local.figure.attrib
+# end of figure.attlist
+
+# end of figure.module
+local.informalfigure.attrib = empty
+informalfigure.role.attrib = role.attrib
+informalfigure =
+ element informalfigure {
+ informalfigure.attlist, blockinfo?, (figure.mix | link.char.class)+
+ }
+# end of informalfigure.element
+
+# Float: Whether the Figure is supposed to be rendered
+# where convenient (yes (1) value) or at the place it occurs
+# in the text (no (0) value, the default)
+informalfigure.attlist &=
+ [ a:defaultValue = "0" ] attribute float { yesorno.attvals }?,
+ attribute pgwide { yesorno.attvals }?,
+ label.attrib,
+ common.attrib,
+ informalfigure.role.attrib,
+ local.informalfigure.attrib
+# end of informalfigure.attlist
+
+# end of informalfigure.module
+local.graphicco.attrib = empty
+graphicco.role.attrib = role.attrib
+graphicco =
+ element graphicco {
+ graphicco.attlist, areaspec, graphic, calloutlist*
+ }
+# end of graphicco.element
+graphicco.attlist &=
+ common.attrib, graphicco.role.attrib, local.graphicco.attrib
+# end of graphicco.attlist
+
+# AreaSpec (defined above in Examples)
+
+# CalloutList (defined above in Lists)
+
+# end of graphicco.module
+
+# Graphical data can be the content of Graphic, or you can reference
+# an external file either as an entity (Entitref) or a filename
+# (Fileref).
+local.graphic.attrib = empty
+graphic.role.attrib = role.attrib
+graphic = element graphic { graphic.attlist, empty }
+# end of graphic.element
+graphic.attlist &=
+ graphics.attrib,
+ common.attrib,
+ graphic.role.attrib,
+ local.graphic.attrib
+# end of graphic.attlist
+
+# end of graphic.module
+local.inlinegraphic.attrib = empty
+inlinegraphic.role.attrib = role.attrib
+inlinegraphic = element inlinegraphic { inlinegraphic.attlist, empty }
+# end of inlinegraphic.element
+inlinegraphic.attlist &=
+ graphics.attrib,
+ common.attrib,
+ inlinegraphic.role.attrib,
+ local.inlinegraphic.attrib
+# end of inlinegraphic.attlist
+
+# end of inlinegraphic.module
+local.mediaobject.attrib = empty
+mediaobject.role.attrib = role.attrib
+mediaobject =
+ element mediaobject {
+ mediaobject.attlist, objectinfo?, mediaobject.mix+, caption?
+ }
+# end of mediaobject.element
+mediaobject.attlist &=
+ common.attrib, mediaobject.role.attrib, local.mediaobject.attrib
+# end of mediaobject.attlist
+
+# end of mediaobject.module
+local.inlinemediaobject.attrib = empty
+inlinemediaobject.role.attrib = role.attrib
+inlinemediaobject =
+ element inlinemediaobject {
+ inlinemediaobject.attlist, objectinfo?, mediaobject.mix+
+ }
+# end of inlinemediaobject.element
+inlinemediaobject.attlist &=
+ common.attrib,
+ inlinemediaobject.role.attrib,
+ local.inlinemediaobject.attrib
+# end of inlinemediaobject.attlist
+
+# end of inlinemediaobject.module
+local.videoobject.attrib = empty
+videoobject.role.attrib = role.attrib
+videoobject =
+ element videoobject { videoobject.attlist, objectinfo?, videodata }
+# end of videoobject.element
+videoobject.attlist &=
+ common.attrib, videoobject.role.attrib, local.videoobject.attrib
+# end of videoobject.attlist
+
+# end of videoobject.module
+local.audioobject.attrib = empty
+audioobject.role.attrib = role.attrib
+audioobject =
+ element audioobject { audioobject.attlist, objectinfo?, audiodata }
+# end of audioobject.element
+audioobject.attlist &=
+ common.attrib, audioobject.role.attrib, local.audioobject.attrib
+# end of audioobject.attlist
+
+# end of audioobject.module
+local.imageobject.attrib = empty
+imageobject.role.attrib = role.attrib
+imageobject =
+ element imageobject { imageobject.attlist, objectinfo?, imagedata }
+# end of imageobject.element
+imageobject.attlist &=
+ common.attrib, imageobject.role.attrib, local.imageobject.attrib
+# end of imageobject.attlist
+
+# end of imageobject.module
+local.textobject.attrib = empty
+textobject.role.attrib = role.attrib
+textobject =
+ element textobject {
+ textobject.attlist,
+ objectinfo?,
+ (phrase | textdata | textobject.mix+)
+ }
+# end of textobject.element
+textobject.attlist &=
+ common.attrib, textobject.role.attrib, local.textobject.attrib
+# end of textobject.attlist
+
+# end of textobject.module
+local.objectinfo.attrib = empty
+objectinfo.role.attrib = role.attrib
+objectinfo = element objectinfo { objectinfo.attlist, info.class+ }
+# end of objectinfo.element
+objectinfo.attlist &=
+ common.attrib, objectinfo.role.attrib, local.objectinfo.attrib
+# end of objectinfo.attlist
+
+# end of objectinfo.module
+
+# EntityRef: Name of an external entity containing the content
+# of the object data
+
+# FileRef: Filename, qualified by a pathname if desired,
+# designating the file containing the content of the object data
+
+# Format: Notation of the element content, if any
+
+# SrcCredit: Information about the source of the image
+local.objectdata.attrib = empty
+objectdata.attrib =
+ attribute entityref { xsd:ENTITY }?,
+ attribute fileref { text }?,
+ attribute format { notation.class }?,
+ attribute srccredit { text }?,
+ local.objectdata.attrib
+local.videodata.attrib = empty
+videodata.role.attrib = role.attrib
+videodata = element videodata { videodata.attlist, empty }
+# end of videodata.element
+
+# Width: Same as CALS reprowid (desired width)
+
+# Depth: Same as CALS reprodep (desired depth)
+
+# Align: Same as CALS hplace with 'none' removed; #IMPLIED means
+# application-specific
+
+# Scale: Conflation of CALS hscale and vscale
+
+# Scalefit: Same as CALS scalefit
+videodata.attlist &=
+ attribute width { text }?,
+ attribute contentwidth { text }?,
+ attribute depth { text }?,
+ attribute contentdepth { text }?,
+ attribute align { "left" | "right" | "center" }?,
+ attribute valign { "top" | "middle" | "bottom" }?,
+ attribute scale { text }?,
+ attribute scalefit { yesorno.attvals }?,
+ objectdata.attrib,
+ common.attrib,
+ videodata.role.attrib,
+ local.videodata.attrib
+# end of videodata.attlist
+
+# end of videodata.module
+local.audiodata.attrib = empty
+audiodata.role.attrib = role.attrib
+audiodata = element audiodata { audiodata.attlist, empty }
+# end of audiodata.element
+audiodata.attlist &=
+ objectdata.attrib,
+ common.attrib,
+ audiodata.role.attrib,
+ local.audiodata.attrib
+# end of audiodata.attlist
+
+# end of audiodata.module
+local.imagedata.attrib = empty
+imagedata.role.attrib = role.attrib
+imagedata = element imagedata { imagedata.attlist, empty }
+# end of imagedata.element
+
+# Width: Same as CALS reprowid (desired width)
+
+# Depth: Same as CALS reprodep (desired depth)
+
+# Align: Same as CALS hplace with 'none' removed; #IMPLIED means
+# application-specific
+
+# Scale: Conflation of CALS hscale and vscale
+
+# Scalefit: Same as CALS scalefit
+imagedata.attlist &=
+ attribute width { text }?,
+ attribute contentwidth { text }?,
+ attribute depth { text }?,
+ attribute contentdepth { text }?,
+ attribute align { "left" | "right" | "center" }?,
+ attribute valign { "top" | "middle" | "bottom" }?,
+ attribute scale { text }?,
+ attribute scalefit { yesorno.attvals }?,
+ objectdata.attrib,
+ common.attrib,
+ imagedata.role.attrib,
+ local.imagedata.attrib
+# end of imagedata.attlist
+
+# end of imagedata.module
+local.textdata.attrib = empty
+textdata.role.attrib = role.attrib
+textdata = element textdata { textdata.attlist, empty }
+# end of textdata.element
+textdata.attlist &=
+ attribute encoding { text }?,
+ objectdata.attrib,
+ common.attrib,
+ textdata.role.attrib,
+ local.textdata.attrib
+# end of textdata.attlist
+
+# end of textdata.module
+local.caption.attrib = empty
+caption.role.attrib = role.attrib
+caption = element caption { caption.attlist, textobject.mix* }
+# end of caption.element
+caption.attlist &=
+ common.attrib, caption.role.attrib, local.caption.attrib
+# end of caption.attlist
+
+# end of caption.module
+local.mediaobjectco.attrib = empty
+mediaobjectco.role.attrib = role.attrib
+mediaobjectco =
+ element mediaobjectco {
+ mediaobjectco.attlist,
+ objectinfo?,
+ imageobjectco,
+ (imageobjectco | textobject)*
+ }
+# end of mediaobjectco.element
+mediaobjectco.attlist &=
+ common.attrib, mediaobjectco.role.attrib, local.mediaobjectco.attrib
+# end of mediaobjectco.attlist
+
+# end of mediaobjectco.module
+local.imageobjectco.attrib = empty
+imageobjectco.role.attrib = role.attrib
+imageobjectco =
+ element imageobjectco {
+ imageobjectco.attlist, areaspec, imageobject, calloutlist*
+ }
+# end of imageobjectco.element
+imageobjectco.attlist &=
+ common.attrib, imageobjectco.role.attrib, local.imageobjectco.attrib
+# end of imageobjectco.attlist
+
+# end of imageobjectco.module
+
+# end of mediaobject.content.module
+
+# Equations ........................
+
+# This PE provides a mechanism for replacing equation content,
+
+# perhaps adding a new or different model (e.g., MathML)
+equation.content = alt?, (graphic+ | mediaobject+)
+inlineequation.content = alt?, (graphic+ | inlinemediaobject+)
+local.equation.attrib = empty
+equation.role.attrib = role.attrib
+equation =
+ element equation {
+ equation.attlist,
+ blockinfo?,
+ formalobject.title.content?,
+ (informalequation | equation.content)
+ }
+# end of equation.element
+equation.attlist &=
+ label.attrib,
+ common.attrib,
+ equation.role.attrib,
+ local.equation.attrib
+# end of equation.attlist
+
+# end of equation.module
+local.informalequation.attrib = empty
+informalequation.role.attrib = role.attrib
+informalequation =
+ element informalequation {
+ informalequation.attlist, blockinfo?, equation.content
+ }
+# end of informalequation.element
+informalequation.attlist &=
+ common.attrib,
+ informalequation.role.attrib,
+ local.informalequation.attrib
+# end of informalequation.attlist
+
+# end of informalequation.module
+local.inlineequation.attrib = empty
+inlineequation.role.attrib = role.attrib
+inlineequation =
+ element inlineequation {
+ inlineequation.attlist, inlineequation.content
+ }
+# end of inlineequation.element
+inlineequation.attlist &=
+ common.attrib, inlineequation.role.attrib, local.inlineequation.attrib
+# end of inlineequation.attlist
+
+# end of inlineequation.module
+local.alt.attrib = empty
+alt.role.attrib = role.attrib
+alt = element alt { alt.attlist, text }
+# end of alt.element
+alt.attlist &= common.attrib, alt.role.attrib, local.alt.attrib
+# end of alt.attlist
+
+# end of alt.module
+
+# Tables ...........................
+
+tables.role.attrib = role.attrib
+
+# Note that InformalTable is dependent on some of the entity
+# declarations that customize Table.
+local.informaltable.attrib = empty
+informaltable =
+ element informaltable {
+ informaltable.attlist,
+ blockinfo?,
+ textobject*,
+ (graphic+ | mediaobject+ | tgroup+)
+ }
+# end of informaltable.element
+
+# Frame, Colsep, and Rowsep must be repeated because
+# they are not in entities in the table module.
+
+# includes TabStyle, ToCentry, ShortEntry,
+# Orient, PgWide
+
+# includes Label
+
+# includes common attributes
+informaltable.attlist &=
+ attribute frame {
+ "top" | "bottom" | "topbot" | "all" | "sides" | "none"
+ }?,
+ attribute colsep { yesorno.attvals }?,
+ attribute rowsep { yesorno.attvals }?,
+ common.table.attribs,
+ tbl.table.att,
+ local.informaltable.attrib
+# end of informaltable.attlist
+
+# end of informaltable.module
+
+# ......................................................................
+
+# Synopses .............................................................
+
+# Synopsis .........................
+local.synopsis.attrib = empty
+synopsis.role.attrib = role.attrib
+synopsis =
+ element synopsis {
+ synopsis.attlist,
+ (para.char.mix
+ | graphic
+ | mediaobject
+ | co
+ | coref
+ | textobject
+ | lineannotation)*
+ }
+# end of synopsis.element
+synopsis.attlist &=
+ label.attrib,
+ linespecific.attrib,
+ common.attrib,
+ synopsis.role.attrib,
+ local.synopsis.attrib
+# end of synopsis.attlist
+
+# LineAnnotation (defined in the Inlines section, below)
+
+# end of synopsis.module
+
+# CmdSynopsis ......................
+local.cmdsynopsis.attrib = empty
+cmdsynopsis.role.attrib = role.attrib
+cmdsynopsis =
+ element cmdsynopsis {
+ cmdsynopsis.attlist, (command | arg | group | sbr)+, synopfragment*
+ }
+# end of cmdsynopsis.element
+
+# Sepchar: Character that should separate command and all
+# top-level arguments; alternate value might be e.g., &Delta;
+cmdsynopsis.attlist &=
+ label.attrib,
+ [ a:defaultValue = " " ] attribute sepchar { text }?,
+ attribute cmdlength { text }?,
+ common.attrib,
+ cmdsynopsis.role.attrib,
+ local.cmdsynopsis.attrib
+# end of cmdsynopsis.attlist
+
+# end of cmdsynopsis.module
+local.arg.attrib = empty
+arg.role.attrib = role.attrib
+arg =
+ element arg {
+ arg.attlist,
+ (text
+ | arg
+ | group
+ | option
+ | synopfragmentref
+ | replaceable
+ | sbr)*
+ }
+# end of arg.element
+
+# Choice: Whether Arg must be supplied: Opt (optional to
+# supply, e.g. [arg]; the default), Req (required to supply,
+# e.g. {arg}), or Plain (required to supply, e.g. arg)
+
+# Rep: whether Arg is repeatable: Norepeat (e.g. arg without
+# ellipsis; the default), or Repeat (e.g. arg...)
+arg.attlist &=
+ [ a:defaultValue = "opt" ]
+ attribute choice { "opt" | "req" | "plain" }?,
+ [ a:defaultValue = "norepeat" ]
+ attribute rep { "norepeat" | "repeat" }?,
+ common.attrib,
+ arg.role.attrib,
+ local.arg.attrib
+# end of arg.attlist
+
+# end of arg.module
+local.group.attrib = empty
+group.role.attrib = role.attrib
+group =
+ element group {
+ group.attlist,
+ (arg | group | option | synopfragmentref | replaceable | sbr)+
+ }
+# end of group.element
+
+# Choice: Whether Group must be supplied: Opt (optional to
+# supply, e.g. [g1|g2|g3]; the default), Req (required to
+# supply, e.g. {g1|g2|g3}), Plain (required to supply,
+# e.g. g1|g2|g3), OptMult (can supply zero or more, e.g.
+# [[g1|g2|g3]]), or ReqMult (must supply one or more, e.g.
+# {{g1|g2|g3}})
+
+# Rep: whether Group is repeatable: Norepeat (e.g. group
+# without ellipsis; the default), or Repeat (e.g. group...)
+group.attlist &=
+ [ a:defaultValue = "opt" ]
+ attribute choice { "opt" | "req" | "plain" }?,
+ [ a:defaultValue = "norepeat" ]
+ attribute rep { "norepeat" | "repeat" }?,
+ common.attrib,
+ group.role.attrib,
+ local.group.attrib
+# end of group.attlist
+
+# end of group.module
+local.sbr.attrib = empty
+# Synopsis break
+sbr.role.attrib = role.attrib
+sbr = element sbr { sbr.attlist, empty }
+# end of sbr.element
+sbr.attlist &= common.attrib, sbr.role.attrib, local.sbr.attrib
+# end of sbr.attlist
+
+# end of sbr.module
+local.synopfragmentref.attrib = empty
+synopfragmentref.role.attrib = role.attrib
+synopfragmentref =
+ element synopfragmentref { synopfragmentref.attlist, text }
+# end of synopfragmentref.element
+
+# to SynopFragment of complex synopsis
+# material for separate referencing
+synopfragmentref.attlist &=
+ linkendreq.attrib,
+ common.attrib,
+ synopfragmentref.role.attrib,
+ local.synopfragmentref.attrib
+# end of synopfragmentref.attlist
+
+# end of synopfragmentref.module
+local.synopfragment.attrib = empty
+synopfragment.role.attrib = role.attrib
+synopfragment =
+ element synopfragment { synopfragment.attlist, (arg | group)+ }
+# end of synopfragment.element
+synopfragment.attlist &=
+ idreq.common.attrib,
+ synopfragment.role.attrib,
+ local.synopfragment.attrib
+# end of synopfragment.attlist
+
+# end of synopfragment.module
+
+# Command (defined in the Inlines section, below)
+
+# Option (defined in the Inlines section, below)
+
+# Replaceable (defined in the Inlines section, below)
+
+# end of cmdsynopsis.content.module
+
+# FuncSynopsis .....................
+local.funcsynopsis.attrib = empty
+funcsynopsis.role.attrib = role.attrib
+funcsynopsis =
+ element funcsynopsis {
+ funcsynopsis.attlist, (funcsynopsisinfo | funcprototype)+
+ }
+# end of funcsynopsis.element
+funcsynopsis.attlist &=
+ label.attrib,
+ common.attrib,
+ funcsynopsis.role.attrib,
+ local.funcsynopsis.attrib
+# end of funcsynopsis.attlist
+
+# end of funcsynopsis.module
+local.funcsynopsisinfo.attrib = empty
+funcsynopsisinfo.role.attrib = role.attrib
+funcsynopsisinfo =
+ element funcsynopsisinfo {
+ funcsynopsisinfo.attlist,
+ (cptr.char.mix | textobject | lineannotation)*
+ }
+# end of funcsynopsisinfo.element
+funcsynopsisinfo.attlist &=
+ linespecific.attrib,
+ common.attrib,
+ funcsynopsisinfo.role.attrib,
+ local.funcsynopsisinfo.attrib
+# end of funcsynopsisinfo.attlist
+
+# end of funcsynopsisinfo.module
+local.funcprototype.attrib = empty
+funcprototype.role.attrib = role.attrib
+funcprototype =
+ element funcprototype {
+ funcprototype.attlist, funcdef, (void | varargs | paramdef+)
+ }
+# end of funcprototype.element
+funcprototype.attlist &=
+ common.attrib, funcprototype.role.attrib, local.funcprototype.attrib
+# end of funcprototype.attlist
+
+# end of funcprototype.module
+local.funcdef.attrib = empty
+funcdef.role.attrib = role.attrib
+funcdef =
+ element funcdef {
+ funcdef.attlist, (text | type | replaceable | function)*
+ }
+# end of funcdef.element
+funcdef.attlist &=
+ common.attrib, funcdef.role.attrib, local.funcdef.attrib
+# end of funcdef.attlist
+
+# end of funcdef.module
+local.void.attrib = empty
+void.role.attrib = role.attrib
+void = element void { void.attlist, empty }
+# end of void.element
+void.attlist &= common.attrib, void.role.attrib, local.void.attrib
+# end of void.attlist
+
+# end of void.module
+local.varargs.attrib = empty
+varargs.role.attrib = role.attrib
+varargs = element varargs { varargs.attlist, empty }
+# end of varargs.element
+varargs.attlist &=
+ common.attrib, varargs.role.attrib, local.varargs.attrib
+# end of varargs.attlist
+
+# end of varargs.module
+
+# Processing assumes that only one Parameter will appear in a
+# ParamDef, and that FuncParams will be used at most once, for
+# providing information on the "inner parameters" for parameters that
+# are pointers to functions.
+local.paramdef.attrib = empty
+paramdef.role.attrib = role.attrib
+paramdef =
+ element paramdef {
+ paramdef.attlist,
+ (text | type | replaceable | parameter | funcparams)*
+ }
+# end of paramdef.element
+paramdef.attlist &=
+ common.attrib, paramdef.role.attrib, local.paramdef.attrib
+# end of paramdef.attlist
+
+# end of paramdef.module
+local.funcparams.attrib = empty
+funcparams.role.attrib = role.attrib
+funcparams = element funcparams { funcparams.attlist, cptr.char.mix* }
+# end of funcparams.element
+funcparams.attlist &=
+ common.attrib, funcparams.role.attrib, local.funcparams.attrib
+# end of funcparams.attlist
+
+# end of funcparams.module
+
+# LineAnnotation (defined in the Inlines section, below)
+
+# Replaceable (defined in the Inlines section, below)
+
+# Function (defined in the Inlines section, below)
+
+# Parameter (defined in the Inlines section, below)
+
+# end of funcsynopsis.content.module
+
+# ClassSynopsis .....................
+local.classsynopsis.attrib = empty
+classsynopsis.role.attrib = role.attrib
+classsynopsis =
+ element classsynopsis {
+ classsynopsis.attlist,
+ (ooclass | oointerface | ooexception)+,
+ (classsynopsisinfo | fieldsynopsis | method.synop.class)*
+ }
+# end of classsynopsis.element
+classsynopsis.attlist &=
+ attribute language { text }?,
+ [ a:defaultValue = "class" ]
+ attribute class { "class" | "interface" }?,
+ common.attrib,
+ classsynopsis.role.attrib,
+ local.classsynopsis.attrib
+# end of classsynopsis.attlist
+
+# end of classsynopsis.module
+local.classsynopsisinfo.attrib = empty
+classsynopsisinfo.role.attrib = role.attrib
+classsynopsisinfo =
+ element classsynopsisinfo {
+ classsynopsisinfo.attlist,
+ (cptr.char.mix | textobject | lineannotation)*
+ }
+# end of classsynopsisinfo.element
+classsynopsisinfo.attlist &=
+ linespecific.attrib,
+ common.attrib,
+ classsynopsisinfo.role.attrib,
+ local.classsynopsisinfo.attrib
+# end of classsynopsisinfo.attlist
+
+# end of classsynopsisinfo.module
+local.ooclass.attrib = empty
+ooclass.role.attrib = role.attrib
+ooclass = element ooclass { ooclass.attlist, modifier*, classname }
+# end of ooclass.element
+ooclass.attlist &=
+ common.attrib, ooclass.role.attrib, local.ooclass.attrib
+# end of ooclass.attlist
+
+# end of ooclass.module
+local.oointerface.attrib = empty
+oointerface.role.attrib = role.attrib
+oointerface =
+ element oointerface { oointerface.attlist, modifier*, interfacename }
+# end of oointerface.element
+oointerface.attlist &=
+ common.attrib, oointerface.role.attrib, local.oointerface.attrib
+# end of oointerface.attlist
+
+# end of oointerface.module
+local.ooexception.attrib = empty
+ooexception.role.attrib = role.attrib
+ooexception =
+ element ooexception { ooexception.attlist, modifier*, exceptionname }
+# end of ooexception.element
+ooexception.attlist &=
+ common.attrib, ooexception.role.attrib, local.ooexception.attrib
+# end of ooexception.attlist
+
+# end of ooexception.module
+local.modifier.attrib = empty
+modifier.role.attrib = role.attrib
+modifier = element modifier { modifier.attlist, smallcptr.char.mix* }
+# end of modifier.element
+modifier.attlist &=
+ common.attrib, modifier.role.attrib, local.modifier.attrib
+# end of modifier.attlist
+
+# end of modifier.module
+local.interfacename.attrib = empty
+interfacename.role.attrib = role.attrib
+interfacename =
+ element interfacename { interfacename.attlist, cptr.char.mix* }
+# end of interfacename.element
+interfacename.attlist &=
+ common.attrib, interfacename.role.attrib, local.interfacename.attrib
+# end of interfacename.attlist
+
+# end of interfacename.module
+local.exceptionname.attrib = empty
+exceptionname.role.attrib = role.attrib
+exceptionname =
+ element exceptionname { exceptionname.attlist, smallcptr.char.mix* }
+# end of exceptionname.element
+exceptionname.attlist &=
+ common.attrib, exceptionname.role.attrib, local.exceptionname.attrib
+# end of exceptionname.attlist
+
+# end of exceptionname.module
+local.fieldsynopsis.attrib = empty
+fieldsynopsis.role.attrib = role.attrib
+fieldsynopsis =
+ element fieldsynopsis {
+ fieldsynopsis.attlist, modifier*, type?, varname, initializer?
+ }
+# end of fieldsynopsis.element
+fieldsynopsis.attlist &=
+ attribute language { text }?,
+ common.attrib,
+ fieldsynopsis.role.attrib,
+ local.fieldsynopsis.attrib
+# end of fieldsynopsis.attlist
+
+# end of fieldsynopsis.module
+local.initializer.attrib = empty
+initializer.role.attrib = role.attrib
+initializer =
+ element initializer { initializer.attlist, smallcptr.char.mix* }
+# end of initializer.element
+initializer.attlist &=
+ common.attrib, initializer.role.attrib, local.initializer.attrib
+# end of initializer.attlist
+
+# end of initializer.module
+local.constructorsynopsis.attrib = empty
+constructorsynopsis.role.attrib = role.attrib
+constructorsynopsis =
+ element constructorsynopsis {
+ constructorsynopsis.attlist,
+ modifier*,
+ methodname?,
+ (methodparam+ | void),
+ exceptionname*
+ }
+# end of constructorsynopsis.element
+constructorsynopsis.attlist &=
+ attribute language { text }?,
+ common.attrib,
+ constructorsynopsis.role.attrib,
+ local.constructorsynopsis.attrib
+# end of constructorsynopsis.attlist
+
+# end of constructorsynopsis.module
+local.destructorsynopsis.attrib = empty
+destructorsynopsis.role.attrib = role.attrib
+destructorsynopsis =
+ element destructorsynopsis {
+ destructorsynopsis.attlist,
+ modifier*,
+ methodname?,
+ (methodparam+ | void),
+ exceptionname*
+ }
+# end of destructorsynopsis.element
+destructorsynopsis.attlist &=
+ attribute language { text }?,
+ common.attrib,
+ destructorsynopsis.role.attrib,
+ local.destructorsynopsis.attrib
+# end of destructorsynopsis.attlist
+
+# end of destructorsynopsis.module
+local.methodsynopsis.attrib = empty
+methodsynopsis.role.attrib = role.attrib
+methodsynopsis =
+ element methodsynopsis {
+ methodsynopsis.attlist,
+ modifier*,
+ (type | void)?,
+ methodname,
+ (methodparam+ | void),
+ exceptionname*,
+ modifier*
+ }
+# end of methodsynopsis.element
+methodsynopsis.attlist &=
+ attribute language { text }?,
+ common.attrib,
+ methodsynopsis.role.attrib,
+ local.methodsynopsis.attrib
+# end of methodsynopsis.attlist
+
+# end of methodsynopsis.module
+local.methodname.attrib = empty
+methodname.role.attrib = role.attrib
+methodname =
+ element methodname { methodname.attlist, smallcptr.char.mix* }
+# end of methodname.element
+methodname.attlist &=
+ common.attrib, methodname.role.attrib, local.methodname.attrib
+# end of methodname.attlist
+
+# end of methodname.module
+local.methodparam.attrib = empty
+methodparam.role.attrib = role.attrib
+methodparam =
+ element methodparam {
+ methodparam.attlist,
+ modifier*,
+ type?,
+ ((parameter, initializer?) | funcparams),
+ modifier*
+ }
+# end of methodparam.element
+methodparam.attlist &=
+ [ a:defaultValue = "req" ]
+ attribute choice { "opt" | "req" | "plain" }?,
+ [ a:defaultValue = "norepeat" ]
+ attribute rep { "norepeat" | "repeat" }?,
+ common.attrib,
+ methodparam.role.attrib,
+ local.methodparam.attrib
+# end of methodparam.attlist
+
+# end of methodparam.module
+
+# end of classsynopsis.content.module
+
+# ......................................................................
+
+# Document information entities and elements ...........................
+
+# The document information elements include some elements that are
+# currently used only in the document hierarchy module. They are
+# defined here so that they will be available for use in customized
+# document hierarchies.
+
+# ..................................
+
+# Ackno ............................
+local.ackno.attrib = empty
+ackno.role.attrib = role.attrib
+ackno = element ackno { ackno.attlist, docinfo.char.mix* }
+# end of ackno.element
+ackno.attlist &= common.attrib, ackno.role.attrib, local.ackno.attrib
+# end of ackno.attlist
+
+# end of ackno.module
+
+# Address ..........................
+local.address.attrib = empty
+address.role.attrib = role.attrib
+address =
+ element address {
+ address.attlist,
+ (text
+ | personname
+ | person.ident.mix
+ | street
+ | pob
+ | postcode
+ | city
+ | state
+ | country
+ | phone
+ | fax
+ | email
+ | otheraddr)*
+ }
+# end of address.element
+address.attlist &=
+ linespecific.attrib,
+ common.attrib,
+ address.role.attrib,
+ local.address.attrib
+# end of address.attlist
+
+# end of address.module
+local.street.attrib = empty
+street.role.attrib = role.attrib
+street = element street { street.attlist, docinfo.char.mix* }
+# end of street.element
+street.attlist &= common.attrib, street.role.attrib, local.street.attrib
+# end of street.attlist
+
+# end of street.module
+local.pob.attrib = empty
+pob.role.attrib = role.attrib
+pob = element pob { pob.attlist, docinfo.char.mix* }
+# end of pob.element
+pob.attlist &= common.attrib, pob.role.attrib, local.pob.attrib
+# end of pob.attlist
+
+# end of pob.module
+local.postcode.attrib = empty
+postcode.role.attrib = role.attrib
+postcode = element postcode { postcode.attlist, docinfo.char.mix* }
+# end of postcode.element
+postcode.attlist &=
+ common.attrib, postcode.role.attrib, local.postcode.attrib
+# end of postcode.attlist
+
+# end of postcode.module
+local.city.attrib = empty
+city.role.attrib = role.attrib
+city = element city { city.attlist, docinfo.char.mix* }
+# end of city.element
+city.attlist &= common.attrib, city.role.attrib, local.city.attrib
+# end of city.attlist
+
+# end of city.module
+local.state.attrib = empty
+state.role.attrib = role.attrib
+state = element state { state.attlist, docinfo.char.mix* }
+# end of state.element
+state.attlist &= common.attrib, state.role.attrib, local.state.attrib
+# end of state.attlist
+
+# end of state.module
+local.country.attrib = empty
+country.role.attrib = role.attrib
+country = element country { country.attlist, docinfo.char.mix* }
+# end of country.element
+country.attlist &=
+ common.attrib, country.role.attrib, local.country.attrib
+# end of country.attlist
+
+# end of country.module
+local.phone.attrib = empty
+phone.role.attrib = role.attrib
+phone = element phone { phone.attlist, docinfo.char.mix* }
+# end of phone.element
+phone.attlist &= common.attrib, phone.role.attrib, local.phone.attrib
+# end of phone.attlist
+
+# end of phone.module
+local.fax.attrib = empty
+fax.role.attrib = role.attrib
+fax = element fax { fax.attlist, docinfo.char.mix* }
+# end of fax.element
+fax.attlist &= common.attrib, fax.role.attrib, local.fax.attrib
+# end of fax.attlist
+
+# end of fax.module
+
+# Email (defined in the Inlines section, below)
+local.otheraddr.attrib = empty
+otheraddr.role.attrib = role.attrib
+otheraddr = element otheraddr { otheraddr.attlist, docinfo.char.mix* }
+# end of otheraddr.element
+otheraddr.attlist &=
+ common.attrib, otheraddr.role.attrib, local.otheraddr.attrib
+# end of otheraddr.attlist
+
+# end of otheraddr.module
+
+# end of address.content.module
+
+# Affiliation ......................
+local.affiliation.attrib = empty
+affiliation.role.attrib = role.attrib
+affiliation =
+ element affiliation {
+ affiliation.attlist,
+ shortaffil?,
+ jobtitle*,
+ orgname?,
+ orgdiv*,
+ address*
+ }
+# end of affiliation.element
+affiliation.attlist &=
+ common.attrib, affiliation.role.attrib, local.affiliation.attrib
+# end of affiliation.attlist
+
+# end of affiliation.module
+local.shortaffil.attrib = empty
+shortaffil.role.attrib = role.attrib
+shortaffil =
+ element shortaffil { shortaffil.attlist, docinfo.char.mix* }
+# end of shortaffil.element
+shortaffil.attlist &=
+ common.attrib, shortaffil.role.attrib, local.shortaffil.attrib
+# end of shortaffil.attlist
+
+# end of shortaffil.module
+local.jobtitle.attrib = empty
+jobtitle.role.attrib = role.attrib
+jobtitle = element jobtitle { jobtitle.attlist, docinfo.char.mix* }
+# end of jobtitle.element
+jobtitle.attlist &=
+ common.attrib, jobtitle.role.attrib, local.jobtitle.attrib
+# end of jobtitle.attlist
+
+# end of jobtitle.module
+
+# OrgName (defined elsewhere in this section)
+local.orgdiv.attrib = empty
+orgdiv.role.attrib = role.attrib
+orgdiv = element orgdiv { orgdiv.attlist, docinfo.char.mix* }
+# end of orgdiv.element
+orgdiv.attlist &= common.attrib, orgdiv.role.attrib, local.orgdiv.attrib
+# end of orgdiv.attlist
+
+# end of orgdiv.module
+
+# Address (defined elsewhere in this section)
+
+# end of affiliation.content.module
+
+# ArtPageNums ......................
+local.artpagenums.attrib = empty
+artpagenums.role.attrib = role.attrib
+artpagenums =
+ element artpagenums { artpagenums.attlist, docinfo.char.mix* }
+# end of artpagenums.element
+artpagenums.attlist &=
+ common.attrib, artpagenums.role.attrib, local.artpagenums.attrib
+# end of artpagenums.attlist
+
+# end of artpagenums.module
+
+# PersonName
+local.personname.attrib = empty
+personname.role.attrib = role.attrib
+personname =
+ element personname {
+ personname.attlist,
+ (honorific | firstname | surname | lineage | othername)+
+ }
+# end of personname.element
+personname.attlist &=
+ common.attrib, personname.role.attrib, local.personname.attrib
+# end of personname.attlist
+
+# end of personname.module
+
+# Author ...........................
+local.author.attrib = empty
+author.role.attrib = role.attrib
+author =
+ element author {
+ author.attlist,
+ (personname | person.ident.mix+),
+ (personblurb | email | address)*
+ }
+# end of author.element
+author.attlist &= common.attrib, author.role.attrib, local.author.attrib
+# end of author.attlist
+
+# (see "Personal identity elements" for %person.ident.mix;)
+
+# end of author.module
+
+# AuthorGroup ......................
+local.authorgroup.attrib = empty
+authorgroup.role.attrib = role.attrib
+authorgroup =
+ element authorgroup {
+ authorgroup.attlist,
+ (author | editor | collab | corpauthor | othercredit)+
+ }
+# end of authorgroup.element
+authorgroup.attlist &=
+ common.attrib, authorgroup.role.attrib, local.authorgroup.attrib
+# end of authorgroup.attlist
+
+# end of authorgroup.module
+
+# Author (defined elsewhere in this section)
+
+# Editor (defined elsewhere in this section)
+local.collab.attrib = empty
+collab.role.attrib = role.attrib
+collab = element collab { collab.attlist, collabname, affiliation* }
+# end of collab.element
+collab.attlist &= common.attrib, collab.role.attrib, local.collab.attrib
+# end of collab.attlist
+
+# end of collab.module
+local.collabname.attrib = empty
+collabname.role.attrib = role.attrib
+collabname =
+ element collabname { collabname.attlist, docinfo.char.mix* }
+# end of collabname.element
+collabname.attlist &=
+ common.attrib, collabname.role.attrib, local.collabname.attrib
+# end of collabname.attlist
+
+# end of collabname.module
+
+# Affiliation (defined elsewhere in this section)
+
+# end of collab.content.module
+
+# CorpAuthor (defined elsewhere in this section)
+
+# OtherCredit (defined elsewhere in this section)
+
+# end of authorgroup.content.module
+
+# AuthorInitials ...................
+local.authorinitials.attrib = empty
+authorinitials.role.attrib = role.attrib
+authorinitials =
+ element authorinitials { authorinitials.attlist, docinfo.char.mix* }
+# end of authorinitials.element
+authorinitials.attlist &=
+ common.attrib, authorinitials.role.attrib, local.authorinitials.attrib
+# end of authorinitials.attlist
+
+# end of authorinitials.module
+
+# ConfGroup ........................
+local.confgroup.attrib = empty
+confgroup.role.attrib = role.attrib
+confgroup =
+ element confgroup {
+ confgroup.attlist,
+ (confdates | conftitle | confnum | address | confsponsor)*
+ }
+# end of confgroup.element
+confgroup.attlist &=
+ common.attrib, confgroup.role.attrib, local.confgroup.attrib
+# end of confgroup.attlist
+
+# end of confgroup.module
+local.confdates.attrib = empty
+confdates.role.attrib = role.attrib
+confdates = element confdates { confdates.attlist, docinfo.char.mix* }
+# end of confdates.element
+confdates.attlist &=
+ common.attrib, confdates.role.attrib, local.confdates.attrib
+# end of confdates.attlist
+
+# end of confdates.module
+local.conftitle.attrib = empty
+conftitle.role.attrib = role.attrib
+conftitle = element conftitle { conftitle.attlist, docinfo.char.mix* }
+# end of conftitle.element
+conftitle.attlist &=
+ common.attrib, conftitle.role.attrib, local.conftitle.attrib
+# end of conftitle.attlist
+
+# end of conftitle.module
+local.confnum.attrib = empty
+confnum.role.attrib = role.attrib
+confnum = element confnum { confnum.attlist, docinfo.char.mix* }
+# end of confnum.element
+confnum.attlist &=
+ common.attrib, confnum.role.attrib, local.confnum.attrib
+# end of confnum.attlist
+
+# end of confnum.module
+
+# Address (defined elsewhere in this section)
+local.confsponsor.attrib = empty
+confsponsor.role.attrib = role.attrib
+confsponsor =
+ element confsponsor { confsponsor.attlist, docinfo.char.mix* }
+# end of confsponsor.element
+confsponsor.attlist &=
+ common.attrib, confsponsor.role.attrib, local.confsponsor.attrib
+# end of confsponsor.attlist
+
+# end of confsponsor.module
+
+# end of confgroup.content.module
+
+# ContractNum ......................
+local.contractnum.attrib = empty
+contractnum.role.attrib = role.attrib
+contractnum =
+ element contractnum { contractnum.attlist, docinfo.char.mix* }
+# end of contractnum.element
+contractnum.attlist &=
+ common.attrib, contractnum.role.attrib, local.contractnum.attrib
+# end of contractnum.attlist
+
+# end of contractnum.module
+
+# ContractSponsor ..................
+local.contractsponsor.attrib = empty
+contractsponsor.role.attrib = role.attrib
+contractsponsor =
+ element contractsponsor { contractsponsor.attlist, docinfo.char.mix* }
+# end of contractsponsor.element
+contractsponsor.attlist &=
+ common.attrib,
+ contractsponsor.role.attrib,
+ local.contractsponsor.attrib
+# end of contractsponsor.attlist
+
+# end of contractsponsor.module
+
+# Copyright ........................
+local.copyright.attrib = empty
+copyright.role.attrib = role.attrib
+copyright = element copyright { copyright.attlist, year+, holder* }
+# end of copyright.element
+copyright.attlist &=
+ common.attrib, copyright.role.attrib, local.copyright.attrib
+# end of copyright.attlist
+
+# end of copyright.module
+local.year.attrib = empty
+year.role.attrib = role.attrib
+year = element year { year.attlist, docinfo.char.mix* }
+# end of year.element
+year.attlist &= common.attrib, year.role.attrib, local.year.attrib
+# end of year.attlist
+
+# end of year.module
+local.holder.attrib = empty
+holder.role.attrib = role.attrib
+holder = element holder { holder.attlist, docinfo.char.mix* }
+# end of holder.element
+holder.attlist &= common.attrib, holder.role.attrib, local.holder.attrib
+# end of holder.attlist
+
+# end of holder.module
+
+# end of copyright.content.module
+
+# CorpAuthor .......................
+local.corpauthor.attrib = empty
+corpauthor.role.attrib = role.attrib
+corpauthor =
+ element corpauthor { corpauthor.attlist, docinfo.char.mix* }
+# end of corpauthor.element
+corpauthor.attlist &=
+ common.attrib, corpauthor.role.attrib, local.corpauthor.attrib
+# end of corpauthor.attlist
+
+# end of corpauthor.module
+
+# CorpName .........................
+local.corpname.attrib = empty
+corpname = element corpname { corpname.attlist, docinfo.char.mix* }
+# end of corpname.element
+corpname.role.attrib = role.attrib
+corpname.attlist &=
+ common.attrib, corpname.role.attrib, local.corpname.attrib
+# end of corpname.attlist
+
+# end of corpname.module
+
+# Date .............................
+local.date.attrib = empty
+date.role.attrib = role.attrib
+date = element date { date.attlist, docinfo.char.mix* }
+# end of date.element
+date.attlist &= common.attrib, date.role.attrib, local.date.attrib
+# end of date.attlist
+
+# end of date.module
+
+# Edition ..........................
+local.edition.attrib = empty
+edition.role.attrib = role.attrib
+edition = element edition { edition.attlist, docinfo.char.mix* }
+# end of edition.element
+edition.attlist &=
+ common.attrib, edition.role.attrib, local.edition.attrib
+# end of edition.attlist
+
+# end of edition.module
+
+# Editor ...........................
+local.editor.attrib = empty
+editor.role.attrib = role.attrib
+editor =
+ element editor {
+ editor.attlist,
+ (personname | person.ident.mix+),
+ (personblurb | email | address)*
+ }
+# end of editor.element
+editor.attlist &= common.attrib, editor.role.attrib, local.editor.attrib
+# end of editor.attlist
+
+# (see "Personal identity elements" for %person.ident.mix;)
+
+# end of editor.module
+
+# ISBN .............................
+local.isbn.attrib = empty
+isbn.role.attrib = role.attrib
+isbn = element isbn { isbn.attlist, docinfo.char.mix* }
+# end of isbn.element
+isbn.attlist &= common.attrib, isbn.role.attrib, local.isbn.attrib
+# end of isbn.attlist
+
+# end of isbn.module
+
+# ISSN .............................
+local.issn.attrib = empty
+issn.role.attrib = role.attrib
+issn = element issn { issn.attlist, docinfo.char.mix* }
+# end of issn.element
+issn.attlist &= common.attrib, issn.role.attrib, local.issn.attrib
+# end of issn.attlist
+
+# end of issn.module
+
+# BiblioId .................
+biblio.class.attrib =
+ attribute class {
+ "uri"
+ | "doi"
+ | "isbn"
+ | "issn"
+ | "libraryofcongress"
+ | "pubnumber"
+ | "other"
+ }?,
+ attribute otherclass { text }?
+local.biblioid.attrib = empty
+biblioid.role.attrib = role.attrib
+biblioid = element biblioid { biblioid.attlist, docinfo.char.mix* }
+# end of biblioid.element
+biblioid.attlist &=
+ biblio.class.attrib,
+ common.attrib,
+ biblioid.role.attrib,
+ local.biblioid.attrib
+# end of biblioid.attlist
+
+# end of biblioid.module
+
+# CiteBiblioId .................
+local.citebiblioid.attrib = empty
+citebiblioid.role.attrib = role.attrib
+citebiblioid =
+ element citebiblioid { citebiblioid.attlist, docinfo.char.mix* }
+# end of citebiblioid.element
+citebiblioid.attlist &=
+ biblio.class.attrib,
+ common.attrib,
+ citebiblioid.role.attrib,
+ local.citebiblioid.attrib
+# end of citebiblioid.attlist
+
+# end of citebiblioid.module
+
+# BiblioSource .................
+local.bibliosource.attrib = empty
+bibliosource.role.attrib = role.attrib
+bibliosource =
+ element bibliosource { bibliosource.attlist, docinfo.char.mix* }
+# end of bibliosource.element
+bibliosource.attlist &=
+ biblio.class.attrib,
+ common.attrib,
+ bibliosource.role.attrib,
+ local.bibliosource.attrib
+# end of bibliosource.attlist
+
+# end of bibliosource.module
+
+# BiblioRelation .................
+local.bibliorelation.attrib = empty
+local.bibliorelation.types = notAllowed
+bibliorelation.type.attrib =
+ attribute type {
+ "isversionof"
+ | "hasversion"
+ | "isreplacedby"
+ | "replaces"
+ | "isrequiredby"
+ | "requires"
+ | "ispartof"
+ | "haspart"
+ | "isreferencedby"
+ | "references"
+ | "isformatof"
+ | "hasformat"
+ | "othertype"
+ | local.bibliorelation.types
+ }?,
+ attribute othertype { text }?
+bibliorelation.role.attrib = role.attrib
+bibliorelation =
+ element bibliorelation { bibliorelation.attlist, docinfo.char.mix* }
+# end of bibliorelation.element
+bibliorelation.attlist &=
+ biblio.class.attrib,
+ bibliorelation.type.attrib,
+ common.attrib,
+ bibliorelation.role.attrib,
+ local.bibliorelation.attrib
+# end of bibliorelation.attlist
+
+# end of bibliorelation.module
+
+# BiblioCoverage .................
+local.bibliocoverage.attrib = empty
+bibliocoverage.role.attrib = role.attrib
+bibliocoverage =
+ element bibliocoverage { bibliocoverage.attlist, docinfo.char.mix* }
+# end of bibliocoverage.element
+bibliocoverage.attlist &=
+ attribute spatial {
+ "dcmipoint" | "iso3166" | "dcmibox" | "tgn" | "otherspatial"
+ }?,
+ attribute otherspatial { text }?,
+ attribute temporal { "dcmiperiod" | "w3c-dtf" | "othertemporal" }?,
+ attribute othertemporal { text }?,
+ common.attrib,
+ bibliocoverage.role.attrib,
+ local.bibliocoverage.attrib
+# end of bibliocoverage.attlist
+
+# end of bibliocoverage.module
+
+# InvPartNumber ....................
+local.invpartnumber.attrib = empty
+invpartnumber.role.attrib = role.attrib
+invpartnumber =
+ element invpartnumber { invpartnumber.attlist, docinfo.char.mix* }
+# end of invpartnumber.element
+invpartnumber.attlist &=
+ common.attrib, invpartnumber.role.attrib, local.invpartnumber.attrib
+# end of invpartnumber.attlist
+
+# end of invpartnumber.module
+
+# IssueNum .........................
+local.issuenum.attrib = empty
+issuenum.role.attrib = role.attrib
+issuenum = element issuenum { issuenum.attlist, docinfo.char.mix* }
+# end of issuenum.element
+issuenum.attlist &=
+ common.attrib, issuenum.role.attrib, local.issuenum.attrib
+# end of issuenum.attlist
+
+# end of issuenum.module
+
+# LegalNotice ......................
+local.legalnotice.attrib = empty
+legalnotice.role.attrib = role.attrib
+legalnotice =
+ element legalnotice {
+ legalnotice.attlist, blockinfo?, title?, legalnotice.mix+
+ }
+# end of legalnotice.element
+legalnotice.attlist &=
+ common.attrib, legalnotice.role.attrib, local.legalnotice.attrib
+# end of legalnotice.attlist
+
+# end of legalnotice.module
+
+# ModeSpec .........................
+local.modespec.attrib = empty
+modespec.role.attrib = role.attrib
+modespec = element modespec { modespec.attlist, docinfo.char.mix* }
+# end of modespec.element
+
+# Application: Type of action required for completion
+# of the links to which the ModeSpec is relevant (e.g.,
+# retrieval query)
+modespec.attlist &=
+ attribute application { notation.class }?,
+ common.attrib,
+ modespec.role.attrib,
+ local.modespec.attrib
+# end of modespec.attlist
+
+# end of modespec.module
+
+# OrgName ..........................
+local.orgname.attrib = empty
+orgname.role.attrib = role.attrib
+orgname = element orgname { orgname.attlist, docinfo.char.mix* }
+# end of orgname.element
+orgname.attlist &=
+ common.attrib,
+ attribute class {
+ "corporation" | "nonprofit" | "consortium" | "informal" | "other"
+ }?,
+ attribute otherclass { text }?,
+ orgname.role.attrib,
+ local.orgname.attrib
+# end of orgname.attlist
+
+# end of orgname.module
+
+# OtherCredit ......................
+local.othercredit.attrib = empty
+othercredit.role.attrib = role.attrib
+othercredit =
+ element othercredit {
+ othercredit.attlist,
+ (personname | person.ident.mix+),
+ (personblurb | email | address)*
+ }
+# end of othercredit.element
+othercredit.attlist &=
+ common.attrib, othercredit.role.attrib, local.othercredit.attrib
+# end of othercredit.attlist
+
+# (see "Personal identity elements" for %person.ident.mix;)
+
+# end of othercredit.module
+
+# PageNums .........................
+local.pagenums.attrib = empty
+pagenums.role.attrib = role.attrib
+pagenums = element pagenums { pagenums.attlist, docinfo.char.mix* }
+# end of pagenums.element
+pagenums.attlist &=
+ common.attrib, pagenums.role.attrib, local.pagenums.attrib
+# end of pagenums.attlist
+
+# end of pagenums.module
+
+# Personal identity elements .......
+
+# These elements are used only within Author, Editor, and
+# OtherCredit.
+local.contrib.attrib = empty
+contrib.role.attrib = role.attrib
+contrib = element contrib { contrib.attlist, docinfo.char.mix* }
+# end of contrib.element
+contrib.attlist &=
+ common.attrib, contrib.role.attrib, local.contrib.attrib
+# end of contrib.attlist
+
+# end of contrib.module
+local.firstname.attrib = empty
+firstname.role.attrib = role.attrib
+firstname = element firstname { firstname.attlist, docinfo.char.mix* }
+# end of firstname.element
+firstname.attlist &=
+ common.attrib, firstname.role.attrib, local.firstname.attrib
+# end of firstname.attlist
+
+# end of firstname.module
+local.honorific.attrib = empty
+honorific.role.attrib = role.attrib
+honorific = element honorific { honorific.attlist, docinfo.char.mix* }
+# end of honorific.element
+honorific.attlist &=
+ common.attrib, honorific.role.attrib, local.honorific.attrib
+# end of honorific.attlist
+
+# end of honorific.module
+local.lineage.attrib = empty
+lineage.role.attrib = role.attrib
+lineage = element lineage { lineage.attlist, docinfo.char.mix* }
+# end of lineage.element
+lineage.attlist &=
+ common.attrib, lineage.role.attrib, local.lineage.attrib
+# end of lineage.attlist
+
+# end of lineage.module
+local.othername.attrib = empty
+othername.role.attrib = role.attrib
+othername = element othername { othername.attlist, docinfo.char.mix* }
+# end of othername.element
+othername.attlist &=
+ common.attrib, othername.role.attrib, local.othername.attrib
+# end of othername.attlist
+
+# end of othername.module
+local.surname.attrib = empty
+surname.role.attrib = role.attrib
+surname = element surname { surname.attlist, docinfo.char.mix* }
+# end of surname.element
+surname.attlist &=
+ common.attrib, surname.role.attrib, local.surname.attrib
+# end of surname.attlist
+
+# end of surname.module
+
+# end of person.ident.module
+
+# PrintHistory .....................
+local.printhistory.attrib = empty
+printhistory.role.attrib = role.attrib
+printhistory =
+ element printhistory { printhistory.attlist, para.class+ }
+# end of printhistory.element
+printhistory.attlist &=
+ common.attrib, printhistory.role.attrib, local.printhistory.attrib
+# end of printhistory.attlist
+
+# end of printhistory.module
+
+# ProductName ......................
+local.productname.attrib = empty
+productname.role.attrib = role.attrib
+productname =
+ element productname { productname.attlist, para.char.mix* }
+# end of productname.element
+
+# Class: More precisely identifies the item the element names
+productname.attlist &=
+ [ a:defaultValue = "trade" ]
+ attribute class { "service" | "trade" | "registered" | "copyright" }?,
+ common.attrib,
+ productname.role.attrib,
+ local.productname.attrib
+# end of productname.attlist
+
+# end of productname.module
+
+# ProductNumber ....................
+local.productnumber.attrib = empty
+productnumber.role.attrib = role.attrib
+productnumber =
+ element productnumber { productnumber.attlist, docinfo.char.mix* }
+# end of productnumber.element
+productnumber.attlist &=
+ common.attrib, productnumber.role.attrib, local.productnumber.attrib
+# end of productnumber.attlist
+
+# end of productnumber.module
+
+# PubDate ..........................
+local.pubdate.attrib = empty
+pubdate.role.attrib = role.attrib
+pubdate = element pubdate { pubdate.attlist, docinfo.char.mix* }
+# end of pubdate.element
+pubdate.attlist &=
+ common.attrib, pubdate.role.attrib, local.pubdate.attrib
+# end of pubdate.attlist
+
+# end of pubdate.module
+
+# Publisher ........................
+local.publisher.attrib = empty
+publisher.role.attrib = role.attrib
+publisher =
+ element publisher { publisher.attlist, publishername, address* }
+# end of publisher.element
+publisher.attlist &=
+ common.attrib, publisher.role.attrib, local.publisher.attrib
+# end of publisher.attlist
+
+# end of publisher.module
+local.publishername.attrib = empty
+publishername.role.attrib = role.attrib
+publishername =
+ element publishername { publishername.attlist, docinfo.char.mix* }
+# end of publishername.element
+publishername.attlist &=
+ common.attrib, publishername.role.attrib, local.publishername.attrib
+# end of publishername.attlist
+
+# end of publishername.module
+
+# Address (defined elsewhere in this section)
+
+# end of publisher.content.module
+
+# PubsNumber .......................
+local.pubsnumber.attrib = empty
+pubsnumber.role.attrib = role.attrib
+pubsnumber =
+ element pubsnumber { pubsnumber.attlist, docinfo.char.mix* }
+# end of pubsnumber.element
+pubsnumber.attlist &=
+ common.attrib, pubsnumber.role.attrib, local.pubsnumber.attrib
+# end of pubsnumber.attlist
+
+# end of pubsnumber.module
+
+# ReleaseInfo ......................
+local.releaseinfo.attrib = empty
+releaseinfo.role.attrib = role.attrib
+releaseinfo =
+ element releaseinfo { releaseinfo.attlist, docinfo.char.mix* }
+# end of releaseinfo.element
+releaseinfo.attlist &=
+ common.attrib, releaseinfo.role.attrib, local.releaseinfo.attrib
+# end of releaseinfo.attlist
+
+# end of releaseinfo.module
+
+# RevHistory .......................
+local.revhistory.attrib = empty
+revhistory.role.attrib = role.attrib
+revhistory = element revhistory { revhistory.attlist, revision+ }
+# end of revhistory.element
+revhistory.attlist &=
+ common.attrib, revhistory.role.attrib, local.revhistory.attrib
+# end of revhistory.attlist
+
+# end of revhistory.module
+local.revision.attrib = empty
+revision.role.attrib = role.attrib
+revision =
+ element revision {
+ revision.attlist,
+ revnumber,
+ date,
+ authorinitials*,
+ (revremark | revdescription)?
+ }
+# end of revision.element
+revision.attlist &=
+ common.attrib, revision.role.attrib, local.revision.attrib
+# end of revision.attlist
+
+# end of revision.module
+local.revnumber.attrib = empty
+revnumber.role.attrib = role.attrib
+revnumber = element revnumber { revnumber.attlist, docinfo.char.mix* }
+# end of revnumber.element
+revnumber.attlist &=
+ common.attrib, revnumber.role.attrib, local.revnumber.attrib
+# end of revnumber.attlist
+
+# end of revnumber.module
+
+# Date (defined elsewhere in this section)
+
+# AuthorInitials (defined elsewhere in this section)
+local.revremark.attrib = empty
+revremark.role.attrib = role.attrib
+revremark = element revremark { revremark.attlist, docinfo.char.mix* }
+# end of revremark.element
+revremark.attlist &=
+ common.attrib, revremark.role.attrib, local.revremark.attrib
+# end of revremark.attlist
+
+# end of revremark.module
+local.revdescription.attrib = empty
+revdescription.role.attrib = role.attrib
+revdescription =
+ element revdescription { revdescription.attlist, revdescription.mix+ }
+# end of revdescription.element
+revdescription.attlist &=
+ common.attrib, revdescription.role.attrib, local.revdescription.attrib
+# end of revdescription.attlist
+
+# end of revdescription.module
+
+# end of revhistory.content.module
+
+# SeriesVolNums ....................
+local.seriesvolnums.attrib = empty
+seriesvolnums.role.attrib = role.attrib
+seriesvolnums =
+ element seriesvolnums { seriesvolnums.attlist, docinfo.char.mix* }
+# end of seriesvolnums.element
+seriesvolnums.attlist &=
+ common.attrib, seriesvolnums.role.attrib, local.seriesvolnums.attrib
+# end of seriesvolnums.attlist
+
+# end of seriesvolnums.module
+
+# VolumeNum ........................
+local.volumenum.attrib = empty
+volumenum.role.attrib = role.attrib
+volumenum = element volumenum { volumenum.attlist, docinfo.char.mix* }
+# end of volumenum.element
+volumenum.attlist &=
+ common.attrib, volumenum.role.attrib, local.volumenum.attrib
+# end of volumenum.attlist
+
+# end of volumenum.module
+
+# ..................................
+
+# end of docinfo.content.module
+
+# ......................................................................
+
+# Inline, link, and ubiquitous elements ................................
+
+# Technical and computer terms .........................................
+local.accel.attrib = empty
+accel.role.attrib = role.attrib
+accel = element accel { accel.attlist, smallcptr.char.mix* }
+# end of accel.element
+accel.attlist &= common.attrib, accel.role.attrib, local.accel.attrib
+# end of accel.attlist
+
+# end of accel.module
+local.action.attrib = empty
+action.role.attrib = role.attrib
+action = element action { action.attlist, cptr.char.mix* }
+# end of action.element
+action.attlist &=
+ moreinfo.attrib,
+ common.attrib,
+ action.role.attrib,
+ local.action.attrib
+# end of action.attlist
+
+# end of action.module
+local.application.attrib = empty
+application.role.attrib = role.attrib
+application =
+ element application { application.attlist, para.char.mix* }
+# end of application.element
+application.attlist &=
+ attribute class { "hardware" | "software" }?,
+ moreinfo.attrib,
+ common.attrib,
+ application.role.attrib,
+ local.application.attrib
+# end of application.attlist
+
+# end of application.module
+local.classname.attrib = empty
+classname.role.attrib = role.attrib
+classname = element classname { classname.attlist, smallcptr.char.mix* }
+# end of classname.element
+classname.attlist &=
+ common.attrib, classname.role.attrib, local.classname.attrib
+# end of classname.attlist
+
+# end of classname.module
+local.co.attrib = empty
+# CO is a callout area of the LineColumn unit type (a single character
+# position); the position is directly indicated by the location of CO.
+co.role.attrib = role.attrib
+co = element co { co.attlist, empty }
+# end of co.element
+
+# bug number/symbol override or initialization
+
+# to any related information
+co.attlist &=
+ label.attrib,
+ linkends.attrib,
+ idreq.common.attrib,
+ co.role.attrib,
+ local.co.attrib
+# end of co.attlist
+
+# end of co.module
+local.coref.attrib = empty
+# COREF is a reference to a CO
+coref.role.attrib = role.attrib
+coref = element coref { coref.attlist, empty }
+# end of coref.element
+
+# bug number/symbol override or initialization
+
+# to any related information
+coref.attlist &=
+ label.attrib,
+ linkendreq.attrib,
+ common.attrib,
+ coref.role.attrib,
+ local.coref.attrib
+# end of coref.attlist
+
+# end of coref.module
+local.command.attrib = empty
+command.role.attrib = role.attrib
+command = element command { command.attlist, cptr.char.mix* }
+# end of command.element
+command.attlist &=
+ moreinfo.attrib,
+ common.attrib,
+ command.role.attrib,
+ local.command.attrib
+# end of command.attlist
+
+# end of command.module
+local.computeroutput.attrib = empty
+computeroutput.role.attrib = role.attrib
+computeroutput =
+ element computeroutput {
+ computeroutput.attlist, (cptr.char.mix | co)*
+ }
+# end of computeroutput.element
+computeroutput.attlist &=
+ moreinfo.attrib,
+ common.attrib,
+ computeroutput.role.attrib,
+ local.computeroutput.attrib
+# end of computeroutput.attlist
+
+# end of computeroutput.module
+local.database.attrib = empty
+database.role.attrib = role.attrib
+database = element database { database.attlist, cptr.char.mix* }
+# end of database.element
+
+# Class: Type of database the element names; no default
+database.attlist &=
+ attribute class {
+ "name" | "table" | "field" | "key1" | "key2" | "record"
+ }?,
+ moreinfo.attrib,
+ common.attrib,
+ database.role.attrib,
+ local.database.attrib
+# end of database.attlist
+
+# end of database.module
+local.email.attrib = empty
+email.role.attrib = role.attrib
+email = element email { email.attlist, docinfo.char.mix* }
+# end of email.element
+email.attlist &= common.attrib, email.role.attrib, local.email.attrib
+# end of email.attlist
+
+# end of email.module
+local.envar.attrib = empty
+envar.role.attrib = role.attrib
+envar = element envar { envar.attlist, smallcptr.char.mix* }
+# end of envar.element
+envar.attlist &= common.attrib, envar.role.attrib, local.envar.attrib
+# end of envar.attlist
+
+# end of envar.module
+local.errorcode.attrib = empty
+errorcode.role.attrib = role.attrib
+errorcode = element errorcode { errorcode.attlist, smallcptr.char.mix* }
+# end of errorcode.element
+errorcode.attlist &=
+ moreinfo.attrib,
+ common.attrib,
+ errorcode.role.attrib,
+ local.errorcode.attrib
+# end of errorcode.attlist
+
+# end of errorcode.module
+local.errorname.attrib = empty
+errorname.role.attrib = role.attrib
+errorname = element errorname { errorname.attlist, smallcptr.char.mix* }
+# end of errorname.element
+errorname.attlist &=
+ common.attrib, errorname.role.attrib, local.errorname.attrib
+# end of errorname.attlist
+
+# end of errorname.module
+local.errortext.attrib = empty
+errortext.role.attrib = role.attrib
+errortext = element errortext { errortext.attlist, smallcptr.char.mix* }
+# end of errortext.element
+errortext.attlist &=
+ common.attrib, errortext.role.attrib, local.errortext.attrib
+# end of errortext.attlist
+
+# end of errortext.module
+local.errortype.attrib = empty
+errortype.role.attrib = role.attrib
+errortype = element errortype { errortype.attlist, smallcptr.char.mix* }
+# end of errortype.element
+errortype.attlist &=
+ common.attrib, errortype.role.attrib, local.errortype.attrib
+# end of errortype.attlist
+
+# end of errortype.module
+local.filename.attrib = empty
+filename.role.attrib = role.attrib
+filename = element filename { filename.attlist, cptr.char.mix* }
+# end of filename.element
+
+# Class: Type of filename the element names; no default
+
+# Path: Search path (possibly system-specific) in which
+# file can be found
+filename.attlist &=
+ attribute class {
+ "headerfile"
+ | "partition"
+ | "devicefile"
+ | "libraryfile"
+ | "directory"
+ | "extension"
+ | "symlink"
+ }?,
+ attribute path { text }?,
+ moreinfo.attrib,
+ common.attrib,
+ filename.role.attrib,
+ local.filename.attrib
+# end of filename.attlist
+
+# end of filename.module
+local.function.attrib = empty
+function.role.attrib = role.attrib
+function = element function { function.attlist, cptr.char.mix* }
+# end of function.element
+function.attlist &=
+ moreinfo.attrib,
+ common.attrib,
+ function.role.attrib,
+ local.function.attrib
+# end of function.attlist
+
+# end of function.module
+local.guibutton.attrib = empty
+guibutton.role.attrib = role.attrib
+guibutton =
+ element guibutton { guibutton.attlist, (smallcptr.char.mix | accel)* }
+# end of guibutton.element
+guibutton.attlist &=
+ moreinfo.attrib,
+ common.attrib,
+ guibutton.role.attrib,
+ local.guibutton.attrib
+# end of guibutton.attlist
+
+# end of guibutton.module
+local.guiicon.attrib = empty
+guiicon.role.attrib = role.attrib
+guiicon =
+ element guiicon { guiicon.attlist, (smallcptr.char.mix | accel)* }
+# end of guiicon.element
+guiicon.attlist &=
+ moreinfo.attrib,
+ common.attrib,
+ guiicon.role.attrib,
+ local.guiicon.attrib
+# end of guiicon.attlist
+
+# end of guiicon.module
+local.guilabel.attrib = empty
+guilabel.role.attrib = role.attrib
+guilabel =
+ element guilabel { guilabel.attlist, (smallcptr.char.mix | accel)* }
+# end of guilabel.element
+guilabel.attlist &=
+ moreinfo.attrib,
+ common.attrib,
+ guilabel.role.attrib,
+ local.guilabel.attrib
+# end of guilabel.attlist
+
+# end of guilabel.module
+local.guimenu.attrib = empty
+guimenu.role.attrib = role.attrib
+guimenu =
+ element guimenu { guimenu.attlist, (smallcptr.char.mix | accel)* }
+# end of guimenu.element
+guimenu.attlist &=
+ moreinfo.attrib,
+ common.attrib,
+ guimenu.role.attrib,
+ local.guimenu.attrib
+# end of guimenu.attlist
+
+# end of guimenu.module
+local.guimenuitem.attrib = empty
+guimenuitem.role.attrib = role.attrib
+guimenuitem =
+ element guimenuitem {
+ guimenuitem.attlist, (smallcptr.char.mix | accel)*
+ }
+# end of guimenuitem.element
+guimenuitem.attlist &=
+ moreinfo.attrib,
+ common.attrib,
+ guimenuitem.role.attrib,
+ local.guimenuitem.attrib
+# end of guimenuitem.attlist
+
+# end of guimenuitem.module
+local.guisubmenu.attrib = empty
+guisubmenu.role.attrib = role.attrib
+guisubmenu =
+ element guisubmenu {
+ guisubmenu.attlist, (smallcptr.char.mix | accel)*
+ }
+# end of guisubmenu.element
+guisubmenu.attlist &=
+ moreinfo.attrib,
+ common.attrib,
+ guisubmenu.role.attrib,
+ local.guisubmenu.attrib
+# end of guisubmenu.attlist
+
+# end of guisubmenu.module
+local.hardware.attrib = empty
+hardware.role.attrib = role.attrib
+hardware = element hardware { hardware.attlist, cptr.char.mix* }
+# end of hardware.element
+hardware.attlist &=
+ moreinfo.attrib,
+ common.attrib,
+ hardware.role.attrib,
+ local.hardware.attrib
+# end of hardware.attlist
+
+# end of hardware.module
+local.interface.attrib = empty
+interface.role.attrib = role.attrib
+interface =
+ element interface { interface.attlist, (smallcptr.char.mix | accel)* }
+# end of interface.element
+
+# Class: Type of the Interface item; no default
+interface.attlist &=
+ moreinfo.attrib,
+ common.attrib,
+ interface.role.attrib,
+ local.interface.attrib
+# end of interface.attlist
+
+# end of interface.module
+local.keycap.attrib = empty
+keycap.role.attrib = role.attrib
+keycap = element keycap { keycap.attlist, cptr.char.mix* }
+# end of keycap.element
+keycap.attlist &=
+ moreinfo.attrib,
+ common.attrib,
+ keycap.role.attrib,
+ local.keycap.attrib
+# end of keycap.attlist
+
+# end of keycap.module
+local.keycode.attrib = empty
+keycode.role.attrib = role.attrib
+keycode = element keycode { keycode.attlist, smallcptr.char.mix* }
+# end of keycode.element
+keycode.attlist &=
+ common.attrib, keycode.role.attrib, local.keycode.attrib
+# end of keycode.attlist
+
+# end of keycode.module
+local.keycombo.attrib = empty
+keycombo.role.attrib = role.attrib
+keycombo =
+ element keycombo {
+ keycombo.attlist, (keycap | keycombo | keysym | mousebutton)+
+ }
+# end of keycombo.element
+keycombo.attlist &=
+ keyaction.attrib,
+ moreinfo.attrib,
+ common.attrib,
+ keycombo.role.attrib,
+ local.keycombo.attrib
+# end of keycombo.attlist
+
+# end of keycombo.module
+local.keysym.attrib = empty
+keysysm.role.attrib = role.attrib
+keysym = element keysym { keysym.attlist, smallcptr.char.mix* }
+# end of keysym.element
+keysym.attlist &=
+ common.attrib, keysysm.role.attrib, local.keysym.attrib
+# end of keysym.attlist
+
+# end of keysym.module
+local.lineannotation.attrib = empty
+lineannotation.role.attrib = role.attrib
+lineannotation =
+ element lineannotation { lineannotation.attlist, para.char.mix* }
+# end of lineannotation.element
+lineannotation.attlist &=
+ common.attrib, lineannotation.role.attrib, local.lineannotation.attrib
+# end of lineannotation.attlist
+
+# end of lineannotation.module
+local.literal.attrib = empty
+literal.role.attrib = role.attrib
+literal = element literal { literal.attlist, cptr.char.mix* }
+# end of literal.element
+literal.attlist &=
+ moreinfo.attrib,
+ common.attrib,
+ literal.role.attrib,
+ local.literal.attrib
+# end of literal.attlist
+
+# end of literal.module
+local.constant.attrib = empty
+constant.role.attrib = role.attrib
+constant = element constant { constant.attlist, smallcptr.char.mix* }
+# end of constant.element
+constant.attlist &=
+ attribute class { "limit" }?,
+ common.attrib,
+ constant.role.attrib,
+ local.constant.attrib
+# end of constant.attlist
+
+# end of constant.module
+local.varname.attrib = empty
+varname.role.attrib = role.attrib
+varname = element varname { varname.attlist, smallcptr.char.mix* }
+# end of varname.element
+varname.attlist &=
+ common.attrib, varname.role.attrib, local.varname.attrib
+# end of varname.attlist
+
+# end of varname.module
+local.markup.attrib = empty
+markup.role.attrib = role.attrib
+markup = element markup { markup.attlist, smallcptr.char.mix* }
+# end of markup.element
+markup.attlist &= common.attrib, markup.role.attrib, local.markup.attrib
+# end of markup.attlist
+
+# end of markup.module
+local.medialabel.attrib = empty
+medialabel.role.attrib = role.attrib
+medialabel =
+ element medialabel { medialabel.attlist, smallcptr.char.mix* }
+# end of medialabel.element
+
+# Class: Type of medium named by the element; no default
+medialabel.attlist &=
+ attribute class { "cartridge" | "cdrom" | "disk" | "tape" }?,
+ common.attrib,
+ medialabel.role.attrib,
+ local.medialabel.attrib
+# end of medialabel.attlist
+
+# end of medialabel.module
+local.menuchoice.attrib = empty
+menuchoice.role.attrib = role.attrib
+menuchoice =
+ element menuchoice {
+ menuchoice.attlist,
+ shortcut?,
+ (guibutton
+ | guiicon
+ | guilabel
+ | guimenu
+ | guimenuitem
+ | guisubmenu
+ | interface)+
+ }
+# end of menuchoice.element
+menuchoice.attlist &=
+ moreinfo.attrib,
+ common.attrib,
+ menuchoice.role.attrib,
+ local.menuchoice.attrib
+# end of menuchoice.attlist
+
+# end of menuchoice.module
+
+# See also KeyCombo
+local.shortcut.attrib = empty
+shortcut.role.attrib = role.attrib
+shortcut =
+ element shortcut {
+ shortcut.attlist, (keycap | keycombo | keysym | mousebutton)+
+ }
+# end of shortcut.element
+shortcut.attlist &=
+ keyaction.attrib,
+ moreinfo.attrib,
+ common.attrib,
+ shortcut.role.attrib,
+ local.shortcut.attrib
+# end of shortcut.attlist
+
+# end of shortcut.module
+
+# end of menuchoice.content.module
+local.mousebutton.attrib = empty
+mousebutton.role.attrib = role.attrib
+mousebutton =
+ element mousebutton { mousebutton.attlist, smallcptr.char.mix* }
+# end of mousebutton.element
+mousebutton.attlist &=
+ moreinfo.attrib,
+ common.attrib,
+ mousebutton.role.attrib,
+ local.mousebutton.attrib
+# end of mousebutton.attlist
+
+# end of mousebutton.module
+local.msgtext.attrib = empty
+msgtext.role.attrib = role.attrib
+msgtext = element msgtext { msgtext.attlist, component.mix+ }
+# end of msgtext.element
+msgtext.attlist &=
+ common.attrib, msgtext.role.attrib, local.msgtext.attrib
+# end of msgtext.attlist
+
+# end of msgtext.module
+local.option.attrib = empty
+option.role.attrib = role.attrib
+option = element option { option.attlist, cptr.char.mix* }
+# end of option.element
+option.attlist &= common.attrib, option.role.attrib, local.option.attrib
+# end of option.attlist
+
+# end of option.module
+local.optional.attrib = empty
+optional.role.attrib = role.attrib
+optional = element optional { optional.attlist, cptr.char.mix* }
+# end of optional.element
+optional.attlist &=
+ common.attrib, optional.role.attrib, local.optional.attrib
+# end of optional.attlist
+
+# end of optional.module
+local.parameter.attrib = empty
+parameter.role.attrib = role.attrib
+parameter = element parameter { parameter.attlist, cptr.char.mix* }
+# end of parameter.element
+
+# Class: Type of the Parameter; no default
+parameter.attlist &=
+ attribute class { "command" | "function" | "option" }?,
+ moreinfo.attrib,
+ common.attrib,
+ parameter.role.attrib,
+ local.parameter.attrib
+# end of parameter.attlist
+
+# end of parameter.module
+local.prompt.attrib = empty
+prompt.role.attrib = role.attrib
+prompt = element prompt { prompt.attlist, (smallcptr.char.mix | co)* }
+# end of prompt.element
+prompt.attlist &=
+ moreinfo.attrib,
+ common.attrib,
+ prompt.role.attrib,
+ local.prompt.attrib
+# end of prompt.attlist
+
+# end of prompt.module
+local.property.attrib = empty
+property.role.attrib = role.attrib
+property = element property { property.attlist, cptr.char.mix* }
+# end of property.element
+property.attlist &=
+ moreinfo.attrib,
+ common.attrib,
+ property.role.attrib,
+ local.property.attrib
+# end of property.attlist
+
+# end of property.module
+local.replaceable.attrib = empty
+replaceable.role.attrib = role.attrib
+replaceable =
+ element replaceable {
+ replaceable.attlist,
+ (text
+ | link.char.class
+ | optional
+ | base.char.class
+ | other.char.class
+ | inlinegraphic
+ | inlinemediaobject
+ | co)*
+ }
+# end of replaceable.element
+
+# Class: Type of information the element represents; no
+# default
+replaceable.attlist &=
+ attribute class { "command" | "function" | "option" | "parameter" }?,
+ common.attrib,
+ replaceable.role.attrib,
+ local.replaceable.attrib
+# end of replaceable.attlist
+
+# end of replaceable.module
+local.returnvalue.attrib = empty
+returnvalue.role.attrib = role.attrib
+returnvalue =
+ element returnvalue { returnvalue.attlist, smallcptr.char.mix* }
+# end of returnvalue.element
+returnvalue.attlist &=
+ common.attrib, returnvalue.role.attrib, local.returnvalue.attrib
+# end of returnvalue.attlist
+
+# end of returnvalue.module
+local.sgmltag.attrib = empty
+sgmltag.role.attrib = role.attrib
+sgmltag = element sgmltag { sgmltag.attlist, smallcptr.char.mix* }
+# end of sgmltag.element
+
+# Class: Type of SGML construct the element names; no default
+sgmltag.attlist &=
+ attribute class {
+ "attribute"
+ | "attvalue"
+ | "element"
+ | "endtag"
+ | "emptytag"
+ | "genentity"
+ | "numcharref"
+ | "paramentity"
+ | "pi"
+ | "xmlpi"
+ | "starttag"
+ | "sgmlcomment"
+ }?,
+ common.attrib,
+ sgmltag.role.attrib,
+ local.sgmltag.attrib
+# end of sgmltag.attlist
+
+# end of sgmltag.module
+local.structfield.attrib = empty
+structfield.role.attrib = role.attrib
+structfield =
+ element structfield { structfield.attlist, smallcptr.char.mix* }
+# end of structfield.element
+structfield.attlist &=
+ common.attrib, structfield.role.attrib, local.structfield.attrib
+# end of structfield.attlist
+
+# end of structfield.module
+local.structname.attrib = empty
+structname.role.attrib = role.attrib
+structname =
+ element structname { structname.attlist, smallcptr.char.mix* }
+# end of structname.element
+structname.attlist &=
+ common.attrib, structname.role.attrib, local.structname.attrib
+# end of structname.attlist
+
+# end of structname.module
+local.symbol.attrib = empty
+symbol.role.attrib = role.attrib
+symbol = element symbol { symbol.attlist, smallcptr.char.mix* }
+# end of symbol.element
+
+# Class: Type of symbol; no default
+symbol.attlist &=
+ attribute class { "limit" }?,
+ common.attrib,
+ symbol.role.attrib,
+ local.symbol.attrib
+# end of symbol.attlist
+
+# end of symbol.module
+local.systemitem.attrib = empty
+systemitem.role.attrib = role.attrib
+systemitem =
+ element systemitem {
+ systemitem.attlist, (cptr.char.mix | acronym | co)*
+ }
+# end of systemitem.element
+
+# Class: Type of system item the element names; no default
+systemitem.attlist &=
+ attribute class {
+ "constant"
+ | "event"
+ | "eventhandler"
+ | "domainname"
+ | "fqdomainname"
+ | "ipaddress"
+ | "netmask"
+ | "etheraddress"
+ | "groupname"
+ | "library"
+ | "macro"
+ | "osname"
+ | "filesystem"
+ | "resource"
+ | "systemname"
+ | "username"
+ | "newsgroup"
+ }?,
+ moreinfo.attrib,
+ common.attrib,
+ systemitem.role.attrib,
+ local.systemitem.attrib
+# end of systemitem.attlist
+
+# end of systemitem.module
+local.token.attrib = empty
+token.role.attrib = role.attrib
+\token = element token { token.attlist, smallcptr.char.mix* }
+# end of token.element
+token.attlist &= common.attrib, token.role.attrib, local.token.attrib
+# end of token.attlist
+
+# end of token.module
+local.type.attrib = empty
+type.role.attrib = role.attrib
+type = element type { type.attlist, smallcptr.char.mix* }
+# end of type.element
+type.attlist &= common.attrib, type.role.attrib, local.type.attrib
+# end of type.attlist
+
+# end of type.module
+local.userinput.attrib = empty
+userinput.role.attrib = role.attrib
+userinput =
+ element userinput { userinput.attlist, (cptr.char.mix | co)* }
+# end of userinput.element
+userinput.attlist &=
+ moreinfo.attrib,
+ common.attrib,
+ userinput.role.attrib,
+ local.userinput.attrib
+# end of userinput.attlist
+
+# end of userinput.module
+
+# General words and phrases ............................................
+local.abbrev.attrib = empty
+abbrev.role.attrib = role.attrib
+abbrev = element abbrev { abbrev.attlist, word.char.mix* }
+# end of abbrev.element
+abbrev.attlist &= common.attrib, abbrev.role.attrib, local.abbrev.attrib
+# end of abbrev.attlist
+
+# end of abbrev.module
+local.acronym.attrib = empty
+acronym.role.attrib = role.attrib
+acronym = element acronym { acronym.attlist, word.char.mix* }
+# end of acronym.element
+acronym.attlist &=
+ common.attrib, acronym.role.attrib, local.acronym.attrib
+# end of acronym.attlist
+
+# end of acronym.module
+local.citation.attrib = empty
+citation.role.attrib = role.attrib
+citation = element citation { citation.attlist, para.char.mix* }
+# end of citation.element
+citation.attlist &=
+ common.attrib, citation.role.attrib, local.citation.attrib
+# end of citation.attlist
+
+# end of citation.module
+local.citerefentry.attrib = empty
+citerefentry.role.attrib = role.attrib
+citerefentry =
+ element citerefentry {
+ citerefentry.attlist, refentrytitle, manvolnum?
+ }
+# end of citerefentry.element
+citerefentry.attlist &=
+ common.attrib, citerefentry.role.attrib, local.citerefentry.attrib
+# end of citerefentry.attlist
+
+# end of citerefentry.module
+local.refentrytitle.attrib = empty
+refentrytitle.role.attrib = role.attrib
+refentrytitle =
+ element refentrytitle { refentrytitle.attlist, para.char.mix* }
+# end of refentrytitle.element
+refentrytitle.attlist &=
+ common.attrib, refentrytitle.role.attrib, local.refentrytitle.attrib
+# end of refentrytitle.attlist
+
+# end of refentrytitle.module
+local.manvolnum.attrib = empty
+namvolnum.role.attrib = role.attrib
+manvolnum = element manvolnum { manvolnum.attlist, word.char.mix* }
+# end of manvolnum.element
+manvolnum.attlist &=
+ common.attrib, namvolnum.role.attrib, local.manvolnum.attrib
+# end of manvolnum.attlist
+
+# end of manvolnum.module
+local.citetitle.attrib = empty
+citetitle.role.attrib = role.attrib
+citetitle = element citetitle { citetitle.attlist, para.char.mix* }
+# end of citetitle.element
+
+# Pubwork: Genre of published work cited; no default
+citetitle.attlist &=
+ attribute pubwork {
+ "article"
+ | "book"
+ | "chapter"
+ | "part"
+ | "refentry"
+ | "section"
+ | "journal"
+ | "series"
+ | "set"
+ | "manuscript"
+ }?,
+ common.attrib,
+ citetitle.role.attrib,
+ local.citetitle.attrib
+# end of citetitle.attlist
+
+# end of citetitle.module
+local.emphasis.attrib = empty
+emphasis.role.attrib = role.attrib
+emphasis = element emphasis { emphasis.attlist, para.char.mix* }
+# end of emphasis.element
+emphasis.attlist &=
+ common.attrib, emphasis.role.attrib, local.emphasis.attrib
+# end of emphasis.attlist
+
+# end of emphasis.module
+local.firstterm.attrib = empty
+firstterm.role.attrib = role.attrib
+firstterm = element firstterm { firstterm.attlist, word.char.mix* }
+# end of firstterm.element
+
+# to GlossEntry or other explanation
+firstterm.attlist &=
+ linkend.attrib,
+ common.attrib,
+ firstterm.role.attrib,
+ local.firstterm.attrib
+# end of firstterm.attlist
+
+# end of firstterm.module
+local.foreignphrase.attrib = empty
+foreignphrase.role.attrib = role.attrib
+foreignphrase =
+ element foreignphrase { foreignphrase.attlist, para.char.mix* }
+# end of foreignphrase.element
+foreignphrase.attlist &=
+ common.attrib, foreignphrase.role.attrib, local.foreignphrase.attrib
+# end of foreignphrase.attlist
+
+# end of foreignphrase.module
+local.glossterm.attrib = empty
+glossterm.role.attrib = role.attrib
+glossterm = element glossterm { glossterm.attlist, para.char.mix* }
+# end of glossterm.element
+
+# to GlossEntry if Glossterm used in text
+
+# BaseForm: Provides the form of GlossTerm to be used
+# for indexing
+glossterm.attlist &=
+ linkend.attrib,
+ attribute baseform { text }?,
+ common.attrib,
+ glossterm.role.attrib,
+ local.glossterm.attrib
+# end of glossterm.attlist
+
+# end of glossterm.module
+local.phrase.attrib = empty
+phrase.role.attrib = role.attrib
+phrase = element phrase { phrase.attlist, para.char.mix* }
+# end of phrase.element
+phrase.attlist &= common.attrib, phrase.role.attrib, local.phrase.attrib
+# end of phrase.attlist
+
+# end of phrase.module
+local.quote.attrib = empty
+quote.role.attrib = role.attrib
+quote = element quote { quote.attlist, para.char.mix* }
+# end of quote.element
+quote.attlist &= common.attrib, quote.role.attrib, local.quote.attrib
+# end of quote.attlist
+
+# end of quote.module
+local.ssscript.attrib = empty
+ssscript.role.attrib = role.attrib
+subscript =
+ element subscript {
+ subscript.attlist,
+ (text
+ | link.char.class
+ | emphasis
+ | replaceable
+ | symbol
+ | inlinegraphic
+ | inlinemediaobject
+ | base.char.class
+ | other.char.class)*
+ }
+# end of subscript.element
+subscript.attlist &=
+ common.attrib, ssscript.role.attrib, local.ssscript.attrib
+# end of subscript.attlist
+superscript =
+ element superscript {
+ superscript.attlist,
+ (text
+ | link.char.class
+ | emphasis
+ | replaceable
+ | symbol
+ | inlinegraphic
+ | inlinemediaobject
+ | base.char.class
+ | other.char.class)*
+ }
+# end of superscript.element
+superscript.attlist &=
+ common.attrib, ssscript.role.attrib, local.ssscript.attrib
+# end of superscript.attlist
+
+# end of ssscript.module
+local.trademark.attrib = empty
+trademark.role.attrib = role.attrib
+trademark =
+ element trademark {
+ trademark.attlist,
+ (text
+ | link.char.class
+ | tech.char.class
+ | base.char.class
+ | other.char.class
+ | inlinegraphic
+ | inlinemediaobject
+ | emphasis)*
+ }
+# end of trademark.element
+
+# Class: More precisely identifies the item the element names
+trademark.attlist &=
+ [ a:defaultValue = "trade" ]
+ attribute class { "service" | "trade" | "registered" | "copyright" }?,
+ common.attrib,
+ trademark.role.attrib,
+ local.trademark.attrib
+# end of trademark.attlist
+
+# end of trademark.module
+local.wordasword.attrib = empty
+wordasword.role.attrib = role.attrib
+wordasword = element wordasword { wordasword.attlist, word.char.mix* }
+# end of wordasword.element
+wordasword.attlist &=
+ common.attrib, wordasword.role.attrib, local.wordasword.attrib
+# end of wordasword.attlist
+
+# end of wordasword.module
+
+# Links and cross-references ...........................................
+local.link.attrib = empty
+link.role.attrib = role.attrib
+link = element link { link.attlist, para.char.mix* }
+# end of link.element
+
+# Endterm: ID of element containing text that is to be
+# fetched from elsewhere in the document to appear as
+# the content of this element
+
+# to linked-to object
+
+# Type: Freely assignable parameter
+link.attlist &=
+ attribute endterm { xsd:IDREF }?,
+ linkendreq.attrib,
+ attribute type { text }?,
+ common.attrib,
+ link.role.attrib,
+ local.link.attrib
+# end of link.attlist
+
+# end of link.module
+local.olink.attrib = empty
+olink.role.attrib = role.attrib
+olink = element olink { olink.attlist, para.char.mix* }
+# end of olink.element
+
+# TargetDocEnt: Name of an entity to be the target of the link
+
+# LinkMode: ID of a ModeSpec containing instructions for
+# operating on the entity named by TargetDocEnt
+
+# LocalInfo: Information that may be passed to ModeSpec
+
+# Type: Freely assignable parameter
+olink.attlist &=
+ attribute targetdocent { xsd:ENTITY }?,
+ attribute linkmode { xsd:IDREF }?,
+ attribute localinfo { text }?,
+ attribute type { text }?,
+ attribute targetdoc { text }?,
+ attribute targetptr { text }?,
+ common.attrib,
+ olink.role.attrib,
+ local.olink.attrib
+# end of olink.attlist
+
+# end of olink.module
+local.ulink.attrib = empty
+ulink.role.attrib = role.attrib
+ulink = element ulink { ulink.attlist, para.char.mix* }
+# end of ulink.element
+
+# URL: uniform resource locator; the target of the ULink
+
+# Type: Freely assignable parameter
+ulink.attlist &=
+ attribute url { text },
+ attribute type { text }?,
+ common.attrib,
+ ulink.role.attrib,
+ local.ulink.attrib
+# end of ulink.attlist
+
+# end of ulink.module
+local.footnoteref.attrib = empty
+footnoteref.role.attrib = role.attrib
+footnoteref = element footnoteref { footnoteref.attlist, empty }
+# end of footnoteref.element
+
+# to footnote content supplied elsewhere
+footnoteref.attlist &=
+ linkendreq.attrib,
+ label.attrib,
+ common.attrib,
+ footnoteref.role.attrib,
+ local.footnoteref.attrib
+# end of footnoteref.attlist
+
+# end of footnoteref.module
+local.xref.attrib = empty
+xref.role.attrib = role.attrib
+xref = element xref { xref.attlist, empty }
+# end of xref.element
+
+# Endterm: ID of element containing text that is to be
+# fetched from elsewhere in the document to appear as
+# the content of this element
+
+# to linked-to object
+xref.attlist &=
+ attribute endterm { xsd:IDREF }?,
+ linkendreq.attrib,
+ common.attrib,
+ xref.role.attrib,
+ local.xref.attrib
+# end of xref.attlist
+
+# end of xref.module
+
+# Ubiquitous elements ..................................................
+local.anchor.attrib = empty
+anchor.role.attrib = role.attrib
+anchor = element anchor { anchor.attlist, empty }
+# end of anchor.element
+
+# required
+
+# replaces Lang
+anchor.attlist &=
+ idreq.attrib,
+ pagenum.attrib,
+ remap.attrib,
+ xreflabel.attrib,
+ revisionflag.attrib,
+ effectivity.attrib,
+ anchor.role.attrib,
+ local.anchor.attrib
+# end of anchor.attlist
+
+# end of anchor.module
+local.beginpage.attrib = empty
+beginpage.role.attrib = role.attrib
+beginpage = element beginpage { beginpage.attlist, empty }
+# end of beginpage.element
+
+# PageNum: Number of page that begins at this point
+beginpage.attlist &=
+ pagenum.attrib,
+ common.attrib,
+ beginpage.role.attrib,
+ local.beginpage.attrib
+# end of beginpage.attlist
+
+# end of beginpage.module
+
+# IndexTerms appear in the text flow for generating or linking an
+# index.
+local.indexterm.attrib = empty
+indexterm.role.attrib = role.attrib
+indexterm =
+ element indexterm {
+ indexterm.attlist,
+ primary?,
+ ((secondary,
+ ((tertiary, (see | seealso+)?)
+ | see
+ | seealso+)?)
+ | see
+ | seealso+)?
+ }
+# end of indexterm.element
+
+# Scope: Indicates which generated indices the IndexTerm
+# should appear in: Global (whole document set), Local (this
+# document only), or All (both)
+
+# Significance: Whether this IndexTerm is the most pertinent
+# of its series (Preferred) or not (Normal, the default)
+
+# Class: Indicates type of IndexTerm; default is Singular,
+# or EndOfRange if StartRef is supplied; StartOfRange value
+# must be supplied explicitly on starts of ranges
+
+# StartRef: ID of the IndexTerm that starts the indexing
+# range ended by this IndexTerm
+
+# Zone: IDs of the elements to which the IndexTerm applies,
+# and indicates that the IndexTerm applies to those entire
+# elements rather than the point at which the IndexTerm
+# occurs
+indexterm.attlist &=
+ pagenum.attrib,
+ attribute scope { "all" | "global" | "local" }?,
+ [ a:defaultValue = "normal" ]
+ attribute significance { "preferred" | "normal" }?,
+ attribute class { "singular" | "startofrange" | "endofrange" }?,
+ attribute startref { xsd:IDREF }?,
+ attribute zone { xsd:IDREFS }?,
+ common.attrib,
+ indexterm.role.attrib,
+ local.indexterm.attrib
+# end of indexterm.attlist
+
+# end of indexterm.module
+local.primsecter.attrib = empty
+primsecter.role.attrib = role.attrib
+primary = element primary { primary.attlist, ndxterm.char.mix* }
+# end of primary.element
+
+# SortAs: Alternate sort string for index sorting, e.g.,
+# "fourteen" for an element containing "14"
+primary.attlist &=
+ attribute sortas { text }?,
+ common.attrib,
+ primsecter.role.attrib,
+ local.primsecter.attrib
+# end of primary.attlist
+secondary = element secondary { secondary.attlist, ndxterm.char.mix* }
+# end of secondary.element
+
+# SortAs: Alternate sort string for index sorting, e.g.,
+# "fourteen" for an element containing "14"
+secondary.attlist &=
+ attribute sortas { text }?,
+ common.attrib,
+ primsecter.role.attrib,
+ local.primsecter.attrib
+# end of secondary.attlist
+tertiary = element tertiary { tertiary.attlist, ndxterm.char.mix* }
+# end of tertiary.element
+
+# SortAs: Alternate sort string for index sorting, e.g.,
+# "fourteen" for an element containing "14"
+tertiary.attlist &=
+ attribute sortas { text }?,
+ common.attrib,
+ primsecter.role.attrib,
+ local.primsecter.attrib
+# end of tertiary.attlist
+
+# end of primsecter.module
+local.seeseealso.attrib = empty
+seeseealso.role.attrib = role.attrib
+see = element see { see.attlist, ndxterm.char.mix* }
+# end of see.element
+see.attlist &=
+ common.attrib, seeseealso.role.attrib, local.seeseealso.attrib
+# end of see.attlist
+seealso = element seealso { seealso.attlist, ndxterm.char.mix* }
+# end of seealso.element
+seealso.attlist &=
+ common.attrib, seeseealso.role.attrib, local.seeseealso.attrib
+# end of seealso.attlist
+
+# end of seeseealso.module
+
+# end of indexterm.content.module
+
+# End of DocBook XML information pool module V4.2 ......................
+
+# ......................................................................
diff --git a/etc/schema/dbsoextbl.rnc b/etc/schema/dbsoextbl.rnc
new file mode 100644
index 00000000000..a547586ca17
--- /dev/null
+++ b/etc/schema/dbsoextbl.rnc
@@ -0,0 +1,30 @@
+# Definitions specific to the OASIS XML Exchange Table Model.
+
+# Reference OASIS Exchange Table Model
+include "soextbl.rnc" {
+ # Override definition of start
+ start |= notAllowed
+ # Add common attributes and the Label attribute to Table and
+ # InformalTable.
+ bodyatt = common.attrib, label.attrib, tables.role.attrib
+ # Add common attributes to TGroup, ColSpec, TBody, THead, Row, Entry
+ tbl.tgroup.att = common.attrib
+ tbl.colspec.att = common.attrib
+ tbl.tbody.att = common.attrib
+ tbl.thead.att = common.attrib
+ tbl.row.att = common.attrib
+ tbl.entry.att = common.attrib
+ # Content model for Table.
+ tbl.table.mdl =
+ blockinfo?,
+ formalobject.title.content,
+ ndxterm.class*,
+ textobject*,
+ (graphic+ | mediaobject+ | tgroup+)
+ # Allow either objects or inlines; beware of REs between elements.
+ tbl.entry.mdl = (para.char.mix | tabentry.mix)*
+}
+
+common.table.attribs = bodyatt
+
+# end of table.module
diff --git a/etc/schema/dbstart.rnc b/etc/schema/dbstart.rnc
new file mode 100644
index 00000000000..284f9b5b5a5
--- /dev/null
+++ b/etc/schema/dbstart.rnc
@@ -0,0 +1,23 @@
+# This choice of root elements comes from the 1.0b1 RNG schema at
+# http://www.oasis-open.org/docbook/relaxng/1.0b1/index.shtml
+
+start =
+ set
+ | setindex
+ | book
+ | part
+ | reference
+ | preface
+ | chapter
+ | appendix
+ | article
+ | bibliography
+ | glossary
+ | index
+ | refentry
+ | sect1
+ | sect2
+ | sect3
+ | sect4
+ | sect5
+ | section
diff --git a/etc/schema/docbook-dyntbl.rnc b/etc/schema/docbook-dyntbl.rnc
new file mode 100644
index 00000000000..9bb997ff734
--- /dev/null
+++ b/etc/schema/docbook-dyntbl.rnc
@@ -0,0 +1,18 @@
+# Variant of docbook.rnc that allows the table model to be selected
+# dynamically based on the definitions of cals.table.module and
+# exchange.table.module. See dbdyntbl.rnc.
+
+# Document (root) elements
+include "dbstart.rnc"
+
+# Notation declarations
+include "dbnotn.rnc"
+
+# Information pool
+include "dbpool.rnc"
+
+# Dynamic Table Model
+include "dbdyntbl.rnc"
+
+# Document hierarchy
+include "dbhier.rnc"
diff --git a/etc/schema/docbook-soextbl.rnc b/etc/schema/docbook-soextbl.rnc
new file mode 100644
index 00000000000..945a6219dba
--- /dev/null
+++ b/etc/schema/docbook-soextbl.rnc
@@ -0,0 +1,17 @@
+# Variant of docbook.rnc that uses the OASIS XML Exchange Table Model
+# rather than the CALS Table Model.
+
+# Document (root) elements
+include "dbstart.rnc"
+
+# Notation declarations
+include "dbnotn.rnc"
+
+# Information pool
+include "dbpool.rnc"
+
+# OASIS XML Exchange Table Model
+include "dbsoextbl.rnc"
+
+# Document hierarchy
+include "dbhier.rnc"
diff --git a/etc/schema/docbook.rnc b/etc/schema/docbook.rnc
new file mode 100644
index 00000000000..d10f614b286
--- /dev/null
+++ b/etc/schema/docbook.rnc
@@ -0,0 +1,48 @@
+# Unofficial DocBook RELAX NG Compact Syntax schema
+
+# This file was generated automatically by Trang
+# (http://www.thaiopensource.com/relaxng/trang.html) from the DocBook
+# XML DTD V4.2 (http://www.oasis-open.org/docbook/xml/4.2/), then
+# changing the definition of start, changing the filenames,
+# editing the comments and adding includes of dbstart.rnc
+# and dbcalstbl.rnc.
+
+# The following copyright applies to the DocBook XML DTD V4.2.
+
+# 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).
+#
+# Permission to use, copy, modify and distribute the DocBook XML 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/.
+
+# Document (root) elements
+include "dbstart.rnc"
+
+# Notation declarations
+include "dbnotn.rnc"
+
+# Information pool
+include "dbpool.rnc"
+
+# CALS Table Model
+include "dbcalstbl.rnc"
+
+# Document hierarchy
+include "dbhier.rnc"
diff --git a/etc/schema/locate.rnc b/etc/schema/locate.rnc
new file mode 100644
index 00000000000..89230adf9c0
--- /dev/null
+++ b/etc/schema/locate.rnc
@@ -0,0 +1,200 @@
+default namespace this = "http://thaiopensource.com/ns/locating-rules/1.0"
+namespace local = ""
+
+start = locatingRules
+
+locatingRules = element locatingRules { common, rule* }
+
+rule =
+ \include
+ # | group
+ | applyFollowingRules
+ | documentElement
+ # | doctypePublicId
+ | \namespace
+ | uri
+ | transformURI
+ # | typeIdProcessingInstruction
+ | \default
+ | typeId
+ # | typeIdBase
+ | extensionRule
+
+## Group of rules. Useful with xml:base.
+group = element group { common, rule* }
+
+\include =
+ element include {
+ common,
+ attribute rules { xsd:anyURI }
+ }
+
+applyFollowingRules =
+ element applyFollowingRules {
+ common,
+ attribute ruleType {
+ "documentElement"
+ | "doctypePublicId"
+ | "namespace"
+ | "uri"
+ | "transformURI"
+ | "typeIdProcessingInstruction"
+ | "default"
+ }
+ }
+
+documentElement =
+ ## Matches if the prefix and/or local name of document element
+ ## match the values of the prefix and localName attributes.
+ element documentElement {
+ common,
+ nameAtts,
+ targetAtt
+ }
+
+## If there's no prefix attribute, then only the local name must match.
+## If there's no local name attribute, then only the prefix must match.
+nameAtts = (prefixAtt, localNameAtt?) | localNameAtt
+
+## prefix="" matches if the document element has no prefix.
+prefixAtt = attribute prefix { (xsd:NCName - "xmlns") | "" }
+localNameAtt = attribute localName { xsd:NCName - "xmlns" }
+
+doctypePublicId =
+ ## Matches if the document has a DOCTYPE declaration with a public
+ ## identifier that, after normalization, matches the value of the
+ ## publicId attribute.
+ element doctypePublicId {
+ common,
+ attribute publicId { publicIdValue },
+ targetAtt
+ }
+
+publicIdValue =
+ xsd:token {
+ ## Newline and tab are excluded, because pattern applies to
+ ## the post-normalization value.
+ pattern = "[\-'()+,./:=?;!*#@$_%a-zA-Z0-9 ]*"
+ }
+
+# This is separate from documentElement so it can be distinguished
+# by applyFollowingRules.
+\namespace =
+ ## Matches if the document element has a namespace URI equal to the value
+ ## of the ns attribute. A document element with no namespace matches if
+ ## the value of the ns attribute is the empty string.
+ element namespace {
+ common,
+ attribute ns { xsd:string },
+ targetAtt
+ }
+
+uri =
+ ## Matches based on the URI of the document.
+ element uri {
+ common,
+ (resourceAtt | patternAtt),
+ targetAtt
+ }
+
+## Matches if it can be determined that the document resource is
+## the same resource as that identified by the value of the resource
+## attribute. In determining this, the implementation should apply
+## the semantics of the URI scheme used by the URI.
+resourceAtt = attribute resource { xsd:anyURI }
+
+## Matches if the document's URI matches the pattern specified
+## by the pattern attribute. A * in the path component matches
+## zero or more characters other than / (after resolving escapes).
+## If the pattern is a relative URI, it means that there must
+## be some URI such that when the pattern is resolved relative
+## to that URI, it matches the document's URI. Thus an empty
+## pattern will always match.
+patternAtt = attribute pattern { uriPattern }
+
+## A pattern for a URI. Same syntax as a URI, except that a * in
+## the path component has a special meaning.
+uriPattern = xsd:anyURI
+
+transformURI =
+ ## Generates a URI for the related resource by transforming
+ ## the URI of the document. Matches if the transformation
+ ## yields a valid URI that identifies an existing resource.
+ element transformURI {
+ common,
+ ## Semantics are the same as the pattern attribute of the uri element.
+ attribute fromPattern { uriPattern },
+ ## The result of the transformation is produced from the toPattern
+ ## by replacing each * by the string that matched the corresponding
+ ## * in the toPattern. The toPattern is appended to the initial
+ ## part of the document's URI that was not explicitly matched
+ ## by fromPattern.
+ attribute toPattern { uriPattern }
+ }
+
+\default =
+ ## Always matches.
+ element default {
+ common,
+ targetAtt
+ }
+
+## A document can be mapped onto a URI either indirectly via a typeId
+## or directly.
+targetAtt = uriAtt | typeIdAtt
+
+## Specifies the URI of the related resource.
+## xml:base is used if it's relative.
+uriAtt = attribute uri { xsd:anyURI }
+
+## Specifies an identifier of the type of document. typeId and
+## typeIdBase rules will be used to map this to a URI.
+typeIdAtt = attribute typeId { typeIdValue }
+
+## A type identifier can be anything convenient (e.g. a public identifier,
+## a URL or just a string with no formal structure). Whitespace is
+## normalized like a public identifier before comparing type identifiers
+## for equality.
+typeIdValue = xsd:token
+
+typeIdProcessingInstruction =
+ ## Matches if there's a processing instruction in the prolog
+ ## before any DOCTYPE declaration whose target is the value of
+ ## the target attribute. The value of the processing instruction
+ ## is interpreted as a typeId, which will be mapped to a
+ ## URI as normal.
+ element typeIdProcessingInstruction {
+ common,
+ attribute target { xsd:NCName }
+ }
+
+typeId =
+ ## Maps a typeId onto a URI.
+ element typeId {
+ common,
+ attribute id { typeIdValue },
+ targetAtt
+ }
+
+typeIdBase =
+ ## Used to map a typeId onto a URI. First, any URI reserved characters
+ ## are URI encoded. If the append attribute is specified, it is appended.
+ ## This is then treated as a URI. If relative, it is resolved using
+ ## the applicable base URI as usual. If the resulting URI identifies
+ ## an existing resource, then the typeId is mapped to this resource.
+ ## This is intended to be useful with file URIs.
+ element typeIdBase {
+ common,
+ attribute append { xsd:string }?
+ }
+
+extensionRule =
+ element * - this:* {
+ attribute * { text }*, (text|anyElement)*
+ }
+
+anyElement = element * { attribute * { text }*, (text|anyElement)* }
+
+common =
+ # attribute xml:base { xsd:anyURI }?,
+ attribute * - (xml:base|this:*|local:*) { text }*
diff --git a/etc/schema/rdfxml.rnc b/etc/schema/rdfxml.rnc
new file mode 100644
index 00000000000..9730322cfdd
--- /dev/null
+++ b/etc/schema/rdfxml.rnc
@@ -0,0 +1,205 @@
+#
+# RELAX NG Compact Schema for RDF/XML Syntax
+#
+# This schema is for information only and NON-NORMATIVE
+#
+# It is based on one originally written by James Clark in
+# http://lists.w3.org/Archives/Public/www-rdf-comments/2001JulSep/0248.html
+# and updated with later changes.
+#
+
+namespace local = ""
+namespace rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+datatypes xsd = "http://www.w3.org/2001/XMLSchema-datatypes"
+
+
+start = doc
+
+
+# I cannot seem to do this in RNGC so they are expanded in-line
+
+# coreSyntaxTerms = rdf:RDF | rdf:ID | rdf:about | rdf:parseType | rdf:resource | rdf:nodeID | rdf:datatype
+# syntaxTerms = coreSyntaxTerms | rdf:Description | rdf:li
+# oldTerms = rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID
+# nodeElementURIs = * - ( coreSyntaxTerms | rdf:li | oldTerms )
+# propertyElementURIs = * - ( coreSyntaxTerms | rdf:Description | oldTerms )
+# propertyAttributeURIs = * - ( coreSyntaxTerms | rdf:Description | rdf:li | oldTerms )
+
+# Also needed to allow rdf:li on all property element productions
+# since we can't capture the rdf:li rewriting to rdf_<n> in relaxng
+
+# Need to add these explicitly
+xmllang = attribute xml:lang { text }
+xmlbase = attribute xml:base { text }
+# and to forbid every other xml:* attribute, element
+
+doc =
+ RDF
+
+RDF =
+ element rdf:RDF {
+ xmllang?, xmlbase?, nodeElementList
+}
+
+nodeElementList =
+ nodeElement*
+
+ # Should be something like:
+ # ws* , ( nodeElement , ws* )*
+ # but RELAXNG does this by default, ignoring whitespace separating tags.
+
+nodeElement =
+ element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType |
+ rdf:resource | rdf:nodeID | rdf:datatype | rdf:li |
+ rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID ) {
+ (idAttr | nodeIdAttr | aboutAttr )?, xmllang?, xmlbase?, propertyAttr*, propertyEltList
+ }
+
+ # It is not possible to say "and not things
+ # beginning with _ in the rdf: namespace" in RELAX NG.
+
+ws =
+ " "
+
+ # Not used in this RELAX NG schema; but should be any legal XML
+ # whitespace defined by http://www.w3.org/TR/2000/REC-xml-20001006#NT-S
+
+
+propertyEltList =
+ propertyElt*
+
+ # Should be something like:
+ # ws* , ( propertyElt , ws* )*
+ # but RELAXNG does this by default, ignoring whitespace separating tags.
+
+propertyElt =
+ resourcePropertyElt |
+ literalPropertyElt |
+ parseTypeLiteralPropertyElt |
+ parseTypeResourcePropertyElt |
+ parseTypeCollectionPropertyElt |
+ parseTypeOtherPropertyElt |
+ emptyPropertyElt
+
+resourcePropertyElt =
+ element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType |
+ rdf:resource | rdf:nodeID | rdf:datatype |
+ rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID |
+ xml:* ) {
+ idAttr?, xmllang?, xmlbase?, nodeElement
+ }
+
+literalPropertyElt =
+ element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType |
+ rdf:resource | rdf:nodeID | rdf:datatype |
+ rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID |
+ xml:* ) {
+ (idAttr | datatypeAttr )?, xmllang?, xmlbase?, text
+ }
+
+parseTypeLiteralPropertyElt =
+ element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType |
+ rdf:resource | rdf:nodeID | rdf:datatype |
+ rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID |
+ xml:* ) {
+ idAttr?, parseLiteral, xmllang?, xmlbase?, literal
+ }
+
+parseTypeResourcePropertyElt =
+ element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType |
+ rdf:resource | rdf:nodeID | rdf:datatype |
+ rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID |
+ xml:* ) {
+ idAttr?, parseResource, xmllang?, xmlbase?, propertyEltList
+ }
+
+parseTypeCollectionPropertyElt =
+ element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType |
+ rdf:resource | rdf:nodeID | rdf:datatype |
+ rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID |
+ xml:* ) {
+ idAttr?, xmllang?, xmlbase?, parseCollection, nodeElementList
+ }
+
+parseTypeOtherPropertyElt =
+ element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType |
+ rdf:resource | rdf:nodeID | rdf:datatype |
+ rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID |
+ xml:* ) {
+ idAttr?, xmllang?, xmlbase?, parseOther, any
+ }
+
+emptyPropertyElt =
+ element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType |
+ rdf:resource | rdf:nodeID | rdf:datatype |
+ rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID |
+ xml:* ) {
+ idAttr?, (resourceAttr | nodeIdAttr)?, xmllang?, xmlbase?, propertyAttr*
+ }
+
+idAttr =
+ attribute rdf:ID {
+ IDsymbol
+ }
+
+nodeIdAttr =
+ attribute rdf:nodeID {
+ IDsymbol
+ }
+
+aboutAttr =
+ attribute rdf:about {
+ URI-reference
+ }
+
+propertyAttr =
+ attribute * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType |
+ rdf:resource | rdf:nodeID | rdf:datatype | rdf:li |
+ rdf:Description | rdf:aboutEach |
+ rdf:aboutEachPrefix | rdf:bagID |
+ xml:* ) {
+ string
+ }
+
+resourceAttr =
+ attribute rdf:resource {
+ URI-reference
+ }
+
+datatypeAttr =
+ attribute rdf:datatype {
+ URI-reference
+ }
+
+parseLiteral =
+ attribute rdf:parseType {
+ "Literal"
+ }
+
+parseResource =
+ attribute rdf:parseType {
+ "Resource"
+ }
+
+parseCollection =
+ attribute rdf:parseType {
+ "Collection"
+ }
+
+parseOther =
+ attribute rdf:parseType {
+ text
+ }
+
+URI-reference =
+ string
+
+literal =
+ any
+
+IDsymbol =
+ xsd:NMTOKEN
+
+any =
+ mixed { element * { attribute * { text }*, any }* }
+
diff --git a/etc/schema/relaxng.rnc b/etc/schema/relaxng.rnc
new file mode 100644
index 00000000000..08686ac5598
--- /dev/null
+++ b/etc/schema/relaxng.rnc
@@ -0,0 +1,63 @@
+# RELAX NG XML syntax expressed in RELAX NG Compact syntax.
+
+default namespace rng = "http://relaxng.org/ns/structure/1.0"
+namespace local = ""
+datatypes xsd = "http://www.w3.org/2001/XMLSchema-datatypes"
+
+start = pattern
+
+pattern =
+ element element { (nameQName | nameClass), (common & pattern+) }
+ | element attribute { (nameQName | nameClass), (common & pattern?) }
+ | element group|interleave|choice|optional
+ |zeroOrMore|oneOrMore|list|mixed { common & pattern+ }
+ | element ref|parentRef { nameNCName, common }
+ | element empty|notAllowed|text { common }
+ | element data { type, param*, (common & exceptPattern?) }
+ | element value { commonAttributes, type?, xsd:string }
+ | element externalRef { href, common }
+ | element grammar { common & grammarContent* }
+
+param = element param { commonAttributes, nameNCName, xsd:string }
+
+exceptPattern = element except { common & pattern+ }
+
+grammarContent =
+ definition
+ | element div { common & grammarContent* }
+ | element include { href, (common & includeContent*) }
+
+includeContent =
+ definition
+ | element div { common & includeContent* }
+
+definition =
+ element start { combine?, (common & pattern+) }
+ | element define { nameNCName, combine?, (common & pattern+) }
+
+combine = attribute combine { "choice" | "interleave" }
+
+nameClass =
+ element name { commonAttributes, xsd:QName }
+ | element anyName { common & exceptNameClass? }
+ | element nsName { common & exceptNameClass? }
+ | element choice { common & nameClass+ }
+
+exceptNameClass = element except { common & nameClass+ }
+
+nameQName = attribute name { xsd:QName }
+nameNCName = attribute name { xsd:NCName }
+href = attribute href { xsd:anyURI }
+type = attribute type { xsd:NCName }
+
+common = commonAttributes, foreignElement*
+
+commonAttributes =
+ attribute ns { xsd:string }?,
+ attribute datatypeLibrary { xsd:anyURI }?,
+ foreignAttribute*
+
+foreignElement = element * - rng:* { (anyAttribute | text | anyElement)* }
+foreignAttribute = attribute * - (rng:*|local:*) { text }
+anyElement = element * { (anyAttribute | text | anyElement)* }
+anyAttribute = attribute * { text }
diff --git a/etc/schema/schemas.xml b/etc/schema/schemas.xml
new file mode 100644
index 00000000000..e17b063f6fe
--- /dev/null
+++ b/etc/schema/schemas.xml
@@ -0,0 +1,36 @@
+<locatingRules xmlns="http://thaiopensource.com/ns/locating-rules/1.0">
+ <transformURI fromPattern="*.xml" toPattern="*.rnc"/>
+
+ <uri pattern="*.xsl" typeId="XSLT"/>
+ <uri pattern="*.html" typeId="XHTML"/>
+ <uri pattern="*.rng" typeId="RELAX NG"/>
+ <uri pattern="*.rdf" typeId="RDF"/>
+
+ <namespace ns="http://www.w3.org/1999/XSL/Transform" typeId="XSLT"/>
+ <namespace ns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" typeId="RDF"/>
+ <namespace ns="http://www.w3.org/1999/xhtml" typeId="XHTML"/>
+ <namespace ns="http://relaxng.org/ns/structure/1.0" typeId="RELAX NG"/>
+ <namespace ns="http://thaiopensource.com/ns/locating-rules/1.0"
+ uri="locate.rnc"/>
+
+ <documentElement localName="stylesheet" typeId="XSLT"/>
+ <documentElement prefix="xsl" localName="transform" typeId="XSLT"/>
+
+ <documentElement localName="html" typeId="XHTML"/>
+
+ <documentElement localName="grammar" typeId="RELAX NG"/>
+
+ <documentElement prefix="" localName="article" typeId="DocBook"/>
+ <documentElement prefix="" localName="book" typeId="DocBook"/>
+
+ <documentElement localName="RDF" typeId="RDF"/>
+ <documentElement prefix="rdf" typeId="RDF"/>
+
+ <documentElement localName="locatingRules" uri="locate.rnc"/>
+
+ <typeId id="XSLT" uri="xslt.rnc"/>
+ <typeId id="RELAX NG" uri="relaxng.rnc"/>
+ <typeId id="XHTML" uri="xhtml.rnc"/>
+ <typeId id="DocBook" uri="docbook.rnc"/>
+ <typeId id="RDF" uri="rdfxml.rnc"/>
+</locatingRules>
diff --git a/etc/schema/soextbl.rnc b/etc/schema/soextbl.rnc
new file mode 100644
index 00000000000..2e69127b4a2
--- /dev/null
+++ b/etc/schema/soextbl.rnc
@@ -0,0 +1,260 @@
+# XML EXCHANGE TABLE MODEL DECLARATION MODULE
+
+# This set of declarations defines the XML version of the Exchange
+# Table Model as of the date shown in the Formal Public Identifier
+# (FPI) for this entity.
+#
+# This set of declarations may be referred to using a public external
+# entity declaration and reference as shown in the following three
+# lines:
+#
+# <!ENTITY % calstblx
+# PUBLIC "-//OASIS//DTD XML Exchange Table Model 19990315//EN">
+# %calstblx;
+#
+# If various parameter entities used within this set of declarations
+# are to be given non-default values, the appropriate declarations
+# should be given before calling in this package (i.e., before the
+# "%calstblx;" reference).
+
+# The motivation for this XML version of the Exchange Table Model
+# is simply to create an XML version of the SGML Exchange Table
+# Model. By design, no effort has been made to "improve" the model.
+#
+# This XML version incorporates the logical bare minimum changes
+# necessary to make the Exchange Table Model a valid XML DTD.
+
+# The XML version of the Exchange Table Model differs from
+# the SGML version in the following ways:
+#
+# The following parameter entities have been removed:
+#
+# - tbl.table.excep, tbl.hdft.excep, tbl.row.excep, tbl.entry.excep
+# There are no exceptions in XML. The following normative statement
+# is made in lieu of exceptions: the exchange table model explicitly
+# forbids a table from occurring within another table. If the
+# content model of an entry includes a table element, then this
+# cannot be enforced by the DTD, but it is a deviation from the
+# exchange table model to include a table within a table.
+#
+# - tbl.hdft.name, tbl.hdft.mdl, tbl.hdft.excep, tbl.hdft.att
+# The motivation for these elements was to change the table
+# header/footer elements. Since XML does not allow element declarations
+# to contain name groups, and the exchange table model does not
+# allow a table to contain footers, the continued presence of these
+# attributes seems unnecessary.
+#
+# The following parameter entity has been added:
+#
+# - tbl.thead.att
+# This entity parameterizes the attributes on thead. It replaces
+# the tbl.hdft.att parameter entity.
+#
+# Other miscellaneous changes:
+#
+# - Tag ommission indicators have been removed
+# - Comments have been removed from declarations
+# - NUMBER attributes have been changed to NMTOKEN
+# - NUTOKEN attributes have been to changed to NMTOKEN
+# - Removed the grouping characters around the content model
+# parameter entry for the 'entry' element. This is necessary
+# so that an entry can contain #PCDATA and be defined as an
+# optional, repeatable OR group beginning with #PCDATA.
+
+# This entity includes a set of element and attribute declarations
+# that partially defines the Exchange table model. However, the model
+# is not well-defined without the accompanying natural language
+# description of the semantics (meanings) of these various elements,
+# attributes, and attribute values. The semantic writeup, also available
+# from SGML Open, should be used in conjunction with this entity.
+
+# In order to use the Exchange table model, various parameter entity
+# declarations are required. A brief description is as follows:
+#
+# ENTITY NAME WHERE USED WHAT IT IS
+#
+# %yesorno In ATTLIST of: An attribute declared value
+# almost all elements for a "boolean" attribute
+#
+# %paracon In content model of: The "text" (logical content)
+# <entry> of the model group for <entry>
+#
+# %titles In content model of: The "title" part of the model
+# table element group for the table element
+#
+# %tbl.table.name In declaration of: The name of the "table"
+# table element element
+#
+# %tbl.table-titles.mdl In content model of: The model group for the title
+# table elements part of the content model for
+# table element
+#
+# %tbl.table.mdl In content model of: The model group for the content
+# table elements model for table element,
+# often (and by default) defined
+# in terms of %tbl.table-titles.mdl
+# and tgroup
+#
+# %tbl.table.att In ATTLIST of: Additional attributes on the
+# table element table element
+#
+# %bodyatt In ATTLIST of: Additional attributes on the
+# table element table element (for backward
+# compatibility with the SGML
+# model)
+#
+# %tbl.tgroup.mdl In content model of: The model group for the content
+# <tgroup> model for <tgroup>
+#
+# %tbl.tgroup.att In ATTLIST of: Additional attributes on the
+# <tgroup> <tgroup> element
+#
+# %tbl.thead.att In ATTLIST of: Additional attributes on the
+# <thead> <thead> element
+#
+# %tbl.tbody.att In ATTLIST of: Additional attributes on the
+# <tbody> <tbody> element
+#
+# %tbl.colspec.att In ATTLIST of: Additional attributes on the
+# <colspec> <colspec> element
+#
+# %tbl.row.mdl In content model of: The model group for the content
+# <row> model for <row>
+#
+# %tbl.row.att In ATTLIST of: Additional attributes on the
+# <row> <row> element
+#
+# %tbl.entry.mdl In content model of: The model group for the content
+# <entry> model for <entry>
+#
+# %tbl.entry.att In ATTLIST of: Additional attributes on the
+# <entry> <entry> element
+#
+# This set of declarations will use the default definitions shown below
+# for any of these parameter entities that are not declared before this
+# set of declarations is referenced.
+
+# These definitions are not directly related to the table model, but are
+# used in the default CALS table model and may be defined elsewhere (and
+# prior to the inclusion of this table module) in the referencing DTD.
+
+yesorno = xsd:NMTOKEN
+# no if zero(s), yes if any other value
+pcd = text
+paracon = pcd
+# default for use in entry content
+
+# The parameter entities as defined below change and simplify the CALS table
+# model as published (as part of the Example DTD) in MIL-HDBK-28001. The
+# resulting simplified DTD has support from the SGML Open vendors and is
+# therefore more interoperable among different systems.
+#
+# These following declarations provide the Exchange default definitions
+# for these entities. However, these entities can 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.
+#
+# Note, however, that changes may have significant effect on the ability to
+# interchange table information. These changes may manifest themselves
+# in useability, presentation, and possible structure information degradation.
+tbl.table-titles.mdl = title
+tbl.table-main.mdl = tgroup+
+tbl.table.mdl = tbl.table-titles.mdl | tbl.table-main.mdl
+tbl.table.att = attribute pgwide { yesorno }?
+bodyatt = empty
+tbl.tgroup.mdl = colspec*, thead?, tbody
+tbl.tgroup.att = empty
+tbl.thead.att = empty
+tbl.tbody.att = empty
+tbl.colspec.att = empty
+tbl.row.mdl = entry+
+tbl.row.att = empty
+tbl.entry.mdl = paracon*
+tbl.entry.att = empty
+# ===== Element and attribute declarations follow. =====
+
+# Default declarations previously defined in this entity and
+# referenced below include:
+# ENTITY % tbl.table.name "table"
+# ENTITY % tbl.table-titles.mdl "%titles;,"
+# ENTITY % tbl.table.mdl "%tbl.table-titles; tgroup+"
+# ENTITY % tbl.table.att "
+# pgwide %yesorno; #IMPLIED "
+table = element table { table.attlist, tbl.table.mdl }
+table.attlist &=
+ attribute frame {
+ "top" | "bottom" | "topbot" | "all" | "sides" | "none"
+ }?,
+ attribute colsep { yesorno }?,
+ attribute rowsep { yesorno }?,
+ tbl.table.att,
+ bodyatt
+# Default declarations previously defined in this entity and
+# referenced below include:
+# ENTITY % tbl.tgroup.mdl "colspec*,thead?,tbody"
+# ENTITY % tbl.tgroup.att ""
+tgroup = element tgroup { tgroup.attlist, tbl.tgroup.mdl }
+tgroup.attlist &=
+ attribute cols { xsd:NMTOKEN },
+ attribute colsep { yesorno }?,
+ attribute rowsep { yesorno }?,
+ attribute align { "left" | "right" | "center" | "justify" | "char" }?,
+ tbl.tgroup.att
+# Default declarations previously defined in this entity and
+# referenced below include:
+# ENTITY % tbl.colspec.att ""
+colspec = element colspec { colspec.attlist, empty }
+colspec.attlist &=
+ attribute colnum { xsd:NMTOKEN }?,
+ attribute colname { xsd:NMTOKEN }?,
+ attribute colwidth { text }?,
+ attribute colsep { yesorno }?,
+ attribute rowsep { yesorno }?,
+ attribute align { "left" | "right" | "center" | "justify" | "char" }?,
+ attribute char { text }?,
+ attribute charoff { xsd:NMTOKEN }?,
+ tbl.colspec.att
+# Default declarations previously defined in this entity and
+# referenced below include:
+# ENTITY % tbl.thead.att ""
+thead = element thead { thead.attlist, row+ }
+thead.attlist &=
+ attribute valign { "top" | "middle" | "bottom" }?,
+ tbl.thead.att
+# Default declarations previously defined in this entity and
+# referenced below include:
+# ENTITY % tbl.tbody.att ""
+tbody = element tbody { tbody.attlist, row+ }
+tbody.attlist &=
+ attribute valign { "top" | "middle" | "bottom" }?,
+ tbl.tbody.att
+# Default declarations previously defined in this entity and
+# referenced below include:
+# ENTITY % tbl.row.mdl "entry+"
+# ENTITY % tbl.row.att ""
+row = element row { row.attlist, tbl.row.mdl }
+row.attlist &=
+ attribute rowsep { yesorno }?,
+ attribute valign { "top" | "middle" | "bottom" }?,
+ tbl.row.att
+# Default declarations previously defined in this entity and
+# referenced below include:
+# ENTITY % paracon "#PCDATA"
+# ENTITY % tbl.entry.mdl "(%paracon;)*"
+# ENTITY % tbl.entry.att ""
+entry = element entry { entry.attlist, tbl.entry.mdl }
+entry.attlist &=
+ attribute colname { xsd:NMTOKEN }?,
+ attribute namest { xsd:NMTOKEN }?,
+ attribute nameend { xsd:NMTOKEN }?,
+ attribute morerows { xsd:NMTOKEN }?,
+ attribute colsep { yesorno }?,
+ attribute rowsep { yesorno }?,
+ attribute align { "left" | "right" | "center" | "justify" | "char" }?,
+ attribute char { text }?,
+ attribute charoff { xsd:NMTOKEN }?,
+ attribute valign { "top" | "middle" | "bottom" }?,
+ tbl.entry.att
+title |= notAllowed
+start = table
diff --git a/etc/schema/xhtml-applet.rnc b/etc/schema/xhtml-applet.rnc
new file mode 100644
index 00000000000..115f1cbda7d
--- /dev/null
+++ b/etc/schema/xhtml-applet.rnc
@@ -0,0 +1,19 @@
+# Applet Module
+
+applet =
+ element applet {
+ applet.attlist,
+ # No restrictions on mixed content in TREX.
+ param*,
+ Flow.model
+ }
+applet.attlist =
+ Core.attrib,
+ attribute alt { Text.datatype },
+ attribute archive { text }?,
+ attribute code { text }?,
+ attribute codebase { URI.datatype }?,
+ attribute object { text }?,
+ attribute height { Length.datatype },
+ attribute width { Length.datatype }
+Inline.class |= applet
diff --git a/etc/schema/xhtml-attribs.rnc b/etc/schema/xhtml-attribs.rnc
new file mode 100644
index 00000000000..ef653c70dbb
--- /dev/null
+++ b/etc/schema/xhtml-attribs.rnc
@@ -0,0 +1,14 @@
+# Common Attributes Module
+
+id.attrib = attribute id { ID.datatype }?
+class.attrib = attribute class { NMTOKENS.datatype }?
+title.attrib = attribute title { Text.datatype }?
+Core.attrib = id.attrib, class.attrib, title.attrib
+lang.attrib = attribute xml:lang { LanguageCode.datatype }?
+I18n.attrib = lang.attrib
+Common.attrib = Core.attrib, I18n.attrib
+CommonIdRequired.attrib =
+ attribute id { ID.datatype },
+ class.attrib,
+ title.attrib,
+ I18n.attrib
diff --git a/etc/schema/xhtml-base.rnc b/etc/schema/xhtml-base.rnc
new file mode 100644
index 00000000000..154dfce1c5a
--- /dev/null
+++ b/etc/schema/xhtml-base.rnc
@@ -0,0 +1,5 @@
+# Base Module
+
+base = element base { base.attlist }
+base.attlist = attribute href { URI.datatype }
+head.content &= base?
diff --git a/etc/schema/xhtml-basic-form.rnc b/etc/schema/xhtml-basic-form.rnc
new file mode 100644
index 00000000000..c0a78a1d72e
--- /dev/null
+++ b/etc/schema/xhtml-basic-form.rnc
@@ -0,0 +1,63 @@
+# Simplified Forms Module
+
+form =
+ element form {
+ form.attlist,
+ # Don't use Block.model, because this gets redefined by the
+ # legacy module.
+ Block.class+
+ }
+form.attlist =
+ Common.attrib,
+ attribute action { URI.datatype },
+ attribute method { "get" | "post" }?,
+ attribute enctype { ContentType.datatype }?
+label = element label { label.attlist, Inline.model }
+label.attlist =
+ Common.attrib,
+ attribute for { IDREF.datatype }?,
+ attribute accesskey { Character.datatype }?
+input = element input { input.attlist }
+input.attlist =
+ Common.attrib,
+ attribute type { InputType.class }?,
+ attribute name { text }?,
+ attribute value { text }?,
+ attribute checked { "checked" }?,
+ attribute size { text }?,
+ attribute maxlength { Number.datatype }?,
+ attribute src { URI.datatype }?,
+ attribute accesskey { Character.datatype }?
+InputType.class =
+ "text"
+ | "password"
+ | "checkbox"
+ | "radio"
+ | "submit"
+ | "reset"
+ | "hidden"
+select = element select { select.attlist, option+ }
+select.attlist =
+ Common.attrib,
+ attribute name { text }?,
+ attribute size { Number.datatype }?,
+ attribute multiple { "multiple" }?
+option =
+ element option {
+ Common.attrib,
+ attribute selected { "selected" }?,
+ attribute value { text }?,
+ text
+ }
+textarea = element textarea { textarea.attlist }
+textarea.attlist =
+ Common.attrib,
+ attribute name { text }?,
+ attribute rows { Number.datatype },
+ attribute cols { Number.datatype },
+ attribute accesskey { Character.datatype }?,
+ text
+Form.class = form
+Formctrl.class = input | label | select | textarea
+Block.class |= Form.class
+Inline.class |= Formctrl.class
diff --git a/etc/schema/xhtml-basic-table.rnc b/etc/schema/xhtml-basic-table.rnc
new file mode 100644
index 00000000000..97e10a56743
--- /dev/null
+++ b/etc/schema/xhtml-basic-table.rnc
@@ -0,0 +1,28 @@
+# Basic Tables Module
+
+table = element table { table.attlist, caption?, tr+ }
+table.attlist =
+ Common.attrib,
+ attribute summary { Text.datatype }?
+caption = element caption { caption.attlist, Inline.model }
+caption.attlist = Common.attrib
+tr = element tr { tr.attlist, (th | td)+ }
+tr.attlist = Common.attrib, CellHAlign.attrib, CellVAlign.attrib
+th = element th { th.attlist, Flow.model }
+th.attlist = Cell.attrib
+td = element td { td.attlist, Flow.model }
+td.attlist = Cell.attrib
+Cell.attrib =
+ Common.attrib,
+ attribute abbr { Text.datatype }?,
+ attribute axis { text }?,
+ attribute headers { IDREFS.datatype }?,
+ scope.attrib,
+ attribute rowspan { Number.datatype }?,
+ attribute colspan { Number.datatype }?,
+ CellHAlign.attrib,
+ CellVAlign.attrib
+CellHAlign.attrib = attribute align { "left" | "center" | "right" }?
+CellVAlign.attrib = attribute valign { "top" | "middle" | "bottom" }?
+scope.attrib = attribute scope { "row" | "col" }?
+Block.class |= table
diff --git a/etc/schema/xhtml-bdo.rnc b/etc/schema/xhtml-bdo.rnc
new file mode 100644
index 00000000000..5658be36ecb
--- /dev/null
+++ b/etc/schema/xhtml-bdo.rnc
@@ -0,0 +1,7 @@
+# Bi-directional Module
+
+bdo = element bdo { bdo.attlist, Inline.model }
+bdo.attlist = Core.attrib, lang.attrib, dir.attrib
+dir.attrib = attribute dir { "ltr" | "rtl" }
+I18n.attrib &= dir.attrib?
+Inline.class |= bdo
diff --git a/etc/schema/xhtml-csismap.rnc b/etc/schema/xhtml-csismap.rnc
new file mode 100644
index 00000000000..abd51f1a441
--- /dev/null
+++ b/etc/schema/xhtml-csismap.rnc
@@ -0,0 +1,29 @@
+# Client-side Image Map Module
+
+area = element area { area.attlist }
+area.attlist =
+ Common.attrib,
+ attribute href { URI.datatype }?,
+ shape.attrib,
+ coords.attrib,
+ attribute nohref { "nohref" }?,
+ attribute alt { Text.datatype },
+ attribute tabindex { Number.datatype }?,
+ attribute accesskey { Character.datatype }?
+map =
+ element map {
+ map.attlist,
+ (# This does not use Block.mix
+ # because loose.dtd doesn't use %Flow;
+ Block.class
+ | area)+
+ }
+map.attlist = CommonIdRequired.attrib
+a.attlist &= shape.attrib, coords.attrib
+img.attlist &= usemap.attlist
+object.attlist &= usemap.attlist
+usemap.attlist = attribute usemap { IDREF.datatype }?
+shape.attrib =
+ attribute shape { "rect" | "circle" | "poly" | "default" }?
+coords.attrib = attribute coords { text }?
+Inline.class |= map
diff --git a/etc/schema/xhtml-datatypes.rnc b/etc/schema/xhtml-datatypes.rnc
new file mode 100644
index 00000000000..596598039dd
--- /dev/null
+++ b/etc/schema/xhtml-datatypes.rnc
@@ -0,0 +1,47 @@
+# Datatypes Module
+
+# Length defined for cellpadding/cellspacing
+
+# nn for pixels or nn% for percentage length
+Length.datatype = text
+# space-separated list of link types
+LinkTypes.datatype = NMTOKENS.datatype
+# single or comma-separated list of media descriptors
+MediaDesc.datatype = text
+# pixel, percentage, or relative
+MultiLength.datatype = text
+# one or more digits (NUMBER)
+Number.datatype = text
+# integer representing length in pixels
+Pixels.datatype = text
+# script expression
+Script.datatype = text
+# textual content
+Text.datatype = text
+# Imported Datatypes ................................
+
+# a single character from [ISO10646]
+Character.datatype = text
+# a character encoding, as per [RFC2045]
+Charset.datatype = text
+# a space separated list of character encodings, as per [RFC2045]
+Charsets.datatype = text
+# media type, as per [RFC2045]
+ContentType.datatype = text
+# comma-separated list of media types, as per [RFC2045]
+ContentTypes.datatype = text
+# date and time information. ISO date format
+Datetime.datatype = text
+# formal public identifier, as per [ISO8879]
+FPI.datatype = text
+# a language code, as per [RFC1766]
+LanguageCode.datatype = xsd:language
+# a Uniform Resource Identifier, see [URI]
+URI.datatype = xsd:anyURI
+# a space-separated list of Uniform Resource Identifiers, see [URI]
+URIs.datatype = text
+NMTOKEN.datatype = xsd:NMTOKEN
+NMTOKENS.datatype = xsd:NMTOKENS
+ID.datatype = xsd:ID
+IDREF.datatype = xsd:IDREF
+IDREFS.datatype = xsd:IDREFS
diff --git a/etc/schema/xhtml-edit.rnc b/etc/schema/xhtml-edit.rnc
new file mode 100644
index 00000000000..4301fc27f74
--- /dev/null
+++ b/etc/schema/xhtml-edit.rnc
@@ -0,0 +1,12 @@
+# Edit Module
+
+del = element del { del.attlist, Inline.model }
+del.attlist = Edit.attrib
+ins = element ins { ins.attlist, Inline.model }
+ins.attlist = Edit.attrib
+Edit.attrib =
+ attribute cite { URI.datatype }?,
+ attribute datetime { Datetime.datatype }?
+Edit.class = del | ins
+Inline.class |= Edit.class
+Block.class |= Edit.class
diff --git a/etc/schema/xhtml-events.rnc b/etc/schema/xhtml-events.rnc
new file mode 100644
index 00000000000..536874201e1
--- /dev/null
+++ b/etc/schema/xhtml-events.rnc
@@ -0,0 +1,47 @@
+# Events Module
+
+a.attlist &=
+ attribute onblur { Script.datatype }?,
+ attribute onfocus { Script.datatype }?
+area.attlist &=
+ attribute onblur { Script.datatype }?,
+ attribute onfocus { Script.datatype }?
+form.attlist &=
+ attribute onreset { Script.datatype }?,
+ attribute onsubmit { Script.datatype }?
+body.attlist &=
+ attribute onload { Script.datatype }?,
+ attribute onunload { Script.datatype }?
+label.attlist &=
+ attribute onblur { Script.datatype }?,
+ attribute onfocus { Script.datatype }?
+input.attlist &=
+ attribute onblur { Script.datatype }?,
+ attribute onchange { Script.datatype }?,
+ attribute onfocus { Script.datatype }?,
+ attribute onselect { Script.datatype }?
+select.attlist &=
+ attribute onblur { Script.datatype }?,
+ attribute onchange { Script.datatype }?,
+ attribute onfocus { Script.datatype }?
+textarea.attlist &=
+ attribute onblur { Script.datatype }?,
+ attribute onchange { Script.datatype }?,
+ attribute onfocus { Script.datatype }?,
+ attribute onselect { Script.datatype }?
+button.attlist &=
+ attribute onblur { Script.datatype }?,
+ attribute onfocus { Script.datatype }?
+Events.attrib =
+ attribute onclick { Script.datatype }?,
+ attribute ondblclick { Script.datatype }?,
+ attribute onmousedown { Script.datatype }?,
+ attribute onmouseup { Script.datatype }?,
+ attribute onmouseover { Script.datatype }?,
+ attribute onmousemove { Script.datatype }?,
+ attribute onmouseout { Script.datatype }?,
+ attribute onkeypress { Script.datatype }?,
+ attribute onkeydown { Script.datatype }?,
+ attribute onkeyup { Script.datatype }?
+Common.attrib &= Events.attrib
+CommonIdRequired.attrib &= Events.attrib
diff --git a/etc/schema/xhtml-form.rnc b/etc/schema/xhtml-form.rnc
new file mode 100644
index 00000000000..f5544190b01
--- /dev/null
+++ b/etc/schema/xhtml-form.rnc
@@ -0,0 +1,49 @@
+# Forms Module
+
+# Unlike the DTD implementation, this builds on the basic-form module
+
+include "xhtml-basic-form.rnc" {
+ select = element select { select.attlist, (option | optgroup)+ }
+}
+form.attlist &=
+ attribute accept-charset { Charsets.datatype }?,
+ attribute accept { ContentTypes.datatype }?
+input.attlist &=
+ attribute disabled { "disabled" }?,
+ attribute readonly { "readonly" }?,
+ attribute alt { text }?,
+ attribute tabindex { Number.datatype }?,
+ attribute accept { ContentTypes.datatype }?
+InputType.class |= "image" | "button"
+select.attlist &=
+ attribute disabled { "disabled" }?,
+ attribute tabindex { Number.datatype }?
+option.attlist &=
+ attribute disabled { "disabled" }?,
+ attribute label { Text.datatype }?
+optgroup = element optgroup { optgroup.attlist, option+ }
+optgroup.attlist =
+ Common.attrib,
+ attribute disabled { "disabled" }?,
+ attribute label { Text.datatype }
+textarea.attlist &=
+ attribute disabled { "disabled" }?,
+ attribute readonly { "readonly" }?,
+ attribute tabindex { Number.datatype }?
+fieldset = element fieldset { fieldset.attlist, legend, Flow.model }
+fieldset.attlist = Common.attrib
+button = element button { button.attlist, Flow.model }
+button.attlist =
+ Common.attrib,
+ attribute name { text }?,
+ attribute value { text }?,
+ attribute type { "button" | "submit" | "reset" }?,
+ attribute disabled { "disabled" }?,
+ attribute tabindex { Number.datatype }?,
+ attribute accesskey { Character.datatype }?
+legend = element legend { legend.attlist, Inline.model }
+legend.attlist =
+ Common.attrib,
+ attribute accesskey { Character.datatype }?
+Form.class |= fieldset
+Formctrl.class |= button
diff --git a/etc/schema/xhtml-frames.rnc b/etc/schema/xhtml-frames.rnc
new file mode 100644
index 00000000000..9b9f9ba1465
--- /dev/null
+++ b/etc/schema/xhtml-frames.rnc
@@ -0,0 +1,26 @@
+# Frames Module
+
+include "xhtml-struct.rnc" {
+ html = element html { html.attlist, head, frameset }
+}
+frameset =
+ element frameset {
+ frameset.attlist,
+ ((frameset | frame)+ & noframes?)
+ }
+frameset.attlist =
+ Core.attrib,
+ attribute cols { MultiLength.datatype }?,
+ attribute rows { MultiLength.datatype }?
+frame = element frame { frame.attlist }
+frame.attlist =
+ Core.attrib,
+ attribute longdesc { URI.datatype }?,
+ attribute src { URI.datatype }?,
+ attribute frameborder { "1" | "0" }?,
+ attribute marginwidth { Pixels.datatype }?,
+ attribute marginheight { Pixels.datatype }?,
+ attribute noresize { "noresize" }?,
+ attribute scrolling { "yes" | "no" | "auto" }?
+noframes = element noframes { noframes.attlist, body }
+noframes.attlist = Common.attrib
diff --git a/etc/schema/xhtml-hypertext.rnc b/etc/schema/xhtml-hypertext.rnc
new file mode 100644
index 00000000000..82e7686d648
--- /dev/null
+++ b/etc/schema/xhtml-hypertext.rnc
@@ -0,0 +1,16 @@
+# Hypertext Module
+
+# Depends on text module.
+
+a = element a { a.attlist, Inline.model }
+a.attlist =
+ Common.attrib,
+ attribute href { URI.datatype }?,
+ attribute charset { Charset.datatype }?,
+ attribute type { ContentType.datatype }?,
+ attribute hreflang { LanguageCode.datatype }?,
+ attribute rel { LinkTypes.datatype }?,
+ attribute rev { LinkTypes.datatype }?,
+ attribute accesskey { Character.datatype }?,
+ attribute tabindex { Number.datatype }?
+Inline.class |= a
diff --git a/etc/schema/xhtml-iframe.rnc b/etc/schema/xhtml-iframe.rnc
new file mode 100644
index 00000000000..bbcdd441bb3
--- /dev/null
+++ b/etc/schema/xhtml-iframe.rnc
@@ -0,0 +1,14 @@
+# Iframe Module
+
+iframe = element iframe { iframe.attlist, Flow.model }
+iframe.attlist =
+ Core.attrib,
+ attribute longdesc { URI.datatype }?,
+ attribute src { URI.datatype }?,
+ attribute frameborder { "1" | "0" }?,
+ attribute width { Length.datatype }?,
+ attribute height { Length.datatype }?,
+ attribute marginwidth { Pixels.datatype }?,
+ attribute marginheight { Pixels.datatype }?,
+ attribute scrolling { "yes" | "no" | "auto" }?
+Inline.class |= iframe
diff --git a/etc/schema/xhtml-image.rnc b/etc/schema/xhtml-image.rnc
new file mode 100644
index 00000000000..e1d6e5662f7
--- /dev/null
+++ b/etc/schema/xhtml-image.rnc
@@ -0,0 +1,11 @@
+# Image Module
+
+img = element img { img.attlist }
+img.attlist =
+ Common.attrib,
+ attribute src { URI.datatype },
+ attribute alt { Text.datatype },
+ attribute longdesc { URI.datatype }?,
+ attribute height { Length.datatype }?,
+ attribute width { Length.datatype }?
+Inline.class |= img
diff --git a/etc/schema/xhtml-inlstyle.rnc b/etc/schema/xhtml-inlstyle.rnc
new file mode 100644
index 00000000000..aa69b75ab61
--- /dev/null
+++ b/etc/schema/xhtml-inlstyle.rnc
@@ -0,0 +1,3 @@
+# Inline Style Module
+
+Core.attrib &= attribute style { text }?
diff --git a/etc/schema/xhtml-legacy.rnc b/etc/schema/xhtml-legacy.rnc
new file mode 100644
index 00000000000..b15061f6d9b
--- /dev/null
+++ b/etc/schema/xhtml-legacy.rnc
@@ -0,0 +1,100 @@
+# Legacy Module
+
+lang.attrib &= attribute lang { LanguageCode.datatype }?
+basefont = element basefont { basefont.attlist }
+basefont.attlist = id.attrib, Font.attrib
+center = element center { center.attlist, Flow.model }
+center.attlist = Common.attrib
+font = element font { font.attlist, Inline.model }
+font.attlist = Core.attrib, I18n.attrib, Font.attrib
+Font.attrib =
+ attribute size { text }?,
+ attribute color { Color.datatype }?,
+ attribute face { text }?
+s = element s { s.attlist, Inline.model }
+s.attlist = Common.attrib
+strike = element strike { strike.attlist, Inline.model }
+strike.attlist = Common.attrib
+u = element u { u.attlist, Inline.model }
+u.attlist = Common.attrib
+dir = element dir { dir.attlist, li.noblock+ }
+dir.attlist =
+ Common.attrib,
+ attribute compact { "compact" }?
+menu = element menu { menu.attlist, li.noblock+ }
+menu.attlist =
+ Common.attrib,
+ attribute compact { "compact" }?
+li.noblock = element li { li.attlist, Inline.model }
+isindex = element isindex { isindex.attlist }
+isindex.attlist =
+ Core.attrib,
+ I18n.attrib,
+ attribute prompt { Text.datatype }?
+applet.attlist &=
+ attribute align { "top" | "middle" | "bottom" | "left" | "right" }?,
+ attribute hspace { Pixels.datatype }?,
+ attribute vspace { Pixels.datatype }?
+body.attlist &=
+ attribute background { URI.datatype }?,
+ attribute bgcolor { Color.datatype }?,
+ attribute text { Color.datatype }?,
+ attribute link { Color.datatype }?,
+ attribute vlink { Color.datatype }?,
+ attribute alink { Color.datatype }?
+br.attlist &= attribute clear { "left" | "all" | "right" | "none" }?
+caption.attlist &= align.attrib
+div.attlist &= align.attrib
+# Not in the CR, but surely an error.
+dl.attlist &= attribute compact { "compact" }?
+Heading.attrib &= align.attrib
+hr.attlist &=
+ attribute align { "left" | "center" | "right" }?,
+ attribute noshade { "noshade" }?,
+ attribute size { Pixels.datatype }?,
+ attribute width { Pixels.datatype }?
+img.attlist &=
+ attribute align { "top" | "middle" | "bottom" | "left" | "right" }?,
+ attribute border { Pixels.datatype }?,
+ attribute hspace { Pixels.datatype }?,
+ attribute vspace { Pixels.datatype }?
+input.attlist &= align.attrib
+legend.attlist &=
+ attribute align { "top" | "bottom" | "left" | "right" }?
+li.attlist &=
+ attribute type { text }?,
+ attribute value { text }?
+object.attlist &=
+ attribute align { "top" | "middle" | "bottom" | "left" | "right" }?,
+ attribute border { Pixels.datatype }?,
+ attribute hspace { Pixels.datatype }?,
+ attribute vspace { Pixels.datatype }?
+ol.attlist &=
+ attribute type { text }?,
+ attribute compact { "compact" }?,
+ attribute start { text }?
+p.attlist &= align.attrib
+pre.attlist &= attribute width { Length.datatype }?
+script.attlist &= attribute language { ContentType.datatype }?
+table.attlist &=
+ align.attrib,
+ attribute bgcolor { Color.datatype }?
+tr.attlist &= attribute bgcolor { Color.datatype }?
+Cell.attrib &=
+ attribute nowrap { "nowrap" }?,
+ attribute bgcolor { Color.datatype }?,
+ attribute width { Pixels.datatype }?,
+ attribute height { Pixels.datatype }?
+ul.attlist &=
+ attribute type { text }?,
+ attribute compact { "compact" }?
+align.attrib = attribute align { "left" | "all" | "right" | "none" }?
+Color.datatype = text
+Inline.class |= font | basefont | s | strike | u
+Block.class |= center | isindex
+List.class |= dir | menu
+head.content &= isindex?
+Block.mix |= text | Inline.class
+# With the legacy module and the frames modules, the html
+# element can contain either body or frameset.
+frameset |= body
diff --git a/etc/schema/xhtml-link.rnc b/etc/schema/xhtml-link.rnc
new file mode 100644
index 00000000000..9d0d6f1cc75
--- /dev/null
+++ b/etc/schema/xhtml-link.rnc
@@ -0,0 +1,13 @@
+# Link Module
+
+link = element link { link.attlist }
+link.attlist =
+ Common.attrib,
+ attribute charset { Charset.datatype }?,
+ attribute href { URI.datatype }?,
+ attribute hreflang { LanguageCode.datatype }?,
+ attribute type { ContentType.datatype }?,
+ attribute rel { LinkTypes.datatype }?,
+ attribute rev { LinkTypes.datatype }?,
+ attribute media { MediaDesc.datatype }?
+head.content &= link*
diff --git a/etc/schema/xhtml-list.rnc b/etc/schema/xhtml-list.rnc
new file mode 100644
index 00000000000..8b994041eaa
--- /dev/null
+++ b/etc/schema/xhtml-list.rnc
@@ -0,0 +1,16 @@
+# List Module
+
+dl = element dl { dl.attlist, (dt | dd)+ }
+dl.attlist = Common.attrib
+dt = element dt { dt.attlist, Inline.model }
+dt.attlist = Common.attrib
+dd = element dd { dd.attlist, Flow.model }
+dd.attlist = Common.attrib
+ol = element ol { ol.attlist, li+ }
+ol.attlist = Common.attrib
+ul = element ul { ul.attlist, li+ }
+ul.attlist = Common.attrib
+li = element li { li.attlist, Flow.model }
+li.attlist = Common.attrib
+List.class = ul | ol | dl
+Block.class |= List.class
diff --git a/etc/schema/xhtml-meta.rnc b/etc/schema/xhtml-meta.rnc
new file mode 100644
index 00000000000..ab0b5eb318a
--- /dev/null
+++ b/etc/schema/xhtml-meta.rnc
@@ -0,0 +1,10 @@
+# Meta Module
+
+meta = element meta { meta.attlist }
+meta.attlist =
+ I18n.attrib,
+ attribute http-equiv { NMTOKEN.datatype }?,
+ attribute name { NMTOKEN.datatype }?,
+ attribute content { text }?,
+ attribute scheme { text }?
+head.content &= meta*
diff --git a/etc/schema/xhtml-nameident.rnc b/etc/schema/xhtml-nameident.rnc
new file mode 100644
index 00000000000..ef4ad7065e7
--- /dev/null
+++ b/etc/schema/xhtml-nameident.rnc
@@ -0,0 +1,10 @@
+# Name Identification Module
+
+a.attlist &= name.attlist
+applet.attlist &= name.attlist
+form.attlist &= name.attlist
+frame.attrib &= name.attlist
+iframe.attlist &= name.attlist
+img.attlist &= name.attlist
+map.attlist &= name.attlist
+name.attlist = attribute name { text }?
diff --git a/etc/schema/xhtml-object.rnc b/etc/schema/xhtml-object.rnc
new file mode 100644
index 00000000000..ac65238db9d
--- /dev/null
+++ b/etc/schema/xhtml-object.rnc
@@ -0,0 +1,24 @@
+# Object Module
+
+object =
+ element object {
+ object.attlist,
+ # No restrictions on mixed content in TREX.
+ param*,
+ Flow.model
+ }
+object.attlist =
+ Common.attrib,
+ attribute declare { "declare" }?,
+ attribute classid { URI.datatype }?,
+ attribute codebase { URI.datatype }?,
+ attribute data { URI.datatype }?,
+ attribute type { ContentType.datatype }?,
+ attribute codetype { ContentType.datatype }?,
+ attribute archive { URIs.datatype }?,
+ attribute standby { Text.datatype }?,
+ attribute height { Length.datatype }?,
+ attribute width { Length.datatype }?,
+ attribute name { text }?,
+ attribute tabindex { Number.datatype }?
+Inline.class |= object
diff --git a/etc/schema/xhtml-param.rnc b/etc/schema/xhtml-param.rnc
new file mode 100644
index 00000000000..8a921ca9b34
--- /dev/null
+++ b/etc/schema/xhtml-param.rnc
@@ -0,0 +1,9 @@
+# Param Module
+
+param = element param { param.attlist }
+param.attlist =
+ id.attrib,
+ attribute name { text },
+ attribute value { text }?,
+ attribute valuetype { "data" | "ref" | "object" }?,
+ attribute type { ContentType.datatype }?
diff --git a/etc/schema/xhtml-pres.rnc b/etc/schema/xhtml-pres.rnc
new file mode 100644
index 00000000000..677372b2dd0
--- /dev/null
+++ b/etc/schema/xhtml-pres.rnc
@@ -0,0 +1,18 @@
+hr = element hr { hr.attlist }
+hr.attlist = Common.attrib
+Block.class |= hr
+b = element b { b.attlist, Inline.model }
+b.attlist = Common.attrib
+big = element big { big.attlist, Inline.model }
+big.attlist = Common.attrib
+i = element i { i.attlist, Inline.model }
+i.attlist = Common.attrib
+small = element small { small.attlist, Inline.model }
+small.attlist = Common.attrib
+sub = element sub { sub.attlist, Inline.model }
+sub.attlist = Common.attrib
+sup = element sup { sup.attlist, Inline.model }
+sup.attlist = Common.attrib
+tt = element tt { tt.attlist, Inline.model }
+tt.attlist = Common.attrib
+Inline.class |= b | big | i | small | sub | sup | tt
diff --git a/etc/schema/xhtml-ruby.rnc b/etc/schema/xhtml-ruby.rnc
new file mode 100644
index 00000000000..e55614dfb95
--- /dev/null
+++ b/etc/schema/xhtml-ruby.rnc
@@ -0,0 +1,21 @@
+ruby =
+ element ruby {
+ ruby.attlist,
+ ((rb,
+ (rt | (rp, rt, rp)))
+ | (rbc, rtc, rtc?))
+ }
+ruby.attlist = Common.attrib
+rbc = element rbc { rbc.attlist, rb+ }
+rbc.attlist = Common.attrib
+rtc = element rtc { rtc.attlist, rt+ }
+rtc.attlist = Common.attrib
+rb = element rb { rb.attlist, Inline.model }
+rb.attlist = Common.attrib
+rt = element rt { rt.attlist, Inline.model }
+rt.attlist =
+ Common.attrib,
+ attribute rt { Number.datatype }?
+rp = element rp { rp.attlist, text }
+rp.attlist = Common.attrib
+Inline.class |= ruby
diff --git a/etc/schema/xhtml-script.rnc b/etc/schema/xhtml-script.rnc
new file mode 100644
index 00000000000..fcf35b02714
--- /dev/null
+++ b/etc/schema/xhtml-script.rnc
@@ -0,0 +1,15 @@
+# Script Module
+
+script = element script { script.attlist, text }
+script.attlist =
+ attribute charset { Charset.datatype }?,
+ attribute type { ContentType.datatype },
+ attribute src { URI.datatype }?,
+ attribute defer { "defer" }?,
+ attribute xml:space { "preserve" }?
+noscript = element noscript { noscript.attlist, Block.model }
+noscript.attlist = Common.attrib
+head.content &= script*
+Script.class = noscript | script
+Inline.class |= Script.class
+Block.class |= Script.class
diff --git a/etc/schema/xhtml-ssismap.rnc b/etc/schema/xhtml-ssismap.rnc
new file mode 100644
index 00000000000..21a7496d307
--- /dev/null
+++ b/etc/schema/xhtml-ssismap.rnc
@@ -0,0 +1,5 @@
+# Server-side Image Map Module
+
+# Depends on image module.
+
+img.attlist &= attribute ismap { "ismap" }?
diff --git a/etc/schema/xhtml-struct.rnc b/etc/schema/xhtml-struct.rnc
new file mode 100644
index 00000000000..4c919c2371a
--- /dev/null
+++ b/etc/schema/xhtml-struct.rnc
@@ -0,0 +1,14 @@
+# Structure Module
+
+start = html
+title = element title { title.attlist, text }
+title.attlist = I18n.attrib
+head = element head { head.attlist, head.content }
+head.attlist = I18n.attrib, profile.attlist
+head.content = title
+profile.attlist = attribute profile { URI.datatype }?
+body = element body { body.attlist, Block.model }
+body.attlist = Common.attrib
+html = element html { html.attlist, head, body }
+html.attlist = XHTML.version.attrib, I18n.attrib
+XHTML.version.attrib = attribute version { FPI.datatype }?
diff --git a/etc/schema/xhtml-style.rnc b/etc/schema/xhtml-style.rnc
new file mode 100644
index 00000000000..93a52d5e2ad
--- /dev/null
+++ b/etc/schema/xhtml-style.rnc
@@ -0,0 +1,10 @@
+# Style Module
+
+style = element style { style.attlist, text }
+style.attlist =
+ title.attrib,
+ I18n.attrib,
+ attribute type { ContentType.datatype },
+ attribute media { MediaDesc.datatype }?,
+ attribute xml:space { "preserve" }?
+head.content &= style*
diff --git a/etc/schema/xhtml-table.rnc b/etc/schema/xhtml-table.rnc
new file mode 100644
index 00000000000..70055b1598f
--- /dev/null
+++ b/etc/schema/xhtml-table.rnc
@@ -0,0 +1,67 @@
+# Tables Module
+
+# This builds on the basic tables module, unlike with the DTD
+# implementation.
+
+include "xhtml-basic-table.rnc" {
+ table =
+ element table {
+ table.attlist,
+ caption?,
+ (col* | colgroup*),
+ ((thead?, tfoot?, tbody+) | tr+)
+ }
+ th = element th { th.attlist, Flow.model }
+ td = element td { td.attlist, Flow.model }
+ CellHAlign.attrib =
+ attribute align {
+ "left" | "center" | "right" | "justify" | "char"
+ }?,
+ attribute char { Character.datatype }?,
+ attribute charoff { Length.datatype }?
+ CellVAlign.attrib =
+ attribute valign { "top" | "middle" | "bottom" | "baseline" }?
+ scope.attrib =
+ attribute scope { "row" | "col" | "rowgroup" | "colgroup" }?
+}
+table.attlist &=
+ attribute width { Length.datatype }?,
+ attribute border { Pixels.datatype }?,
+ frame.attrib,
+ rules.attrib,
+ attribute cellspacing { Length.datatype }?,
+ attribute cellpadding { Length.datatype }?
+col = element col { col.attlist }
+col.attlist =
+ Common.attrib,
+ attribute span { Number.datatype }?,
+ attribute width { MultiLength.datatype }?,
+ CellHAlign.attrib,
+ CellVAlign.attrib
+colgroup = element colgroup { colgroup.attlist, col* }
+colgroup.attlist =
+ Common.attrib,
+ attribute span { Number.datatype }?,
+ attribute width { MultiLength.datatype }?,
+ CellHAlign.attrib,
+ CellVAlign.attrib
+tbody = element tbody { tbody.attlist, tr+ }
+tbody.attlist = Common.attrib, CellHAlign.attrib, CellVAlign.attrib
+thead = element thead { thead.attlist, tr+ }
+thead.attlist = Common.attrib, CellHAlign.attrib, CellVAlign.attrib
+tfoot = element tfoot { tfoot.attlist, tr+ }
+tfoot.attlist = Common.attrib, CellHAlign.attrib, CellVAlign.attrib
+frame.attrib =
+ attribute frame {
+ "void"
+ | "above"
+ | "below"
+ | "hsides"
+ | "lhs"
+ | "rhs"
+ | "vsides"
+ | "box"
+ | "border"
+ }?
+rules.attrib =
+ attribute rules { "none" | "groups" | "rows" | "cols" | "all" }?
diff --git a/etc/schema/xhtml-target.rnc b/etc/schema/xhtml-target.rnc
new file mode 100644
index 00000000000..505b37963a9
--- /dev/null
+++ b/etc/schema/xhtml-target.rnc
@@ -0,0 +1,8 @@
+# Target Module
+
+a.attlist &= target.attrib
+area.attlist &= target.attrib
+base.attlist &= target.attrib
+link.attrib &= target.attrib
+form.attlist &= target.attrib
+target.attrib = attribute target { text }?
diff --git a/etc/schema/xhtml-text.rnc b/etc/schema/xhtml-text.rnc
new file mode 100644
index 00000000000..c4283d44179
--- /dev/null
+++ b/etc/schema/xhtml-text.rnc
@@ -0,0 +1,73 @@
+# Text Module
+
+br = element br { br.attlist, empty }
+br.attlist = Core.attrib
+span = element span { span.attlist, Inline.model }
+span.attlist = Common.attrib
+abbr = element abbr { abbr.attlist, Inline.model }
+abbr.attlist = Common.attrib
+acronym = element acronym { acronym.attlist, Inline.model }
+acronym.attlist = Common.attrib
+cite = element cite { cite.attlist, Inline.model }
+cite.attlist = Common.attrib
+code = element code { code.attlist, Inline.model }
+code.attlist = Common.attrib
+dfn = element dfn { dfn.attlist, Inline.model }
+dfn.attlist = Common.attrib
+em = element em { em.attlist, Inline.model }
+em.attlist = Common.attrib
+kbd = element kbd { kbd.attlist, Inline.model }
+kbd.attlist = Common.attrib
+q = element q { q.attlist, Inline.model }
+q.attlist =
+ Common.attrib,
+ attribute cite { URI.datatype }?
+samp = element samp { samp.attlist, Inline.model }
+samp.attlist = Common.attrib
+strong = element strong { strong.attlist, Inline.model }
+strong.attlist = Common.attrib
+var = element var { var.attlist, Inline.model }
+var.attlist = Common.attrib
+\div = element div { div.attlist, Flow.model }
+div.attlist = Common.attrib
+p = element p { p.attlist, Inline.model }
+p.attlist = Common.attrib
+address = element address { address.attlist, Inline.model }
+address.attlist = Common.attrib
+blockquote = element blockquote { blockquote.attlist, Block.model }
+blockquote.attlist =
+ Common.attrib,
+ attribute cite { URI.datatype }?
+pre = element pre { pre.attlist, Inline.model }
+pre.attlist =
+ Common.attrib,
+ attribute xml:space { "preserve" }?
+h1 = element h1 { Heading.attrib, Heading.content }
+h2 = element h2 { Heading.attrib, Heading.content }
+h3 = element h3 { Heading.attrib, Heading.content }
+h4 = element h4 { Heading.attrib, Heading.content }
+h5 = element h5 { Heading.attrib, Heading.content }
+h6 = element h6 { Heading.attrib, Heading.content }
+Heading.attrib = Common.attrib
+Heading.content = Inline.model
+Heading.class = h1 | h2 | h3 | h4 | h5 | h6
+Block.class = address | blockquote | \div | p | pre | Heading.class
+Inline.class =
+ abbr
+ | acronym
+ | br
+ | cite
+ | code
+ | dfn
+ | em
+ | kbd
+ | q
+ | samp
+ | span
+ | strong
+ | var
+Inline.model = (text | Inline.class)*
+# This is redefined by the legacy module to include inlines.
+Block.mix = Block.class
+Block.model = Block.mix+
+Flow.model = (text | Inline.class | Block.class)*
diff --git a/etc/schema/xhtml.rnc b/etc/schema/xhtml.rnc
new file mode 100644
index 00000000000..3218cd71e5b
--- /dev/null
+++ b/etc/schema/xhtml.rnc
@@ -0,0 +1,37 @@
+# XHTML
+
+# This corresponds to the union of transitional and frameset.
+
+default namespace = "http://www.w3.org/1999/xhtml"
+
+include "xhtml-datatypes.rnc"
+include "xhtml-attribs.rnc"
+# include "xhtml-struct.rnc"
+include "xhtml-frames.rnc"
+include "xhtml-text.rnc"
+include "xhtml-hypertext.rnc"
+include "xhtml-list.rnc"
+include "xhtml-image.rnc"
+include "xhtml-ssismap.rnc"
+include "xhtml-base.rnc"
+include "xhtml-link.rnc"
+include "xhtml-meta.rnc"
+include "xhtml-param.rnc"
+include "xhtml-object.rnc"
+include "xhtml-bdo.rnc"
+include "xhtml-pres.rnc"
+include "xhtml-edit.rnc"
+include "xhtml-applet.rnc"
+# include "xhtml-basic-form.rnc"
+include "xhtml-form.rnc"
+include "xhtml-style.rnc"
+include "xhtml-script.rnc"
+# include "xhtml-basic-table.rnc"
+include "xhtml-table.rnc"
+include "xhtml-csismap.rnc"
+include "xhtml-events.rnc"
+include "xhtml-inlstyle.rnc"
+include "xhtml-target.rnc"
+include "xhtml-iframe.rnc"
+include "xhtml-nameident.rnc"
+include "xhtml-legacy.rnc"
diff --git a/etc/schema/xslt.rnc b/etc/schema/xslt.rnc
new file mode 100644
index 00000000000..eaa332f86b3
--- /dev/null
+++ b/etc/schema/xslt.rnc
@@ -0,0 +1,356 @@
+# $Id: xslt.rnc,v 1.2 2003/08/30 08:09:03 jjc Exp $
+
+# This was mostly generated from the syntax summary in the XSLT
+# Recommendation (using XSLT of course).
+
+# Issues: this validates extension elements as literal result
+# elements, which is overly restrictive.
+
+namespace local = ""
+default namespace xsl = "http://www.w3.org/1999/XSL/Transform"
+
+start =
+ stylesheet.element
+ | transform.element
+ | literal-result-element-as-stylesheet
+version = "1.0"
+top-level-elements.model =
+ (top-level-element.category | top-level-extension)*
+top-level-extension =
+ element * - (xsl:* | local:*) {
+ grammar {
+ start = any
+ any =
+ (attribute * { text }
+ | text
+ | element * { any })*
+ }
+ }
+template.model = (instruction.category | literal-result-element | text)*
+literal-result-element-as-stylesheet =
+ element * - xsl:* {
+ attribute xsl:version { version },
+ literal-result-element-no-version.atts,
+ template.model
+ }
+literal-result-element =
+ element * - xsl:* { literal-result-element.atts, template.model }
+literal-result-element.atts =
+ literal-result-element-no-version.atts,
+ attribute xsl:version { version }?
+literal-result-element-no-version.atts =
+ (attribute * - xsl:* { avt.datatype }
+ | attribute xsl:extension-element-prefixes { prefixes.datatype }
+ | attribute xsl:exclude-result-prefixes { prefixes.datatype }
+ | attribute xsl:use-attribute-sets { qnames.datatype })*
+top-level-element.category =
+ include.element
+ | strip-space.element
+ | preserve-space.element
+ | template.element
+ | namespace-alias.element
+ | attribute-set.element
+ | variable.element
+ | param.element
+ | key.element
+ | decimal-format.element
+ | output.element
+instruction.category =
+ apply-templates.element
+ | apply-imports.element
+ | call-template.element
+ | element.element
+ | attribute.element
+ | text.element
+ | processing-instruction.element
+ | comment.element
+ | copy.element
+ | value-of.element
+ | number.element
+ | for-each.element
+ | if.element
+ | choose.element
+ | variable.element
+ | copy-of.element
+ | message.element
+ | fallback.element
+extension.atts = attribute * - (xsl:* | local:*) { text }*
+stylesheet.element = element stylesheet { stylesheet.model }
+transform.element = element transform { stylesheet.model }
+stylesheet.model =
+ extension.atts,
+ attribute id { xsd:NCName }?,
+ attribute extension-element-prefixes { prefixes.datatype }?,
+ attribute exclude-result-prefixes { prefixes.datatype }?,
+ attribute version { version },
+ (import.element*, top-level-elements.model)
+include.element =
+ element include {
+ extension.atts,
+ attribute href { xsd:anyURI }
+ }
+import.element =
+ element import {
+ extension.atts,
+ attribute href { xsd:anyURI }
+ }
+strip-space.element =
+ element strip-space {
+ extension.atts,
+ attribute elements { wildcards.datatype }
+ }
+preserve-space.element =
+ element preserve-space {
+ extension.atts,
+ attribute elements { wildcards.datatype }
+ }
+template.element =
+ element template {
+ extension.atts,
+ attribute match { pattern.datatype }?,
+ attribute name { qname.datatype }?,
+ attribute priority { number.datatype }?,
+ attribute mode { qname.datatype }?,
+ (param.element*, template.model)
+ }
+apply-templates.element =
+ element apply-templates {
+ extension.atts,
+ attribute select { expression.datatype }?,
+ attribute mode { qname.datatype }?,
+ (sort.element | with-param.element)*
+ }
+apply-imports.element = element apply-imports { extension.atts }
+call-template.element =
+ element call-template {
+ extension.atts,
+ attribute name { qname.datatype },
+ with-param.element*
+ }
+namespace-alias.element =
+ element namespace-alias {
+ extension.atts,
+ attribute stylesheet-prefix { prefix.datatype },
+ attribute result-prefix { prefix.datatype }
+ }
+element.element =
+ element element {
+ extension.atts,
+ attribute name { qname.datatype | expr-avt.datatype },
+ attribute namespace { xsd:anyURI | brace-avt.datatype }?,
+ attribute use-attribute-sets { qnames.datatype }?,
+ template.model
+ }
+attribute.element =
+ element attribute {
+ extension.atts,
+ attribute name { qname.datatype | expr-avt.datatype },
+ attribute namespace { xsd:anyURI | brace-avt.datatype }?,
+ template.model
+ }
+attribute-set.element =
+ element attribute-set {
+ extension.atts,
+ attribute name { qname.datatype },
+ attribute use-attribute-sets { qnames.datatype }?,
+ attribute.element*
+ }
+text.element =
+ element text {
+ extension.atts,
+ attribute disable-output-escaping {
+ xsd:string "yes" | xsd:string "no"
+ }?,
+ text
+ }
+processing-instruction.element =
+ element processing-instruction {
+ extension.atts,
+ attribute name { xsd:NCName | expr-avt.datatype },
+ template.model
+ }
+comment.element = element comment { extension.atts, template.model }
+copy.element =
+ element copy {
+ extension.atts,
+ attribute use-attribute-sets { qnames.datatype }?,
+ template.model
+ }
+value-of.element =
+ element value-of {
+ extension.atts,
+ attribute select { expression.datatype },
+ attribute disable-output-escaping {
+ xsd:string "yes" | xsd:string "no"
+ }?
+ }
+number.element =
+ element number {
+ extension.atts,
+ attribute level {
+ xsd:string "single" | xsd:string "multiple" | xsd:string "any"
+ }?,
+ attribute count { pattern.datatype }?,
+ attribute from { pattern.datatype }?,
+ attribute value { expression.datatype }?,
+ attribute format { avt.datatype }?,
+ attribute lang { xsd:NMTOKEN | expr-avt.datatype }?,
+ attribute letter-value {
+ xsd:string "alphabetic"
+ | xsd:string "traditional"
+ | expr-avt.datatype
+ }?,
+ attribute grouping-separator { char.datatype | expr-avt.datatype }?,
+ attribute grouping-size { number.datatype | expr-avt.datatype }?
+ }
+for-each.element =
+ element for-each {
+ extension.atts,
+ attribute select { expression.datatype },
+ (sort.element*, template.model)
+ }
+if.element =
+ element if {
+ extension.atts,
+ attribute test { expression.datatype },
+ template.model
+ }
+choose.element =
+ element choose { extension.atts, (when.element+, otherwise.element?) }
+when.element =
+ element when {
+ extension.atts,
+ attribute test { expression.datatype },
+ template.model
+ }
+otherwise.element = element otherwise { extension.atts, template.model }
+sort.element =
+ element sort {
+ extension.atts,
+ attribute select { expression.datatype }?,
+ attribute lang { xsd:NMTOKEN | expr-avt.datatype }?,
+ attribute data-type {
+ xsd:string "text"
+ | xsd:string "number"
+ | qname-but-not-ncname.datatype
+ | expr-avt.datatype
+ }?,
+ attribute order {
+ xsd:string "ascending"
+ | xsd:string "descending"
+ | expr-avt.datatype
+ }?,
+ attribute case-order {
+ xsd:string "upper-first"
+ | xsd:string "lower-first"
+ | expr-avt.datatype
+ }?
+ }
+variable.element =
+ element variable {
+ extension.atts,
+ attribute name { qname.datatype },
+ (attribute select { expression.datatype }
+ | template.model)
+ }
+param.element =
+ element param {
+ extension.atts,
+ attribute name { qname.datatype },
+ (attribute select { expression.datatype }
+ | template.model)
+ }
+copy-of.element =
+ element copy-of {
+ extension.atts,
+ attribute select { expression.datatype }
+ }
+with-param.element =
+ element with-param {
+ extension.atts,
+ attribute name { qname.datatype },
+ (attribute select { expression.datatype }
+ | template.model)
+ }
+key.element =
+ element key {
+ extension.atts,
+ attribute name { qname.datatype },
+ attribute match { pattern.datatype },
+ attribute use { expression.datatype }
+ }
+decimal-format.element =
+ element decimal-format {
+ extension.atts,
+ attribute name { qname.datatype }?,
+ attribute decimal-separator { char.datatype }?,
+ attribute grouping-separator { char.datatype }?,
+ attribute infinity { text }?,
+ attribute minus-sign { char.datatype }?,
+ attribute NaN { text }?,
+ attribute percent { char.datatype }?,
+ attribute per-mille { char.datatype }?,
+ attribute zero-digit { char.datatype }?,
+ attribute digit { char.datatype }?,
+ attribute pattern-separator { char.datatype }?
+ }
+message.element =
+ element message {
+ extension.atts,
+ attribute terminate { xsd:string "yes" | xsd:string "no" }?,
+ template.model
+ }
+fallback.element = element fallback { extension.atts, template.model }
+output.element =
+ element output {
+ extension.atts,
+ attribute method {
+ xsd:string "xml"
+ | xsd:string "html"
+ | xsd:string "text"
+ | qname-but-not-ncname.datatype
+ }?,
+ attribute version { xsd:NMTOKEN }?,
+ attribute encoding { text }?,
+ attribute omit-xml-declaration {
+ xsd:string "yes" | xsd:string "no"
+ }?,
+ attribute standalone { xsd:string "yes" | xsd:string "no" }?,
+ attribute doctype-public { text }?,
+ attribute doctype-system { text }?,
+ attribute cdata-section-elements { qnames.datatype }?,
+ attribute indent { xsd:string "yes" | xsd:string "no" }?,
+ attribute media-type { text }?
+ }
+prefixes.datatype = list { (xsd:NCName | "#default")* }
+prefix.datatype = xsd:NCName | "#default"
+wildcards.datatype =
+ list {
+ (xsd:QName
+ | xsd:token { pattern = "\*|\i\c*:\*" })*
+ }
+qname.datatype = xsd:QName
+qnames.datatype = list { xsd:QName* }
+char.datatype = xsd:string { length = "1" }
+number.datatype = xsd:decimal
+expression.datatype = text
+pattern.datatype = text
+qname-but-not-ncname.datatype = xsd:QName { pattern = ".*:.*" }
+# An AVT containing at least one expression.
+expr-avt.datatype =
+ xsd:string {
+ pattern =
+ """([^\{\}]|\{\{|\}\})*\{([^"'\{\}]|"[^"]*"|'[^']*')+\}([^\{\}]|\{\{|\}\}|\{([^"'\{\}]|"[^"]*"|'[^']*')+\})*"""
+ }
+# An AVT containing at least one brace; ie where instantiated AVT
+# is not the same as the literal AVT.
+brace-avt.datatype =
+ xsd:string {
+ pattern =
+ """[^\{\}]*(\{\{|\}\}|\{([^"'\{\}]|"[^"]*"|'[^']*')+\})([^\{\}]|\{\{|\}\}|\{([^"'\{\}]|"[^"]*"|'[^']*')+\})*"""
+ }
+avt.datatype =
+ xsd:string {
+ pattern =
+ """([^\{\}]|\{\{|\}\}|\{([^"'\{\}]|"[^"]*"|'[^']*')+\})*"""
+ }