]> granicus.if.org Git - docbook-dsssl/commitdiff
Refactor to make the work of the Publishing Subcommitee easier
authorNorman Walsh <ndw@nwalsh.com>
Fri, 28 Sep 2007 18:34:15 +0000 (18:34 +0000)
committerNorman Walsh <ndw@nwalsh.com>
Fri, 28 Sep 2007 18:34:15 +0000 (18:34 +0000)
12 files changed:
docbook/relaxng/docbook/src/admonitions.rnc [new file with mode: 0644]
docbook/relaxng/docbook/src/core.rnc [new file with mode: 0644]
docbook/relaxng/docbook/src/docbook.rnc
docbook/relaxng/docbook/src/error.rnc [new file with mode: 0644]
docbook/relaxng/docbook/src/gui.rnc [new file with mode: 0644]
docbook/relaxng/docbook/src/keyboard.rnc [new file with mode: 0644]
docbook/relaxng/docbook/src/markup.rnc [new file with mode: 0644]
docbook/relaxng/docbook/src/os.rnc [new file with mode: 0644]
docbook/relaxng/docbook/src/pool.rnc
docbook/relaxng/docbook/src/product.rnc [new file with mode: 0644]
docbook/relaxng/docbook/src/programming.rnc [new file with mode: 0644]
docbook/relaxng/docbook/src/technical.rnc [new file with mode: 0644]

diff --git a/docbook/relaxng/docbook/src/admonitions.rnc b/docbook/relaxng/docbook/src/admonitions.rnc
new file mode 100644 (file)
index 0000000..4f3ee24
--- /dev/null
@@ -0,0 +1,162 @@
+# This file is part of DocBook V5.0CR6
+#
+# Copyright 1992-2005 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).
+#
+# Release: $Id: pool.rnc 7466 2007-09-27 14:03:55Z nwalsh $
+#
+# Permission to use, copy, modify and distribute the DocBook schema
+# 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 schema
+# for any purpose. It is provided "as is" without expressed or implied
+# warranty.
+#
+# If you modify the DocBook schema in any way, label your schema as a
+# variant of DocBook. See the reference documentation
+# (http://docbook.org/tdg5/en/html/ch05.html#s-notdocbook)
+# 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/.
+#
+# ======================================================================
+
+default namespace = "http://docbook.org/ns/docbook"
+namespace ctrl = "http://nwalsh.com/xmlns/schema-control/"
+namespace rng  = "http://relaxng.org/ns/structure/1.0"
+namespace s = "http://www.ascc.net/xml/schematron"
+namespace db = "http://docbook.org/ns/docbook"
+
+db.nopara.blocks |= db.admonition.blocks
+
+# ======================================================================
+
+ctrl:exclude [ from="db.formal.blocks" exclude="db.admonition.blocks" ]
+ctrl:exclude [ from="db.admonition.blocks" exclude="db.admonition.blocks" ]
+ctrl:exclude [ from="db.footnote" exclude="db.admonition.blocks" ]
+ctrl:exclude [ from="db.caption" exclude="db.admonition.blocks" ]
+
+db.admonition.blocks =
+   db.caution
+ | db.important
+ | db.note
+ | db.tip
+ | db.warning
+
+db.admonition.contentmodel = db._info.title.only, db.all.blocks+
+
+# ======================================================================
+
+[
+   db:refname [ "caution" ]
+   db:refpurpose [ "A note of caution" ]
+]
+div {
+
+   db.caution.role.attribute = attribute role { text }
+
+   db.caution.attlist =
+      db.caution.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.caution =
+      element caution {
+         db.caution.attlist,
+         db.admonition.contentmodel
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "important" ]
+   db:refpurpose [ "An admonition set off from the text" ]
+]
+div {
+
+   db.important.role.attribute = attribute role { text }
+
+   db.important.attlist =
+      db.important.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.important =
+      element important {
+         db.important.attlist,
+         db.admonition.contentmodel
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "note" ]
+   db:refpurpose [ "A message set off from the text" ]
+]
+div {
+
+   db.note.role.attribute = attribute role { text }
+
+   db.note.attlist =
+      db.note.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.note =
+      element note {
+         db.note.attlist,
+         db.admonition.contentmodel
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "tip" ]
+   db:refpurpose [ "A suggestion to the user, set off from the text" ]
+]
+div {
+
+   db.tip.role.attribute = attribute role { text }
+
+   db.tip.attlist =
+      db.tip.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.tip =
+      element tip {
+         db.tip.attlist,
+         db.admonition.contentmodel
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "warning" ]
+   db:refpurpose [ "An admonition set off from the text" ]
+]
+div {
+
+   db.warning.role.attribute = attribute role { text }
+
+   db.warning.attlist =
+      db.warning.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.warning =
+      element warning {
+         db.warning.attlist,
+         db.admonition.contentmodel
+      }
+}
diff --git a/docbook/relaxng/docbook/src/core.rnc b/docbook/relaxng/docbook/src/core.rnc
new file mode 100644 (file)
index 0000000..1d1b433
--- /dev/null
@@ -0,0 +1,45 @@
+# This file is part of DocBook V5.0CR6
+#
+# Copyright 1992-2005 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).
+#
+# Release: $Id: docbook.rnc 7466 2007-09-27 14:03:55Z nwalsh $
+#
+# Permission to use, copy, modify and distribute the DocBook schema
+# 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 schema
+# for any purpose. It is provided "as is" without expressed or implied
+# warranty.
+#
+# If you modify the DocBook schema in any way, label your schema as a
+# variant of DocBook. See the reference documentation
+# (http://docbook.org/tdg5/en/html/ch05.html#s-notdocbook)
+# 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/.
+#
+# ======================================================================
+
+namespace ctrl = "http://nwalsh.com/xmlns/schema-control/"
+namespace rng  = "http://relaxng.org/ns/structure/1.0"
+namespace s = "http://www.ascc.net/xml/schematron"
+namespace db = "http://docbook.org/ns/docbook"
+default namespace = "http://docbook.org/ns/docbook"
+
+start = db.set
+        | db.book
+       | db.divisions
+       | db.components
+       | db.navigation.components
+       | db.section
+       | db.para
+
+include "pool.rnc"
+include "hier.rnc"
index 4e1ebeaaa2f4b8a5b2ecc6bbb5f086df6b3f4e80..031f18d95730fb9d3982cc630d6c4b019c73f033 100644 (file)
@@ -33,18 +33,9 @@ namespace s = "http://www.ascc.net/xml/schematron"
 namespace db = "http://docbook.org/ns/docbook"
 default namespace = "http://docbook.org/ns/docbook"
 
-start = db.set
-        | db.book
-       | db.divisions
-       | db.components
-       | db.navigation.components
-       | db.section
-       | db.para
-
-include "pool.rnc"
+include "core.rnc"
 include "annotations.rnc"
 include "xlink.rnc"
-include "hier.rnc"
 include "sect1.rnc"
 include "refentry.rnc"
 include "refsect1.rnc"
@@ -62,4 +53,12 @@ include "qandaset.rnc"
 include "math.rnc"
 include "mathml.rnc"
 include "svg.rnc"
-
+include "markup.rnc"
+include "product.rnc"
+include "gui.rnc"
+include "keyboard.rnc"
+include "os.rnc"
+include "programming.rnc"
+include "admonitions.rnc"
+include "error.rnc"
+include "technical.rnc"
diff --git a/docbook/relaxng/docbook/src/error.rnc b/docbook/relaxng/docbook/src/error.rnc
new file mode 100644 (file)
index 0000000..347b3dd
--- /dev/null
@@ -0,0 +1,130 @@
+# This file is part of DocBook V5.0CR6
+#
+# Copyright 1992-2005 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).
+#
+# Release: $Id: pool.rnc 7466 2007-09-27 14:03:55Z nwalsh $
+#
+# Permission to use, copy, modify and distribute the DocBook schema
+# 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 schema
+# for any purpose. It is provided "as is" without expressed or implied
+# warranty.
+#
+# If you modify the DocBook schema in any way, label your schema as a
+# variant of DocBook. See the reference documentation
+# (http://docbook.org/tdg5/en/html/ch05.html#s-notdocbook)
+# 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/.
+#
+# ======================================================================
+
+default namespace = "http://docbook.org/ns/docbook"
+namespace ctrl = "http://nwalsh.com/xmlns/schema-control/"
+namespace rng  = "http://relaxng.org/ns/structure/1.0"
+namespace s = "http://www.ascc.net/xml/schematron"
+namespace db = "http://docbook.org/ns/docbook"
+
+db.domain.inlines |= db.error.inlines
+
+db.error.inlines =
+   db.errorcode
+ | db.errortext
+ | db.errorname
+ | db.errortype
+
+# ======================================================================
+
+[
+   db:refname [ "errorcode" ]
+   db:refpurpose [ "An error code" ]
+]
+div {
+
+   db.errorcode.role.attribute = attribute role { text }
+
+   db.errorcode.attlist =
+      db.errorcode.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.errorcode =
+      element errorcode {
+         db.errorcode.attlist,
+         db._text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "errorname" ]
+   db:refpurpose [ "An error name" ]
+]
+div {
+
+   db.errorname.role.attribute = attribute role { text }
+
+   db.errorname.attlist =
+      db.errorname.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.errorname =
+      element errorname {
+         db.errorname.attlist,
+         db._text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "errortext" ]
+   db:refpurpose [ "An error message." ]
+]
+div {
+
+   db.errortext.role.attribute = attribute role { text }
+
+   db.errortext.attlist =
+      db.errortext.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.errortext =
+      element errortext {
+         db.errortext.attlist,
+         db._text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "errortype" ]
+   db:refpurpose [ "The classification of an error message" ]
+]
+div {
+
+   db.errortype.role.attribute = attribute role { text }
+
+   db.errortype.attlist =
+      db.errortype.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.errortype =
+      element errortype {
+         db.errortype.attlist,
+         db._text
+      }
+}
diff --git a/docbook/relaxng/docbook/src/gui.rnc b/docbook/relaxng/docbook/src/gui.rnc
new file mode 100644 (file)
index 0000000..ead4195
--- /dev/null
@@ -0,0 +1,228 @@
+# This file is part of DocBook V5.0CR6
+#
+# Copyright 1992-2005 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).
+#
+# Release: $Id: pool.rnc 7466 2007-09-27 14:03:55Z nwalsh $
+#
+# Permission to use, copy, modify and distribute the DocBook schema
+# 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 schema
+# for any purpose. It is provided "as is" without expressed or implied
+# warranty.
+#
+# If you modify the DocBook schema in any way, label your schema as a
+# variant of DocBook. See the reference documentation
+# (http://docbook.org/tdg5/en/html/ch05.html#s-notdocbook)
+# 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/.
+#
+# ======================================================================
+
+default namespace = "http://docbook.org/ns/docbook"
+namespace ctrl = "http://nwalsh.com/xmlns/schema-control/"
+namespace rng  = "http://relaxng.org/ns/structure/1.0"
+namespace s = "http://www.ascc.net/xml/schematron"
+namespace db = "http://docbook.org/ns/docbook"
+
+db.domain.inlines |= db.gui.inlines
+
+db.userinput.inlines |= db.gui.inlines
+
+db.keycombination.contentmodel |= db.mousebutton
+
+db.gui.inlines =
+   db.guiicon
+ | db.guibutton
+ | db.guimenuitem
+ | db.guimenu
+ | db.guisubmenu
+ | db.guilabel
+ | db.menuchoice
+ | db.mousebutton
+
+# ======================================================================
+
+[
+   db:refname [ "guibutton" ]
+   db:refpurpose [ "The text on a button in a GUI" ]
+]
+div {
+
+   db.guibutton.role.attribute = attribute role { text }
+
+   db.guibutton.attlist =
+      db.guibutton.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.guibutton =
+      element guibutton {
+         db.guibutton.attlist,
+         (db._text | db.accel | db.superscript | db.subscript)*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "guiicon" ]
+   db:refpurpose [ "Graphic and/or text appearing as a icon in a GUI" ]
+]
+div {
+
+   db.guiicon.role.attribute = attribute role { text }
+
+   db.guiicon.attlist =
+      db.guiicon.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.guiicon =
+      element guiicon {
+         db.guiicon.attlist,
+         (db._text | db.accel | db.superscript | db.subscript)*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "guilabel" ]
+   db:refpurpose [ "The text of a label in a GUI" ]
+]
+div {
+
+   db.guilabel.role.attribute = attribute role { text }
+
+   db.guilabel.attlist =
+      db.guilabel.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.guilabel =
+      element guilabel {
+         db.guilabel.attlist,
+         (db._text | db.accel | db.superscript | db.subscript)*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "guimenu" ]
+   db:refpurpose [ "The name of a menu in a GUI" ]
+]
+div {
+
+   db.guimenu.role.attribute = attribute role { text }
+
+   db.guimenu.attlist =
+      db.guimenu.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.guimenu =
+      element guimenu {
+         db.guimenu.attlist,
+         (db._text | db.accel | db.superscript | db.subscript)*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "guimenuitem" ]
+   db:refpurpose [ "The name of a terminal menu item in a GUI" ]
+]
+div {
+
+   db.guimenuitem.role.attribute = attribute role { text }
+
+   db.guimenuitem.attlist =
+      db.guimenuitem.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.guimenuitem =
+      element guimenuitem {
+         db.guimenuitem.attlist,
+         (db._text | db.accel | db.superscript | db.subscript)*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "guisubmenu" ]
+   db:refpurpose [ "The name of a submenu in a GUI" ]
+]
+div {
+
+   db.guisubmenu.role.attribute = attribute role { text }
+
+   db.guisubmenu.attlist =
+      db.guisubmenu.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.guisubmenu =
+      element guisubmenu {
+         db.guisubmenu.attlist,
+         (db._text | db.accel | db.superscript | db.subscript)*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "menuchoice" ]
+   db:refpurpose [ "A selection or series of selections from a menu" ]
+]
+div {
+
+   db.menuchoice.role.attribute = attribute role { text }
+
+   db.menuchoice.attlist =
+      db.menuchoice.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.menuchoice =
+      element menuchoice {
+         db.menuchoice.attlist,
+         db.shortcut?,
+         (db.guibutton|db.guiicon|db.guilabel|db.guimenu|db.guimenuitem|db.guisubmenu)+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "mousebutton" ]
+   db:refpurpose [ "The conventional name of a mouse button" ]
+]
+div {
+
+   db.mousebutton.role.attribute = attribute role { text }
+
+   db.mousebutton.attlist =
+      db.mousebutton.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.mousebutton =
+      element mousebutton {
+         db.mousebutton.attlist,
+         db._text
+      }
+}
+
diff --git a/docbook/relaxng/docbook/src/keyboard.rnc b/docbook/relaxng/docbook/src/keyboard.rnc
new file mode 100644 (file)
index 0000000..114e448
--- /dev/null
@@ -0,0 +1,294 @@
+# This file is part of DocBook V5.0CR6
+#
+# Copyright 1992-2005 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).
+#
+# Release: $Id: pool.rnc 7466 2007-09-27 14:03:55Z nwalsh $
+#
+# Permission to use, copy, modify and distribute the DocBook schema
+# 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 schema
+# for any purpose. It is provided "as is" without expressed or implied
+# warranty.
+#
+# If you modify the DocBook schema in any way, label your schema as a
+# variant of DocBook. See the reference documentation
+# (http://docbook.org/tdg5/en/html/ch05.html#s-notdocbook)
+# 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/.
+#
+# ======================================================================
+
+default namespace = "http://docbook.org/ns/docbook"
+namespace ctrl = "http://nwalsh.com/xmlns/schema-control/"
+namespace rng  = "http://relaxng.org/ns/structure/1.0"
+namespace s = "http://www.ascc.net/xml/schematron"
+namespace db = "http://docbook.org/ns/docbook"
+
+db.domain.inlines |= db.keyboard.inlines
+
+db.userinput.inlines |= db.keyboard.inlines
+
+db.keyboard.inlines =
+   db.keycombo
+ | db.keycap
+ | db.keycode
+ | db.keysym
+ | db.shortcut
+ | db.accel
+
+# ======================================================================
+
+[
+   db:refname [ "keycap" ]
+   db:refpurpose [ "The text printed on a key on a keyboard" ]
+]
+div {
+
+   ctrl:other-attribute [ name="db.keycap.function.attrib"
+                          enum-name="db.keycap.function-enum.attribute"
+                          other-name="db.keycap.function-other.attributes" ]
+
+   db.keycap.function.enumeration =
+      ## The "Alt" key
+      "alt"
+    | ## The "Backspace" key
+      "backspace"
+    | ## The "Command" key
+      "command"
+    | ## The "Control" key
+      "control"
+    | ## The "Delete" key
+      "delete"
+    | ## The down arrow
+      "down"
+    | ## The "End" key
+      "end"
+    | ## The "Enter" or "Return" key
+      "enter"
+    | ## The "Escape" key
+      "escape"
+    | ## The "Home" key
+      "home"
+    | ## The "Insert" key
+      "insert"
+    | ## The left arrow
+      "left"
+    | ## The "Meta" key
+      "meta"
+    | ## The "Option" key
+      "option"
+    | ## The page down key
+      "pagedown"
+    | ## The page up key
+      "pageup"
+    | ## The right arrow
+      "right"
+    | ## The "Shift" key
+      "shift"
+    | ## The spacebar
+      "space"
+    | ## The "Tab" key
+      "tab"
+    | ## The up arrow
+      "up"
+
+   db.keycap.function-enum.attribute =
+      [
+         db:refpurpose [ "Identifies the function key" ]
+      ]
+      attribute function { db.keycap.function.enumeration }?
+
+   db.keycap.function-other.attributes =
+      [
+         db:refpurpose [ "Identifies the function key" ]
+      ]
+      attribute function {
+         ## Indicates a non-standard function key
+         "other"
+      }?,
+      [
+         db:refpurpose [ "Specifies a keyword that identifies the non-standard key" ]
+      ]
+      attribute otherfunction { text }
+
+   db.keycap.function.attrib =
+      (db.keycap.function-enum.attribute | db.keycap.function-other.attributes)
+
+   db.keycap.role.attribute = attribute role { text }
+
+   db.keycap.attlist =
+      db.keycap.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.keycap.function.attrib
+
+   db.keycap =
+      element keycap {
+         db.keycap.attlist,
+         db._text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "keycode" ]
+   db:refpurpose [ "The internal, frequently numeric, identifier for a key on a keyboard" ]
+]
+div {
+
+   db.keycode.role.attribute = attribute role { text }
+
+   db.keycode.attlist =
+      db.keycode.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.keycode =
+      element keycode {
+         db.keycode.attlist,
+         db._text
+      }
+}
+
+# ======================================================================
+
+db.keycombination.contentmodel = db.keycap|db.keycombo|db.keysym
+
+[
+   db:refname [ "keycombo" ]
+   db:refpurpose [ "A combination of input actions" ]
+]
+div {
+
+   ctrl:other-attribute [ name="db.keycombo.action.attrib"
+                          enum-name="db.keycombo.action-enum.attribute"
+                          other-name="db.keycombo.action-other.attributes" ]
+
+   db.keycombo.action.enumeration =
+      ## A (single) mouse click.
+      "click"
+    | ## A double mouse click.
+      "double-click"
+    | ## A mouse or key press.
+      "press"
+    | ## Sequential clicks or presses.
+      "seq"
+    | ## Simultaneous clicks or presses.
+      "simul"
+
+   db.keycombo.action-enum.attribute =
+      [
+         db:refpurpose [ "Identifies the nature of the action taken. If " db:tag [ "keycombo" ] " contains more than one element, " db:tag [ class="attvalue" "simul" ] " is the default, otherwise there is no default." ]
+      ]
+      attribute action { db.keycombo.action.enumeration }?
+
+   db.keycombo.action-other.attributes =
+      [
+         db:refpurpose [ "Identifies the nature of the action taken" ]
+      ]
+      attribute action {
+         ## Indicates a non-standard action
+         "other"
+      }?,
+      [
+         db:refpurpose [ "Identifies the non-standard action in some unspecified way." ]
+      ]
+      attribute otheraction { text }
+
+   db.keycombo.action.attrib =
+      (db.keycombo.action-enum.attribute | db.keycombo.action-other.attributes)
+
+   db.keycombo.role.attribute = attribute role { text }
+
+   db.keycombo.attlist =
+      db.keycombo.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.keycombo.action.attrib
+
+   db.keycombo =
+      element keycombo {
+         db.keycombo.attlist,
+         (db.keycombination.contentmodel)+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "keysym" ]
+   db:refpurpose [ "The symbolic name of a key on a keyboard" ]
+]
+div {
+
+   db.keysym.role.attribute = attribute role { text }
+
+   db.keysym.attlist =
+      db.keysym.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.keysym =
+      element keysym {
+         db.keysym.attlist,
+         db._text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "accel" ]
+   db:refpurpose [ "A graphical user interface (GUI) keyboard shortcut" ]
+]
+div {
+
+   db.accel.role.attribute = attribute role { text }
+
+   db.accel.attlist =
+      db.accel.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.accel  =
+      element accel {
+         db.accel.attlist,
+         db._text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "shortcut" ]
+   db:refpurpose [ "A key combination for an action that is also accessible through a menu" ]
+]
+div {
+
+   db.shortcut.action.attrib = db.keycombo.action.attrib
+
+   db.shortcut.role.attribute = attribute role { text }
+
+   db.shortcut.attlist =
+      db.shortcut.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.shortcut.action.attrib
+
+   db.shortcut =
+      element shortcut {
+         db.shortcut.attlist,
+         (db.keycombination.contentmodel)+
+      }
+}
+
diff --git a/docbook/relaxng/docbook/src/markup.rnc b/docbook/relaxng/docbook/src/markup.rnc
new file mode 100644 (file)
index 0000000..b0e2c15
--- /dev/null
@@ -0,0 +1,278 @@
+# This file is part of DocBook V5.0CR6
+#
+# Copyright 1992-2005 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).
+#
+# Release: $Id: pool.rnc 7466 2007-09-27 14:03:55Z nwalsh $
+#
+# Permission to use, copy, modify and distribute the DocBook schema
+# 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 schema
+# for any purpose. It is provided "as is" without expressed or implied
+# warranty.
+#
+# If you modify the DocBook schema in any way, label your schema as a
+# variant of DocBook. See the reference documentation
+# (http://docbook.org/tdg5/en/html/ch05.html#s-notdocbook)
+# 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/.
+#
+# ======================================================================
+
+default namespace = "http://docbook.org/ns/docbook"
+namespace ctrl = "http://nwalsh.com/xmlns/schema-control/"
+namespace rng  = "http://relaxng.org/ns/structure/1.0"
+namespace s = "http://www.ascc.net/xml/schematron"
+namespace db = "http://docbook.org/ns/docbook"
+
+db.domain.inlines |= db.markup.inlines
+
+db.userinput.inlines |= db.markup.inlines
+
+db.computeroutput.inlines |= db.markup.inlines
+
+db.markup.inlines =
+   db.tag
+ | db.markup
+ | db.token
+ | db.symbol
+ | db.literal
+ | db.code
+ | db.constant
+ | db.email
+ | db.uri
+
+# ======================================================================
+
+[
+   db:refname [ "markup" ]
+   db:refpurpose [ "A string of formatting markup in text that is to be represented literally" ]
+]
+div {
+
+   db.markup.role.attribute = attribute role { text }
+
+   db.markup.attlist =
+      db.markup.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.markup =
+      element markup {
+         db.markup.attlist,
+         db._text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "tag" ]
+   db:refpurpose [ "A component of XML (or SGML) markup" ]
+]
+div {
+
+   db.tag.role.attribute = attribute role { text }
+
+   db.tag.class.enumeration =
+      ## An attribute
+      "attribute"
+    | ## An attribute value
+      "attvalue"
+    | ## An element
+      "element"
+    | ## An empty element tag
+      "emptytag"
+    | ## An end tag
+      "endtag"
+    | ## A general entity
+      "genentity"
+    | ## The local name part of a qualified name
+      "localname"
+    | ## A namespace
+      "namespace"
+    | ## A numeric character reference
+      "numcharref"
+    | ## A parameter entity
+      "paramentity"
+    | ## A processing instruction
+      "pi"
+    | ## The prefix part of a qualified name
+      "prefix"
+    | ## An SGML comment
+      "comment"
+    | ## A start tag
+      "starttag"
+    | ## An XML processing instruction
+      "xmlpi"
+
+   db.tag.class.attribute =
+      [
+         db:refpurpose [ "Identifies the nature of the tag content" ]
+      ]
+      attribute class { db.tag.class.enumeration }
+
+   db.tag.namespace.attribute =
+      [
+         db:refpurpose [ "Identifies the namespace of the tag content" ]
+      ]
+      attribute namespace { xsd:anyURI }
+
+   db.tag.attlist =
+      db.tag.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.tag.class.attribute?
+    & db.tag.namespace.attribute?
+
+   db.tag =
+      element tag {
+         db.tag.attlist,
+         db._text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "symbol" ]
+   db:refpurpose [ "A name that is replaced by a value before processing" ]
+]
+div {
+
+   db.symbol.class.attribute =
+      [
+         db:refpurpose [ "Identifies the class of symbol" ]
+      ]
+      attribute class {
+         ## The value is a limit of some kind
+         "limit"
+      }
+
+   db.symbol.role.attribute = attribute role { text }
+
+   db.symbol.attlist =
+      db.symbol.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.symbol.class.attribute?
+
+   db.symbol =
+      element symbol {
+         db.symbol.attlist,
+         db._text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "token" ]
+   db:refpurpose [ "A unit of information" ]
+]
+div {
+
+   db.token.role.attribute = attribute role { text }
+
+   db.token.attlist =
+      db.token.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.token =
+      element token {
+         db.token.attlist,
+         db._text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "literal" ]
+   db:refpurpose [ "Inline text that is some literal value" ]
+]
+div {
+
+   db.literal.role.attribute = attribute role { text }
+
+   db.literal.attlist =
+      db.literal.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.literal =
+      element literal {
+         db.literal.attlist,
+         db._text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "code" ]
+   db:refpurpose [ "An inline code fragment" ]
+]
+div {
+
+   code.language.attribute =
+      [
+         db:refpurpose [ "Identifies the (computer) language of the code fragment" ]
+      ]
+      attribute language { text }
+
+   db.code.role.attribute = attribute role { text }
+
+   db.code.attlist =
+      db.code.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & code.language.attribute?
+
+   db.code =
+      element code {
+         db.code.attlist,
+         (db.programming.inlines | db._text)*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "constant" ]
+   db:refpurpose [ "A programming or system constant" ]
+]
+div {
+
+   db.constant.class.attribute =
+      [
+         db:refpurpose [ "Identifies the class of constant" ]
+      ]
+      attribute class {
+         ## The value is a limit of some kind
+         "limit"
+      }
+
+   db.constant.role.attribute = attribute role { text }
+
+   db.constant.attlist =
+      db.constant.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.constant.class.attribute?
+
+   db.constant =
+      element constant {
+         db.constant.attlist,
+         db._text
+      }
+}
diff --git a/docbook/relaxng/docbook/src/os.rnc b/docbook/relaxng/docbook/src/os.rnc
new file mode 100644 (file)
index 0000000..7411f68
--- /dev/null
@@ -0,0 +1,446 @@
+# This file is part of DocBook V5.0CR6
+#
+# Copyright 1992-2005 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).
+#
+# Release: $Id: pool.rnc 7466 2007-09-27 14:03:55Z nwalsh $
+#
+# Permission to use, copy, modify and distribute the DocBook schema
+# 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 schema
+# for any purpose. It is provided "as is" without expressed or implied
+# warranty.
+#
+# If you modify the DocBook schema in any way, label your schema as a
+# variant of DocBook. See the reference documentation
+# (http://docbook.org/tdg5/en/html/ch05.html#s-notdocbook)
+# 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/.
+#
+# ======================================================================
+
+default namespace = "http://docbook.org/ns/docbook"
+namespace ctrl = "http://nwalsh.com/xmlns/schema-control/"
+namespace rng  = "http://relaxng.org/ns/structure/1.0"
+namespace s = "http://www.ascc.net/xml/schematron"
+namespace db = "http://docbook.org/ns/docbook"
+namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"
+
+db.domain.inlines |= db.os.inlines
+
+db.synopsis.blocks |= db.cmdsynopsis
+
+db.os.inlines =
+   db.prompt
+ | db.envar
+ | db.filename
+ | db.command
+ | db.computeroutput
+ | db.userinput
+
+db.computeroutput.inlines =
+   text
+ | db.ubiq.inlines
+ | db.os.inlines
+ | db.technical.inlines
+
+db.userinput.inlines =
+   text
+ | db.ubiq.inlines
+ | db.os.inlines
+ | db.technical.inlines
+
+# ======================================================================
+
+db.prompt.inlines = db._text
+
+# ======================================================================
+
+[
+   db:refname [ "prompt" ]
+   db:refpurpose [ "A character or string indicating the start of an input field in a  computer display" ]
+]
+div {
+
+
+   db.prompt.role.attribute = attribute role { text }
+
+   db.prompt.attlist =
+      db.prompt.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.prompt =
+      element prompt {
+         db.prompt.attlist,
+         db.prompt.inlines*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "envar" ]
+   db:refpurpose [ "A software environment variable" ]
+]
+div {
+
+   db.envar.role.attribute = attribute role { text }
+
+   db.envar.attlist =
+      db.envar.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.envar =
+      element envar {
+         db.envar.attlist,
+         db._text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "filename" ]
+   db:refpurpose [ "The name of a file" ]
+]
+div {
+
+   db.filename.class.enumeration =
+      ## A device
+      "devicefile"
+    | ## A directory
+      "directory"
+    | ## A filename extension
+      "extension"
+    | ## A header file (as for a programming language)
+      "headerfile"
+    | ## A library file
+      "libraryfile"
+    | ## A partition (as of a hard disk)
+      "partition"
+    | ## A symbolic link
+      "symlink"
+
+   db.filename.class.attribute =
+      [
+         db:refpurpose [ "Identifies the class of filename" ]
+      ]
+      attribute class { db.filename.class.enumeration }
+
+   db.filename.path.attribute =
+      [
+         db:refpurpose [ "Specifies the path of the filename" ]
+      ]
+      attribute path { text }
+
+   db.filename.role.attribute = attribute role { text }
+
+   db.filename.attlist =
+      db.filename.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.filename.path.attribute?
+    & db.filename.class.attribute?
+
+   db.filename =
+      element filename {
+         db.filename.attlist,
+         db._text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "command" ]
+   db:refpurpose [ "The name of an executable program or other software command" ]
+]
+div {
+
+   db.command.role.attribute = attribute role { text }
+
+   db.command.attlist =
+      db.command.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.command =
+      element command {
+         db.command.attlist,
+         db._text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "computeroutput" ]
+   db:refpurpose [ "Data, generally text, displayed or presented by a computer" ]
+]
+div {
+
+   db.computeroutput.role.attribute = attribute role { text }
+
+   db.computeroutput.attlist =
+      db.computeroutput.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.computeroutput =
+      element computeroutput {
+         db.computeroutput.attlist,
+         db.computeroutput.inlines*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "userinput" ]
+   db:refpurpose [ "Data entered by the user" ]
+]
+div {
+
+   db.userinput.role.attribute = attribute role { text }
+
+   db.userinput.attlist =
+      db.userinput.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.userinput =
+      element userinput {
+         db.userinput.attlist,
+         db.userinput.inlines*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "cmdsynopsis" ]
+   db:refpurpose [ "A syntax summary for a software command" ]
+]
+div {
+
+   db.cmdsynopsis.role.attribute = attribute role { text }
+
+   db.cmdsynopsis.sepchar.attribute =
+      [
+         db:refpurpose [ "Specifies the character that should separate the command and its top-level arguments" ]
+      ]
+      attribute sepchar { text }
+
+   db.cmdsynopsis.cmdlength.attribute =
+      [
+         db:refpurpose [ "Indicates the displayed length of the command; this information may be used to intelligently indent command synopses which extend beyond one line" ]
+      ]
+      attribute cmdlength { text }
+
+   db.cmdsynopsis.label.attribute = db.label.attribute
+
+   db.cmdsynopsis.attlist =
+      db.cmdsynopsis.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.cmdsynopsis.sepchar.attribute?
+    & db.cmdsynopsis.cmdlength.attribute?
+    & db.cmdsynopsis.label.attribute?
+
+   db.cmdsynopsis.info = db._info.title.forbidden
+
+   db.cmdsynopsis =
+      element cmdsynopsis {
+         db.cmdsynopsis.attlist,
+         db.cmdsynopsis.info,
+         (db.command | db.arg | db.group | db.sbr)+,
+         db.synopfragment*
+      }
+}
+
+# ======================================================================
+
+db.rep.enumeration =
+   ## Can not be repeated.
+   "norepeat"
+ | ## Can be repeated.
+   "repeat"
+
+db.rep.attribute =
+   [
+      a:defaultValue="norepeat"
+      db:refpurpose [ "Indicates whether or not repetition is possible." ]
+   ]
+   attribute rep { db.rep.enumeration }
+
+db.choice.enumeration =
+   ## Formatted to indicate that it is optional.
+   "opt"
+ | ## Formatted without indication.
+   "plain"
+ | ## Formatted to indicate that it is required.
+   "req"
+
+db.choice.opt.attribute =
+   [
+      a:defaultValue="opt"
+      db:refpurpose [ "Indicates optionality." ]
+   ]
+   attribute choice { db.choice.enumeration }
+
+db.choice.req.attribute =
+   [
+      a:defaultValue="req"
+      db:refpurpose [ "Indicates optionality." ]
+   ]
+   attribute choice { db.choice.enumeration }
+
+# ======================================================================
+
+[
+   db:refname [ "arg" ]
+   db:refpurpose [ "An argument in a CmdSynopsis" ]
+]
+div {
+
+   db.arg.role.attribute = attribute role { text }
+   db.arg.rep.attribute = db.rep.attribute
+   db.arg.choice.attribute = db.choice.opt.attribute
+
+   db.arg.attlist =
+      db.arg.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.arg.rep.attribute?
+    & db.arg.choice.attribute?
+
+   db.arg =
+      element arg {
+         db.arg.attlist,
+         (db._text
+          | db.arg
+          | db.group
+          | db.option
+          | db.synopfragmentref
+          | db.sbr)*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "group" ]
+   db:refpurpose [ "A group of elements in a CmdSynopsis" ]
+]
+div {
+
+   db.group.role.attribute = attribute role { text }
+   db.group.rep.attribute = db.rep.attribute
+   db.group.choice.attribute = db.choice.opt.attribute
+
+   db.group.attlist =
+      db.group.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.group.rep.attribute?
+    & db.group.choice.attribute?
+
+   db.group =
+      element group {
+         db.group.attlist,
+         (db.arg
+          | db.group
+          | db.option
+          | db.synopfragmentref
+          | db.replaceable
+          | db.sbr)+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "sbr" ]
+   db:refpurpose [ "An explicit line break in a command synopsis" ]
+]
+div {
+
+   db.sbr.role.attribute = attribute role { text }
+
+   db.sbr.attlist =
+      db.sbr.role.attribute?
+    & db.common.attributes
+
+   db.sbr =
+      element sbr {
+         db.sbr.attlist,
+         empty
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "synopfragment" ]
+   db:refpurpose [ "A portion of a CmdSynopsis broken out from the main body of the synopsis" ]
+]
+div {
+
+   db.synopfragment.role.attribute = attribute role { text }
+
+   db.synopfragment.attlist =
+      db.synopfragment.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.synopfragment =
+      element synopfragment {
+         db.synopfragment.attlist,
+         (db.arg | db.group)+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "synopfragmentref" ]
+   db:refpurpose [ "A reference to a fragment of a command synopsis" ]
+]
+div {
+
+   db.synopfragmentref.role.attribute = attribute role { text }
+
+   db.synopfragmentref.attlist =
+      db.synopfragmentref.role.attribute?
+    & db.common.attributes
+    & db.linkend.attribute
+
+   db.synopfragmentref =
+      [
+         s:pattern [
+            name = "Synopsis fragment type constraint"
+            s:rule [
+               context = "db:synopfragmentref"
+               s:assert [
+                  test = "local-name(//*[@xml:id=current()/@linkend]) = 'synopfragment' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'"
+                  "@linkend on synopfragmentref must point to a synopfragment."
+               ]
+            ]
+         ]
+      ]
+      element synopfragmentref {
+         db.synopfragmentref.attlist,
+         text
+      }
+}
+
index a9a817d6cf50194545a74a3f5ce7198550b80e6b..db98fe528370afc6830074a11182197bd3857ea6 100644 (file)
@@ -653,73 +653,14 @@ db.general.inlines =
 
 db.domain.inlines =
    db.technical.inlines
- | db.error.inlines
- | db.os.inlines
- | db.programming.inlines
- | db.markup.inlines
- | db.gui.inlines
- | db.keyboard.inlines
 
 db.technical.inlines =
    db.replaceable
- | db.systemitem
- | db.option
- | db.optional
  | db.package
  | db.parameter
- | db.property
-
-db.error.inlines =
-   db.errorcode
- | db.errortext
- | db.errorname
- | db.errortype
-
-db.oo.inlines =
-   db.ooclass
- | db.ooexception
- | db.oointerface
-
-db.programming.inlines =
-   db.function
- | db.parameter
- | db.varname
- | db.returnvalue
- | db.type
- | db.classname
- | db.exceptionname
- | db.interfacename
- | db.methodname
- | db.modifier
- | db.initializer
- | db.oo.inlines
 
 db.product.inlines =
-   db.productnumber
- | db.productname
- | db.database
- | db.application
- | db.hardware
- | db.trademark
-
-db.os.inlines =
-   db.prompt
- | db.envar
- | db.filename
- | db.command
- | db.computeroutput
- | db.userinput
-
-db.markup.inlines =
-   db.tag
- | db.markup
- | db.token
- | db.symbol
- | db.literal
- | db.code
- | db.constant
- | db.email
- | db.uri
+   db.trademark
 
 db.bibliography.inlines =
    db.citation
@@ -752,24 +693,6 @@ db.graphic.inlines = db.inlinemediaobject
 
 db.indexing.inlines = notAllowed
 
-db.gui.inlines =
-   db.guiicon
- | db.guibutton
- | db.guimenuitem
- | db.guimenu
- | db.guisubmenu
- | db.guilabel
- | db.menuchoice
- | db.mousebutton
-
-db.keyboard.inlines =
-   db.keycombo
- | db.keycap
- | db.keycode
- | db.keysym
- | db.shortcut
- | db.accel
-
 db.link.inlines =
    db.xref
  | db.link
@@ -782,14 +705,12 @@ db.extension.inlines = notAllowed
 
 db.nopara.blocks =
    db.list.blocks
- | db.admonition.blocks
  | db.formal.blocks
  | db.informal.blocks
  | db.publishing.blocks
  | db.graphic.blocks
  | db.technical.blocks
  | db.verbatim.blocks
- | db.synopsis.blocks
  | db.bridgehead
  | db.remark
  | db.revhistory
@@ -806,7 +727,6 @@ db.all.blocks =
  | db.extension.blocks
 
 ctrl:exclude [ from="db.formal.blocks" exclude="db.formal.blocks" ]
-ctrl:exclude [ from="db.formal.blocks" exclude="db.admonition.blocks" ]
 
 db.formal.blocks =
    db.example
@@ -830,15 +750,6 @@ db.graphic.blocks =
 
 db.technical.blocks = db.procedure
 
-ctrl:exclude [ from="db.admonition.blocks" exclude="db.admonition.blocks" ]
-
-db.admonition.blocks =
-   db.caution
- | db.important
- | db.note
- | db.tip
- | db.warning
-
 db.list.blocks =
    db.itemizedlist
  | db.orderedlist
@@ -848,19 +759,8 @@ db.list.blocks =
  | db.segmentedlist
 
 db.verbatim.blocks =
-   db.programlisting
- | db.screen
+   db.screen
  | db.literallayout
- | db.synopsis
-
-db.synopsis.blocks =
-   db.cmdsynopsis
- | db.funcsynopsis
- | db.classsynopsis
- | db.methodsynopsis
- | db.constructorsynopsis
- | db.destructorsynopsis
- | db.fieldsynopsis
 
 db.extension.blocks = notAllowed
 
@@ -896,8 +796,6 @@ db.info.elements =
  | db.othercredit
  | db.pagenums
  | db.printhistory
- | db.productname
- | db.productnumber
  | db.pubdate
  | db.publisher
  | db.publishername
@@ -1569,7 +1467,6 @@ div {
 
    ctrl:exclude [ from="db.footnote" exclude="db.footnote" ]
    ctrl:exclude [ from="db.footnote" exclude="db.formal.blocks" ]
-   ctrl:exclude [ from="db.footnote" exclude="db.admonition.blocks" ]
    ctrl:exclude [ from="db.footnote" exclude="db.indexterm" ]
    ctrl:exclude [ from="db.footnote" exclude="db.sidebar" ]
    ctrl:exclude [ from="db.footnote" exclude="db.task" ]
@@ -1674,120 +1571,6 @@ div {
 
 # ======================================================================
 
-db.admonition.contentmodel = db._info.title.only, db.all.blocks+
-
-# ======================================================================
-
-[
-   db:refname [ "caution" ]
-   db:refpurpose [ "A note of caution" ]
-]
-div {
-
-   db.caution.role.attribute = attribute role { text }
-
-   db.caution.attlist =
-      db.caution.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.caution =
-      element caution {
-         db.caution.attlist,
-         db.admonition.contentmodel
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "important" ]
-   db:refpurpose [ "An admonition set off from the text" ]
-]
-div {
-
-   db.important.role.attribute = attribute role { text }
-
-   db.important.attlist =
-      db.important.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.important =
-      element important {
-         db.important.attlist,
-         db.admonition.contentmodel
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "note" ]
-   db:refpurpose [ "A message set off from the text" ]
-]
-div {
-
-   db.note.role.attribute = attribute role { text }
-
-   db.note.attlist =
-      db.note.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.note =
-      element note {
-         db.note.attlist,
-         db.admonition.contentmodel
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "tip" ]
-   db:refpurpose [ "A suggestion to the user, set off from the text" ]
-]
-div {
-
-   db.tip.role.attribute = attribute role { text }
-
-   db.tip.attlist =
-      db.tip.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.tip =
-      element tip {
-         db.tip.attlist,
-         db.admonition.contentmodel
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "warning" ]
-   db:refpurpose [ "An admonition set off from the text" ]
-]
-div {
-
-   db.warning.role.attribute = attribute role { text }
-
-   db.warning.attlist =
-      db.warning.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.warning =
-      element warning {
-         db.warning.attlist,
-         db.admonition.contentmodel
-      }
-}
-
-# ======================================================================
-
 [
    db:refname [ "itemizedlist" ]
    db:refpurpose [ "A list in which each entry is marked with a bullet or other dingbat" ]
@@ -2250,32 +2033,6 @@ db.verbatim.contentmodel =
 
 # ======================================================================
 
-[
-   db:refname [ "programlisting" ]
-   db:refpurpose [ "A literal listing of all or part of a program" ]
-]
-div {
-
-   db.programlisting.role.attribute = attribute role { text }
-
-   db.programlisting.width.attribute = db.width.characters.attribute
-
-   db.programlisting.attlist =
-      db.programlisting.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-    & db.verbatim.attributes
-    & db.programlisting.width.attribute?
-
-   db.programlisting =
-      element programlisting {
-         db.programlisting.attlist,
-         db.verbatim.contentmodel
-      }
-}
-
-# ======================================================================
-
 [
    db:refname [ "literallayout" ]
    db:refpurpose [ "A block of text in which line breaks and white space are to be reproduced faithfully" ]
@@ -2771,7 +2528,6 @@ div {
 ]
 div {
    ctrl:exclude [ from="db.caption" exclude="db.formal.blocks" ]
-   ctrl:exclude [ from="db.caption" exclude="db.admonition.blocks" ]
    ctrl:exclude [ from="db.caption" exclude="db.sidebar" ]
    ctrl:exclude [ from="db.caption" exclude="db.task" ]
 
@@ -2795,617 +2551,541 @@ div {
 # ======================================================================
 
 [
-   db:refname [ "synopsis" ]
-   db:refpurpose [ "A general-purpose element for representing the syntax of commands or functions" ]
+   db:refname [ "address" ]
+   db:refpurpose [ "A real-world address, generally a postal address" ]
 ]
 div {
 
-   db.synopsis.role.attribute = attribute role { text }
-   db.synopsis.label.attribute = db.label.attribute
+   db.address.role.attribute = attribute role { text }
 
-   db.synopsis.attlist =
-      db.synopsis.role.attribute?
+   db.address.attlist =
+      db.address.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
     & db.verbatim.attributes
-    & db.synopsis.label.attribute?
 
-   db.synopsis =
-      element synopsis {
-         db.synopsis.attlist,
-         db.verbatim.contentmodel
+   db.address =
+      element address {
+         db.address.attlist,
+         (db._text
+          | db.personname
+          | db.pob
+          | db.street
+          | db.city
+          | db.state
+          | db.postcode
+          | db.country
+          | db.phone
+          | db.fax
+          | db.email
+          | db.uri
+          | db.otheraddr)*
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "cmdsynopsis" ]
-   db:refpurpose [ "A syntax summary for a software command" ]
+   db:refname [ "street" ]
+   db:refpurpose [ "A street address in an address" ]
 ]
 div {
 
-   db.cmdsynopsis.role.attribute = attribute role { text }
-
-   db.cmdsynopsis.sepchar.attribute =
-      [
-         db:refpurpose [ "Specifies the character that should separate the command and its top-level arguments" ]
-      ]
-      attribute sepchar { text }
-
-   db.cmdsynopsis.cmdlength.attribute =
-      [
-         db:refpurpose [ "Indicates the displayed length of the command; this information may be used to intelligently indent command synopses which extend beyond one line" ]
-      ]
-      attribute cmdlength { text }
-
-   db.cmdsynopsis.label.attribute = db.label.attribute
+   db.street.role.attribute = attribute role { text }
 
-   db.cmdsynopsis.attlist =
-      db.cmdsynopsis.role.attribute?
+   db.street.attlist =
+      db.street.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
-    & db.cmdsynopsis.sepchar.attribute?
-    & db.cmdsynopsis.cmdlength.attribute?
-    & db.cmdsynopsis.label.attribute?
 
-   db.cmdsynopsis.info = db._info.title.forbidden
-
-   db.cmdsynopsis =
-      element cmdsynopsis {
-         db.cmdsynopsis.attlist,
-         db.cmdsynopsis.info,
-         (db.command | db.arg | db.group | db.sbr)+,
-         db.synopfragment*
+   db.street =
+      element street {
+         db.street.attlist,
+         db._text
       }
 }
 
 # ======================================================================
 
-db.rep.enumeration =
-   ## Can not be repeated.
-   "norepeat"
- | ## Can be repeated.
-   "repeat"
-
-db.rep.attribute =
-   [
-      a:defaultValue="norepeat"
-      db:refpurpose [ "Indicates whether or not repetition is possible." ]
-   ]
-   attribute rep { db.rep.enumeration }
-
-db.choice.enumeration =
-   ## Formatted to indicate that it is optional.
-   "opt"
- | ## Formatted without indication.
-   "plain"
- | ## Formatted to indicate that it is required.
-   "req"
-
-db.choice.opt.attribute =
-   [
-      a:defaultValue="opt"
-      db:refpurpose [ "Indicates optionality." ]
-   ]
-   attribute choice { db.choice.enumeration }
-
-db.choice.req.attribute =
-   [
-      a:defaultValue="req"
-      db:refpurpose [ "Indicates optionality." ]
-   ]
-   attribute choice { db.choice.enumeration }
-
-# ======================================================================
-
 [
-   db:refname [ "arg" ]
-   db:refpurpose [ "An argument in a CmdSynopsis" ]
+   db:refname [ "pob" ]
+   db:refpurpose [ "A post office box in an address" ]
 ]
 div {
 
-   db.arg.role.attribute = attribute role { text }
-   db.arg.rep.attribute = db.rep.attribute
-   db.arg.choice.attribute = db.choice.opt.attribute
+   db.pob.role.attribute = attribute role { text }
 
-   db.arg.attlist =
-      db.arg.role.attribute?
+   db.pob.attlist =
+      db.pob.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
-    & db.arg.rep.attribute?
-    & db.arg.choice.attribute?
 
-   db.arg =
-      element arg {
-         db.arg.attlist,
-         (db._text
-          | db.arg
-          | db.group
-          | db.option
-          | db.synopfragmentref
-          | db.sbr)*
+   db.pob =
+      element pob {
+         db.pob.attlist,
+         db._text
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "group" ]
-   db:refpurpose [ "A group of elements in a CmdSynopsis" ]
+   db:refname [ "postcode" ]
+   db:refpurpose [ "A postal code in an address" ]
 ]
 div {
 
-   db.group.role.attribute = attribute role { text }
-   db.group.rep.attribute = db.rep.attribute
-   db.group.choice.attribute = db.choice.opt.attribute
+   db.postcode.role.attribute = attribute role { text }
 
-   db.group.attlist =
-      db.group.role.attribute?
+   db.postcode.attlist =
+      db.postcode.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
-    & db.group.rep.attribute?
-    & db.group.choice.attribute?
 
-   db.group =
-      element group {
-         db.group.attlist,
-         (db.arg
-          | db.group
-          | db.option
-          | db.synopfragmentref
-          | db.replaceable
-          | db.sbr)+
+   db.postcode =
+      element postcode {
+         db.postcode.attlist,
+         db._text
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "sbr" ]
-   db:refpurpose [ "An explicit line break in a command synopsis" ]
+   db:refname [ "city" ]
+   db:refpurpose [ "The name of a city in an address" ]
 ]
 div {
 
-   db.sbr.role.attribute = attribute role { text }
+   db.city.role.attribute = attribute role { text }
 
-   db.sbr.attlist =
-      db.sbr.role.attribute?
+   db.city.attlist =
+      db.city.role.attribute?
     & db.common.attributes
+    & db.common.linking.attributes
 
-   db.sbr =
-      element sbr {
-         db.sbr.attlist,
-         empty
+   db.city =
+      element city {
+         db.city.attlist,
+         db._text
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "synopfragment" ]
-   db:refpurpose [ "A portion of a CmdSynopsis broken out from the main body of the synopsis" ]
+   db:refname [ "state" ]
+   db:refpurpose [ "A state or province in an address" ]
 ]
 div {
 
-   db.synopfragment.role.attribute = attribute role { text }
+   db.state.role.attribute = attribute role { text }
 
-   db.synopfragment.attlist =
-      db.synopfragment.role.attribute?
+   db.state.attlist =
+      db.state.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
 
-   db.synopfragment =
-      element synopfragment {
-         db.synopfragment.attlist,
-         (db.arg | db.group)+
+   db.state =
+      element state {
+         db.state.attlist,
+         db._text
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "synopfragmentref" ]
-   db:refpurpose [ "A reference to a fragment of a command synopsis" ]
+   db:refname [ "country" ]
+   db:refpurpose [ "The name of a country" ]
 ]
 div {
 
-   db.synopfragmentref.role.attribute = attribute role { text }
+   db.country.role.attribute = attribute role { text }
 
-   db.synopfragmentref.attlist =
-      db.synopfragmentref.role.attribute?
+   db.country.attlist =
+      db.country.role.attribute?
     & db.common.attributes
-    & db.linkend.attribute
+    & db.common.linking.attributes
 
-   db.synopfragmentref =
-      [
-         s:pattern [
-            name = "Synopsis fragment type constraint"
-            s:rule [
-               context = "db:synopfragmentref"
-               s:assert [
-                  test = "local-name(//*[@xml:id=current()/@linkend]) = 'synopfragment' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'"
-                  "@linkend on synopfragmentref must point to a synopfragment."
-               ]
-            ]
-         ]
-      ]
-      element synopfragmentref {
-         db.synopfragmentref.attlist,
-         text
+   db.country =
+      element country {
+         db.country.attlist,
+         db._text
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "funcsynopsis" ]
-   db:refpurpose [ "The syntax summary for a function definition" ]
+   db:refname [ "phone" ]
+   db:refpurpose [ "A telephone number" ]
 ]
 div {
 
-   db.funcsynopsis.role.attribute = attribute role { text }
+   db.phone.role.attribute = attribute role { text }
 
-   db.funcsynopsis.attlist =
-      db.funcsynopsis.role.attribute?
+   db.phone.attlist =
+      db.phone.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
-    & db.language.attribute?
 
-   db.funcsynopsis.info = db._info.title.forbidden
-
-   db.funcsynopsis =
-      element funcsynopsis {
-         db.funcsynopsis.attlist,
-         db.funcsynopsis.info,
-         (db.funcsynopsisinfo | db.funcprototype)+
+   db.phone =
+      element phone {
+         db.phone.attlist,
+         db._text
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "funcsynopsisinfo" ]
-   db:refpurpose [ "Information supplementing the FuncDefs of a FuncSynopsis" ]
+   db:refname [ "fax" ]
+   db:refpurpose [ "A fax number" ]
 ]
 div {
 
-   db.funcsynopsisinfo.role.attribute = attribute role { text }
+   db.fax.role.attribute = attribute role { text }
 
-   db.funcsynopsisinfo.attlist =
-      db.funcsynopsisinfo.role.attribute?
+   db.fax.attlist =
+      db.fax.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
-    & db.verbatim.attributes
 
-   db.funcsynopsisinfo =
-      element funcsynopsisinfo {
-         db.funcsynopsisinfo.attlist,
-         db.verbatim.contentmodel
+   db.fax =
+      element fax {
+         db.fax.attlist,
+         db._text
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "funcprototype" ]
-   db:refpurpose [ "The prototype of a function" ]
+   db:refname [ "otheraddr" ]
+   db:refpurpose [ "Uncategorized information in address" ]
 ]
 div {
 
-   db.funcprototype.role.attribute = attribute role { text }
+   db.otheraddr.role.attribute = attribute role { text }
 
-   db.funcprototype.attlist =
-      db.funcprototype.role.attribute?
+   db.otheraddr.attlist =
+      db.otheraddr.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
 
-   db.funcprototype =
-      element funcprototype {
-         db.funcprototype.attlist,
-         db.modifier*,
-         db.funcdef,
-         (db.void | db.varargs | (db.paramdef+, db.varargs?)),
-         db.modifier*
+   db.otheraddr =
+      element otheraddr {
+         db.otheraddr.attlist,
+         db._text
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "funcdef" ]
-   db:refpurpose [ "A function (subroutine) name and its return type" ]
+   db:refname [ "affiliation" ]
+   db:refpurpose [ "The institutional affiliation of an individual" ]
 ]
 div {
 
-   db.funcdef.role.attribute = attribute role { text }
+   db.affiliation.role.attribute = attribute role { text }
 
-   db.funcdef.attlist =
-      db.funcdef.role.attribute?
+   db.affiliation.attlist =
+      db.affiliation.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
 
-   db.funcdef =
-      element funcdef {
-         db.funcdef.attlist,
-         (db._text | db.type | db.function)*
+   db.affiliation =
+      element affiliation {
+         db.affiliation.attlist,
+         db.shortaffil?,
+         db.jobtitle*,
+         (db.org? | (db.orgname?, db.orgdiv*, db.address*))
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "void" ]
-   db:refpurpose [ "An empty element in a function synopsis indicating that the function in question takes no arguments" ]
+   db:refname [ "shortaffil" ]
+   db:refpurpose [ "A brief description of an affiliation" ]
 ]
 div {
 
-   db.void.role.attribute = attribute role { text }
+   db.shortaffil.role.attribute = attribute role { text }
 
-   db.void.attlist =
-      db.void.role.attribute?
+   db.shortaffil.attlist =
+      db.shortaffil.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
 
-   db.void =
-      element void {
-         db.void.attlist,
-         empty
+   db.shortaffil =
+      element shortaffil {
+         db.shortaffil.attlist,
+         db._text
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "varargs" ]
-   db:refpurpose [ "An empty element in a function synopsis indicating a variable number of arguments" ]
+   db:refname [ "jobtitle" ]
+   db:refpurpose [ "The title of an individual in an organization" ]
 ]
 div {
 
-   db.varargs.role.attribute = attribute role { text }
+   db.jobtitle.role.attribute = attribute role { text }
 
-   db.varargs.attlist =
-      db.varargs.role.attribute?
+   db.jobtitle.attlist =
+      db.jobtitle.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
 
-   db.varargs =
-      element varargs {
-         db.varargs.attlist,
-         empty
+   db.jobtitle =
+      element jobtitle {
+         db.jobtitle.attlist,
+         db._text
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "paramdef" ]
-   db:refpurpose [ "Information about a function parameter in a programming language" ]
+   db:refname [ "orgname" ]
+   db:refpurpose [ "The name of an organization other than a corporation " ]
 ]
 div {
 
-   db.paramdef.role.attribute = attribute role { text }
+   ctrl:other-attribute [ name="db.orgname.class.attrib"
+                          enum-name="db.orgname.class-enum.attribute"
+                          other-name="db.orgname.class-other.attributes" ]
+
+   db.orgname.class.enumeration =
+      ## A consortium
+      "consortium"
+    | ## A corporation
+      "corporation"
+    | ## An informal organization
+      "informal"
+    | ## A non-profit organization
+      "nonprofit"
 
-   db.paramdef.choice.enumeration =
-      ## Formatted to indicate that it is optional.
-      "opt"
-    | ## Formatted to indicate that it is required.
-      "req"
+   db.orgname.class-enum.attribute =
+      [
+         db:refpurpose [ "Specifies the nature of the organization" ]
+      ]
+      attribute class { db.orgname.class.enumeration }
 
-   db.paramdef.choice.attribute =
+   db.orgname.class-other.attributes =
+      [
+         db:refpurpose [ "Specifies the nature of the organization" ]
+      ]
+      attribute class {
+         ## Indicates a non-standard organization class
+         "other"
+      },
       [
-         a:defaultValue="opt"
-         db:refpurpose [ "Indicates optionality." ]
+         db:refpurpose [ "Identifies the non-standard nature of the organization" ]
       ]
-      attribute choice { db.paramdef.choice.enumeration }
+      attribute otherclass { text }
+
+   db.orgname.class.attribute =
+      (db.orgname.class-enum.attribute | db.orgname.class-other.attributes)
 
+   db.orgname.role.attribute = attribute role { text }
 
-   db.paramdef.attlist =
-      db.paramdef.role.attribute?
+   db.orgname.attlist =
+      db.orgname.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
-    & db.paramdef.choice.attribute?
+    & db.orgname.class.attribute?
 
-   db.paramdef =
-      element paramdef {
-         db.paramdef.attlist,
-         (db._text | db.initializer | db.type | db.parameter | db.funcparams)*
+   db.orgname =
+      element orgname {
+         db.orgname.attlist,
+         db._text
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "funcparams" ]
-   db:refpurpose [ "Parameters for a function referenced through a function pointer in a synopsis" ]
+   db:refname [ "orgdiv" ]
+   db:refpurpose [ "A division of an organization" ]
 ]
 div {
 
-   db.funcparams.role.attribute = attribute role { text }
+   db.orgdiv.role.attribute = attribute role { text }
 
-   db.funcparams.attlist =
-      db.funcparams.role.attribute?
+   db.orgdiv.attlist =
+      db.orgdiv.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
 
-   db.funcparams =
-      element funcparams {
-         db.funcparams.attlist,
-         db._text
+   db.orgdiv =
+      element orgdiv {
+         db.orgdiv.attlist,
+         db.all.inlines*
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "classsynopsis" ]
-   db:refpurpose [ "The syntax summary for a class definition" ]
+   db:refname [ "artpagenums" ]
+   db:refpurpose [ "The page numbers of an article as published" ]
 ]
 div {
 
-   db.classsynopsis.role.attribute = attribute role { text }
-
-   db.classsynopsis.class.enumeration =
-      ## This is the synopsis of a class
-      "class"
-    | ## This is the synopsis of an interface
-      "interface"
-
-   db.classsynopsis.class.attribute =
-      [
-         db:refpurpose [ "Specifies the nature of the synopsis" ]
-      ]
-      attribute class { db.classsynopsis.class.enumeration }
+   db.artpagenums.role.attribute = attribute role { text }
 
-   db.classsynopsis.attlist =
-      db.classsynopsis.role.attribute?
+   db.artpagenums.attlist =
+      db.artpagenums.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
-    & db.language.attribute?
-    & db.classsynopsis.class.attribute?
 
-   db.classsynopsis =
-      element classsynopsis {
-         db.classsynopsis.attlist,
-         db.oo.inlines+,
-         (db.classsynopsisinfo
-          | db.methodsynopsis
-          | db.constructorsynopsis
-          | db.destructorsynopsis
-          | db.fieldsynopsis)*
+   db.artpagenums =
+      element artpagenums {
+         db.artpagenums.attlist,
+         db._text
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "classsynopsisinfo" ]
-   db:refpurpose [ "Information supplementing the contents of a ClassSynopsis" ]
+   db:refname [ "personname" ]
+   db:refpurpose [ "The personal name of an individual" ]
 ]
 div {
 
-   db.classsynopsisinfo.role.attribute = attribute role { text }
+   db.personname.role.attribute = attribute role { text }
 
-   db.classsynopsisinfo.attlist =
-      db.classsynopsisinfo.role.attribute?
+   db.personname.attlist =
+      db.personname.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
-    & db.verbatim.attributes
 
-   db.classsynopsisinfo =
-      element classsynopsisinfo {
-         db.classsynopsisinfo.attlist,
-         db.verbatim.contentmodel
+   db.personname =
+      element personname {
+         db.personname.attlist,
+         (db._text
+          | (db.honorific
+           | db.firstname
+           | db.surname
+           | db.lineage
+           | db.othername)+)
       }
 }
 
 # ======================================================================
 
+db.person.author.contentmodel =
+   db.personname,
+   (db.personblurb
+    | db.affiliation
+    | db.email
+    | db.uri
+    | db.address
+    | db.contrib)*
+
+db.org.author.contentmodel =
+   db.orgname,
+   (db.orgdiv
+    | db.affiliation
+    | db.email
+    | db.uri
+    | db.address
+    | db.contrib)*
+
+db.credit.contentmodel = db.person.author.contentmodel | db.org.author.contentmodel
+
+# ======================================================================
+
 [
-   db:refname [ "ooclass" ]
-   db:refpurpose [ "A class in an object-oriented programming language" ]
+   db:refname [ "author" ]
+   db:refpurpose [ "The name of an individual author" ]
 ]
 div {
 
-   db.ooclass.role.attribute = attribute role { text }
+   db.author.role.attribute = attribute role { text }
 
-   db.ooclass.attlist =
-      db.ooclass.role.attribute?
+   db.author.attlist =
+      db.author.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
 
-   db.ooclass =
-      element ooclass {
-         db.ooclass.attlist,
-         (db.package|db.modifier)*,
-         db.classname
+   db.author =
+      element author {
+         db.author.attlist,
+         db.credit.contentmodel
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "oointerface" ]
-   db:refpurpose [ "An interface in an object-oriented programming language" ]
+   db:refname [ "authorgroup" ]
+   db:refpurpose [ "Wrapper for author information when a document has multiple authors or collabarators" ]
 ]
 div {
 
-   db.oointerface.role.attribute = attribute role { text }
+   db.authorgroup.role.attribute = attribute role { text }
 
-   db.oointerface.attlist =
-      db.oointerface.role.attribute?
+   db.authorgroup.attlist =
+      db.authorgroup.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
 
-   db.oointerface =
-      element oointerface {
-         db.oointerface.attlist,
-         (db.package|db.modifier)*,
-         db.interfacename
+   db.authorgroup =
+      element authorgroup {
+         db.authorgroup.attlist,
+         (db.author | db.editor | db.othercredit)+
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "ooexception" ]
-   db:refpurpose [ "An exception in an object-oriented programming language" ]
+   db:refname [ "collab" ]
+   db:refpurpose [ "Identifies a collaborator" ]
 ]
 div {
 
-   db.ooexception.role.attribute = attribute role { text }
+   db.collab.role.attribute = attribute role { text }
 
-   db.ooexception.attlist =
-      db.ooexception.role.attribute?
+   db.collab.attlist =
+      db.collab.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
 
-   db.ooexception =
-      element ooexception {
-         db.ooexception.attlist,
-         (db.package|db.modifier)*,
-         db.exceptionname
+   db.collab =
+      element collab {
+         db.collab.attlist,
+         (db.person | db.personname | db.org | db.orgname)+,
+         db.affiliation*
       }
 }
 
 # ======================================================================
 
-db.modifier.xml.space.attribute =
-   [
-      db:refpurpose [ "Can be used to indicate that whitespace in the modifier should be preserved (for multi-line annotations, for example)." ]
-   ]
-   attribute xml:space {
-      ## Extra whitespace and line breaks must be preserved.
-      "preserve"
-# Ideally the definition of xml:space used on modifier would be
-# different from the definition used on the verbatim elements. The
-# verbatim elements forbid the use of xml:space="default" which
-# wouldn't be a problem on modifier. But doing that causes the
-# generated XSD schemas to be broken so I'm just reusing the existing
-# definition for now. It won't be backwards incompatible to fix this
-# problem in the future.
-#    | ## Extra whitespace and line breaks are not preserved.
-#      "default"
-   }
-
 [
-   db:refname [ "modifier" ]
-   db:refpurpose [ "Modifiers in a synopsis" ]
+   db:refname [ "authorinitials" ]
+   db:refpurpose [ "The initials or other short identifier for an author" ]
 ]
 div {
 
-   db.modifier.role.attribute = attribute role { text }
-
+   db.authorinitials.role.attribute = attribute role { text }
 
-   db.modifier.attlist =
-      db.modifier.xml.space.attribute?
-    & db.modifier.role.attribute?
+   db.authorinitials.attlist =
+      db.authorinitials.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
 
-   db.modifier =
-      element modifier {
-         db.modifier.attlist,
+   db.authorinitials =
+      element authorinitials {
+         db.authorinitials.attlist,
          db._text
       }
 }
@@ -3413,91 +3093,93 @@ div {
 # ======================================================================
 
 [
-   db:refname [ "interfacename" ]
-   db:refpurpose [ "The name of an interface" ]
+   db:refname [ "person" ]
+   db:refpurpose [ "A person and associated metadata" ]
 ]
 div {
 
-   db.interfacename.role.attribute = attribute role { text }
+   db.person.role.attribute = attribute role { text }
 
-   db.interfacename.attlist =
-      db.interfacename.role.attribute?
+   db.person.attlist =
+      db.person.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
 
-   db.interfacename =
-      element interfacename {
-         db.interfacename.attlist,
-         db._text
+   db.person =
+      element person {
+         db.person.attlist,
+         db.personname,
+         (db.address|db.affiliation|db.email|db.uri|db.personblurb)*
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "exceptionname" ]
-   db:refpurpose [ "The name of an exception" ]
+   db:refname [ "org" ]
+   db:refpurpose [ "An organization and associated metadata" ]
 ]
 div {
 
-   db.exceptionname.role.attribute = attribute role { text }
+   db.org.role.attribute = attribute role { text }
 
-   db.exceptionname.attlist =
-      db.exceptionname.role.attribute?
+   db.org.attlist =
+      db.org.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
 
-   db.exceptionname =
-      element exceptionname {
-         db.exceptionname.attlist,
-         db._text
+   db.org =
+      element org {
+         db.org.attlist,
+         db.orgname,
+         (db.address|db.affiliation|db.email|db.uri|db.orgdiv)*
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "fieldsynopsis" ]
-   db:refpurpose [ "The name of a field in a class definition" ]
+   db:refname [ "confgroup" ]
+   db:refpurpose [ "A wrapper for document meta-information about a conference" ]
 ]
 div {
 
-   db.fieldsynopsis.role.attribute = attribute role { text }
+   db.confgroup.role.attribute = attribute role { text }
 
-   db.fieldsynopsis.attlist =
-      db.fieldsynopsis.role.attribute?
+   db.confgroup.attlist =
+      db.confgroup.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
-    & db.language.attribute?
 
-   db.fieldsynopsis =
-      element fieldsynopsis {
-         db.fieldsynopsis.attlist,
-         db.modifier*,
-         db.type?,
-         db.varname,
-         db.initializer?
+   db.confgroup =
+      element confgroup {
+         db.confgroup.attlist,
+         (db.confdates
+          | db.conftitle
+          | db.confnum
+          | db.confsponsor
+          | db.address)*
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "initializer" ]
-   db:refpurpose [ "The initializer for a FieldSynopsis" ]
+   db:refname [ "confdates" ]
+   db:refpurpose [ "The dates of a conference for which a document was written" ]
 ]
 div {
 
-   db.initializer.role.attribute = attribute role { text }
+   db.confdates.role.attribute = attribute role { text }
 
-   db.initializer.attlist =
-      db.initializer.role.attribute?
+   db.confdates.attlist =
+      db.confdates.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
 
-   db.initializer =
-      element initializer {
-         db.initializer.attlist,
+   db.confdates =
+      element confdates {
+         db.confdates.attlist,
          db._text
       }
 }
@@ -3505,101 +3187,87 @@ div {
 # ======================================================================
 
 [
-   db:refname [ "constructorsynopsis" ]
-   db:refpurpose [ "A syntax summary for a constructor" ]
+   db:refname [ "conftitle" ]
+   db:refpurpose [ "The title of a conference for which a document was written" ]
 ]
 div {
 
-   db.constructorsynopsis.role.attribute = attribute role { text }
+   db.conftitle.role.attribute = attribute role { text }
 
-   db.constructorsynopsis.attlist =
-      db.constructorsynopsis.role.attribute?
+   db.conftitle.attlist =
+      db.conftitle.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
-    & db.language.attribute?
 
-   db.constructorsynopsis =
-      element constructorsynopsis {
-         db.constructorsynopsis.attlist,
-         db.modifier*,
-         db.methodname?,
-         (db.methodparam+ | db.void?),
-         db.exceptionname*
+   db.conftitle =
+      element conftitle {
+         db.conftitle.attlist,
+         db._text
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "destructorsynopsis" ]
-   db:refpurpose [ "A syntax summary for a destructor" ]
+   db:refname [ "confnum" ]
+   db:refpurpose [ "An identifier, frequently numerical, associated with a conference for which a document was written" ]
 ]
 div {
 
-   db.destructorsynopsis.role.attribute = attribute role { text }
+   db.confnum.role.attribute = attribute role { text }
 
-   db.destructorsynopsis.attlist =
-      db.destructorsynopsis.role.attribute?
+   db.confnum.attlist =
+      db.confnum.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
-    & db.language.attribute?
 
-   db.destructorsynopsis =
-      element destructorsynopsis {
-         db.destructorsynopsis.attlist,
-         db.modifier*,
-         db.methodname?,
-         (db.methodparam+ | db.void?),
-         db.exceptionname*
+   db.confnum =
+      element confnum {
+         db.confnum.attlist,
+         db._text
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "methodsynopsis" ]
-   db:refpurpose [ "A syntax summary for a method" ]
+   db:refname [ "confsponsor" ]
+   db:refpurpose [ "The sponsor of a conference for which a document was written" ]
 ]
 div {
 
-   db.methodsynopsis.role.attribute = attribute role { text }
+   db.confsponsor.role.attribute = attribute role { text }
 
-   db.methodsynopsis.attlist =
-      db.methodsynopsis.role.attribute?
+   db.confsponsor.attlist =
+      db.confsponsor.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
-    & db.language.attribute?
 
-   db.methodsynopsis =
-      element methodsynopsis {
-         db.methodsynopsis.attlist,
-         db.modifier*,
-         (db.type | db.void)?,
-         db.methodname,
-         (db.methodparam+ | db.void),
-         db.exceptionname*,
-         db.modifier*
+   db.confsponsor =
+      element confsponsor {
+         db.confsponsor.attlist,
+         db._text
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "methodname" ]
-   db:refpurpose [ "The name of a method" ]
+   db:refname [ "contractnum" ]
+   db:refpurpose [ "The contract number of a document" ]
 ]
 div {
 
-   db.methodname.role.attribute = attribute role { text }
+   db.contractnum.role.attribute = attribute role { text }
 
-   db.methodname.attlist =
-      db.methodname.role.attribute?
+   db.contractnum.attlist =
+      db.contractnum.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
 
-   db.methodname =
-      element methodname {
-         db.methodname.attlist,
+   db.contractnum =
+      element contractnum {
+         db.contractnum.attlist,
          db._text
       }
 }
@@ -3607,1745 +3275,66 @@ div {
 # ======================================================================
 
 [
-   db:refname [ "methodparam" ]
-   db:refpurpose [ "Parameters to a method" ]
+   db:refname [ "contractsponsor" ]
+   db:refpurpose [ "The sponsor of a contract" ]
 ]
 div {
 
-   db.methodparam.role.attribute = attribute role { text }
-   db.methodparam.rep.attribute = db.rep.attribute
-   db.methodparam.choice.attribute = db.choice.req.attribute
+   db.contractsponsor.role.attribute = attribute role { text }
 
-   db.methodparam.attlist =
-      db.methodparam.role.attribute?
+   db.contractsponsor.attlist =
+      db.contractsponsor.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
-    & db.methodparam.rep.attribute?
-    & db.methodparam.choice.attribute?
 
-   db.methodparam =
-      element methodparam {
-         db.methodparam.attlist,
-         db.modifier*,
-         db.type?,
-         ((db.modifier*, db.parameter, db.initializer?)
-          | db.funcparams),
-         db.modifier*
+   db.contractsponsor =
+      element contractsponsor {
+         db.contractsponsor.attlist,
+         db._text
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "address" ]
-   db:refpurpose [ "A real-world address, generally a postal address" ]
+   db:refname [ "copyright" ]
+   db:refpurpose [ "Copyright information about a document" ]
 ]
 div {
 
-   db.address.role.attribute = attribute role { text }
+   db.copyright.role.attribute = attribute role { text }
 
-   db.address.attlist =
-      db.address.role.attribute?
+   db.copyright.attlist =
+      db.copyright.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
-    & db.verbatim.attributes
 
-   db.address =
-      element address {
-         db.address.attlist,
-         (db._text
-          | db.personname
-          | db.pob
-          | db.street
-          | db.city
-          | db.state
-          | db.postcode
-          | db.country
-          | db.phone
-          | db.fax
-          | db.email
-          | db.uri
-          | db.otheraddr)*
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "street" ]
-   db:refpurpose [ "A street address in an address" ]
-]
-div {
-
-   db.street.role.attribute = attribute role { text }
-
-   db.street.attlist =
-      db.street.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.street =
-      element street {
-         db.street.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "pob" ]
-   db:refpurpose [ "A post office box in an address" ]
-]
-div {
-
-   db.pob.role.attribute = attribute role { text }
-
-   db.pob.attlist =
-      db.pob.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.pob =
-      element pob {
-         db.pob.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "postcode" ]
-   db:refpurpose [ "A postal code in an address" ]
-]
-div {
-
-   db.postcode.role.attribute = attribute role { text }
-
-   db.postcode.attlist =
-      db.postcode.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.postcode =
-      element postcode {
-         db.postcode.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "city" ]
-   db:refpurpose [ "The name of a city in an address" ]
-]
-div {
-
-   db.city.role.attribute = attribute role { text }
-
-   db.city.attlist =
-      db.city.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.city =
-      element city {
-         db.city.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "state" ]
-   db:refpurpose [ "A state or province in an address" ]
-]
-div {
-
-   db.state.role.attribute = attribute role { text }
-
-   db.state.attlist =
-      db.state.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.state =
-      element state {
-         db.state.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "country" ]
-   db:refpurpose [ "The name of a country" ]
-]
-div {
-
-   db.country.role.attribute = attribute role { text }
-
-   db.country.attlist =
-      db.country.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.country =
-      element country {
-         db.country.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "phone" ]
-   db:refpurpose [ "A telephone number" ]
-]
-div {
-
-   db.phone.role.attribute = attribute role { text }
-
-   db.phone.attlist =
-      db.phone.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.phone =
-      element phone {
-         db.phone.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "fax" ]
-   db:refpurpose [ "A fax number" ]
-]
-div {
-
-   db.fax.role.attribute = attribute role { text }
-
-   db.fax.attlist =
-      db.fax.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.fax =
-      element fax {
-         db.fax.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "otheraddr" ]
-   db:refpurpose [ "Uncategorized information in address" ]
-]
-div {
-
-   db.otheraddr.role.attribute = attribute role { text }
-
-   db.otheraddr.attlist =
-      db.otheraddr.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.otheraddr =
-      element otheraddr {
-         db.otheraddr.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "affiliation" ]
-   db:refpurpose [ "The institutional affiliation of an individual" ]
-]
-div {
-
-   db.affiliation.role.attribute = attribute role { text }
-
-   db.affiliation.attlist =
-      db.affiliation.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.affiliation =
-      element affiliation {
-         db.affiliation.attlist,
-         db.shortaffil?,
-         db.jobtitle*,
-         (db.org? | (db.orgname?, db.orgdiv*, db.address*))
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "shortaffil" ]
-   db:refpurpose [ "A brief description of an affiliation" ]
-]
-div {
-
-   db.shortaffil.role.attribute = attribute role { text }
-
-   db.shortaffil.attlist =
-      db.shortaffil.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.shortaffil =
-      element shortaffil {
-         db.shortaffil.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "jobtitle" ]
-   db:refpurpose [ "The title of an individual in an organization" ]
-]
-div {
-
-   db.jobtitle.role.attribute = attribute role { text }
-
-   db.jobtitle.attlist =
-      db.jobtitle.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.jobtitle =
-      element jobtitle {
-         db.jobtitle.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "orgname" ]
-   db:refpurpose [ "The name of an organization other than a corporation " ]
-]
-div {
-
-   ctrl:other-attribute [ name="db.orgname.class.attrib"
-                          enum-name="db.orgname.class-enum.attribute"
-                          other-name="db.orgname.class-other.attributes" ]
-
-   db.orgname.class.enumeration =
-      ## A consortium
-      "consortium"
-    | ## A corporation
-      "corporation"
-    | ## An informal organization
-      "informal"
-    | ## A non-profit organization
-      "nonprofit"
-
-   db.orgname.class-enum.attribute =
-      [
-         db:refpurpose [ "Specifies the nature of the organization" ]
-      ]
-      attribute class { db.orgname.class.enumeration }
-
-   db.orgname.class-other.attributes =
-      [
-         db:refpurpose [ "Specifies the nature of the organization" ]
-      ]
-      attribute class {
-         ## Indicates a non-standard organization class
-         "other"
-      },
-      [
-         db:refpurpose [ "Identifies the non-standard nature of the organization" ]
-      ]
-      attribute otherclass { text }
-
-   db.orgname.class.attribute =
-      (db.orgname.class-enum.attribute | db.orgname.class-other.attributes)
-
-   db.orgname.role.attribute = attribute role { text }
-
-   db.orgname.attlist =
-      db.orgname.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-    & db.orgname.class.attribute?
-
-   db.orgname =
-      element orgname {
-         db.orgname.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "orgdiv" ]
-   db:refpurpose [ "A division of an organization" ]
-]
-div {
-
-   db.orgdiv.role.attribute = attribute role { text }
-
-   db.orgdiv.attlist =
-      db.orgdiv.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.orgdiv =
-      element orgdiv {
-         db.orgdiv.attlist,
-         db.all.inlines*
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "artpagenums" ]
-   db:refpurpose [ "The page numbers of an article as published" ]
-]
-div {
-
-   db.artpagenums.role.attribute = attribute role { text }
-
-   db.artpagenums.attlist =
-      db.artpagenums.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.artpagenums =
-      element artpagenums {
-         db.artpagenums.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "personname" ]
-   db:refpurpose [ "The personal name of an individual" ]
-]
-div {
-
-   db.personname.role.attribute = attribute role { text }
-
-   db.personname.attlist =
-      db.personname.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.personname =
-      element personname {
-         db.personname.attlist,
-         (db._text
-          | (db.honorific
-           | db.firstname
-           | db.surname
-           | db.lineage
-           | db.othername)+)
-      }
-}
-
-# ======================================================================
-
-db.person.author.contentmodel =
-   db.personname,
-   (db.personblurb
-    | db.affiliation
-    | db.email
-    | db.uri
-    | db.address
-    | db.contrib)*
-
-db.org.author.contentmodel =
-   db.orgname,
-   (db.orgdiv
-    | db.affiliation
-    | db.email
-    | db.uri
-    | db.address
-    | db.contrib)*
-
-db.credit.contentmodel = db.person.author.contentmodel | db.org.author.contentmodel
-
-# ======================================================================
-
-[
-   db:refname [ "author" ]
-   db:refpurpose [ "The name of an individual author" ]
-]
-div {
-
-   db.author.role.attribute = attribute role { text }
-
-   db.author.attlist =
-      db.author.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.author =
-      element author {
-         db.author.attlist,
-         db.credit.contentmodel
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "authorgroup" ]
-   db:refpurpose [ "Wrapper for author information when a document has multiple authors or collabarators" ]
-]
-div {
-
-   db.authorgroup.role.attribute = attribute role { text }
-
-   db.authorgroup.attlist =
-      db.authorgroup.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.authorgroup =
-      element authorgroup {
-         db.authorgroup.attlist,
-         (db.author | db.editor | db.othercredit)+
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "collab" ]
-   db:refpurpose [ "Identifies a collaborator" ]
-]
-div {
-
-   db.collab.role.attribute = attribute role { text }
-
-   db.collab.attlist =
-      db.collab.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.collab =
-      element collab {
-         db.collab.attlist,
-         (db.person | db.personname | db.org | db.orgname)+,
-         db.affiliation*
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "authorinitials" ]
-   db:refpurpose [ "The initials or other short identifier for an author" ]
-]
-div {
-
-   db.authorinitials.role.attribute = attribute role { text }
-
-   db.authorinitials.attlist =
-      db.authorinitials.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.authorinitials =
-      element authorinitials {
-         db.authorinitials.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "person" ]
-   db:refpurpose [ "A person and associated metadata" ]
-]
-div {
-
-   db.person.role.attribute = attribute role { text }
-
-   db.person.attlist =
-      db.person.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.person =
-      element person {
-         db.person.attlist,
-         db.personname,
-         (db.address|db.affiliation|db.email|db.uri|db.personblurb)*
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "org" ]
-   db:refpurpose [ "An organization and associated metadata" ]
-]
-div {
-
-   db.org.role.attribute = attribute role { text }
-
-   db.org.attlist =
-      db.org.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.org =
-      element org {
-         db.org.attlist,
-         db.orgname,
-         (db.address|db.affiliation|db.email|db.uri|db.orgdiv)*
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "confgroup" ]
-   db:refpurpose [ "A wrapper for document meta-information about a conference" ]
-]
-div {
-
-   db.confgroup.role.attribute = attribute role { text }
-
-   db.confgroup.attlist =
-      db.confgroup.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.confgroup =
-      element confgroup {
-         db.confgroup.attlist,
-         (db.confdates
-          | db.conftitle
-          | db.confnum
-          | db.confsponsor
-          | db.address)*
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "confdates" ]
-   db:refpurpose [ "The dates of a conference for which a document was written" ]
-]
-div {
-
-   db.confdates.role.attribute = attribute role { text }
-
-   db.confdates.attlist =
-      db.confdates.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.confdates =
-      element confdates {
-         db.confdates.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "conftitle" ]
-   db:refpurpose [ "The title of a conference for which a document was written" ]
-]
-div {
-
-   db.conftitle.role.attribute = attribute role { text }
-
-   db.conftitle.attlist =
-      db.conftitle.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.conftitle =
-      element conftitle {
-         db.conftitle.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "confnum" ]
-   db:refpurpose [ "An identifier, frequently numerical, associated with a conference for which a document was written" ]
-]
-div {
-
-   db.confnum.role.attribute = attribute role { text }
-
-   db.confnum.attlist =
-      db.confnum.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.confnum =
-      element confnum {
-         db.confnum.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "confsponsor" ]
-   db:refpurpose [ "The sponsor of a conference for which a document was written" ]
-]
-div {
-
-   db.confsponsor.role.attribute = attribute role { text }
-
-   db.confsponsor.attlist =
-      db.confsponsor.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.confsponsor =
-      element confsponsor {
-         db.confsponsor.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "contractnum" ]
-   db:refpurpose [ "The contract number of a document" ]
-]
-div {
-
-   db.contractnum.role.attribute = attribute role { text }
-
-   db.contractnum.attlist =
-      db.contractnum.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.contractnum =
-      element contractnum {
-         db.contractnum.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "contractsponsor" ]
-   db:refpurpose [ "The sponsor of a contract" ]
-]
-div {
-
-   db.contractsponsor.role.attribute = attribute role { text }
-
-   db.contractsponsor.attlist =
-      db.contractsponsor.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.contractsponsor =
-      element contractsponsor {
-         db.contractsponsor.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "copyright" ]
-   db:refpurpose [ "Copyright information about a document" ]
-]
-div {
-
-   db.copyright.role.attribute = attribute role { text }
-
-   db.copyright.attlist =
-      db.copyright.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.copyright =
-      element copyright {
-         db.copyright.attlist,
-         db.year+,
-         db.holder*
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "year" ]
-   db:refpurpose [ "The year of publication of a document" ]
-]
-div {
-
-   db.year.role.attribute = attribute role { text }
-
-   db.year.attlist =
-      db.year.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.year =
-      element year {
-         db.year.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "holder" ]
-   db:refpurpose [ "The name of the individual or organization that holds a copyright" ]
-]
-div {
-
-   db.holder.role.attribute = attribute role { text }
-
-   db.holder.attlist =
-      db.holder.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.holder =
-      element holder {
-         db.holder.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-db.cover.contentmodel =
-   (db.para.blocks
-    | db.extension.blocks
-    | db.list.blocks
-    | db.informal.blocks
-    | db.publishing.blocks
-    | db.graphic.blocks
-    | db.technical.blocks
-    | db.verbatim.blocks
-    | db.bridgehead
-    | db.synopsis.blocks
-    | db.remark
-    | db.revhistory)+
-
-[
-   db:refname [ "cover" ]
-   db:refpurpose [ "Additional content for the cover of a publication" ]
-]
-div {
-
-   db.cover.role.attribute = attribute role { text }
-
-   db.cover.attlist =
-      db.cover.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.cover =
-      element cover {
-         db.cover.attlist,
-         db.cover.contentmodel
-      }
-}
-
-# ======================================================================
-
-db.date.contentmodel = (xsd:date|xsd:dateTime|xsd:gYearMonth|xsd:gYear|text)
-
-# ======================================================================
-
-[
-   db:refname [ "date" ]
-   db:refpurpose [ "The date of publication or revision of a document" ]
-]
-div {
-
-   db.date.role.attribute = attribute role { text }
-
-   db.date.attlist =
-      db.date.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.date =
-      element date {
-         db.date.attlist,
-         db.date.contentmodel
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "edition" ]
-   db:refpurpose [ "The name or number of an edition of a document" ]
-]
-div {
-
-   db.edition.role.attribute = attribute role { text }
-
-   db.edition.attlist =
-      db.edition.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.edition =
-      element edition {
-         db.edition.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "editor" ]
-   db:refpurpose [ "The name of the editor of a document" ]
-]
-div {
-
-   db.editor.role.attribute = attribute role { text }
-
-   db.editor.attlist =
-      db.editor.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.editor =
-      element editor {
-         db.editor.attlist,
-         db.credit.contentmodel
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "biblioid" ]
-   db:refpurpose [ "An identifier for a document" ]
-]
-div {
-
-   db.biblioid.role.attribute = attribute role { text }
-
-   db.biblioid.attlist =
-      db.biblioid.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-    & db.biblio.class.attribute
-
-   db.biblioid =
-      element biblioid {
-         db.biblioid.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "citebiblioid" ]
-   db:refpurpose [ "A citation of a bibliographic identifier" ]
-]
-div {
-
-   db.citebiblioid.role.attribute = attribute role { text }
-
-   db.citebiblioid.attlist =
-      db.citebiblioid.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-    & db.biblio.class.attribute
-
-   db.citebiblioid =
-      element citebiblioid {
-         db.citebiblioid.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "bibliosource" ]
-   db:refpurpose [ "The source of a document" ]
-]
-div {
-
-   db.bibliosource.role.attribute = attribute role { text }
-
-   db.bibliosource.attlist =
-      db.bibliosource.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-    & db.biblio.class.attribute
-
-   db.bibliosource =
-      element bibliosource {
-         db.bibliosource.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "bibliorelation" ]
-   db:refpurpose [ "The relationship of a document to another" ]
-]
-div {
-
-   ctrl:other-attribute [ name="db.bibliorelation.type.attrib"
-                          enum-name="db.bibliorelation.type-enum.attribute"
-                          other-name="db.bibliorelation.type-other.attributes" ]
-
-   db.bibliorelation.type.enumeration =
-      ## The described resource pre-existed the referenced resource, which is essentially the same intellectual content presented in another format
-      "hasformat"
-    | ## The described resource includes the referenced resource either physically or logically
-      "haspart"
-    | ## The described resource has a version, edition, or adaptation, namely, the referenced resource
-      "hasversion"
-    | ## The described resource is the same intellectual content of the referenced resource, but presented in another format
-      "isformatof"
-    | ## The described resource is a physical or logical part of the referenced resource
-      "ispartof"
-    | ## The described resource is referenced, cited, or otherwise pointed to by the referenced resource
-      "isreferencedby"
-    | ## The described resource is supplanted, displaced, or superceded by the referenced resource
-      "isreplacedby"
-    | ## The described resource is required by the referenced resource, either physically or logically
-      "isrequiredby"
-    | ## The described resource is a version, edition, or adaptation of the referenced resource; changes in version imply substantive changes in content rather than differences in format
-      "isversionof"
-    | ## The described resource references, cites, or otherwise points to the referenced resource
-      "references"
-    | ## The described resource supplants, displaces, or supersedes the referenced resource
-      "replaces"
-    | ## The described resource requires the referenced resource to support its function, delivery, or coherence of content
-      "requires"
-
-   db.bibliorelation.type-enum.attribute =
-      [
-         db:refpurpose [ "Identifies the type of relationship" ]
-      ]
-      attribute type { db.bibliorelation.type.enumeration }?
-
-   db.bibliorelation.type-other.attributes =
-      [
-         db:refpurpose [ "Identifies the type of relationship" ]
-      ]
-      attribute type {
-         ## The described resource has a non-standard relationship with the referenced resource
-         "othertype"
-      }?,
-      [
-         db:refpurpose [ "A keyword that identififes the type of the non-standard relationship" ]
-      ]
-      attribute othertype { xsd:NMTOKEN }
-
-   db.bibliorelation.type.attribute =
-      (db.bibliorelation.type-enum.attribute | db.bibliorelation.type-other.attributes)
-
-   db.bibliorelation.role.attribute = attribute role { text }
-
-   db.bibliorelation.attlist =
-      db.bibliorelation.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-    & db.biblio.class.attribute
-    & db.bibliorelation.type.attribute
-
-   db.bibliorelation =
-      element bibliorelation {
-         db.bibliorelation.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "bibliocoverage" ]
-   db:refpurpose [ "The spatial or temporal coverage of a document" ]
-]
-div {
-
-   ctrl:other-attribute [ name="db.bibliocoverage.spatial.attrib"
-                          enum-name="db.bibliocoverage.spatial-enum.attribute"
-                          other-name="db.bibliocoverage.spatial-other.attributes" ]
-
-   db.bibliocoverage.spacial.enumeration =
-      ## The DCMI Point identifies a point in space using its geographic coordinates
-      "dcmipoint"
-    | ## ISO 3166 Codes for the representation of names of countries
-      "iso3166"
-    | ## The DCMI Box identifies a region of space using its geographic limits
-      "dcmibox"
-    | ## The Getty Thesaurus of Geographic Names
-      "tgn"
-
-   db.bibliocoverage.spatial-enum.attribute =
-      [
-         db:refpurpose [ "Specifies the type of spatial coverage" ]
-      ]
-      attribute spatial { db.bibliocoverage.spacial.enumeration }?
-
-   db.bibliocoverage.spatial-other.attributes =
-      [
-         db:refpurpose [ "Specifies the type of spatial coverage" ]
-      ]
-      attribute spatial {
-         ## Identifies a non-standard type of coverage
-         "otherspatial"
-      }?,
-      [
-         db:refpurpose [ "A keyword that identifies the type of non-standard coverage" ]
-      ]
-      attribute otherspatial { xsd:NMTOKEN }
-
-   db.bibliocoverage.spatial.attribute =
-      (db.bibliocoverage.spatial-enum.attribute
-       | db.bibliocoverage.spatial-other.attributes)
-
-   ctrl:other-attribute [ name="db.bibliocoverage.temporal.attrib"
-                          enum-name="db.bibliocoverage.temporal-enum.attribute"
-                          other-name="db.bibliocoverage.temporal-other.attributes" ]
-
-   db.bibliocoverage.temporal.enumeration =
-      ## A specification of the limits of a time interval
-      "dcmiperiod"
-    | ## W3C Encoding rules for dates and times—a profile based on ISO 8601
-      "w3c-dtf"
-
-   db.bibliocoverage.temporal-enum.attribute =
-      [
-         db:refpurpose [ "Specifies the type of temporal coverage" ]
-      ]
-      attribute temporal { db.bibliocoverage.temporal.enumeration }?
-
-   db.bibliocoverage.temporal-other.attributes =
-      [
-         db:refpurpose [ "Specifies the type of temporal coverage" ]
-      ]
-      attribute temporal {
-         ## Specifies a non-standard type of coverage
-         "othertemporal"
-      }?,
-      [
-         db:refpurpose [ "A keyword that identifies the type of non-standard coverage" ]
-      ]
-      attribute othertemporal { xsd:NMTOKEN }
-
-   db.bibliocoverage.temporal.attribute =
-      (db.bibliocoverage.temporal-enum.attribute
-       | db.bibliocoverage.temporal-other.attributes)
-
-   db.bibliocoverage.coverage.attrib =
-      db.bibliocoverage.spatial.attribute & db.bibliocoverage.temporal.attribute
-
-   db.bibliocoverage.role.attribute = attribute role { text }
-
-   db.bibliocoverage.attlist =
-      db.bibliocoverage.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-    & db.bibliocoverage.coverage.attrib
-
-   db.bibliocoverage =
-      element bibliocoverage {
-         db.bibliocoverage.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "legalnotice" ]
-   db:refpurpose [ "A statement of legal obligations or requirements" ]
-]
-div {
-
-   db.legalnotice.role.attribute = attribute role { text }
-
-   db.legalnotice.attlist =
-      db.legalnotice.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.legalnotice.info = db._info.title.only
-
-   db.legalnotice =
-      element legalnotice {
-         db.legalnotice.attlist,
-         db.legalnotice.info,
-         db.all.blocks+
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "othercredit" ]
-   db:refpurpose [ "A person or entity, other than an author or editor, credited in a document" ]
-]
-div {
-
-   ctrl:other-attribute [ name="db.othercredit.class.attribute"
-                          enum-name="db.othercredit.class-enum.attribute"
-                          other-name="db.othercredit.class-other.attributes" ]
-
-   db.othercredit.class.enumeration =
-      ## A copy editor
-      "copyeditor"
-    | ## A graphic designer
-      "graphicdesigner"
-    | ## Some other contributor
-      "other"
-    | ## A production editor
-      "productioneditor"
-    | ## A technical editor
-      "technicaleditor"
-    | ## A translator
-      "translator"
-
-   db.othercredit.class-enum.attribute =
-      [
-         db:refpurpose [ "Identifies the nature of the contributor" ]
-      ]
-      attribute class { db.othercredit.class.enumeration } ?
-
-   db.othercredit.class-other.attribute =
-      [
-         db:refpurpose [ "Identifies the nature of the non-standard contribution" ]
-      ]
-      attribute otherclass { xsd:NMTOKEN }
-
-   db.othercredit.class-other.attributes =
-      [
-         db:refpurpose [ "Identifies the nature of the contributor" ]
-      ]
-      attribute class {
-         ## Identifies a non-standard contribution
-         "other"
-      }
-    & db.othercredit.class-other.attribute
-
-   db.othercredit.class.attribute =
-      (db.othercredit.class-enum.attribute
-       | db.othercredit.class-other.attributes)
-
-   db.othercredit.role.attribute = attribute role { text }
-
-   db.othercredit.attlist =
-      db.othercredit.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-    & db.othercredit.class.attribute
-
-   db.othercredit =
-      element othercredit {
-         db.othercredit.attlist,
-         db.credit.contentmodel
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "pagenums" ]
-   db:refpurpose [ "The numbers of the pages in a book, for use in a bibliographic entry" ]
-]
-div {
-
-   db.pagenums.role.attribute = attribute role { text }
-
-   db.pagenums.attlist =
-      db.pagenums.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.pagenums =
-      element pagenums {
-         db.pagenums.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "contrib" ]
-   db:refpurpose [ "A summary of the contributions made to a document by a credited source" ]
-]
-div {
-
-   db.contrib.role.attribute = attribute role { text }
-
-   db.contrib.attlist =
-      db.contrib.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.contrib =
-      element contrib {
-         db.contrib.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "honorific" ]
-   db:refpurpose [ "The title of a person" ]
-]
-div {
-
-   db.honorific.role.attribute = attribute role { text }
-
-   db.honorific.attlist =
-      db.honorific.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.honorific =
-      element honorific {
-         db.honorific.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "firstname" ]
-   db:refpurpose [ "The first name of a person" ]
-]
-div {
-
-   db.firstname.role.attribute = attribute role { text }
-
-   db.firstname.attlist =
-      db.firstname.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.firstname =
-      element firstname {
-         db.firstname.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "surname" ]
-   db:refpurpose [ "A family name; in western cultures the last name" ]
-]
-div {
-
-   db.surname.role.attribute = attribute role { text }
-
-   db.surname.attlist =
-      db.surname.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.surname =
-      element surname {
-         db.surname.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "lineage" ]
-   db:refpurpose [ "The portion of a person's name indicating a relationship to ancestors" ]
-]
-div {
-
-   db.lineage.role.attribute = attribute role { text }
-
-   db.lineage.attlist =
-      db.lineage.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.lineage =
-      element lineage {
-         db.lineage.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "othername" ]
-   db:refpurpose [ "A component of a persons name that is not a first name, surname, or lineage" ]
-]
-div {
-
-   db.othername.role.attribute = attribute role { text }
-
-   db.othername.attlist =
-      db.othername.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.othername =
-      element othername {
-         db.othername.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "printhistory" ]
-   db:refpurpose [ "The printing history of a document" ]
-]
-div {
-
-   db.printhistory.role.attribute = attribute role { text }
-
-   db.printhistory.attlist =
-      db.printhistory.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.printhistory =
-      element printhistory {
-         db.printhistory.attlist,
-         db.para.blocks+
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "productname" ]
-   db:refpurpose [ "The formal name of a product" ]
-]
-div {
-
-   db.productname.role.attribute = attribute role { text }
-
-   db.productname.class.enumeration =
-      ## A name with a copyright
-      "copyright"
-    | ## A name with a registered copyright
-      "registered"
-    | ## A name of a service
-      "service"
-    | ## A name which is trademarked
-      "trade"
-
-   db.productname.class.attribute =
-      [
-         db:refpurpose [ "Specifies the class of product name" ]
-      ]
-      attribute class { db.productname.class.enumeration }
-
-   db.productname.attlist =
-      db.productname.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-    & db.productname.class.attribute?
-
-   db.productname =
-      element productname {
-         db.productname.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "productnumber" ]
-   db:refpurpose [ "A number assigned to a product" ]
-]
-div {
-
-   db.productnumber.role.attribute = attribute role { text }
-
-   db.productnumber.attlist =
-      db.productnumber.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.productnumber =
-      element productnumber {
-         db.productnumber.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "pubdate" ]
-   db:refpurpose [ "The date of publication of a document" ]
-]
-div {
-
-   db.pubdate.role.attribute = attribute role { text }
-
-   db.pubdate.attlist =
-      db.pubdate.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.pubdate =
-      element pubdate {
-         db.pubdate.attlist,
-         db.date.contentmodel
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "publisher" ]
-   db:refpurpose [ "The publisher of a document" ]
-]
-div {
-
-   db.publisher.role.attribute = attribute role { text }
-
-   db.publisher.attlist =
-      db.publisher.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.publisher =
-      element publisher {
-         db.publisher.attlist,
-         db.publishername,
-         db.address*
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "publishername" ]
-   db:refpurpose [ "The name of the publisher of a document" ]
-]
-div {
-
-   db.publishername.role.attribute = attribute role { text }
-
-   db.publishername.attlist =
-      db.publishername.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.publishername =
-      element publishername {
-         db.publishername.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "releaseinfo" ]
-   db:refpurpose [ "Information about a particular release of a document" ]
-]
-div {
-
-   db.releaseinfo.role.attribute = attribute role { text }
-
-   db.releaseinfo.attlist =
-      db.releaseinfo.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.releaseinfo =
-      element releaseinfo {
-         db.releaseinfo.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "revhistory" ]
-   db:refpurpose [ "A history of the revisions to a document" ]
-]
-div {
-
-   db.revhistory.role.attribute = attribute role { text }
-
-   db.revhistory.attlist =
-      db.revhistory.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.revhistory.info = db._info.title.only
-
-   db.revhistory =
-      element revhistory {
-         db.revhistory.attlist,
-         db.revhistory.info,
-         db.revision+
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "revision" ]
-   db:refpurpose [ "An entry describing a single revision in the history of the revisions to a document" ]
-]
-div {
-
-   db.revision.role.attribute = attribute role { text }
-
-   db.revision.attlist =
-      db.revision.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.revision =
-      element revision {
-         db.revision.attlist,
-         db.revnumber?,
-         db.date,
-         (db.authorinitials | db.author)*,
-         (db.revremark | db.revdescription)?
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "revnumber" ]
-   db:refpurpose [ "A document revision number" ]
-]
-div {
-
-   db.revnumber.role.attribute = attribute role { text }
-
-   db.revnumber.attlist =
-      db.revnumber.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.revnumber =
-      element revnumber {
-         db.revnumber.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "revremark" ]
-   db:refpurpose [ "A description of a revision to a document" ]
-]
-div {
-
-   db.revremark.role.attribute = attribute role { text }
-
-   db.revremark.attlist =
-      db.revremark.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.revremark =
-      element revremark {
-         db.revremark.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "revdescription" ]
-   db:refpurpose [ "A extended description of a revision to a document" ]
-]
-div {
-
-   db.revdescription.role.attribute = attribute role { text }
-
-   db.revdescription.attlist =
-      db.revdescription.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.revdescription =
-      element revdescription {
-         db.revdescription.attlist,
-         db.all.blocks*
+   db.copyright =
+      element copyright {
+         db.copyright.attlist,
+         db.year+,
+         db.holder*
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "seriesvolnums" ]
-   db:refpurpose [ "Numbers of the volumes in a series of books" ]
+   db:refname [ "year" ]
+   db:refpurpose [ "The year of publication of a document" ]
 ]
 div {
 
-   db.seriesvolnums.role.attribute = attribute role { text }
+   db.year.role.attribute = attribute role { text }
 
-   db.seriesvolnums.attlist =
-      db.seriesvolnums.role.attribute?
+   db.year.attlist =
+      db.year.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
 
-   db.seriesvolnums =
-      element seriesvolnums {
-         db.seriesvolnums.attlist,
+   db.year =
+      element year {
+         db.year.attlist,
          db._text
       }
 }
@@ -5353,122 +3342,104 @@ div {
 # ======================================================================
 
 [
-   db:refname [ "volumenum" ]
-   db:refpurpose [ "The volume number of a document in a set (as of books in a set or articles in a journal)" ]
+   db:refname [ "holder" ]
+   db:refpurpose [ "The name of the individual or organization that holds a copyright" ]
 ]
 div {
 
-   db.volumenum.role.attribute = attribute role { text }
+   db.holder.role.attribute = attribute role { text }
 
-   db.volumenum.attlist =
-      db.volumenum.role.attribute?
+   db.holder.attlist =
+      db.holder.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
 
-   db.volumenum =
-      element volumenum {
-         db.volumenum.attlist,
+   db.holder =
+      element holder {
+         db.holder.attlist,
          db._text
       }
 }
 
 # ======================================================================
 
+db.cover.contentmodel =
+   db.para.blocks
+ | db.extension.blocks
+ | db.list.blocks
+ | db.informal.blocks
+ | db.publishing.blocks
+ | db.graphic.blocks
+ | db.technical.blocks
+ | db.verbatim.blocks
+ | db.bridgehead
+ | db.remark
+ | db.revhistory
+
 [
-   db:refname [ "issuenum" ]
-   db:refpurpose [ "The number of an issue of a journal" ]
+   db:refname [ "cover" ]
+   db:refpurpose [ "Additional content for the cover of a publication" ]
 ]
 div {
 
-   db.issuenum.role.attribute = attribute role { text }
+   db.cover.role.attribute = attribute role { text }
 
-   db.issuenum.attlist =
-      db.issuenum.role.attribute?
+   db.cover.attlist =
+      db.cover.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
 
-   db.issuenum =
-      element issuenum {
-         db.issuenum.attlist,
-         db._text
+   db.cover =
+      element cover {
+         db.cover.attlist,
+         (db.cover.contentmodel)+
       }
 }
 
 # ======================================================================
 
-[
-   db:refname [ "accel" ]
-   db:refpurpose [ "A graphical user interface (GUI) keyboard shortcut" ]
-]
-div {
-
-   db.accel.role.attribute = attribute role { text }
-
-   db.accel.attlist =
-      db.accel.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.accel  =
-      element accel {
-         db.accel.attlist,
-         db._text
-      }
-}
+db.date.contentmodel = (xsd:date|xsd:dateTime|xsd:gYearMonth|xsd:gYear|text)
 
 # ======================================================================
 
 [
-   db:refname [ "application" ]
-   db:refpurpose [ "The name of a software program" ]
+   db:refname [ "date" ]
+   db:refpurpose [ "The date of publication or revision of a document" ]
 ]
 div {
 
-   db.application.class.enumeration =
-      ## A hardware application
-      "hardware"
-    | ## A software application
-      "software"
-
-   db.application.class.attribute =
-      [
-         db:refpurpose [ "Identifies the class of application" ]
-      ]
-      attribute class { db.application.class.enumeration }
-
-   db.application.role.attribute = attribute role { text }
+   db.date.role.attribute = attribute role { text }
 
-   db.application.attlist =
-      db.application.role.attribute?
+   db.date.attlist =
+      db.date.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
-    & db.application.class.attribute?
 
-   db.application =
-      element application {
-         db.application.attlist,
-         db._text
+   db.date =
+      element date {
+         db.date.attlist,
+         db.date.contentmodel
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "package" ]
-   db:refpurpose [ "A software or application package" ]
+   db:refname [ "edition" ]
+   db:refpurpose [ "The name or number of an edition of a document" ]
 ]
 div {
 
-   db.package.role.attribute = attribute role { text }
+   db.edition.role.attribute = attribute role { text }
 
-   db.package.attlist =
-      db.package.role.attribute?
+   db.edition.attlist =
+      db.edition.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
 
-   db.package =
-      element package {
-         db.package.attlist,
+   db.edition =
+      element edition {
+         db.edition.attlist,
          db._text
       }
 }
@@ -5476,141 +3447,90 @@ div {
 # ======================================================================
 
 [
-   db:refname [ "classname" ]
-   db:refpurpose [ "The name of a class, in the object-oriented programming sense" ]
+   db:refname [ "editor" ]
+   db:refpurpose [ "The name of the editor of a document" ]
 ]
 div {
 
-   db.classname.role.attribute = attribute role { text }
+   db.editor.role.attribute = attribute role { text }
 
-   db.classname.attlist =
-      db.classname.role.attribute?
+   db.editor.attlist =
+      db.editor.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
 
-   db.classname =
-      element classname {
-         db.classname.attlist,
-         db._text
+   db.editor =
+      element editor {
+         db.editor.attlist,
+         db.credit.contentmodel
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "command" ]
-   db:refpurpose [ "The name of an executable program or other software command" ]
+   db:refname [ "biblioid" ]
+   db:refpurpose [ "An identifier for a document" ]
 ]
 div {
 
-   db.command.role.attribute = attribute role { text }
+   db.biblioid.role.attribute = attribute role { text }
 
-   db.command.attlist =
-      db.command.role.attribute?
+   db.biblioid.attlist =
+      db.biblioid.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
+    & db.biblio.class.attribute
 
-   db.command =
-      element command {
-         db.command.attlist,
+   db.biblioid =
+      element biblioid {
+         db.biblioid.attlist,
          db._text
       }
 }
 
 # ======================================================================
 
-db.computeroutput.inlines =
-   text
- | db.ubiq.inlines
- | db.os.inlines
- | db.technical.inlines
- | db.markup.inlines
-
-# ======================================================================
-
 [
-   db:refname [ "computeroutput" ]
-   db:refpurpose [ "Data, generally text, displayed or presented by a computer" ]
+   db:refname [ "citebiblioid" ]
+   db:refpurpose [ "A citation of a bibliographic identifier" ]
 ]
 div {
 
-   db.computeroutput.role.attribute = attribute role { text }
+   db.citebiblioid.role.attribute = attribute role { text }
 
-   db.computeroutput.attlist =
-      db.computeroutput.role.attribute?
+   db.citebiblioid.attlist =
+      db.citebiblioid.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
+    & db.biblio.class.attribute
 
-   db.computeroutput =
-      element computeroutput {
-         db.computeroutput.attlist,
-         db.computeroutput.inlines*
+   db.citebiblioid =
+      element citebiblioid {
+         db.citebiblioid.attlist,
+         db._text
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "database" ]
-   db:refpurpose [ "The name of a database, or part of a database" ]
+   db:refname [ "bibliosource" ]
+   db:refpurpose [ "The source of a document" ]
 ]
 div {
 
-   db.database.class.enumeration =
-      ## An alternate or secondary key
-      "altkey"
-    | ## A constraint
-      "constraint"
-    | ## A data type
-      "datatype"
-    | ## A field
-      "field"
-    | ## A foreign key
-      "foreignkey"
-    | ## A group
-      "group"
-    | ## An index
-      "index"
-    | ## The first or primary key
-      "key1"
-    | ## An alternate or secondary key
-      "key2"
-    | ## A name
-      "name"
-    | ## The primary key
-      "primarykey"
-    | ## A (stored) procedure
-      "procedure"
-    | ## A record
-      "record"
-    | ## A rule
-      "rule"
-    | ## The secondary key
-      "secondarykey"
-    | ## A table
-      "table"
-    | ## A user
-      "user"
-    | ## A view
-      "view"
-
-   db.database.class.attribute =
-      [
-         db:refpurpose [ "Identifies the class of database artifact" ]
-      ]
-      attribute class { db.database.class.enumeration }
-
-   db.database.role.attribute = attribute role { text }
+   db.bibliosource.role.attribute = attribute role { text }
 
-   db.database.attlist =
-      db.database.role.attribute?
+   db.bibliosource.attlist =
+      db.bibliosource.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
-    & db.database.class.attribute?
+    & db.biblio.class.attribute
 
-   db.database =
-      element database {
-         db.database.attlist,
+   db.bibliosource =
+      element bibliosource {
+         db.bibliosource.attlist,
          db._text
       }
 }
@@ -5618,43 +3538,75 @@ div {
 # ======================================================================
 
 [
-   db:refname [ "email" ]
-   db:refpurpose [ "An email address" ]
+   db:refname [ "bibliorelation" ]
+   db:refpurpose [ "The relationship of a document to another" ]
 ]
 div {
 
-   db.email.role.attribute = attribute role { text }
+   ctrl:other-attribute [ name="db.bibliorelation.type.attrib"
+                          enum-name="db.bibliorelation.type-enum.attribute"
+                          other-name="db.bibliorelation.type-other.attributes" ]
 
-   db.email.attlist =
-      db.email.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
+   db.bibliorelation.type.enumeration =
+      ## The described resource pre-existed the referenced resource, which is essentially the same intellectual content presented in another format
+      "hasformat"
+    | ## The described resource includes the referenced resource either physically or logically
+      "haspart"
+    | ## The described resource has a version, edition, or adaptation, namely, the referenced resource
+      "hasversion"
+    | ## The described resource is the same intellectual content of the referenced resource, but presented in another format
+      "isformatof"
+    | ## The described resource is a physical or logical part of the referenced resource
+      "ispartof"
+    | ## The described resource is referenced, cited, or otherwise pointed to by the referenced resource
+      "isreferencedby"
+    | ## The described resource is supplanted, displaced, or superceded by the referenced resource
+      "isreplacedby"
+    | ## The described resource is required by the referenced resource, either physically or logically
+      "isrequiredby"
+    | ## The described resource is a version, edition, or adaptation of the referenced resource; changes in version imply substantive changes in content rather than differences in format
+      "isversionof"
+    | ## The described resource references, cites, or otherwise points to the referenced resource
+      "references"
+    | ## The described resource supplants, displaces, or supersedes the referenced resource
+      "replaces"
+    | ## The described resource requires the referenced resource to support its function, delivery, or coherence of content
+      "requires"
 
-   db.email =
-      element email {
-         db.email.attlist,
-         db._text
-      }
-}
+   db.bibliorelation.type-enum.attribute =
+      [
+         db:refpurpose [ "Identifies the type of relationship" ]
+      ]
+      attribute type { db.bibliorelation.type.enumeration }?
 
-# ======================================================================
+   db.bibliorelation.type-other.attributes =
+      [
+         db:refpurpose [ "Identifies the type of relationship" ]
+      ]
+      attribute type {
+         ## The described resource has a non-standard relationship with the referenced resource
+         "othertype"
+      }?,
+      [
+         db:refpurpose [ "A keyword that identififes the type of the non-standard relationship" ]
+      ]
+      attribute othertype { xsd:NMTOKEN }
 
-[
-   db:refname [ "envar" ]
-   db:refpurpose [ "A software environment variable" ]
-]
-div {
+   db.bibliorelation.type.attribute =
+      (db.bibliorelation.type-enum.attribute | db.bibliorelation.type-other.attributes)
 
-   db.envar.role.attribute = attribute role { text }
+   db.bibliorelation.role.attribute = attribute role { text }
 
-   db.envar.attlist =
-      db.envar.role.attribute?
+   db.bibliorelation.attlist =
+      db.bibliorelation.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
+    & db.biblio.class.attribute
+    & db.bibliorelation.type.attribute
 
-   db.envar =
-      element envar {
-         db.envar.attlist,
+   db.bibliorelation =
+      element bibliorelation {
+         db.bibliorelation.attlist,
          db._text
       }
 }
@@ -5662,65 +3614,95 @@ div {
 # ======================================================================
 
 [
-   db:refname [ "errorcode" ]
-   db:refpurpose [ "An error code" ]
+   db:refname [ "bibliocoverage" ]
+   db:refpurpose [ "The spatial or temporal coverage of a document" ]
 ]
 div {
 
-   db.errorcode.role.attribute = attribute role { text }
+   ctrl:other-attribute [ name="db.bibliocoverage.spatial.attrib"
+                          enum-name="db.bibliocoverage.spatial-enum.attribute"
+                          other-name="db.bibliocoverage.spatial-other.attributes" ]
 
-   db.errorcode.attlist =
-      db.errorcode.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
+   db.bibliocoverage.spacial.enumeration =
+      ## The DCMI Point identifies a point in space using its geographic coordinates
+      "dcmipoint"
+    | ## ISO 3166 Codes for the representation of names of countries
+      "iso3166"
+    | ## The DCMI Box identifies a region of space using its geographic limits
+      "dcmibox"
+    | ## The Getty Thesaurus of Geographic Names
+      "tgn"
 
-   db.errorcode =
-      element errorcode {
-         db.errorcode.attlist,
-         db._text
-      }
-}
+   db.bibliocoverage.spatial-enum.attribute =
+      [
+         db:refpurpose [ "Specifies the type of spatial coverage" ]
+      ]
+      attribute spatial { db.bibliocoverage.spacial.enumeration }?
+
+   db.bibliocoverage.spatial-other.attributes =
+      [
+         db:refpurpose [ "Specifies the type of spatial coverage" ]
+      ]
+      attribute spatial {
+         ## Identifies a non-standard type of coverage
+         "otherspatial"
+      }?,
+      [
+         db:refpurpose [ "A keyword that identifies the type of non-standard coverage" ]
+      ]
+      attribute otherspatial { xsd:NMTOKEN }
 
-# ======================================================================
+   db.bibliocoverage.spatial.attribute =
+      (db.bibliocoverage.spatial-enum.attribute
+       | db.bibliocoverage.spatial-other.attributes)
 
-[
-   db:refname [ "errorname" ]
-   db:refpurpose [ "An error name" ]
-]
-div {
+   ctrl:other-attribute [ name="db.bibliocoverage.temporal.attrib"
+                          enum-name="db.bibliocoverage.temporal-enum.attribute"
+                          other-name="db.bibliocoverage.temporal-other.attributes" ]
 
-   db.errorname.role.attribute = attribute role { text }
+   db.bibliocoverage.temporal.enumeration =
+      ## A specification of the limits of a time interval
+      "dcmiperiod"
+    | ## W3C Encoding rules for dates and times—a profile based on ISO 8601
+      "w3c-dtf"
 
-   db.errorname.attlist =
-      db.errorname.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
+   db.bibliocoverage.temporal-enum.attribute =
+      [
+         db:refpurpose [ "Specifies the type of temporal coverage" ]
+      ]
+      attribute temporal { db.bibliocoverage.temporal.enumeration }?
 
-   db.errorname =
-      element errorname {
-         db.errorname.attlist,
-         db._text
-      }
-}
+   db.bibliocoverage.temporal-other.attributes =
+      [
+         db:refpurpose [ "Specifies the type of temporal coverage" ]
+      ]
+      attribute temporal {
+         ## Specifies a non-standard type of coverage
+         "othertemporal"
+      }?,
+      [
+         db:refpurpose [ "A keyword that identifies the type of non-standard coverage" ]
+      ]
+      attribute othertemporal { xsd:NMTOKEN }
 
-# ======================================================================
+   db.bibliocoverage.temporal.attribute =
+      (db.bibliocoverage.temporal-enum.attribute
+       | db.bibliocoverage.temporal-other.attributes)
 
-[
-   db:refname [ "errortext" ]
-   db:refpurpose [ "An error message." ]
-]
-div {
+   db.bibliocoverage.coverage.attrib =
+      db.bibliocoverage.spatial.attribute & db.bibliocoverage.temporal.attribute
 
-   db.errortext.role.attribute = attribute role { text }
+   db.bibliocoverage.role.attribute = attribute role { text }
 
-   db.errortext.attlist =
-      db.errortext.role.attribute?
+   db.bibliocoverage.attlist =
+      db.bibliocoverage.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
+    & db.bibliocoverage.coverage.attrib
 
-   db.errortext =
-      element errortext {
-         db.errortext.attlist,
+   db.bibliocoverage =
+      element bibliocoverage {
+         db.bibliocoverage.attlist,
          db._text
       }
 }
@@ -5728,249 +3710,245 @@ div {
 # ======================================================================
 
 [
-   db:refname [ "errortype" ]
-   db:refpurpose [ "The classification of an error message" ]
+   db:refname [ "legalnotice" ]
+   db:refpurpose [ "A statement of legal obligations or requirements" ]
 ]
 div {
 
-   db.errortype.role.attribute = attribute role { text }
+   db.legalnotice.role.attribute = attribute role { text }
 
-   db.errortype.attlist =
-      db.errortype.role.attribute?
+   db.legalnotice.attlist =
+      db.legalnotice.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
 
-   db.errortype =
-      element errortype {
-         db.errortype.attlist,
-         db._text
+   db.legalnotice.info = db._info.title.only
+
+   db.legalnotice =
+      element legalnotice {
+         db.legalnotice.attlist,
+         db.legalnotice.info,
+         db.all.blocks+
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "filename" ]
-   db:refpurpose [ "The name of a file" ]
+   db:refname [ "othercredit" ]
+   db:refpurpose [ "A person or entity, other than an author or editor, credited in a document" ]
 ]
 div {
 
-   db.filename.class.enumeration =
-      ## A device
-      "devicefile"
-    | ## A directory
-      "directory"
-    | ## A filename extension
-      "extension"
-    | ## A header file (as for a programming language)
-      "headerfile"
-    | ## A library file
-      "libraryfile"
-    | ## A partition (as of a hard disk)
-      "partition"
-    | ## A symbolic link
-      "symlink"
+   ctrl:other-attribute [ name="db.othercredit.class.attribute"
+                          enum-name="db.othercredit.class-enum.attribute"
+                          other-name="db.othercredit.class-other.attributes" ]
+
+   db.othercredit.class.enumeration =
+      ## A copy editor
+      "copyeditor"
+    | ## A graphic designer
+      "graphicdesigner"
+    | ## Some other contributor
+      "other"
+    | ## A production editor
+      "productioneditor"
+    | ## A technical editor
+      "technicaleditor"
+    | ## A translator
+      "translator"
 
-   db.filename.class.attribute =
+   db.othercredit.class-enum.attribute =
       [
-         db:refpurpose [ "Identifies the class of filename" ]
+         db:refpurpose [ "Identifies the nature of the contributor" ]
       ]
-      attribute class { db.filename.class.enumeration }
+      attribute class { db.othercredit.class.enumeration } ?
 
-   db.filename.path.attribute =
+   db.othercredit.class-other.attribute =
       [
-         db:refpurpose [ "Specifies the path of the filename" ]
+         db:refpurpose [ "Identifies the nature of the non-standard contribution" ]
       ]
-      attribute path { text }
-
-   db.filename.role.attribute = attribute role { text }
-
-   db.filename.attlist =
-      db.filename.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-    & db.filename.path.attribute?
-    & db.filename.class.attribute?
+      attribute otherclass { xsd:NMTOKEN }
 
-   db.filename =
-      element filename {
-         db.filename.attlist,
-         db._text
+   db.othercredit.class-other.attributes =
+      [
+         db:refpurpose [ "Identifies the nature of the contributor" ]
+      ]
+      attribute class {
+         ## Identifies a non-standard contribution
+         "other"
       }
-}
-
-# ======================================================================
+    & db.othercredit.class-other.attribute
 
-[
-   db:refname [ "function" ]
-   db:refpurpose [ "The name of a function or subroutine, as in a programming language" ]
-]
-div {
+   db.othercredit.class.attribute =
+      (db.othercredit.class-enum.attribute
+       | db.othercredit.class-other.attributes)
 
-   db.function.role.attribute = attribute role { text }
+   db.othercredit.role.attribute = attribute role { text }
 
-   db.function.attlist =
-      db.function.role.attribute?
+   db.othercredit.attlist =
+      db.othercredit.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
+    & db.othercredit.class.attribute
 
-   db.function =
-      element function {
-         db.function.attlist,
-         db._text
+   db.othercredit =
+      element othercredit {
+         db.othercredit.attlist,
+         db.credit.contentmodel
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "guibutton" ]
-   db:refpurpose [ "The text on a button in a GUI" ]
+   db:refname [ "pagenums" ]
+   db:refpurpose [ "The numbers of the pages in a book, for use in a bibliographic entry" ]
 ]
 div {
 
-   db.guibutton.role.attribute = attribute role { text }
+   db.pagenums.role.attribute = attribute role { text }
 
-   db.guibutton.attlist =
-      db.guibutton.role.attribute?
+   db.pagenums.attlist =
+      db.pagenums.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
 
-   db.guibutton =
-      element guibutton {
-         db.guibutton.attlist,
-         (db._text | db.accel | db.superscript | db.subscript)*
+   db.pagenums =
+      element pagenums {
+         db.pagenums.attlist,
+         db._text
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "guiicon" ]
-   db:refpurpose [ "Graphic and/or text appearing as a icon in a GUI" ]
+   db:refname [ "contrib" ]
+   db:refpurpose [ "A summary of the contributions made to a document by a credited source" ]
 ]
 div {
 
-   db.guiicon.role.attribute = attribute role { text }
+   db.contrib.role.attribute = attribute role { text }
 
-   db.guiicon.attlist =
-      db.guiicon.role.attribute?
+   db.contrib.attlist =
+      db.contrib.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
 
-   db.guiicon =
-      element guiicon {
-         db.guiicon.attlist,
-         (db._text | db.accel | db.superscript | db.subscript)*
+   db.contrib =
+      element contrib {
+         db.contrib.attlist,
+         db._text
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "guilabel" ]
-   db:refpurpose [ "The text of a label in a GUI" ]
+   db:refname [ "honorific" ]
+   db:refpurpose [ "The title of a person" ]
 ]
 div {
 
-   db.guilabel.role.attribute = attribute role { text }
+   db.honorific.role.attribute = attribute role { text }
 
-   db.guilabel.attlist =
-      db.guilabel.role.attribute?
+   db.honorific.attlist =
+      db.honorific.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
 
-   db.guilabel =
-      element guilabel {
-         db.guilabel.attlist,
-         (db._text | db.accel | db.superscript | db.subscript)*
+   db.honorific =
+      element honorific {
+         db.honorific.attlist,
+         db._text
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "guimenu" ]
-   db:refpurpose [ "The name of a menu in a GUI" ]
+   db:refname [ "firstname" ]
+   db:refpurpose [ "The first name of a person" ]
 ]
 div {
 
-   db.guimenu.role.attribute = attribute role { text }
+   db.firstname.role.attribute = attribute role { text }
 
-   db.guimenu.attlist =
-      db.guimenu.role.attribute?
+   db.firstname.attlist =
+      db.firstname.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
 
-   db.guimenu =
-      element guimenu {
-         db.guimenu.attlist,
-         (db._text | db.accel | db.superscript | db.subscript)*
+   db.firstname =
+      element firstname {
+         db.firstname.attlist,
+         db._text
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "guimenuitem" ]
-   db:refpurpose [ "The name of a terminal menu item in a GUI" ]
+   db:refname [ "surname" ]
+   db:refpurpose [ "A family name; in western cultures the last name" ]
 ]
 div {
 
-   db.guimenuitem.role.attribute = attribute role { text }
+   db.surname.role.attribute = attribute role { text }
 
-   db.guimenuitem.attlist =
-      db.guimenuitem.role.attribute?
+   db.surname.attlist =
+      db.surname.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
 
-   db.guimenuitem =
-      element guimenuitem {
-         db.guimenuitem.attlist,
-         (db._text | db.accel | db.superscript | db.subscript)*
+   db.surname =
+      element surname {
+         db.surname.attlist,
+         db._text
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "guisubmenu" ]
-   db:refpurpose [ "The name of a submenu in a GUI" ]
+   db:refname [ "lineage" ]
+   db:refpurpose [ "The portion of a person's name indicating a relationship to ancestors" ]
 ]
 div {
 
-   db.guisubmenu.role.attribute = attribute role { text }
+   db.lineage.role.attribute = attribute role { text }
 
-   db.guisubmenu.attlist =
-      db.guisubmenu.role.attribute?
+   db.lineage.attlist =
+      db.lineage.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
 
-   db.guisubmenu =
-      element guisubmenu {
-         db.guisubmenu.attlist,
-         (db._text | db.accel | db.superscript | db.subscript)*
+   db.lineage =
+      element lineage {
+         db.lineage.attlist,
+         db._text
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "hardware" ]
-   db:refpurpose [ "A physical part of a computer system" ]
+   db:refname [ "othername" ]
+   db:refpurpose [ "A component of a persons name that is not a first name, surname, or lineage" ]
 ]
 div {
 
-   db.hardware.role.attribute = attribute role { text }
+   db.othername.role.attribute = attribute role { text }
 
-   db.hardware.attlist =
-      db.hardware.role.attribute?
+   db.othername.attlist =
+      db.othername.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
 
-   db.hardware =
-      element hardware {
-         db.hardware.attlist,
+   db.othername =
+      element othername {
+         db.othername.attlist,
          db._text
       }
 }
@@ -5978,219 +3956,110 @@ div {
 # ======================================================================
 
 [
-   db:refname [ "keycap" ]
-   db:refpurpose [ "The text printed on a key on a keyboard" ]
+   db:refname [ "printhistory" ]
+   db:refpurpose [ "The printing history of a document" ]
 ]
 div {
 
-   ctrl:other-attribute [ name="db.keycap.function.attrib"
-                          enum-name="db.keycap.function-enum.attribute"
-                          other-name="db.keycap.function-other.attributes" ]
-
-   db.keycap.function.enumeration =
-      ## The "Alt" key
-      "alt"
-    | ## The "Backspace" key
-      "backspace"
-    | ## The "Command" key
-      "command"
-    | ## The "Control" key
-      "control"
-    | ## The "Delete" key
-      "delete"
-    | ## The down arrow
-      "down"
-    | ## The "End" key
-      "end"
-    | ## The "Enter" or "Return" key
-      "enter"
-    | ## The "Escape" key
-      "escape"
-    | ## The "Home" key
-      "home"
-    | ## The "Insert" key
-      "insert"
-    | ## The left arrow
-      "left"
-    | ## The "Meta" key
-      "meta"
-    | ## The "Option" key
-      "option"
-    | ## The page down key
-      "pagedown"
-    | ## The page up key
-      "pageup"
-    | ## The right arrow
-      "right"
-    | ## The "Shift" key
-      "shift"
-    | ## The spacebar
-      "space"
-    | ## The "Tab" key
-      "tab"
-    | ## The up arrow
-      "up"
-
-   db.keycap.function-enum.attribute =
-      [
-         db:refpurpose [ "Identifies the function key" ]
-      ]
-      attribute function { db.keycap.function.enumeration }?
-
-   db.keycap.function-other.attributes =
-      [
-         db:refpurpose [ "Identifies the function key" ]
-      ]
-      attribute function {
-         ## Indicates a non-standard function key
-         "other"
-      }?,
-      [
-         db:refpurpose [ "Specifies a keyword that identifies the non-standard key" ]
-      ]
-      attribute otherfunction { text }
-
-   db.keycap.function.attrib =
-      (db.keycap.function-enum.attribute | db.keycap.function-other.attributes)
-
-   db.keycap.role.attribute = attribute role { text }
+   db.printhistory.role.attribute = attribute role { text }
 
-   db.keycap.attlist =
-      db.keycap.role.attribute?
+   db.printhistory.attlist =
+      db.printhistory.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
-    & db.keycap.function.attrib
 
-   db.keycap =
-      element keycap {
-         db.keycap.attlist,
-         db._text
+   db.printhistory =
+      element printhistory {
+         db.printhistory.attlist,
+         db.para.blocks+
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "keycode" ]
-   db:refpurpose [ "The internal, frequently numeric, identifier for a key on a keyboard" ]
+   db:refname [ "pubdate" ]
+   db:refpurpose [ "The date of publication of a document" ]
 ]
 div {
 
-   db.keycode.role.attribute = attribute role { text }
+   db.pubdate.role.attribute = attribute role { text }
 
-   db.keycode.attlist =
-      db.keycode.role.attribute?
+   db.pubdate.attlist =
+      db.pubdate.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
 
-   db.keycode =
-      element keycode {
-         db.keycode.attlist,
-         db._text
+   db.pubdate =
+      element pubdate {
+         db.pubdate.attlist,
+         db.date.contentmodel
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "keycombo" ]
-   db:refpurpose [ "A combination of input actions" ]
+   db:refname [ "publisher" ]
+   db:refpurpose [ "The publisher of a document" ]
 ]
 div {
 
-   ctrl:other-attribute [ name="db.keycombo.action.attrib"
-                          enum-name="db.keycombo.action-enum.attribute"
-                          other-name="db.keycombo.action-other.attributes" ]
-
-   db.keycombo.action.enumeration =
-      ## A (single) mouse click.
-      "click"
-    | ## A double mouse click.
-      "double-click"
-    | ## A mouse or key press.
-      "press"
-    | ## Sequential clicks or presses.
-      "seq"
-    | ## Simultaneous clicks or presses.
-      "simul"
-
-   db.keycombo.action-enum.attribute =
-      [
-         db:refpurpose [ "Identifies the nature of the action taken. If " db:tag [ "keycombo" ] " contains more than one element, " db:tag [ class="attvalue" "simul" ] " is the default, otherwise there is no default." ]
-      ]
-      attribute action { db.keycombo.action.enumeration }?
-
-   db.keycombo.action-other.attributes =
-      [
-         db:refpurpose [ "Identifies the nature of the action taken" ]
-      ]
-      attribute action {
-         ## Indicates a non-standard action
-         "other"
-      }?,
-      [
-         db:refpurpose [ "Identifies the non-standard action in some unspecified way." ]
-      ]
-      attribute otheraction { text }
-
-   db.keycombo.action.attrib =
-      (db.keycombo.action-enum.attribute | db.keycombo.action-other.attributes)
-
-   db.keycombo.role.attribute = attribute role { text }
+   db.publisher.role.attribute = attribute role { text }
 
-   db.keycombo.attlist =
-      db.keycombo.role.attribute?
+   db.publisher.attlist =
+      db.publisher.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
-    & db.keycombo.action.attrib
 
-   db.keycombo =
-      element keycombo {
-         db.keycombo.attlist,
-         (db.keycap|db.keycombo|db.keysym|db.mousebutton)+
+   db.publisher =
+      element publisher {
+         db.publisher.attlist,
+         db.publishername,
+         db.address*
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "keysym" ]
-   db:refpurpose [ "The symbolic name of a key on a keyboard" ]
+   db:refname [ "publishername" ]
+   db:refpurpose [ "The name of the publisher of a document" ]
 ]
 div {
 
-   db.keysym.role.attribute = attribute role { text }
+   db.publishername.role.attribute = attribute role { text }
 
-   db.keysym.attlist =
-      db.keysym.role.attribute?
+   db.publishername.attlist =
+      db.publishername.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
 
-   db.keysym =
-      element keysym {
-         db.keysym.attlist,
+   db.publishername =
+      element publishername {
+         db.publishername.attlist,
          db._text
       }
 }
 
 # ======================================================================
 
-[
-   db:refname [ "lineannotation" ]
-   db:refpurpose [ "A comment on a line in a verbatim listing" ]
+[
+   db:refname [ "releaseinfo" ]
+   db:refpurpose [ "Information about a particular release of a document" ]
 ]
 div {
 
-   db.lineannotation.role.attribute = attribute role { text }
+   db.releaseinfo.role.attribute = attribute role { text }
 
-   db.lineannotation.attlist =
-      db.lineannotation.role.attribute?
+   db.releaseinfo.attlist =
+      db.releaseinfo.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
 
-   db.lineannotation =
-      element lineannotation {
-         db.lineannotation.attlist,
+   db.releaseinfo =
+      element releaseinfo {
+         db.releaseinfo.attlist,
          db._text
       }
 }
@@ -6198,82 +4067,71 @@ div {
 # ======================================================================
 
 [
-   db:refname [ "literal" ]
-   db:refpurpose [ "Inline text that is some literal value" ]
+   db:refname [ "revhistory" ]
+   db:refpurpose [ "A history of the revisions to a document" ]
 ]
 div {
 
-   db.literal.role.attribute = attribute role { text }
+   db.revhistory.role.attribute = attribute role { text }
 
-   db.literal.attlist =
-      db.literal.role.attribute?
+   db.revhistory.attlist =
+      db.revhistory.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
 
-   db.literal =
-      element literal {
-         db.literal.attlist,
-         db._text
+   db.revhistory.info = db._info.title.only
+
+   db.revhistory =
+      element revhistory {
+         db.revhistory.attlist,
+         db.revhistory.info,
+         db.revision+
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "code" ]
-   db:refpurpose [ "An inline code fragment" ]
+   db:refname [ "revision" ]
+   db:refpurpose [ "An entry describing a single revision in the history of the revisions to a document" ]
 ]
 div {
 
-   code.language.attribute =
-      [
-         db:refpurpose [ "Identifies the (computer) language of the code fragment" ]
-      ]
-      attribute language { text }
-
-   db.code.role.attribute = attribute role { text }
+   db.revision.role.attribute = attribute role { text }
 
-   db.code.attlist =
-      db.code.role.attribute?
+   db.revision.attlist =
+      db.revision.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
-    & code.language.attribute?
 
-   db.code =
-      element code {
-         db.code.attlist,
-         (db.programming.inlines | db._text)*
+   db.revision =
+      element revision {
+         db.revision.attlist,
+         db.revnumber?,
+         db.date,
+         (db.authorinitials | db.author)*,
+         (db.revremark | db.revdescription)?
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "constant" ]
-   db:refpurpose [ "A programming or system constant" ]
+   db:refname [ "revnumber" ]
+   db:refpurpose [ "A document revision number" ]
 ]
 div {
 
-   db.constant.class.attribute =
-      [
-         db:refpurpose [ "Identifies the class of constant" ]
-      ]
-      attribute class {
-         ## The value is a limit of some kind
-         "limit"
-      }
-
-   db.constant.role.attribute = attribute role { text }
+   db.revnumber.role.attribute = attribute role { text }
 
-   db.constant.attlist =
-      db.constant.role.attribute?
+   db.revnumber.attlist =
+      db.revnumber.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
-    & db.constant.class.attribute?
 
-   db.constant =
-      element constant {
-         db.constant.attlist,
+   db.revnumber =
+      element revnumber {
+         db.revnumber.attlist,
          db._text
       }
 }
@@ -6281,21 +4139,21 @@ div {
 # ======================================================================
 
 [
-   db:refname [ "varname" ]
-   db:refpurpose [ "The name of a variable" ]
+   db:refname [ "revremark" ]
+   db:refpurpose [ "A description of a revision to a document" ]
 ]
 div {
 
-   db.varname.role.attribute = attribute role { text }
+   db.revremark.role.attribute = attribute role { text }
 
-   db.varname.attlist =
-      db.varname.role.attribute?
+   db.revremark.attlist =
+      db.revremark.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
 
-   db.varname =
-      element varname {
-         db.varname.attlist,
+   db.revremark =
+      element revremark {
+         db.revremark.attlist,
          db._text
       }
 }
@@ -6303,91 +4161,87 @@ div {
 # ======================================================================
 
 [
-   db:refname [ "markup" ]
-   db:refpurpose [ "A string of formatting markup in text that is to be represented literally" ]
+   db:refname [ "revdescription" ]
+   db:refpurpose [ "A extended description of a revision to a document" ]
 ]
 div {
 
-   db.markup.role.attribute = attribute role { text }
+   db.revdescription.role.attribute = attribute role { text }
 
-   db.markup.attlist =
-      db.markup.role.attribute?
+   db.revdescription.attlist =
+      db.revdescription.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
 
-   db.markup =
-      element markup {
-         db.markup.attlist,
-         db._text
+   db.revdescription =
+      element revdescription {
+         db.revdescription.attlist,
+         db.all.blocks*
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "menuchoice" ]
-   db:refpurpose [ "A selection or series of selections from a menu" ]
+   db:refname [ "seriesvolnums" ]
+   db:refpurpose [ "Numbers of the volumes in a series of books" ]
 ]
 div {
 
-   db.menuchoice.role.attribute = attribute role { text }
+   db.seriesvolnums.role.attribute = attribute role { text }
 
-   db.menuchoice.attlist =
-      db.menuchoice.role.attribute?
+   db.seriesvolnums.attlist =
+      db.seriesvolnums.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
 
-   db.menuchoice =
-      element menuchoice {
-         db.menuchoice.attlist,
-         db.shortcut?,
-         (db.guibutton|db.guiicon|db.guilabel|db.guimenu|db.guimenuitem|db.guisubmenu)+
+   db.seriesvolnums =
+      element seriesvolnums {
+         db.seriesvolnums.attlist,
+         db._text
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "shortcut" ]
-   db:refpurpose [ "A key combination for an action that is also accessible through a menu" ]
+   db:refname [ "volumenum" ]
+   db:refpurpose [ "The volume number of a document in a set (as of books in a set or articles in a journal)" ]
 ]
 div {
 
-   db.shortcut.action.attrib = db.keycombo.action.attrib
-
-   db.shortcut.role.attribute = attribute role { text }
+   db.volumenum.role.attribute = attribute role { text }
 
-   db.shortcut.attlist =
-      db.shortcut.role.attribute?
+   db.volumenum.attlist =
+      db.volumenum.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
-    & db.shortcut.action.attrib
 
-   db.shortcut =
-      element shortcut {
-         db.shortcut.attlist,
-         (db.keycap|db.keycombo|db.keysym|db.mousebutton)+
+   db.volumenum =
+      element volumenum {
+         db.volumenum.attlist,
+         db._text
       }
 }
 
 # ======================================================================
 
 [
-   db:refname [ "mousebutton" ]
-   db:refpurpose [ "The conventional name of a mouse button" ]
+   db:refname [ "issuenum" ]
+   db:refpurpose [ "The number of an issue of a journal" ]
 ]
 div {
 
-   db.mousebutton.role.attribute = attribute role { text }
+   db.issuenum.role.attribute = attribute role { text }
 
-   db.mousebutton.attlist =
-      db.mousebutton.role.attribute?
+   db.issuenum.attlist =
+      db.issuenum.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
 
-   db.mousebutton =
-      element mousebutton {
-         db.mousebutton.attlist,
+   db.issuenum =
+      element issuenum {
+         db.issuenum.attlist,
          db._text
       }
 }
@@ -6395,21 +4249,21 @@ div {
 # ======================================================================
 
 [
-   db:refname [ "option" ]
-   db:refpurpose [ "An option for a software command" ]
+   db:refname [ "package" ]
+   db:refpurpose [ "A software or application package" ]
 ]
 div {
 
-   db.option.role.attribute = attribute role { text }
+   db.package.role.attribute = attribute role { text }
 
-   db.option.attlist =
-      db.option.role.attribute?
+   db.package.attlist =
+      db.package.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
 
-   db.option =
-      element option {
-         db.option.attlist,
+   db.package =
+      element package {
+         db.package.attlist,
          db._text
       }
 }
@@ -6417,21 +4271,21 @@ div {
 # ======================================================================
 
 [
-   db:refname [ "optional" ]
-   db:refpurpose [ "Optional information" ]
+   db:refname [ "email" ]
+   db:refpurpose [ "An email address" ]
 ]
 div {
 
-   db.optional.role.attribute = attribute role { text }
+   db.email.role.attribute = attribute role { text }
 
-   db.optional.attlist =
-      db.optional.role.attribute?
+   db.email.attlist =
+      db.email.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
 
-   db.optional =
-      element optional {
-         db.optional.attlist,
+   db.email =
+      element email {
+         db.email.attlist,
          db._text
       }
 }
@@ -6439,21 +4293,21 @@ div {
 # ======================================================================
 
 [
-   db:refname [ "property" ]
-   db:refpurpose [ "A unit of data associated with some part of a computer system" ]
+   db:refname [ "lineannotation" ]
+   db:refpurpose [ "A comment on a line in a verbatim listing" ]
 ]
 div {
 
-   db.property.role.attribute = attribute role { text }
+   db.lineannotation.role.attribute = attribute role { text }
 
-   db.property.attlist =
-      db.property.role.attribute?
+   db.lineannotation.attlist =
+      db.lineannotation.role.attribute?
     & db.common.attributes
     & db.common.linking.attributes
 
-   db.property =
-      element property {
-         db.property.attlist,
+   db.lineannotation =
+      element lineannotation {
+         db.lineannotation.attlist,
          db._text
       }
 }
@@ -6497,33 +4351,6 @@ div {
 
 # ======================================================================
 
-db.prompt.inlines = db._text
-
-# ======================================================================
-
-[
-   db:refname [ "prompt" ]
-   db:refpurpose [ "A character or string indicating the start of an input field in a  computer display" ]
-]
-div {
-
-
-   db.prompt.role.attribute = attribute role { text }
-
-   db.prompt.attlist =
-      db.prompt.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.prompt =
-      element prompt {
-         db.prompt.attlist,
-         db.prompt.inlines*
-      }
-}
-
-# ======================================================================
-
 db.replaceable.inlines = db._text
 
 # ======================================================================
@@ -6567,205 +4394,6 @@ div {
 
 # ======================================================================
 
-[
-   db:refname [ "returnvalue" ]
-   db:refpurpose [ "The value returned by a function" ]
-]
-div {
-
-   db.returnvalue.role.attribute = attribute role { text }
-
-   db.returnvalue.attlist =
-      db.returnvalue.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.returnvalue =
-      element returnvalue {
-         db.returnvalue.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "tag" ]
-   db:refpurpose [ "A component of XML (or SGML) markup" ]
-]
-div {
-
-   db.tag.role.attribute = attribute role { text }
-
-   db.tag.class.enumeration =
-      ## An attribute
-      "attribute"
-    | ## An attribute value
-      "attvalue"
-    | ## An element
-      "element"
-    | ## An empty element tag
-      "emptytag"
-    | ## An end tag
-      "endtag"
-    | ## A general entity
-      "genentity"
-    | ## The local name part of a qualified name
-      "localname"
-    | ## A namespace
-      "namespace"
-    | ## A numeric character reference
-      "numcharref"
-    | ## A parameter entity
-      "paramentity"
-    | ## A processing instruction
-      "pi"
-    | ## The prefix part of a qualified name
-      "prefix"
-    | ## An SGML comment
-      "comment"
-    | ## A start tag
-      "starttag"
-    | ## An XML processing instruction
-      "xmlpi"
-
-   db.tag.class.attribute =
-      [
-         db:refpurpose [ "Identifies the nature of the tag content" ]
-      ]
-      attribute class { db.tag.class.enumeration }
-
-   db.tag.namespace.attribute =
-      [
-         db:refpurpose [ "Identifies the namespace of the tag content" ]
-      ]
-      attribute namespace { xsd:anyURI }
-
-   db.tag.attlist =
-      db.tag.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-    & db.tag.class.attribute?
-    & db.tag.namespace.attribute?
-
-   db.tag =
-      element tag {
-         db.tag.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "symbol" ]
-   db:refpurpose [ "A name that is replaced by a value before processing" ]
-]
-div {
-
-   db.symbol.class.attribute =
-      [
-         db:refpurpose [ "Identifies the class of symbol" ]
-      ]
-      attribute class {
-         ## The value is a limit of some kind
-         "limit"
-      }
-
-   db.symbol.role.attribute = attribute role { text }
-
-   db.symbol.attlist =
-      db.symbol.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-    & db.symbol.class.attribute?
-
-   db.symbol =
-      element symbol {
-         db.symbol.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-db.systemitem.inlines = db._text
-
-# ======================================================================
-
-[
-   db:refname [ "systemitem" ]
-   db:refpurpose [ "A system-related item or term" ]
-]
-div {
-
-   db.systemitem.class.enumeration =
-      ## A daemon or other system process (syslogd)
-      "daemon"
-    | ## A domain name (example.com)
-      "domainname"
-    | ## An ethernet address (00:05:4E:49:FD:8E)
-      "etheraddress"
-    | ## An event of some sort (SIGHUP)
-      "event"
-    | ## An event handler of some sort (hangup)
-      "eventhandler"
-    | ## A filesystem (ext3)
-      "filesystem"
-    | ## A fully qualified domain name (my.example.com)
-      "fqdomainname"
-    | ## A group name (wheel)
-      "groupname"
-    | ## An IP address (127.0.0.1)
-      "ipaddress"
-    | ## A library (libncurses)
-      "library"
-    | ## A macro
-      "macro"
-    | ## A netmask (255.255.255.192)
-      "netmask"
-    | ## A newsgroup (comp.text.xml)
-      "newsgroup"
-    | ## An operating system name (Hurd)
-      "osname"
-    | ## A process (gnome-cups-icon)
-      "process"
-    | ## A protocol (ftp)
-      "protocol"
-    | ## A resource
-      "resource"
-    | ## A server (mail.example.com)
-      "server"
-    | ## A service (ppp)
-      "service"
-    | ## A system name (hephaistos)
-      "systemname"
-    | ## A user name (ndw)
-      "username"
-
-   db.systemitem.class.attribute =
-      [
-         db:refpurpose [ "Identifies the nature of the system item" ]
-      ]
-      attribute class { db.systemitem.class.enumeration }
-
-   db.systemitem.role.attribute = attribute role { text }
-
-   db.systemitem.attlist =
-      db.systemitem.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-    & db.systemitem.class.attribute?
-
-   db.systemitem =
-      element systemitem {
-         db.systemitem.attlist,
-         db.systemitem.inlines*
-      }
-}
-
-# ======================================================================
-
 [
    db:refname [ "uri" ]
    db:refpurpose [ "A Uniform Resource Identifier" ]
@@ -6795,83 +4423,6 @@ div {
 
 # ======================================================================
 
-[
-   db:refname [ "token" ]
-   db:refpurpose [ "A unit of information" ]
-]
-div {
-
-   db.token.role.attribute = attribute role { text }
-
-   db.token.attlist =
-      db.token.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.token =
-      element token {
-         db.token.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-[
-   db:refname [ "type" ]
-   db:refpurpose [ "The classification of a value" ]
-]
-div {
-
-   db.type.role.attribute = attribute role { text }
-
-   db.type.attlist =
-      db.type.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.type =
-      element type {
-         db.type.attlist,
-         db._text
-      }
-}
-
-# ======================================================================
-
-db.userinput.inlines =
-   text
- | db.ubiq.inlines
- | db.os.inlines
- | db.technical.inlines
- | db.markup.inlines
- | db.keyboard.inlines
- | db.gui.inlines
-
-# ======================================================================
-
-[
-   db:refname [ "userinput" ]
-   db:refpurpose [ "Data entered by the user" ]
-]
-div {
-
-   db.userinput.role.attribute = attribute role { text }
-
-   db.userinput.attlist =
-      db.userinput.role.attribute?
-    & db.common.attributes
-    & db.common.linking.attributes
-
-   db.userinput =
-      element userinput {
-         db.userinput.attlist,
-         db.userinput.inlines*
-      }
-}
-
-# ======================================================================
-
 [
    db:refname [ "abbrev" ]
    db:refpurpose [ "An abbreviation, especially one followed by a period" ]
diff --git a/docbook/relaxng/docbook/src/product.rnc b/docbook/relaxng/docbook/src/product.rnc
new file mode 100644 (file)
index 0000000..375e58d
--- /dev/null
@@ -0,0 +1,233 @@
+# This file is part of DocBook V5.0CR6
+#
+# Copyright 1992-2005 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).
+#
+# Release: $Id: pool.rnc 7466 2007-09-27 14:03:55Z nwalsh $
+#
+# Permission to use, copy, modify and distribute the DocBook schema
+# 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 schema
+# for any purpose. It is provided "as is" without expressed or implied
+# warranty.
+#
+# If you modify the DocBook schema in any way, label your schema as a
+# variant of DocBook. See the reference documentation
+# (http://docbook.org/tdg5/en/html/ch05.html#s-notdocbook)
+# 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/.
+#
+# ======================================================================
+
+default namespace = "http://docbook.org/ns/docbook"
+namespace ctrl = "http://nwalsh.com/xmlns/schema-control/"
+namespace rng  = "http://relaxng.org/ns/structure/1.0"
+namespace s = "http://www.ascc.net/xml/schematron"
+namespace db = "http://docbook.org/ns/docbook"
+
+db.info.elements |=
+   db.productname
+ | db.productnumber
+
+
+db.product.inlines |=
+   db.productnumber
+ | db.productname
+ | db.database
+ | db.application
+ | db.hardware
+
+# ======================================================================
+
+[
+   db:refname [ "productname" ]
+   db:refpurpose [ "The formal name of a product" ]
+]
+div {
+
+   db.productname.role.attribute = attribute role { text }
+
+   db.productname.class.enumeration =
+      ## A name with a copyright
+      "copyright"
+    | ## A name with a registered copyright
+      "registered"
+    | ## A name of a service
+      "service"
+    | ## A name which is trademarked
+      "trade"
+
+   db.productname.class.attribute =
+      [
+         db:refpurpose [ "Specifies the class of product name" ]
+      ]
+      attribute class { db.productname.class.enumeration }
+
+   db.productname.attlist =
+      db.productname.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.productname.class.attribute?
+
+   db.productname =
+      element productname {
+         db.productname.attlist,
+         db._text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "productnumber" ]
+   db:refpurpose [ "A number assigned to a product" ]
+]
+div {
+
+   db.productnumber.role.attribute = attribute role { text }
+
+   db.productnumber.attlist =
+      db.productnumber.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.productnumber =
+      element productnumber {
+         db.productnumber.attlist,
+         db._text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "database" ]
+   db:refpurpose [ "The name of a database, or part of a database" ]
+]
+div {
+
+   db.database.class.enumeration =
+      ## An alternate or secondary key
+      "altkey"
+    | ## A constraint
+      "constraint"
+    | ## A data type
+      "datatype"
+    | ## A field
+      "field"
+    | ## A foreign key
+      "foreignkey"
+    | ## A group
+      "group"
+    | ## An index
+      "index"
+    | ## The first or primary key
+      "key1"
+    | ## An alternate or secondary key
+      "key2"
+    | ## A name
+      "name"
+    | ## The primary key
+      "primarykey"
+    | ## A (stored) procedure
+      "procedure"
+    | ## A record
+      "record"
+    | ## A rule
+      "rule"
+    | ## The secondary key
+      "secondarykey"
+    | ## A table
+      "table"
+    | ## A user
+      "user"
+    | ## A view
+      "view"
+
+   db.database.class.attribute =
+      [
+         db:refpurpose [ "Identifies the class of database artifact" ]
+      ]
+      attribute class { db.database.class.enumeration }
+
+   db.database.role.attribute = attribute role { text }
+
+   db.database.attlist =
+      db.database.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.database.class.attribute?
+
+   db.database =
+      element database {
+         db.database.attlist,
+         db._text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "application" ]
+   db:refpurpose [ "The name of a software program" ]
+]
+div {
+
+   db.application.class.enumeration =
+      ## A hardware application
+      "hardware"
+    | ## A software application
+      "software"
+
+   db.application.class.attribute =
+      [
+         db:refpurpose [ "Identifies the class of application" ]
+      ]
+      attribute class { db.application.class.enumeration }
+
+   db.application.role.attribute = attribute role { text }
+
+   db.application.attlist =
+      db.application.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.application.class.attribute?
+
+   db.application =
+      element application {
+         db.application.attlist,
+         db._text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "hardware" ]
+   db:refpurpose [ "A physical part of a computer system" ]
+]
+div {
+
+   db.hardware.role.attribute = attribute role { text }
+
+   db.hardware.attlist =
+      db.hardware.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.hardware =
+      element hardware {
+         db.hardware.attlist,
+         db._text
+      }
+}
+
+
diff --git a/docbook/relaxng/docbook/src/programming.rnc b/docbook/relaxng/docbook/src/programming.rnc
new file mode 100644 (file)
index 0000000..ef9a60e
--- /dev/null
@@ -0,0 +1,832 @@
+# This file is part of DocBook V5.0CR6
+#
+# Copyright 1992-2005 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).
+#
+# Release: $Id: pool.rnc 7466 2007-09-27 14:03:55Z nwalsh $
+#
+# Permission to use, copy, modify and distribute the DocBook schema
+# 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 schema
+# for any purpose. It is provided "as is" without expressed or implied
+# warranty.
+#
+# If you modify the DocBook schema in any way, label your schema as a
+# variant of DocBook. See the reference documentation
+# (http://docbook.org/tdg5/en/html/ch05.html#s-notdocbook)
+# 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/.
+#
+# ======================================================================
+
+default namespace = "http://docbook.org/ns/docbook"
+namespace ctrl = "http://nwalsh.com/xmlns/schema-control/"
+namespace rng  = "http://relaxng.org/ns/structure/1.0"
+namespace s = "http://www.ascc.net/xml/schematron"
+namespace db = "http://docbook.org/ns/docbook"
+namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"
+
+db.domain.inlines |= db.programming.inlines
+
+db.nopara.blocks |= db.synopsis.blocks
+
+db.cover.contentmodel |= db.synopsis.blocks
+
+db.verbatim.blocks |=
+   db.programlisting
+ | db.synopsis
+
+db.programming.inlines =
+   db.function
+ | db.parameter
+ | db.varname
+ | db.returnvalue
+ | db.type
+ | db.classname
+ | db.exceptionname
+ | db.interfacename
+ | db.methodname
+ | db.modifier
+ | db.initializer
+ | db.oo.inlines
+
+db.oo.inlines =
+   db.ooclass
+ | db.ooexception
+ | db.oointerface
+
+db.synopsis.blocks =
+   db.funcsynopsis
+ | db.classsynopsis
+ | db.methodsynopsis
+ | db.constructorsynopsis
+ | db.destructorsynopsis
+ | db.fieldsynopsis
+
+# ======================================================================
+
+[
+   db:refname [ "synopsis" ]
+   db:refpurpose [ "A general-purpose element for representing the syntax of commands or functions" ]
+]
+div {
+
+   db.synopsis.role.attribute = attribute role { text }
+   db.synopsis.label.attribute = db.label.attribute
+
+   db.synopsis.attlist =
+      db.synopsis.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.verbatim.attributes
+    & db.synopsis.label.attribute?
+
+   db.synopsis =
+      element synopsis {
+         db.synopsis.attlist,
+         db.verbatim.contentmodel
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "funcsynopsis" ]
+   db:refpurpose [ "The syntax summary for a function definition" ]
+]
+div {
+
+   db.funcsynopsis.role.attribute = attribute role { text }
+
+   db.funcsynopsis.attlist =
+      db.funcsynopsis.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.language.attribute?
+
+   db.funcsynopsis.info = db._info.title.forbidden
+
+   db.funcsynopsis =
+      element funcsynopsis {
+         db.funcsynopsis.attlist,
+         db.funcsynopsis.info,
+         (db.funcsynopsisinfo | db.funcprototype)+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "funcsynopsisinfo" ]
+   db:refpurpose [ "Information supplementing the FuncDefs of a FuncSynopsis" ]
+]
+div {
+
+   db.funcsynopsisinfo.role.attribute = attribute role { text }
+
+   db.funcsynopsisinfo.attlist =
+      db.funcsynopsisinfo.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.verbatim.attributes
+
+   db.funcsynopsisinfo =
+      element funcsynopsisinfo {
+         db.funcsynopsisinfo.attlist,
+         db.verbatim.contentmodel
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "funcprototype" ]
+   db:refpurpose [ "The prototype of a function" ]
+]
+div {
+
+   db.funcprototype.role.attribute = attribute role { text }
+
+   db.funcprototype.attlist =
+      db.funcprototype.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.funcprototype =
+      element funcprototype {
+         db.funcprototype.attlist,
+         db.modifier*,
+         db.funcdef,
+         (db.void | db.varargs | (db.paramdef+, db.varargs?)),
+         db.modifier*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "funcdef" ]
+   db:refpurpose [ "A function (subroutine) name and its return type" ]
+]
+div {
+
+   db.funcdef.role.attribute = attribute role { text }
+
+   db.funcdef.attlist =
+      db.funcdef.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.funcdef =
+      element funcdef {
+         db.funcdef.attlist,
+         (db._text | db.type | db.function)*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "function" ]
+   db:refpurpose [ "The name of a function or subroutine, as in a programming language" ]
+]
+div {
+
+   db.function.role.attribute = attribute role { text }
+
+   db.function.attlist =
+      db.function.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.function =
+      element function {
+         db.function.attlist,
+         db._text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "void" ]
+   db:refpurpose [ "An empty element in a function synopsis indicating that the function in question takes no arguments" ]
+]
+div {
+
+   db.void.role.attribute = attribute role { text }
+
+   db.void.attlist =
+      db.void.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.void =
+      element void {
+         db.void.attlist,
+         empty
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "varargs" ]
+   db:refpurpose [ "An empty element in a function synopsis indicating a variable number of arguments" ]
+]
+div {
+
+   db.varargs.role.attribute = attribute role { text }
+
+   db.varargs.attlist =
+      db.varargs.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.varargs =
+      element varargs {
+         db.varargs.attlist,
+         empty
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "paramdef" ]
+   db:refpurpose [ "Information about a function parameter in a programming language" ]
+]
+div {
+
+   db.paramdef.role.attribute = attribute role { text }
+
+   db.paramdef.choice.enumeration =
+      ## Formatted to indicate that it is optional.
+      "opt"
+    | ## Formatted to indicate that it is required.
+      "req"
+
+   db.paramdef.choice.attribute =
+      [
+         a:defaultValue="opt"
+         db:refpurpose [ "Indicates optionality." ]
+      ]
+      attribute choice { db.paramdef.choice.enumeration }
+
+
+   db.paramdef.attlist =
+      db.paramdef.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.paramdef.choice.attribute?
+
+   db.paramdef =
+      element paramdef {
+         db.paramdef.attlist,
+         (db._text | db.initializer | db.type | db.parameter | db.funcparams)*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "funcparams" ]
+   db:refpurpose [ "Parameters for a function referenced through a function pointer in a synopsis" ]
+]
+div {
+
+   db.funcparams.role.attribute = attribute role { text }
+
+   db.funcparams.attlist =
+      db.funcparams.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.funcparams =
+      element funcparams {
+         db.funcparams.attlist,
+         db._text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "classsynopsis" ]
+   db:refpurpose [ "The syntax summary for a class definition" ]
+]
+div {
+
+   db.classsynopsis.role.attribute = attribute role { text }
+
+   db.classsynopsis.class.enumeration =
+      ## This is the synopsis of a class
+      "class"
+    | ## This is the synopsis of an interface
+      "interface"
+
+   db.classsynopsis.class.attribute =
+      [
+         db:refpurpose [ "Specifies the nature of the synopsis" ]
+      ]
+      attribute class { db.classsynopsis.class.enumeration }
+
+   db.classsynopsis.attlist =
+      db.classsynopsis.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.language.attribute?
+    & db.classsynopsis.class.attribute?
+
+   db.classsynopsis =
+      element classsynopsis {
+         db.classsynopsis.attlist,
+         db.oo.inlines+,
+         (db.classsynopsisinfo
+          | db.methodsynopsis
+          | db.constructorsynopsis
+          | db.destructorsynopsis
+          | db.fieldsynopsis)*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "classsynopsisinfo" ]
+   db:refpurpose [ "Information supplementing the contents of a ClassSynopsis" ]
+]
+div {
+
+   db.classsynopsisinfo.role.attribute = attribute role { text }
+
+   db.classsynopsisinfo.attlist =
+      db.classsynopsisinfo.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.verbatim.attributes
+
+   db.classsynopsisinfo =
+      element classsynopsisinfo {
+         db.classsynopsisinfo.attlist,
+         db.verbatim.contentmodel
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "ooclass" ]
+   db:refpurpose [ "A class in an object-oriented programming language" ]
+]
+div {
+
+   db.ooclass.role.attribute = attribute role { text }
+
+   db.ooclass.attlist =
+      db.ooclass.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.ooclass =
+      element ooclass {
+         db.ooclass.attlist,
+         (db.package|db.modifier)*,
+         db.classname
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "oointerface" ]
+   db:refpurpose [ "An interface in an object-oriented programming language" ]
+]
+div {
+
+   db.oointerface.role.attribute = attribute role { text }
+
+   db.oointerface.attlist =
+      db.oointerface.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.oointerface =
+      element oointerface {
+         db.oointerface.attlist,
+         (db.package|db.modifier)*,
+         db.interfacename
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "ooexception" ]
+   db:refpurpose [ "An exception in an object-oriented programming language" ]
+]
+div {
+
+   db.ooexception.role.attribute = attribute role { text }
+
+   db.ooexception.attlist =
+      db.ooexception.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.ooexception =
+      element ooexception {
+         db.ooexception.attlist,
+         (db.package|db.modifier)*,
+         db.exceptionname
+      }
+}
+
+# ======================================================================
+
+db.modifier.xml.space.attribute =
+   [
+      db:refpurpose [ "Can be used to indicate that whitespace in the modifier should be preserved (for multi-line annotations, for example)." ]
+   ]
+   attribute xml:space {
+      ## Extra whitespace and line breaks must be preserved.
+      "preserve"
+# Ideally the definition of xml:space used on modifier would be
+# different from the definition used on the verbatim elements. The
+# verbatim elements forbid the use of xml:space="default" which
+# wouldn't be a problem on modifier. But doing that causes the
+# generated XSD schemas to be broken so I'm just reusing the existing
+# definition for now. It won't be backwards incompatible to fix this
+# problem in the future.
+#    | ## Extra whitespace and line breaks are not preserved.
+#      "default"
+   }
+
+[
+   db:refname [ "modifier" ]
+   db:refpurpose [ "Modifiers in a synopsis" ]
+]
+div {
+
+   db.modifier.role.attribute = attribute role { text }
+
+
+   db.modifier.attlist =
+      db.modifier.xml.space.attribute?
+    & db.modifier.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.modifier =
+      element modifier {
+         db.modifier.attlist,
+         db._text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "interfacename" ]
+   db:refpurpose [ "The name of an interface" ]
+]
+div {
+
+   db.interfacename.role.attribute = attribute role { text }
+
+   db.interfacename.attlist =
+      db.interfacename.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.interfacename =
+      element interfacename {
+         db.interfacename.attlist,
+         db._text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "exceptionname" ]
+   db:refpurpose [ "The name of an exception" ]
+]
+div {
+
+   db.exceptionname.role.attribute = attribute role { text }
+
+   db.exceptionname.attlist =
+      db.exceptionname.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.exceptionname =
+      element exceptionname {
+         db.exceptionname.attlist,
+         db._text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "fieldsynopsis" ]
+   db:refpurpose [ "The name of a field in a class definition" ]
+]
+div {
+
+   db.fieldsynopsis.role.attribute = attribute role { text }
+
+   db.fieldsynopsis.attlist =
+      db.fieldsynopsis.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.language.attribute?
+
+   db.fieldsynopsis =
+      element fieldsynopsis {
+         db.fieldsynopsis.attlist,
+         db.modifier*,
+         db.type?,
+         db.varname,
+         db.initializer?
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "initializer" ]
+   db:refpurpose [ "The initializer for a FieldSynopsis" ]
+]
+div {
+
+   db.initializer.role.attribute = attribute role { text }
+
+   db.initializer.attlist =
+      db.initializer.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.initializer =
+      element initializer {
+         db.initializer.attlist,
+         db._text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "constructorsynopsis" ]
+   db:refpurpose [ "A syntax summary for a constructor" ]
+]
+div {
+
+   db.constructorsynopsis.role.attribute = attribute role { text }
+
+   db.constructorsynopsis.attlist =
+      db.constructorsynopsis.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.language.attribute?
+
+   db.constructorsynopsis =
+      element constructorsynopsis {
+         db.constructorsynopsis.attlist,
+         db.modifier*,
+         db.methodname?,
+         (db.methodparam+ | db.void?),
+         db.exceptionname*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "destructorsynopsis" ]
+   db:refpurpose [ "A syntax summary for a destructor" ]
+]
+div {
+
+   db.destructorsynopsis.role.attribute = attribute role { text }
+
+   db.destructorsynopsis.attlist =
+      db.destructorsynopsis.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.language.attribute?
+
+   db.destructorsynopsis =
+      element destructorsynopsis {
+         db.destructorsynopsis.attlist,
+         db.modifier*,
+         db.methodname?,
+         (db.methodparam+ | db.void?),
+         db.exceptionname*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "methodsynopsis" ]
+   db:refpurpose [ "A syntax summary for a method" ]
+]
+div {
+
+   db.methodsynopsis.role.attribute = attribute role { text }
+
+   db.methodsynopsis.attlist =
+      db.methodsynopsis.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.language.attribute?
+
+   db.methodsynopsis =
+      element methodsynopsis {
+         db.methodsynopsis.attlist,
+         db.modifier*,
+         (db.type | db.void)?,
+         db.methodname,
+         (db.methodparam+ | db.void),
+         db.exceptionname*,
+         db.modifier*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "methodname" ]
+   db:refpurpose [ "The name of a method" ]
+]
+div {
+
+   db.methodname.role.attribute = attribute role { text }
+
+   db.methodname.attlist =
+      db.methodname.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.methodname =
+      element methodname {
+         db.methodname.attlist,
+         db._text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "methodparam" ]
+   db:refpurpose [ "Parameters to a method" ]
+]
+div {
+
+   db.methodparam.role.attribute = attribute role { text }
+   db.methodparam.rep.attribute = db.rep.attribute
+   db.methodparam.choice.attribute = db.choice.req.attribute
+
+   db.methodparam.attlist =
+      db.methodparam.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.methodparam.rep.attribute?
+    & db.methodparam.choice.attribute?
+
+   db.methodparam =
+      element methodparam {
+         db.methodparam.attlist,
+         db.modifier*,
+         db.type?,
+         ((db.modifier*, db.parameter, db.initializer?)
+          | db.funcparams),
+         db.modifier*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "varname" ]
+   db:refpurpose [ "The name of a variable" ]
+]
+div {
+
+   db.varname.role.attribute = attribute role { text }
+
+   db.varname.attlist =
+      db.varname.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.varname =
+      element varname {
+         db.varname.attlist,
+         db._text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "returnvalue" ]
+   db:refpurpose [ "The value returned by a function" ]
+]
+div {
+
+   db.returnvalue.role.attribute = attribute role { text }
+
+   db.returnvalue.attlist =
+      db.returnvalue.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.returnvalue =
+      element returnvalue {
+         db.returnvalue.attlist,
+         db._text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "type" ]
+   db:refpurpose [ "The classification of a value" ]
+]
+div {
+
+   db.type.role.attribute = attribute role { text }
+
+   db.type.attlist =
+      db.type.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.type =
+      element type {
+         db.type.attlist,
+         db._text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "classname" ]
+   db:refpurpose [ "The name of a class, in the object-oriented programming sense" ]
+]
+div {
+
+   db.classname.role.attribute = attribute role { text }
+
+   db.classname.attlist =
+      db.classname.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.classname =
+      element classname {
+         db.classname.attlist,
+         db._text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "programlisting" ]
+   db:refpurpose [ "A literal listing of all or part of a program" ]
+]
+div {
+
+   db.programlisting.role.attribute = attribute role { text }
+
+   db.programlisting.width.attribute = db.width.characters.attribute
+
+   db.programlisting.attlist =
+      db.programlisting.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.verbatim.attributes
+    & db.programlisting.width.attribute?
+
+   db.programlisting =
+      element programlisting {
+         db.programlisting.attlist,
+         db.verbatim.contentmodel
+      }
+}
+
diff --git a/docbook/relaxng/docbook/src/technical.rnc b/docbook/relaxng/docbook/src/technical.rnc
new file mode 100644 (file)
index 0000000..b6ed90f
--- /dev/null
@@ -0,0 +1,184 @@
+# This file is part of DocBook V5.0CR6
+#
+# Copyright 1992-2005 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).
+#
+# Release: $Id: pool.rnc 7466 2007-09-27 14:03:55Z nwalsh $
+#
+# Permission to use, copy, modify and distribute the DocBook schema
+# 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 schema
+# for any purpose. It is provided "as is" without expressed or implied
+# warranty.
+#
+# If you modify the DocBook schema in any way, label your schema as a
+# variant of DocBook. See the reference documentation
+# (http://docbook.org/tdg5/en/html/ch05.html#s-notdocbook)
+# 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/.
+#
+# ======================================================================
+
+default namespace = "http://docbook.org/ns/docbook"
+namespace ctrl = "http://nwalsh.com/xmlns/schema-control/"
+namespace rng  = "http://relaxng.org/ns/structure/1.0"
+namespace s = "http://www.ascc.net/xml/schematron"
+namespace db = "http://docbook.org/ns/docbook"
+
+db.technical.inlines |=
+   db.systemitem
+ | db.option
+ | db.optional
+ | db.property
+
+# ======================================================================
+
+db.systemitem.inlines = db._text
+
+# ======================================================================
+
+[
+   db:refname [ "systemitem" ]
+   db:refpurpose [ "A system-related item or term" ]
+]
+div {
+
+   db.systemitem.class.enumeration =
+      ## A daemon or other system process (syslogd)
+      "daemon"
+    | ## A domain name (example.com)
+      "domainname"
+    | ## An ethernet address (00:05:4E:49:FD:8E)
+      "etheraddress"
+    | ## An event of some sort (SIGHUP)
+      "event"
+    | ## An event handler of some sort (hangup)
+      "eventhandler"
+    | ## A filesystem (ext3)
+      "filesystem"
+    | ## A fully qualified domain name (my.example.com)
+      "fqdomainname"
+    | ## A group name (wheel)
+      "groupname"
+    | ## An IP address (127.0.0.1)
+      "ipaddress"
+    | ## A library (libncurses)
+      "library"
+    | ## A macro
+      "macro"
+    | ## A netmask (255.255.255.192)
+      "netmask"
+    | ## A newsgroup (comp.text.xml)
+      "newsgroup"
+    | ## An operating system name (Hurd)
+      "osname"
+    | ## A process (gnome-cups-icon)
+      "process"
+    | ## A protocol (ftp)
+      "protocol"
+    | ## A resource
+      "resource"
+    | ## A server (mail.example.com)
+      "server"
+    | ## A service (ppp)
+      "service"
+    | ## A system name (hephaistos)
+      "systemname"
+    | ## A user name (ndw)
+      "username"
+
+   db.systemitem.class.attribute =
+      [
+         db:refpurpose [ "Identifies the nature of the system item" ]
+      ]
+      attribute class { db.systemitem.class.enumeration }
+
+   db.systemitem.role.attribute = attribute role { text }
+
+   db.systemitem.attlist =
+      db.systemitem.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+    & db.systemitem.class.attribute?
+
+   db.systemitem =
+      element systemitem {
+         db.systemitem.attlist,
+         db.systemitem.inlines*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "option" ]
+   db:refpurpose [ "An option for a software command" ]
+]
+div {
+
+   db.option.role.attribute = attribute role { text }
+
+   db.option.attlist =
+      db.option.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.option =
+      element option {
+         db.option.attlist,
+         db._text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "optional" ]
+   db:refpurpose [ "Optional information" ]
+]
+div {
+
+   db.optional.role.attribute = attribute role { text }
+
+   db.optional.attlist =
+      db.optional.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.optional =
+      element optional {
+         db.optional.attlist,
+         db._text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "property" ]
+   db:refpurpose [ "A unit of data associated with some part of a computer system" ]
+]
+div {
+
+   db.property.role.attribute = attribute role { text }
+
+   db.property.attlist =
+      db.property.role.attribute?
+    & db.common.attributes
+    & db.common.linking.attributes
+
+   db.property =
+      element property {
+         db.property.attlist,
+         db._text
+      }
+}
+