]> granicus.if.org Git - docbook-dsssl/commitdiff
Make attribute lists explicit (don't add them with augment.xsl)
authorNorman Walsh <ndw@nwalsh.com>
Tue, 6 Jan 2004 13:56:56 +0000 (13:56 +0000)
committerNorman Walsh <ndw@nwalsh.com>
Tue, 6 Jan 2004 13:56:56 +0000 (13:56 +0000)
18 files changed:
docbook/relaxng/src/bibliography.rnc
docbook/relaxng/src/callouts.rnc
docbook/relaxng/src/calstbl.rnc
docbook/relaxng/src/docbook.rnc
docbook/relaxng/src/ebnf.rnc
docbook/relaxng/src/glossary.rnc
docbook/relaxng/src/hier.rnc
docbook/relaxng/src/htmlform.rnc
docbook/relaxng/src/htmltbl.rnc
docbook/relaxng/src/index.rnc
docbook/relaxng/src/mathml.rnc
docbook/relaxng/src/msgset.rnc
docbook/relaxng/src/pool.rnc
docbook/relaxng/src/qandaset.rnc [new file with mode: 0644]
docbook/relaxng/src/refentry.rnc
docbook/relaxng/src/svg.rnc
docbook/relaxng/src/tasks.rnc
docbook/relaxng/src/toc.rnc

index 8606c6cacd5455374c2b18c62272d60332d7dd1a..2168f3cc189cd6b436383ddbad6d884371da0308 100644 (file)
 # Release: $Id$
 #
 
+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/docbook-ng/absinthe"
+default namespace = "http://docbook.org/docbook-ng/absinthe"
+
 navigation.components |= db.bibliography
+
 list.blocks |= db.bibliolist
 
 info.elements |= db.bibliomisc | db.bibliomset | db.bibliorelation | db.biblioset
 
-relation.attribute = attribute relation { text }?
-
-db.biblioentry = element biblioentry { bibliographic.elements+ }
-
-db.bibliomixed = element bibliomixed { (text | bibliographic.elements)* }
-
-biblioset.relation.attrib = relation.attribute
-db.biblioset = element biblioset { bibliographic.elements+ }
-
-bibliomset.relation.attrib = relation.attribute
-db.bibliomset = element bibliomset { (docbook.text | bibliographic.elements)* }
-
-db.bibliomisc = element bibliomisc { docbook.text }
-
-bibliography.status.attrib = status.attribute?
-bibliography.label.attrib = label.attribute?
-bibliography.info = docbook.info
-db.bibliography =
-   element bibliography {
-      bibliography.info,
-      blocks*,
-      (db.bibliodiv+ | (db.biblioentry | db.bibliomixed)+)
-   }
-
-bibliodiv.status.attrib = status.attribute?
-bibliodiv.label.attrib = label.attribute?
-bibliodiv.info = docbook.info.titlereq
-db.bibliodiv =
-   element bibliodiv {
-      bibliodiv.info,
-      blocks*,
-      (db.biblioentry | db.bibliomixed)+
-   }
-
-bibliolist.info = docbook.info.titleonly
-db.bibliolist =
-   element bibliolist {
-      bibliolist.info?,
-      blocks*,
-      (db.biblioentry | db.bibliomixed)+
-   }
+relation.attribute = attribute relation { text }
+
+# ======================================================================
+
+[
+   db:refname [ "biblioentry" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   biblioentry.role.attribute = attribute role { text }
+
+   biblioentry.attr =
+      biblioentry.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.biblioentry =
+      element biblioentry {
+         biblioentry.attr,
+         bibliographic.elements+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "bibliomixed" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   bibliomixed.role.attribute = attribute role { text }
+
+   bibliomixed.attr =
+      bibliomixed.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.bibliomixed =
+      element bibliomixed {
+         bibliomixed.attr,
+         (text | bibliographic.elements)*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "biblioset" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   biblioset.relation.attrib = relation.attribute
+
+   biblioset.role.attribute = attribute role { text }
+
+   biblioset.attr =
+      biblioset.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & biblioset.relation.attrib?
+
+   db.biblioset =
+      element biblioset {
+         biblioset.attr,
+         bibliographic.elements+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "bibliomset" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   bibliomset.relation.attrib = relation.attribute
+
+   bibliomset.role.attribute = attribute role { text }
+
+   bibliomset.attr =
+      bibliomset.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & bibliomset.relation.attrib?
+
+   db.bibliomset =
+      element bibliomset {
+         bibliomset.attr,
+         (docbook.text | bibliographic.elements)*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "bibliomisc" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   bibliomisc.role.attribute = attribute role { text }
+
+   bibliomisc.attr =
+      bibliomisc.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.bibliomisc =
+      element bibliomisc {
+         bibliomisc.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "bibliography" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   bibliography.status.attrib = status.attribute
+
+   bibliography.role.attribute = attribute role { text }
+
+   bibliography.attr =
+      bibliography.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & label.attribute?
+    & bibliography.status.attrib?
+
+   bibliography.info = docbook.info
+
+   db.bibliography =
+      element bibliography {
+         bibliography.attr,
+         bibliography.info,
+         blocks*,
+         (db.bibliodiv+ | (db.biblioentry | db.bibliomixed)+)
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "bibliodiv" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   bibliodiv.status.attrib = status.attribute
+
+   bibliodiv.role.attribute = attribute role { text }
+
+   bibliodiv.attr =
+      bibliodiv.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & label.attribute?
+    & bibliodiv.status.attrib?
+
+   bibliodiv.info = docbook.info.titlereq
+
+   db.bibliodiv =
+      element bibliodiv {
+         bibliodiv.attr,
+         bibliodiv.info,
+         blocks*,
+         (db.biblioentry | db.bibliomixed)+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "bibliolist" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   bibliolist.role.attribute = attribute role { text }
+
+   bibliolist.attr =
+      bibliolist.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   bibliolist.info = docbook.info.titleonly
+
+   db.bibliolist =
+      element bibliolist {
+         bibliolist.attr,
+         bibliolist.info?,
+         blocks*,
+         (db.biblioentry | db.bibliomixed)+
+      }
+}
+
 
index 7fbf742175ae09074bc71635490e7041cff09a4f..b9855bd97317190cc74f59a0c377968a7b49bb72 100644 (file)
 # ======================================================================
 
 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/docbook-ng/absinthe"
+default namespace = "http://docbook.org/docbook-ng/absinthe"
 
 publishing.inlines |= db.coref
 list.blocks |= db.calloutlist
@@ -27,7 +31,13 @@ computeroutput.inlines |= db.co
 userinput.inlines |= db.co
 replaceable.inlines |= db.co
 
-area.units.enumtype.attribute =
+# ======================================================================
+
+ctrl:other-attribute [ name="area.units.attrib"
+                       enum-name="area.units-enum.attribute"
+                       other-name="area.units-other.attributes" ]
+
+area.units-enum.attribute =
    attribute units {
       "calspair"
     | "linecolumn"
@@ -35,86 +45,281 @@ area.units.enumtype.attribute =
     | "linerange"
    }?
 
-area.units.othertype.attributes =
+area.units-other.attributes =
    attribute units { "other" },
    attribute otherunits { xsd:NMTOKEN }
 
-area.units.attribute =
-   (area.units.enumtype.attribute | area.units.othertype.attributes)
+area.units.attrib =
+   (area.units-enum.attribute | area.units-other.attributes)
+
+# ======================================================================
+
+[
+   db:refname [ "calloutlist" ]
+   db:refpurpose [ "A list of " db:xmltag [ "callout" ] "s" ]
+]
+div {
+
+   calloutlist.role.attribute = attribute role { text }
+
+   calloutlist.attr =
+      calloutlist.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   calloutlist.info = docbook.info.titleonly
+
+   db.calloutlist =
+      element calloutlist {
+         calloutlist.attr,
+         calloutlist.info,
+         blocks*,
+         db.callout+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "callout" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   callout.role.attribute = attribute role { text }
+
+   callout.attr =
+      callout.role.attribute?
+    & common.attributes
+    & attribute arearefs { xsd:IDREFS }
+
+   db.callout =
+      element callout {
+         callout.attr,
+         blocks+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "programlistingco" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   programlistingco.role.attribute = attribute role { text }
+
+   programlistingco.attr =
+      programlistingco.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   programlistingco.info = docbook.info.titleforbidden
+
+   db.programlistingco =
+      element programlistingco {
+         programlistingco.attr,
+         programlistingco.info,
+         db.areaspec,
+         db.programlisting,
+         db.calloutlist*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "areaspec" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   areaspec.role.attribute = attribute role { text }
 
+   areaspec.attr =
+      areaspec.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & area.units.attrib
 
-calloutlist.info = docbook.info.titleonly
-db.calloutlist = element calloutlist { calloutlist.info, blocks*, db.callout+ }
+   db.areaspec =
+      element areaspec {
+         areaspec.attr,
+         (db.area | db.areaset)+
+      }
+}
 
-callout.arearefs.attrib = attribute arearefs { xsd:IDREFS }
-db.callout = element callout { blocks+ }
+# ======================================================================
+
+[
+   db:refname [ "area" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   area.role.attribute = attribute role { text }
+
+   area.attr =
+      area.role.attribute?
+    & common.attributes.idreq
+    & area.units.attrib
+    & attribute linkends { xsd:IDREFS }?
+    & attribute label { text }?
+    & attribute coords { text }
+
+   db.area =
+      element area {
+         area.attr,
+         empty
+      }
+}
+
+# ======================================================================
 
-programlistingco.info = docbook.info.titleforbidden
-db.programlistingco =
-   element programlistingco {
-      programlistingco.info,
-      db.areaspec,
-      db.programlisting,
-      db.calloutlist*
-   }
+[
+   db:refname [ "areaset" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-areaspec.units.attrib = area.units.attribute
-db.areaspec = element areaspec { (db.area | db.areaset)+ }
+   areaset.role.attribute = attribute role { text }
 
-# FIXME: are the common linking attributes used on area?
+   areaset.attr =
+      areaset.role.attribute?
+    & common.attributes.idreq
+    & area.units.attrib
+    & attribute label { text }?
 
-ctrl:common-attributes [ element="area" attributes="common.attrib.idreq" ]
+   db.areaset =
+      element areaset {
+         areaset.attr,
+         db.area+
+      }
+}
 
-area.units.attrib = area.units.attribute
-area.linkends.attrib = linkends.attribute?
-area.label.attrib = attribute label { text }?
-area.coords.attrib = attribute coords { text }
-db.area = element area { empty }
+# ======================================================================
+
+[
+   db:refname [ "screenco" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-ctrl:common-attributes [ element="areaset" attributes="common.attrib.idreq" ]
+   screenco.role.attribute = attribute role { text }
 
-areaset.units.attrib = area.units.attribute
-areaset.label.attrib = attribute label { text }?
-db.areaset = element areaset { db.area+ }
+   screenco.attr =
+      screenco.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-screenco.info = docbook.info.titleforbidden
-db.screenco =
-   element screenco {
-      screenco.info,
-      db.areaspec,
-      db.screen,
-      db.calloutlist*
-   }
+   screenco.info = docbook.info.titleforbidden
 
-mediaobjectco.info = docbook.info.titleforbidden
-db.mediaobjectco =
-   element mediaobjectco {
-      mediaobjectco.info,
-      db.imageobjectco,
-      (db.imageobjectco | db.textobject)*
-   }
+   db.screenco =
+      element screenco {
+         screenco.attr,
+         screenco.info,
+         db.areaspec,
+         db.screen,
+         db.calloutlist*
+      }
+}
+
+# ======================================================================
 
-imageobjectco.info = docbook.info.titleforbidden
-db.imageobjectco =
-   element imageobjectco {
-      imageobjectco.info?,
-      db.areaspec,
-      db.imageobject,
-      db.calloutlist*
-   }
+[
+   db:refname [ "mediaobjectco" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-# FIXME: are the common linking attributes used on co?
+   mediaobjectco.role.attribute = attribute role { text }
 
-ctrl:common-attributes [ element="co" attributes="common.attrib.idreq" ]
+   mediaobjectco.attr =
+      mediaobjectco.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-co.linkends.attrib = linkends.attribute?
-co.label.attrib = attribute label { text }?
-db.co = element co { empty }
+   mediaobjectco.info = docbook.info.titleforbidden
+
+   db.mediaobjectco =
+      element mediaobjectco {
+         mediaobjectco.attr,
+         mediaobjectco.info,
+         db.imageobjectco,
+         (db.imageobjectco | db.textobject)*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "imageobjectco" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   imageobjectco.role.attribute = attribute role { text }
+
+   imageobjectco.attr =
+      imageobjectco.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   imageobjectco.info = docbook.info.titleforbidden
+
+   db.imageobjectco =
+      element imageobjectco {
+         imageobjectco.attr,
+         imageobjectco.info?,
+         db.areaspec,
+         db.imageobject,
+         db.calloutlist*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "co" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   co.role.attribute = attribute role { text }
+
+   co.attr =
+      co.role.attribute?
+    & common.attributes.idreq
+    & attribute linkends { xsd:IDREFS }?
+    & attribute label { text }?
+
+   db.co =
+      element co {
+         co.attr,
+         empty
+      }
+}
+
+# ======================================================================
 
-# FIXME: are the common linking attributes used on coref?
+[
+   db:refname [ "coref" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-coref.label.attrib = attribute label { text }?
-coref.linkend.attrib = linkend.attribute
+   coref.role.attribute = attribute role { text }
 
-db.coref = element coref { empty }
+   coref.attr =
+      coref.role.attribute?
+    & common.attributes
+    & attribute linkend { xsd:IDREF }
+    & attribute label { text }?
 
+   db.coref =
+      element coref {
+         coref.attr,
+         empty
+      }
+}
index 0cf6386a9820635b0d96651cbaeee61f3bde3409..e827e7a60830200af53ef4b51389d4306cd98633 100644 (file)
 # ======================================================================
 
 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/docbook-ng/absinthe"
+default namespace = "http://docbook.org/docbook-ng/absinthe"
+
+table.choice |= cals.table
+informaltable.choice |= cals.informaltable
 
 char.attribute = attribute char { text }
 charoff.attribute = attribute charoff { text }
@@ -23,113 +30,323 @@ valign.attribute = attribute valign { "bottom" | "middle" | "top" }
 spanname.attribute = attribute spanname { text }
 colname.attribute = attribute colname { text }
 
-tgroup.char.attrib = char.attribute?
-tgroup.charoff.attrib = charoff.attribute?
-tgroup.tgroupstyle.attrib = attribute tgroupstyle { text }?
-tgroup.cols.attrib = attribute cols { xsd:integer }
-tgroup.colsep.attrib = colsep.attribute?
-tgroup.rowsep.attrib = rowsep.attribute?
-tgroup.align.attrib = align.attribute?
-db.tgroup =
-   element tgroup {
-      db.colspec*,
-      db.spanspec*,
-      cals.thead?,
-      cals.tfoot?,
-      cals.tbody
+# ======================================================================
+
+[
+   db:refname [ "tgroup" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   tgroup.role.attribute = attribute role { text }
+
+   tgroup.attr =
+      tgroup.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & char.attribute?
+    & charoff.attribute?
+    & attribute tgroupstyle { text }?
+    & attribute cols { xsd:integer }
+    & colsep.attribute?
+    & rowsep.attribute?
+    & align.attribute?
+
+   db.tgroup =
+      element tgroup {
+         tgroup.attr,
+         db.colspec*,
+         db.spanspec*,
+         cals.thead?,
+         cals.tfoot?,
+         cals.tbody
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "colspec" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   colspec.role.attribute = attribute role { text }
+
+   colspec.attr =
+      colspec.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & attribute colnum { xsd:integer }?
+    & char.attribute?
+    & colsep.attribute?
+    & attribute colwidth { text }?
+    & charoff.attribute?
+    & colname.attribute?
+    & rowsep.attribute?
+    & align.attribute?
+
+   db.colspec =
+      element colspec {
+         colspec.attr,
+         empty
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "spanspec" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   spanspec.role.attribute = attribute role { text }
+
+   spanspec.attr =
+      spanspec.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & attribute namest { text }
+    & attribute nameend { text }
+    & spanname.attribute
+    & char.attribute?
+    & colsep.attribute?
+    & charoff.attribute?
+    & rowsep.attribute?
+    & align.attribute?
+
+   db.spanspec =
+      element spanspec {
+         spanspec.attr,
+         empty
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "thead" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   cals.thead.role.attribute = attribute role { text }
+
+   cals.thead.attr =
+      cals.thead.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & valign.attribute?
+
+   cals.thead =
+      element thead {
+         cals.thead.attr,
+         db.colspec*,
+         db.row+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "tfoot" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   cals.tfoot.role.attribute = attribute role { text }
+
+   cals.tfoot.attr =
+      cals.tfoot.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & valign.attribute?
+
+   cals.tfoot =
+      element tfoot {
+         cals.tfoot.attr,
+         db.colspec*,
+         db.row+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "tbody" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   cals.tbody.role.attribute = attribute role { text }
+
+   cals.tbody.attr =
+      cals.tbody.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & valign.attribute?
+
+   cals.tbody =
+      element tbody {
+         cals.tbody.attr,
+         db.row+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "row" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   row.role.attribute = attribute role { text }
+
+   row.attr =
+      row.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & rowsep.attribute?
+    & valign.attribute?
+
+   db.row = element row {
+      row.attr,
+      (db.entry | db.entrytbl)+
+   }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "entry" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   entry.role.attribute = attribute role { text }
+
+   entry.attr =
+      entry.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & attribute nameend { text }?
+    & valign.attribute?
+    & char.attribute?
+    & colsep.attribute?
+    & charoff.attribute?
+    & attribute morerows { xsd:integer }?
+    & attribute spanname { text }?
+    & attribute namest { text }?
+    & colname.attribute?
+    & rowsep.attribute?
+    & attribute rotate { text }?
+    & align.attribute?
+
+   db.entry = element entry {
+      entry.attr,
+      (inlines* | blocks*)
    }
+}
 
-colspec.colnum.attrib = attribute colnum { xsd:integer }?
-colspec.char.attrib = char.attribute?
-colspec.colsep.attrib = colsep.attribute?
-colspec.colwidth.attrib = attribute colwidth { text }?
-colspec.charoff.attrib = charoff.attribute?
-colspec.colname.attrib = colname.attribute?
-colspec.rowsep.attrib = rowsep.attribute?
-colspec.align.attrib = align.attribute?
-db.colspec = element colspec { empty }
-
-spanspec.namest.attrib = attribute namest { text }
-spanspec.nameend.attrib = attribute nameend { text }
-spanspec.spanname.attrib = spanname.attribute
-spanspec.char.attrib = char.attribute?
-spanspec.colsep.attrib = colsep.attribute?
-spanspec.charoff.attrib = charoff.attribute?
-spanspec.rowsep.attrib = rowsep.attribute?
-spanspec.align.attrib = align.attribute?
-db.spanspec = element spanspec { empty }
-
-cals.thead.valign.attrib = valign.attribute?
-cals.thead = element thead { db.colspec*, db.row+ }
-
-cals.tfoot.valign.attrib = valign.attribute?
-cals.tfoot = element tfoot { db.colspec*, db.row+ }
-
-cals.tbody.valign.attrib = valign.attribute?
-cals.tbody = element tbody { db.row+ }
-
-row.rowsep.attrib = rowsep.attribute?
-row.valign.attrib = valign.attribute?
-db.row = element row { (db.entry | db.entrytbl)+ }
-
-entry.nameend.attrib = attribute nameend { text }?
-entry.valign.attrib = valign.attribute?
-entry.char.attrib = char.attribute?
-entry.colsep.attrib = colsep.attribute?
-entry.charoff.attrib = charoff.attribute?
-entry.morerows.attrib = attribute morerows { xsd:integer }?
-entry.spanname.attrib = attribute spanname { text }?
-entry.namest.attrib = attribute namest { text }?
-entry.colname.attrib = colname.attribute?
-entry.rowsep.attrib = rowsep.attribute?
-entry.rotate.attrib = attribute rotate { text }?
-entry.align.attrib = align.attribute?
-db.entry = element entry { (inlines* | blocks*) }
-
-entrytbl.nameend.attrib = attribute nameend { text }?
-entrytbl.char.attrib = char.attribute?
-entrytbl.charoff.attrib = charoff.attribute?
-entrytbl.spanname.attrib = attribute spanname { text }?
-entrytbl.namest.attrib = attribute namest { text }?
-entrytbl.tgroupstyle.attrib = attribute tgroupstyle { text }?
-entrytbl.cols.attrib = attribute cols { xsd:integer }?
-entrytbl.colsep.attrib = colsep.attribute?
-entrytbl.rowsep.attrib = rowsep.attribute?
-entrytbl.colname.attrib = colname.attribute?
-entrytbl.align.attrib = align.attribute?
-db.entrytbl = element entrytbl { (db.colspec*, db.spanspec*, cals.thead?, cals.tbody) }
-
-cals.table.tabstyle.attrib = attribute tabstyle { text }?
-cals.table.orient.attrib = attribute orient { "land" | "port" }?
-cals.table.colsep.attrib = colsep.attribute?
-cals.table.rowsep.attrib = rowsep.attribute?
-cals.table.frame.attrib =
-   attribute frame {
-      "all" | "bottom" | "none" | "sides" | "top" | "topbot"
-   }?
-
-cals.table.pgwide.attrib = attribute pgwide { "0" | "1" }?
-
-cals.table.info = docbook.info.titleonlyreq
-cals.table = element table {
-   cals.table.info,
-   indexing.inlines*,
-   db.textobject*,
-   (db.mediaobject+|db.tgroup+) }
-
-cals.informaltable.info = docbook.info.titleforbidden
-cals.informaltable = element informaltable {
-   cals.informaltable.info,
-   indexing.inlines*,
-   db.textobject*,
-   (db.mediaobject+|db.tgroup+) }
-
-cals.informaltable.tabstyle.attrib = cals.table.tabstyle.attrib
-cals.informaltable.orient.attrib = cals.table.orient.attrib
-cals.informaltable.colsep.attrib = cals.table.colsep.attrib
-cals.informaltable.rowsep.attrib = cals.table.rowsep.attrib
-cals.informaltable.frame.attrib = cals.table.frame.attrib
-cals.informaltable.pgwide.attrib = cals.table.pgwide.attrib
+# ======================================================================
 
-table.choice |= cals.table
-informaltable.choice |= cals.informaltable
+[
+   db:refname [ "entrytbl" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   entrytbl.role.attribute = attribute role { text }
+
+   entrytbl.attr =
+      entrytbl.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & attribute nameend { text }?
+    & char.attribute?
+    & charoff.attribute?
+    & attribute spanname { text }?
+    & attribute namest { text }?
+    & attribute tgroupstyle { text }?
+    & attribute cols { xsd:integer }?
+    & colsep.attribute?
+    & rowsep.attribute?
+    & colname.attribute?
+    & align.attribute?
+
+   db.entrytbl =
+      element entrytbl {
+         entrytbl.attr,
+         db.colspec*,
+         db.spanspec*,
+         cals.thead?,
+         cals.tbody
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "table" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   cals.table.role.attribute = attribute role { text }
+
+   cals.table.attr =
+      cals.table.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & attribute tabstyle { text }?
+    & attribute orient { "land" | "port" }?
+    & colsep.attribute?
+    & rowsep.attribute?
+    & attribute frame { "all" | "bottom" | "none" | "sides" | "top" | "topbot" }?
+    & attribute pgwide { "0" | "1" }?
+
+   cals.table.info = docbook.info.titleonlyreq
+
+   cals.table = element table {
+      cals.table.attr,
+      cals.table.info,
+      indexing.inlines*,
+      db.textobject*,
+      (db.mediaobject+|db.tgroup+)
+   }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "informaltable" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   cals.informaltable.role.attribute = attribute role { text }
+
+   cals.informaltable.attr =
+      cals.informaltable.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & attribute tabstyle { text }?
+    & attribute orient { "land" | "port" }?
+    & colsep.attribute?
+    & rowsep.attribute?
+    & attribute frame { "all" | "bottom" | "none" | "sides" | "top" | "topbot" }?
+    & attribute pgwide { "0" | "1" }?
+
+   cals.informaltable.info = docbook.info.titleforbidden
+
+   cals.informaltable =
+      element informaltable {
+         cals.informaltable.attr,
+         cals.informaltable.info,
+         indexing.inlines*,
+         db.textobject*,
+         (db.mediaobject+|db.tgroup+)
+      }
+}
index d2e2f4587a840c8655d2136403f231c1593b19eb..a785a7342cc47c97a9f8376fd1e3a32017a775b4 100644 (file)
 # ======================================================================
 
 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/docbook-ng/absinthe"
+default namespace = "http://docbook.org/docbook-ng/absinthe"
 
 start = db.set
         | db.book
@@ -34,6 +38,7 @@ include "ebnf.rnc"
 include "calstbl.rnc"
 include "htmltbl.rnc"
 include "msgset.rnc"
+include "qandaset.rnc"
 include "mathml.rnc"
 include "svg.rnc"
 #include "htmlform.rnc"
index 8529f62b5d7cb3a9af54a343f88aa31736a3444f..17b8acfc7a6ee070821dda73c582d60c444f3343 100644 (file)
 #
 
 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/docbook-ng/absinthe"
+default namespace = "http://docbook.org/docbook-ng/absinthe"
 
-productionset.info = docbook.info.titleonly
+technical.inlines |= db.nonterminal
+technical.blocks |= db.productionset | db.constraintdef
 
-db.productionset =
-   element productionset { productionset.info, (db.production|db.productionrecap)+ }
+# ======================================================================
 
-ctrl:common-attributes [ element="production" attributes="common.attrib.idreq" ]
+[
+   db:refname [ "productionset" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-db.production = element production { db.lhs, db.rhs, db.constraint* }
+   productionset.role.attribute = attribute role { text }
 
-db.lhs = element lhs { text }
+   productionset.attr =
+      productionset.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-db.rhs = element rhs { (text|db.nonterminal|db.lineannotation|db.sbr)* }
+   productionset.info = docbook.info.titleonly
 
-nonterminal.def.attrib = attribute def { text }
-db.nonterminal = element nonterminal { text }
+   db.productionset =
+      element productionset {
+         productionset.attr,
+         productionset.info,
+         (db.production|db.productionrecap)+
+      }
+}
 
-db.constraint = element constraint { empty }
+# ======================================================================
 
-productionrecap.linkend.attrib = attribute linkend { xsd:IDREF }
-db.productionrecap = element productionrecap { empty }
+[
+   db:refname [ "production" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-constraintdef.info = docbook.info.titleonly
-db.constraintdef = element constraintdef { constraintdef.info, blocks+ }
+   production.role.attribute = attribute role { text }
+
+   production.attr =
+      production.role.attribute?
+    & common.attributes.idreq
+    & common.linking.attributes
+
+   db.production =
+      element production {
+         production.attr,
+         db.lhs,
+         db.rhs,
+         db.constraint*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "lhs" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   lhs.role.attribute = attribute role { text }
+
+   lhs.attr =
+      lhs.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.lhs =
+      element lhs {
+         lhs.attr,
+         text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "rhs" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   rhs.role.attribute = attribute role { text }
+
+   rhs.attr =
+      rhs.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.rhs =
+      element rhs {
+         rhs.attr,
+         (text|db.nonterminal|db.lineannotation|db.sbr)*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "nonterminal" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   nonterminal.role.attribute = attribute role { text }
+
+   nonterminal.attr =
+      nonterminal.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & attribute def { text }
+
+   db.nonterminal =
+      element nonterminal {
+         nonterminal.attr,
+         text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "constraint" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   constraint.role.attribute = attribute role { text }
+
+   constraint.attr =
+      constraint.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.constraint =
+      element constraint {
+         constraint.attr,
+         empty
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "productionrecap" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   productionrecap.role.attribute = attribute role { text }
+
+   productionrecap.attr =
+      productionrecap.role.attribute?
+    & common.attributes
+    & common.linking.attributes.req
+
+   db.productionrecap =
+      element productionrecap {
+         productionrecap.attr,
+         empty
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "constraintdef" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   constraintdef.role.attribute = attribute role { text }
+
+   constraintdef.attr =
+      constraintdef.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   constraintdef.info = docbook.info.titleonly
+
+   db.constraintdef =
+      element constraintdef {
+         constraintdef.attr,
+         constraintdef.info,
+         blocks+
+      }
+}
 
-technical.inlines |= db.nonterminal
-technical.blocks |= db.productionset | db.constraintdef
index 142a580c8eb2f644654c80621755bff0a9a03b4d..03e2571fb6c2a764d55e20b68da2585455295279 100644 (file)
 # Release: $Id$
 #
 
+namespace rng  = "http://relaxng.org/ns/structure/1.0"
 namespace s = "http://www.ascc.net/xml/schematron"
+namespace db = "http://docbook.org/docbook-ng/absinthe"
+default namespace = "http://docbook.org/docbook-ng/absinthe"
 
 general.inlines |= glossary.inlines
 list.blocks |= db.glosslist
@@ -20,89 +23,272 @@ glossary.inlines =
    db.firstterm
  | db.glossterm
 
-glosslist.info = docbook.info.titleonly
-db.glosslist = element glosslist { glosslist.info?, blocks*, db.glossentry+ }
-
-glossentry.sortas.attrib = attribute sortas { text }?
-db.glossentry =
-   element glossentry {
-      db.glossterm,
-      db.acronym?,
-      db.abbrev?,
-      db.indexterm*,
-      (db.glosssee | db.glossdef+)
-   }
-
-glossdef.subject.attrib = attribute subject { text }?
-db.glossdef = element glossdef { blocks+, db.glossseealso* }
-
-glosssee.otherterm.attrib = attribute otherterm { xsd:IDREF }?
-db.glosssee =
-   [
-      s:rule [
-         context = "glosssee[@linkend]"
-         s:assert [
-            test = "name(//*[@id=current()/@linkend]) = 'glossentry'"
-            "@linkend on glosssee must point to a glossentry."
+baseform.attribute = attribute baseform { text }?
+
+# ======================================================================
+
+[
+   db:refname [ "glosslist" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   glosslist.role.attribute = attribute role { text }
+
+   glosslist.attr =
+      glosslist.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   glosslist.info = docbook.info.titleonly
+
+   db.glosslist =
+      element glosslist {
+         glosslist.attr,
+         glosslist.info?,
+         blocks*,
+         db.glossentry+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "glossentry" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   glossentry.role.attribute = attribute role { text }
+
+   glossentry.attr =
+      glossentry.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & attribute sortas { text }?
+
+   db.glossentry =
+      element glossentry {
+         glossentry.attr,
+         db.glossterm,
+         db.acronym?,
+         db.abbrev?,
+         db.indexterm*,
+         (db.glosssee | db.glossdef+)
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "glossdef" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   glossdef.role.attribute = attribute role { text }
+
+   glossdef.attr =
+      glossdef.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & attribute subject { text }?
+
+   db.glossdef =
+      element glossdef {
+         glossdef.attr,
+         blocks+,
+         db.glossseealso*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "glosssee" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   glosssee.role.attribute = attribute role { text }
+
+   glosssee.attr =
+      glosssee.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & attribute otherterm { xsd:IDREF }?
+
+   db.glosssee =
+      [
+         s:rule [
+            context = "db:glosssee[@linkend]"
+            s:assert [
+               test = "local-name(//*[@id=current()/@linkend]) = 'glossentry' and namespace-uri(//*[@id=current()/@linkend]) = 'http://docbook.org/docbook-ng/absinthe'"
+               "@linkend on glosssee must point to a glossentry."
+            ]
          ]
       ]
-   ]
-   element glosssee { inlines* }
-
-glossseealso.otherterm.attrib = attribute otherterm { xsd:IDREF }?
-db.glossseealso =
-   [
-      s:rule [
-         context = "glossseealso[@linkend]"
-         s:assert [
-            test = "name(//*[@id=current()/@linkend]) = 'glossentry'"
-            "@linkend on glossseealso must point to a glossentry."
+      element glosssee {
+         glosssee.attr,
+         inlines*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "glossseealso" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   glossseealso.role.attribute = attribute role { text }
+
+   glossseealso.attr =
+      glossseealso.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & attribute otherterm { xsd:IDREF }?
+
+   db.glossseealso =
+      [
+         s:rule [
+            context = "db:glossseealso[@linkend]"
+            s:assert [
+               test = "local-name(//*[@id=current()/@linkend]) = 'glossentry' and namespace-uri(//*[@id=current()/@linkend]) = 'http://docbook.org/docbook-ng/absinthe'"
+               "@linkend on glossseealso must point to a glossentry."
+            ]
          ]
       ]
-   ]
-   element glossseealso { inlines* }
-
-firstterm.baseform.attrib = glossterm.baseform.attrib
-db.firstterm =
-   [
-      s:rule [
-         context = "firstterm[@linkend]"
-         s:assert [
-            test = "name(//*[@id=current()/@linkend]) = 'glossentry'"
-            "@linkend on firstterm must point to a glossentry."
+      element glossseealso {
+         glossseealso.attr,
+         inlines*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "firstterm" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   firstterm.role.attribute = attribute role { text }
+
+   firstterm.attr =
+      firstterm.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & baseform.attribute
+
+   db.firstterm =
+      [
+         s:rule [
+            context = "db:firstterm[@linkend]"
+            s:assert [
+               test = "local-name(//*[@id=current()/@linkend]) = 'glossentry' and namespace-uri(//*[@id=current()/@linkend]) = 'http://docbook.org/docbook-ng/absinthe'"
+               "@linkend on firstterm must point to a glossentry."
+            ]
          ]
       ]
-   ]
-   element firstterm { inlines* }
-
-glossterm.baseform.attrib = attribute baseform { text }?
-
-db.glossterm =
-   [
-      s:rule [
-         context = "glossterm[@linkend]"
-         s:assert [
-            test = "name(//*[@id=current()/@linkend]) = 'glossentry'"
-            "@linkend on glossterm must point to a glossentry."
+      element firstterm {
+         firstterm.attr,
+         inlines*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "glossterm" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   glossterm.role.attribute = attribute role { text }
+
+   glossterm.attr =
+      glossterm.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & baseform.attribute
+
+   db.glossterm =
+      [
+         s:rule [
+            context = "db:glossterm[@linkend]"
+            s:assert [
+               test = "local-name(//*[@id=current()/@linkend]) = 'glossentry' and namespace-uri(//*[@id=current()/@linkend]) = 'http://docbook.org/docbook-ng/absinthe'"
+               "@linkend on glossterm must point to a glossentry."
+            ]
          ]
       ]
-   ]
-   element glossterm { inlines* }
-
-glossary.status.attrib = status.attribute?
-glossary.label.attrib = label.attribute?
-glossary.info = docbook.info
-db.glossary =
-   element glossary {
-      glossary.info,
-      blocks*,
-      (db.glossdiv+ | db.glossentry+),
-      db.bibliography?
-   }
-
-glossdiv.status.attrib = status.attribute?
-glossdiv.label.attrib = label.attribute?
-glossdiv.info = docbook.info.titlereq
-db.glossdiv =
-   element glossdiv { glossdiv.info, blocks*, db.glossentry+ }
+      element glossterm {
+         glossterm.attr,
+         inlines*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "glossary" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   glossary.status.attribute = status.attribute
+
+   glossary.role.attribute = attribute role { text }
+
+   glossary.attr =
+      glossary.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & label.attribute?
+    & glossary.status.attribute?
+
+   glossary.info = docbook.info
+
+   db.glossary =
+      element glossary {
+         glossary.attr,
+         glossary.info,
+         blocks*,
+         (db.glossdiv+ | db.glossentry+),
+         db.bibliography?
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "glossdiv" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   glossdiv.status.attribute = status.attribute
+
+   glossdiv.role.attribute = attribute role { text }
+
+   glossdiv.attr =
+      glossdiv.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & label.attribute?
+    & glossdiv.status.attribute?
+
+   glossdiv.info = docbook.info.titlereq
+
+   db.glossdiv =
+      element glossdiv {
+         glossdiv.attr,
+         glossdiv.info,
+         blocks*,
+         db.glossentry+
+      }
+}
+
 
index dc3e28056f38a243caf8607b9ac67d4bda9980e3..f1a27bc3c8d6ccade8fb4e26ee5ce6833dae197e 100644 (file)
 #
 # ======================================================================
 
+namespace rng  = "http://relaxng.org/ns/structure/1.0"
+namespace s = "http://www.ascc.net/xml/schematron"
+namespace db = "http://docbook.org/docbook-ng/absinthe"
+default namespace = "http://docbook.org/docbook-ng/absinthe"
+
 status.attribute = attribute status { text }
 label.attribute = attribute label { text }
 
@@ -36,65 +41,275 @@ component.contentmodel =
 setindex.components = notAllowed
 toc.components = notAllowed
 
-set.status.attrib = status.attribute?
-set.label.attrib = label.attribute?
-set.info = docbook.info.titlereq
-db.set = element set { set.info, toc.components?, (db.set|db.book)+, setindex.components? }
-
-book.status.attrib = status.attribute?
-book.label.attrib = label.attribute?
-book.info = docbook.info.titlereq
-db.book =
-   element book { book.info, (navigation.components | components | divisions)+ }
-
-dedication.status.attrib = status.attribute?
-dedication.label.attrib = label.attribute?
-dedication.info = docbook.info
-db.dedication =
-  element dedication { dedication.info, blocks+ }
-
-colophon.status.attrib = status.attribute?
-colophon.label.attrib = label.attribute?
-colophon.info = docbook.info
-db.colophon =
-   element colophon { colophon.info, blocks+ }
-
-appendix.status.attrib = status.attribute?
-appendix.label.attrib = label.attribute?
-appendix.info = docbook.info.titlereq
-db.appendix =
-   element appendix { appendix.info, component.contentmodel }
-
-chapter.status.attrib = status.attribute?
-chapter.label.attrib = label.attribute?
-chapter.info = docbook.info.titlereq
-db.chapter =
-   element chapter { chapter.info, component.contentmodel }
+# ======================================================================
+
+[
+   db:refname [ "set" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   set.status.attrib = status.attribute
+
+   set.role.attribute = attribute role { text }
+
+   set.attr =
+      set.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & label.attribute?
+    & set.status.attrib?
+
+   set.info = docbook.info.titlereq
+
+   db.set =
+      element set {
+         set.attr,
+         set.info,
+         toc.components?,
+         (db.set|db.book)+,
+         setindex.components?
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "book" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   book.status.attrib = status.attribute
+
+   book.role.attribute = attribute role { text }
+
+   book.attr =
+      book.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & label.attribute?
+    & book.status.attrib?
+
+   book.info = docbook.info.titlereq
+
+   db.book =
+      element book {
+         book.attr,
+         book.info,
+         (navigation.components | components | divisions)+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "dedication" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   dedication.status.attrib = status.attribute
+
+   dedication.role.attribute = attribute role { text }
+
+   dedication.attr =
+      dedication.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & label.attribute?
+    & dedication.status.attrib?
+
+   dedication.info = docbook.info
+
+   db.dedication =
+      element dedication {
+         dedication.attr,
+         dedication.info,
+         blocks+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "colophon" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   colophon.status.attrib = status.attribute
+
+   colophon.role.attribute = attribute role { text }
+
+   colophon.attr =
+      colophon.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & label.attribute?
+    & colophon.status.attrib?
+
+   colophon.info = docbook.info
+
+   db.colophon =
+      element colophon {
+         colophon.attr,
+         colophon.info,
+         blocks+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "appendix" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   appendix.status.attrib = status.attribute
+
+   appendix.role.attribute = attribute role { text }
+
+   appendix.attr =
+      appendix.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & label.attribute?
+    & appendix.status.attrib?
+
+   appendix.info = docbook.info.titlereq
+
+   db.appendix =
+      element appendix {
+         appendix.attr,
+         appendix.info,
+         component.contentmodel
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "chapter" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   chapter.status.attrib = status.attribute
+
+   chapter.role.attribute = attribute role { text }
+
+   chapter.attr =
+      chapter.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & label.attribute?
+    & chapter.status.attrib?
+
+   chapter.info = docbook.info.titlereq
+
+   db.chapter =
+      element chapter {
+         chapter.attr,
+         chapter.info,
+         component.contentmodel
+      }
+}
+
+# ======================================================================
 
 part.components = navigation.components | components
 
-part.status.attrib = status.attribute?
-part.label.attrib = label.attribute?
-part.info = docbook.info.titlereq
-db.part =
-   element part {
-      part.info,
-      db.partintro?,
-      part.components+
-   }
-
-preface.status.attrib = status.attribute?
-preface.label.attrib = label.attribute?
-preface.info = docbook.info
-db.preface =
-   element preface { preface.info, component.contentmodel }
-
-partintro.status.attrib = status.attribute?
-partintro.label.attrib = label.attribute?
-
-partintro.info = docbook.info
-db.partintro =
-   element partintro { partintro.info, blocks.or.sections }
+# ======================================================================
+
+[
+   db:refname [ "part" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   part.status.attrib = status.attribute
+
+   part.role.attribute = attribute role { text }
+
+   part.attr =
+      part.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & label.attribute?
+    & part.status.attrib?
+
+   part.info = docbook.info.titlereq
+
+   db.part =
+      element part {
+         part.attr,
+         part.info,
+         db.partintro?,
+         part.components+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "preface" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   preface.status.attrib = status.attribute
+
+   preface.role.attribute = attribute role { text }
+
+   preface.attr =
+      preface.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & label.attribute?
+    & preface.status.attrib?
+
+   preface.info = docbook.info
+
+   db.preface =
+      element preface {
+         preface.attr,
+         preface.info,
+         component.contentmodel
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "partintro" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   partintro.status.attrib = status.attribute
+
+   partintro.role.attribute = attribute role { text }
+
+   partintro.attr =
+      partintro.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & label.attribute?
+    & partintro.status.attrib?
+
+   partintro.info = docbook.info
+
+   db.partintro =
+      element partintro {
+         partintro.attr,
+         partintro.info,
+         blocks.or.sections
+      }
+}
+
+# ======================================================================
 
 sections.optional = db.section* | db.simplesect*
 
@@ -103,40 +318,130 @@ sections.required = db.section+ | db.simplesect+
 blocks.or.sections =
   (blocks+, sections.optional) | sections.required
 
-section.status.attrib = status.attribute?
-section.label.attrib = label.attribute?
-section.info = docbook.info.titlereq
-db.section =
-  element section { section.info, blocks.or.sections }
+# ======================================================================
+
+[
+   db:refname [ "section" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   section.status.attrib = status.attribute
+
+   section.role.attribute = attribute role { text }
 
-simplesect.status.attrib = status.attribute?
-simplesect.label.attrib = label.attribute?
-simplesect.info = docbook.info.titlereq
-db.simplesect =
-  element simplesect { simplesect.info, blocks+ }
+   section.attr =
+      section.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & label.attribute?
+    & section.status.attrib?
 
-db.ackno = element ackno { para.blocks+ }
+   section.info = docbook.info.titlereq
+
+   db.section =
+      element section {
+         section.attr,
+         section.info,
+         blocks.or.sections
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "simplesect" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   simplesect.status.attrib = status.attribute
+
+   simplesect.role.attribute = attribute role { text }
+
+   simplesect.attr =
+      simplesect.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & label.attribute?
+    & simplesect.status.attrib?
+
+   simplesect.info = docbook.info.titlereq
+
+   db.simplesect =
+      element simplesect {
+         simplesect.attr,
+         simplesect.info,
+         blocks+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "ackno" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   ackno.role.attribute = attribute role { text }
+
+   ackno.attr =
+      ackno.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.ackno=
+      element ackno {
+         ackno.attr,
+         para.blocks+
+      }
+}
+
+# ======================================================================
 
 article.components.optional = db.section* | db.simplesect*
 article.components.required = db.section+ | db.simplesect+
 
-article.status.attrib = status.attribute?
-article.label.attrib = label.attribute?
-article.class.attrib =
-   attribute class {
-      "faq"
-    | "journalarticle"
-    | "productsheet"
-    | "specification"
-    | "techreport"
-    | "whitepaper"
-   }?
-
-article.info = docbook.info.titlereq
-db.article =
-   element article {
-      article.info,
-      navigation.components*,
-      ((blocks+, article.components.optional) | article.components.required),
-      (db.appendix | navigation.components | db.ackno)*
-   }
+# ======================================================================
+
+[
+   db:refname [ "article" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   article.status.attrib = status.attribute
+
+   article.class.attrib =
+      attribute class {
+         "faq"
+       | "journalarticle"
+       | "productsheet"
+       | "specification"
+       | "techreport"
+       | "whitepaper"
+      }
+
+   article.role.attribute = attribute role { text }
+
+   article.attr =
+      article.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & label.attribute?
+    & article.status.attrib?
+    & article.class.attrib?
+
+   article.info = docbook.info.titlereq
+
+   db.article =
+      element article {
+         article.attr,
+         article.info,
+         navigation.components*,
+         ((blocks+, article.components.optional) | article.components.required),
+         (db.appendix | navigation.components | db.ackno)*
+      }
+}
+
index 78ece18e95aebfccd54408ca8cc73e060b706d08..87cfa13310dce81a055867c88b8f4dd8c636457d 100644 (file)
 
 namespace html = "http://www.w3.org/1999/xhtml"
 namespace ctrl = "http://nwalsh.com/xmlns/schema-control/"
-
-ctrl:common-attributes [ define="html.form" suppress="1" ]
-
-html.form.html.attrib = html.attrs
-html.form.action.attrib = attribute action { text }
-html.form.method.attrib = attribute method { "GET" | "POST" }?
-html.form.onsubmit.attrib = attribute onsubmit { text }?
-html.form.onreset.attrib = attribute onreset { text }?
-
-html.form = element html:form {
-   ( blocks
-    | html.input
-    | html.button
-    | html.label
-    | html.select
-    | html.textarea )+ }
-
-html.input.html.attrib = html.attrs
-html.input.type.attrib = attribute type {
-   "text"
- | "password"
- | "checkbox"
- | "radio"
- | "submit"
- | "reset"
- | "file"
- | "hidden"
- | "image"
- | "button" }?
-html.input.name.attrib = attribute name { text }?
-html.input.value.attrib = attribute value { text }?
-html.input.checked.attrib = attribute checked { "checked" }?
-html.input.disabled.attrib = attribute disabled { "disabled" }?
-html.input.readonly.attrib = attribute readonly { "readonly" }?
-html.input.size.attrib = attribute size { text }?
-html.input.maxlength.attrib = attribute maxlength { text }?
-html.input.src.attrib = attribute src { text }?
-html.input.alt.attrib = attribute alt { text }?
-html.input.usemap.attrib = attribute usemap { text }?
-html.input.tabindex.attrib = attribute tabindex { text }?
-html.input.accesskey.attrib = attribute accesskey { text }?
-html.input.onfocus.attrib = attribute onfocus { text }?
-html.input.onblur.attrib = attribute onblur { text }?
-html.input.onselect.attrib = attribute onselect { text }?
-html.input.onchange.attrib = attribute onchange { text }?
-html.input = element html:input { empty }
-
-html.button.html.attrib = html.attrs
-html.button.name.attrib = attribute name { text }?
-html.button.value.attrib = attribute value { text }?
-html.button.type.attrib = attribute type { "button" | "submit" | "reset" }?
-html.button.disabled.attrib = attribute disabled { "disabled" }?
-html.button.tabindex.attrib = attribute tabindex { text }?
-html.button.accesskey.attrib = attribute accesskey { text }?
-html.button.onfocus.attrib = attribute onfocus { text }?
-html.button.onblur.attrib = attribute onblur { text }?
-html.button = element html:button { inlines* }
-
-html.label.html.attrib = html.attrs
-html.label.accesskey.attrib = attribute accesskey { text }?
-html.label.onfocus.attrib = attribute onfocus { text }?
-html.label.onblur.attrib = attribute onblur { text }?
-html.label = element html:label { inlines* }
-
-html.select.html.attrib = html.attrs
-html.select.name.attrib = attribute name { text }?
-html.select.size.attrib = attribute size { text }?
-html.select.multiple.attrib = attribute multiple { "multiple" }?
-html.select.disabled.attrib = attribute disabled { "disabled" }?
-html.select.tabindex.attrib = attribute tabindex { text }?
-html.select.onfocus.attrib = attribute onfocus { text }?
-html.select.onblur.attrib = attribute onblur { text }?
-html.select.onchange.attrib = attribute onchange { text }?
-html.select = element html:select { html.option+ }
-
-html.option.html.attrib = html.attrs
-html.option.selected.attrib = attribute selected { "selected" }?
-html.option.disabled.attrib = attribute disabled { "disabled" }?
-html.option.value.attrib = attribute value { text }?
-html.option = element html:option { text }
-
-html.textarea.html.attrib = html.attrs
-html.textarea.name.attrib = attribute name { text }?
-html.textarea.rows.attrib = attribute rows { text }
-html.textarea.cols.attrib = attribute cols { text }
-html.textarea.disabled.attrib = attribute disabled { "disabled" }?
-html.textarea.readonly.attrib = attribute readonly { "readonly" }?
-html.textarea.tabindex.attrib = attribute tabindex { text }?
-html.textarea.accesskey.attrib = attribute accesskey { text }?
-html.textarea.onfocus.attrib = attribute onfocus { text }?
-html.textarea.onblur.attrib = attribute onblur { text }?
-html.textarea.onselect.attrib = attribute onselect { text }?
-html.textarea.onchange.attrib = attribute onchange { text }?
-html.textarea = element html:textarea { text }
+namespace rng  = "http://relaxng.org/ns/structure/1.0"
+namespace s = "http://www.ascc.net/xml/schematron"
+namespace db = "http://docbook.org/docbook-ng/absinthe"
+default namespace = "http://docbook.org/docbook-ng/absinthe"
 
 mediaobject.content |= any.svg
 inlinemediaobject.content |= any.svg
 
 extension.blocks |= html.form
 extension.inlines |= html.input | html.button | html.label | html.select | html.textarea
+
+# ======================================================================
+
+[
+   db:refname [ "html:form" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   html.form.attr =
+      html.attrs
+    & attribute action { text }
+    & attribute method { "GET" | "POST" }?
+    & attribute onsubmit { text }?
+    & attribute onreset { text }?
+
+   html.form =
+      element html:form {
+         html.form.attr,
+         ( blocks
+          | html.input
+          | html.button
+          | html.label
+          | html.select
+          | html.textarea )+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "html:input" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   html.input.attr =
+      html.attrs
+    & attribute type {
+       "text"
+     | "password"
+     | "checkbox"
+     | "radio"
+     | "submit"
+     | "reset"
+     | "file"
+     | "hidden"
+     | "image"
+     | "button" }?
+    & attribute name { text }?
+    & attribute value { text }?
+    & attribute checked { "checked" }?
+    & attribute disabled { "disabled" }?
+    & attribute readonly { "readonly" }?
+    & attribute size { text }?
+    & attribute maxlength { text }?
+    & attribute src { text }?
+    & attribute alt { text }?
+    & attribute usemap { text }?
+    & attribute tabindex { text }?
+    & attribute accesskey { text }?
+    & attribute onfocus { text }?
+    & attribute onblur { text }?
+    & attribute onselect { text }?
+    & attribute onchange { text }?
+
+   html.input =
+      element html:input {
+         html.input.attr,
+         empty
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "html:button" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   html.button.attr =
+      html.attrs
+    & attribute name { text }?
+    & attribute value { text }?
+    & attribute type { "button" | "submit" | "reset" }?
+    & attribute disabled { "disabled" }?
+    & attribute tabindex { text }?
+    & attribute accesskey { text }?
+    & attribute onfocus { text }?
+    & attribute onblur { text }?
+
+   html.button =
+      element html:button {
+         html.button.attr,
+         inlines*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "html:label" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   html.label.attr =
+      html.attrs
+    & attribute accesskey { text }?
+    & attribute onfocus { text }?
+    & attribute onblur { text }?
+
+   html.label =
+      element html:label {
+         html.label.attr,
+         inlines*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "html:select" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   html.select.attr =
+      html.attrs
+    & attribute name { text }?
+    & attribute size { text }?
+    & attribute multiple { "multiple" }?
+    & attribute disabled { "disabled" }?
+    & attribute tabindex { text }?
+    & attribute onfocus { text }?
+    & attribute onblur { text }?
+    & attribute onchange { text }?
+
+   html.select =
+      element html:select {
+         html.select.attr,
+         html.option+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "html:option" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   html.option.attr =
+      html.attrs
+    & attribute selected { "selected" }?
+    & attribute disabled { "disabled" }?
+    & attribute value { text }?
+
+   html.option =
+      element html:option {
+         html.option.attr,
+         text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "html:textarea" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   html.textarea.attr =
+      html.attrs
+    & attribute name { text }?
+    & attribute rows { text }
+    & attribute cols { text }
+    & attribute disabled { "disabled" }?
+    & attribute readonly { "readonly" }?
+    & attribute tabindex { text }?
+    & attribute accesskey { text }?
+    & attribute onfocus { text }?
+    & attribute onblur { text }?
+    & attribute onselect { text }?
+    & attribute onchange { text }?
+
+   html.textarea =
+      element html:textarea {
+         html.textarea.attr,
+         text
+      }
+}
index ad9497b21371106ae858aa5ee185cbd7d9eb46c4..d9e727dadf4fb46991a60f02b3d27c7e842d6216 100644 (file)
 #
 
 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/docbook-ng/absinthe"
+default namespace = "http://docbook.org/docbook-ng/absinthe"
 
-html.table.model =
-   html.caption,
-   (html.col* | html.colgroup*),
-   html.thead?,
-   html.tfoot?,
-   (html.tbody+ | html.tr+)
-
-html.table.html.attrib = html.attrs
-html.table.summary.attrib = attribute summary { text }?
-html.table.width.attrib = attribute width { text }?
-html.table.border.attrib = attribute border { text }?
-html.table.frame.attrib =
-   attribute frame {
-      "void"
-    | "above"
-    | "below"
-    | "hsides"
-    | "lhs"
-    | "rhs"
-    | "vsides"
-    | "box"
-    | "border"
-   }?
-html.table.rules.attrib =
-   attribute rules { "none" | "groups" | "rows" | "cols" | "all" }?
-html.table.cellspacing.attrib = attribute cellspacing { text }?
-html.table.cellpadding.attrib = attribute cellpadding { text }?
-html.table = element table { html.table.model }
+table.choice |= html.table
+informaltable.choice |= html.informaltable
 
 html.coreattrs &=
   attribute class { text }?,
@@ -72,70 +50,12 @@ html.cellhalign &=
 html.cellvalign &=
   attribute valign { "top" | "middle" | "bottom" | "baseline" }?
 
-ctrl:common-attributes [ define="html.caption" suppress="1" ]
-
-ctrl:common-linking [ define="html.caption" suppress="1" ]
-
-ctrl:role [ define="html.caption" suppress="1" ]
-
-html.caption.html.attrib = html.attrs
-html.caption = element caption { text }
-
-html.col.html.attrib = html.attrs
-html.col.span.attrib = attribute span { text }?
-html.col.width.attrib = attribute width { text }?
-html.col.cellhalign.attrib = html.cellhalign
-html.col.cellvalign.attrib = html.cellvalign
-html.col = element col { empty }
-
-html.colgroup.html.attrib = html.attrs
-html.colgroup.span.attrib = attribute span { text }?
-html.colgroup.width.attrib = attribute width { text }?
-html.colgroup.cellhalign.attrib = html.cellhalign
-html.colgroup.cellvalign.attrib = html.cellvalign
-html.colgroup = element colgroup { html.col* }
-
-html.thead.html.attrib = html.attrs
-html.thead.cellhalign.attrib = html.cellhalign
-html.thead.cellvalign.attrib = html.cellvalign
-html.thead = element thead { html.tr+ }
-
-html.tfoot.html.attrib = html.attrs
-html.tfoot.cellhalign.attrib = html.cellhalign
-html.tfoot.cellvalign.attrib = html.cellvalign
-html.tfoot = element tfoot { html.tr+ }
-
-html.tbody.html.attrib = html.attrs
-html.tbody.cellhalign.attrib = html.cellhalign
-html.tbody.cellvalign.attrib = html.cellvalign
-html.tbody = element tbody { html.tr+ }
-
-html.tr.html.attrib = html.attrs
-html.tr.cellhalign.attrib = html.cellhalign
-html.tr.cellvalign.attrib = html.cellvalign
-html.tr = element tr { (html.th | html.td)+ }
-
-html.th.html.attrib = html.attrs
-html.th.abbr.attrib = attribute abbr { text }?
-html.th.axis.attrib = attribute axis { text }?
-html.th.headers.attrib = attribute headers { text }?
-html.th.scope.attrib = attribute scope { text }?
-html.th.rowspan.attrib = attribute rowspan { text }?
-html.th.colspan.attrib = attribute colspan { text }?
-html.th.cellhalign.attrib = html.cellhalign
-html.th.cellvalign.attrib = html.cellvalign
-html.th = element th { (inlines* | blocks*) }
-
-html.td.html.attrib = html.attrs
-html.td.abbr.attrib = attribute abbr { text }?
-html.td.axis.attrib = attribute axis { text }?
-html.td.headers.attrib = attribute headers { text }?
-html.td.scope.attrib = attribute scope { text }?
-html.td.rowspan.attrib = attribute rowspan { text }?
-html.td.colspan.attrib = attribute colspan { text }?
-html.td.cellhalign.attrib = html.cellhalign
-html.td.cellvalign.attrib = html.cellvalign
-html.td = element td { (inlines* | blocks*) }
+html.table.model =
+   html.caption,
+   (html.col* | html.colgroup*),
+   html.thead?,
+   html.tfoot?,
+   (html.tbody+ | html.tr+)
 
 html.informaltable.model =
    (html.col* | html.colgroup*),
@@ -143,16 +63,267 @@ html.informaltable.model =
    html.tfoot?,
    (html.tbody+ | html.tr+)
 
-html.informaltable.html.attrib = html.table.html.attrib
-html.informaltable.summary.attrib = html.table.summary.attrib
-html.informaltable.width.attrib = html.table.width.attrib
-html.informaltable.border.attrib = html.table.border.attrib
-html.informaltable.frame.attrib = html.table.frame.attrib
-html.informaltable.rules.attrib = html.table.rules.attrib
-html.informaltable.cellspacing.attrib = html.table.cellspacing.attrib
-html.informaltable.cellpadding.attrib = html.table.cellpadding.attrib
+# ======================================================================
 
-html.informaltable = element informaltable { html.informaltable.model }
+[
+   db:refname [ "table" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   html.table.attr =
+      html.attrs
+    & attribute summary { text }?
+    & attribute width { text }?
+    & attribute border { text }?
+    & attribute frame {
+       "void"
+     | "above"
+     | "below"
+     | "hsides"
+     | "lhs"
+     | "rhs"
+     | "vsides"
+     | "box"
+     | "border"
+    }?
+    & attribute rules { "none" | "groups" | "rows" | "cols" | "all" }?
+    & attribute cellspacing { text }?
+    & attribute cellpadding { text }?
+
+   html.table =
+      element table {
+         html.table.attr,
+         html.table.model
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "informaltable" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   html.informaltable.attr =
+      html.attrs
+    & attribute summary { text }?
+    & attribute width { text }?
+    & attribute border { text }?
+    & attribute frame {
+       "void"
+     | "above"
+     | "below"
+     | "hsides"
+     | "lhs"
+     | "rhs"
+     | "vsides"
+     | "box"
+     | "border"
+    }?
+    & attribute rules { "none" | "groups" | "rows" | "cols" | "all" }?
+    & attribute cellspacing { text }?
+    & attribute cellpadding { text }?
+
+   html.informaltable =
+      element informaltable {
+         html.informaltable.attr,
+         html.informaltable.model
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "caption" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   html.caption.attr =
+      html.attrs
+
+   html.caption =
+      element caption {
+         html.caption.attr,
+         text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "col" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   html.col.attr =
+      html.attrs
+    & attribute span { text }?
+    & attribute width { text }?
+    & html.cellhalign
+    & html.cellvalign
+
+   html.col =
+      element col {
+         html.col.attr,
+         empty
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "colgroup" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   html.colgroup.attr =
+      html.attrs
+    & attribute span { text }?
+    & attribute width { text }?
+    & html.cellhalign
+    & html.cellvalign
+
+   html.colgroup =
+      element colgroup {
+         html.colgroup.attr,
+         html.col*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "thead" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   html.thead.attr =
+      html.attrs
+    & html.cellhalign
+    & html.cellvalign
+
+   html.thead =
+      element thead {
+         html.thead.attr,
+         html.tr+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "tfoot" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   html.tfoot.attr =
+      html.attrs
+    & html.cellhalign
+    & html.cellvalign
+
+   html.tfoot =
+      element tfoot {
+         html.tfoot.attr,
+         html.tr+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "tbody" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   html.tbody.attr =
+      html.attrs
+    & html.cellhalign
+    & html.cellvalign
+
+   html.tbody =
+      element tbody {
+         html.tbody.attr,
+         html.tr+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "tr" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   html.tr.attr =
+      html.attrs
+    & html.cellhalign
+    & html.cellvalign
+
+   html.tr =
+      element tr {
+         html.tr.attr,
+         (html.th | html.td)+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "th" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   html.th.attr =
+      html.attrs
+    & attribute abbr { text }?
+    & attribute axis { text }?
+    & attribute headers { text }?
+    & attribute scope { text }?
+    & attribute rowspan { text }?
+    & attribute colspan { text }?
+    & html.cellhalign
+    & html.cellvalign
+
+   html.th =
+      element th {
+         html.th.attr,
+         (inlines* | blocks*)
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "td" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   html.td.attr =
+      html.attrs
+    & attribute abbr { text }?
+    & attribute axis { text }?
+    & attribute headers { text }?
+    & attribute scope { text }?
+    & attribute rowspan { text }?
+    & attribute colspan { text }?
+    & html.cellhalign
+    & html.cellvalign
+
+   html.td =
+      element td {
+         html.td.attr,
+         (inlines* | blocks*)
+      }
+}
 
-table.choice |= html.table
-informaltable.choice |= html.informaltable
index 7343b2e0f4620d7a5c0bb3a37befe428848223e2..e505211ca870c06cf4b8cdf6882f035b29d7324f 100644 (file)
 # Release: $Id$
 #
 
+namespace rng  = "http://relaxng.org/ns/structure/1.0"
+namespace s = "http://www.ascc.net/xml/schematron"
+namespace db = "http://docbook.org/docbook-ng/absinthe"
+default namespace = "http://docbook.org/docbook-ng/absinthe"
+
 start |= db.setindex
 
 ubiq.inlines |= db.indexterm
 indexing.inlines |= db.indexterm
 blocks.nopara |= db.indexterm
 navigation.components |= db.index
-setindex.components = db.setindex
+setindex.components |= db.setindex
 
 info.elements |= db.itermset
 
@@ -25,29 +30,31 @@ zone.attribute = attribute zone { xsd:IDREFS }
 pagenum.attribute = attribute pagenum { text }
 scope.attribute = attribute scope { "all" | "global" | "local" }
 
-db.itermset = element itermset { indexterm.singular+ }
+sortas.attribute = attribute sortas { text }
 
-indexterm.singular.significance.attrib = significance.attribute?
-indexterm.startofrange.significance.attrib = significance.attribute?
-indexterm.endofrange.significance.attrib = significance.attribute?
+# ======================================================================
 
-indexterm.singular.zone.attrib = zone.attribute?
-indexterm.startofrange.zone.attrib = zone.attribute?
-indexterm.endofrange.zone.attrib = zone.attribute?
+[
+   db:refname [ "itermset" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-indexterm.singular.pagenum.attrib = pagenum.attribute?
-indexterm.startofrange.pagenum.attrib =  pagenum.attribute?
-indexterm.endofrange.pagenum.attrib =  pagenum.attribute?
+   itermset.role.attribute = attribute role { text }
 
-indexterm.singular.scope.attrib = scope.attribute?
-indexterm.startofrange.scope.attrib = scope.attribute?
-indexterm.endofrange.scope.attrib = scope.attribute?
+   itermset.attr =
+      itermset.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-indexterm.singular.class.attrib = attribute class { "singular" }?
-indexterm.startofrange.class.attrib = attribute class { "startofrange" }
-indexterm.endofrange.class.attrib = attribute class { "endofrange" }
+   db.itermset =
+      element itermset {
+         itermset.attr,
+         indexterm.singular+
+      }
+}
 
-indexterm.endofrange.startref.attrib = attribute startref { xsd:IDREF }
+# ======================================================================
 
 indexterm.contentmodel =
    db.primary?,
@@ -58,74 +65,433 @@ indexterm.contentmodel =
     | db.see
     | db.seealso+)?
 
-indexterm.singular =
-   element indexterm {
-      indexterm.contentmodel
-   }
-
-indexterm.startofrange =
-   element indexterm {
-      indexterm.contentmodel
-   }
-
-indexterm.endofrange =
-   element indexterm {
-      indexterm.contentmodel
-   }
-
-db.indexterm = (indexterm.singular|indexterm.startofrange|indexterm.endofrange)
-
-sortas.attribute = attribute sortas { text }?
-
-primary.sortas.attrib = sortas.attribute?
-db.primary = element primary { inlines* }
-
-secondary.sortas.attrib = sortas.attribute?
-db.secondary = element secondary { inlines* }
-
-tertiary.sortas.attrib = sortas.attribute?
-db.tertiary = element tertiary { inlines* }
-
-db.see = element see { inlines* }
-
-db.seealso = element seealso { inlines* }
-
-index.info = docbook.info
-db.index =
-   element index {
-      index.info,
-      blocks*,
-      (db.indexdiv* | db.indexentry* | db.segmentedlist)
-   }
-
-setindex.info = docbook.info
-db.setindex =
-   element setindex { setindex.info, blocks*, (db.indexdiv* | db.indexentry*) }
-
-indexdiv.info = docbook.info.titlereq
-db.indexdiv =
-   element indexdiv { indexdiv.info, blocks*, (db.indexentry+|db.segmentedlist) }
-
-db.indexentry =
-   element indexentry {
-      db.primaryie,
-      (db.seeie | db.seealsoie)*,
-      (db.secondaryie, (db.seeie | db.seealsoie | db.tertiaryie)*)*
-   }
-
-primaryie.linkends.attrib = linkends.attribute?
-db.primaryie = element primaryie { inlines* }
-
-secondaryie.linkends.attrib = linkends.attribute?
-db.secondaryie = element secondaryie { inlines* }
-
-tertiaryie.linkends.attrib = linkends.attribute?
-db.tertiaryie = element tertiaryie { inlines* }
-
-seeie.linkend.attrib = linkend.attribute?
-db.seeie = element seeie { inlines* }
-
-seealsoie.linkends.attrib = linkends.attribute?
-db.seealsoie = element seealsoie { inlines* }
-
-
+# ======================================================================
+
+[
+   db:refname [ "indexterm" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   indexterm.singular.role.attribute = attribute role { text }
+
+   indexterm.singular.attr =
+      indexterm.singular.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & significance.attribute?
+    & zone.attribute?
+    & pagenum.attribute?
+    & scope.attribute?
+    & attribute class { "singular" }?
+
+   indexterm.singular =
+      element indexterm {
+         indexterm.singular.attr,
+         indexterm.contentmodel
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "indexterm" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   indexterm.startofrange.role.attribute = attribute role { text }
+
+   indexterm.startofrange.attr =
+      indexterm.startofrange.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & significance.attribute?
+    & zone.attribute?
+    & pagenum.attribute?
+    & scope.attribute?
+    & attribute class { "startofrange" }
+
+   indexterm.startofrange =
+      element indexterm {
+         indexterm.startofrange.attr,
+         indexterm.contentmodel
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "indexterm" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   indexterm.endofrange.role.attribute = attribute role { text }
+
+   indexterm.endofrange.attr =
+      indexterm.endofrange.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & significance.attribute?
+    & zone.attribute?
+    & pagenum.attribute?
+    & scope.attribute?
+    & attribute class { "endofrange" }
+    & attribute startref { xsd:IDREF }
+
+   indexterm.endofrange =
+      element indexterm {
+         indexterm.endofrange.attr,
+         indexterm.contentmodel
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "indexterm" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   db.indexterm = (indexterm.singular|indexterm.startofrange|indexterm.endofrange)
+
+}
+
+# ======================================================================
+
+[
+   db:refname [ "primary" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   primary.role.attribute = attribute role { text }
+
+   primary.attr =
+      primary.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & sortas.attribute?
+
+   db.primary =
+      element primary {
+         primary.attr,
+         inlines*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "secondary" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   secondary.role.attribute = attribute role { text }
+
+   secondary.attr =
+      secondary.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & sortas.attribute?
+
+   db.secondary =
+      element secondary {
+         secondary.attr,
+         inlines*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "tertiary" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   tertiary.role.attribute = attribute role { text }
+
+   tertiary.attr =
+      tertiary.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & sortas.attribute?
+
+   db.tertiary =
+      element tertiary {
+         tertiary.attr,
+         inlines*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "see" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   see.role.attribute = attribute role { text }
+
+   see.attr =
+      see.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.see =
+      element see {
+         see.attr,
+         inlines*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "seealso" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   seealso.role.attribute = attribute role { text }
+
+   seealso.attr =
+      seealso.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.seealso =
+      element seealso {
+         seealso.attr,
+         inlines*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "index" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   index.status.attribute = status.attribute
+
+   index.role.attribute = attribute role { text }
+
+   index.attr =
+      index.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & label.attribute?
+    & index.status.attribute?
+
+   index.info = docbook.info
+
+   db.index =
+      element index {
+         index.attr,
+         index.info,
+         blocks*,
+         (db.indexdiv* | db.indexentry* | db.segmentedlist)
+      }
+}
+
+#  ======================================================================
+
+[
+   db:refname [ "setindex" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   setindex.status.attribute = status.attribute
+
+   setindex.role.attribute = attribute role { text }
+
+   setindex.attr =
+      setindex.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & label.attribute?
+    & setindex.status.attribute?
+
+   setindex.info = docbook.info
+
+   db.setindex =
+      element setindex {
+         setindex.attr,
+         setindex.info,
+         blocks*,
+         (db.indexdiv* | db.indexentry*)
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "indexdiv" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   indexdiv.status.attribute = status.attribute
+
+   indexdiv.role.attribute = attribute role { text }
+
+   indexdiv.attr =
+      indexdiv.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & label.attribute?
+    & indexdiv.status.attribute?
+
+   indexdiv.info = docbook.info.titlereq
+
+   db.indexdiv =
+      element indexdiv {
+         indexdiv.attr,
+         indexdiv.info,
+         blocks*,
+         (db.indexentry+|db.segmentedlist)
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "indexentry" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   indexentry.role.attribute = attribute role { text }
+
+   indexentry.attr =
+      indexentry.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.indexentry =
+      element indexentry {
+         indexentry.attr,
+         db.primaryie,
+         (db.seeie | db.seealsoie)*,
+         (db.secondaryie, (db.seeie | db.seealsoie | db.tertiaryie)*)*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "primaryie" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   primaryie.role.attribute = attribute role { text }
+
+   primaryie.attr =
+      primaryie.role.attribute?
+    & common.attributes
+    & linkends.attribute?
+
+   db.primaryie =
+      element primaryie {
+         primaryie.attr,
+         inlines*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "secondaryie" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   secondaryie.role.attribute = attribute role { text }
+
+   secondaryie.attr =
+      secondaryie.role.attribute?
+    & common.attributes
+    & linkends.attribute?
+
+   db.secondaryie =
+      element secondaryie {
+         secondaryie.attr,
+         inlines*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "tertiaryie" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   tertiaryie.role.attribute = attribute role { text }
+
+   tertiaryie.attr =
+      tertiaryie.role.attribute?
+    & common.attributes
+    & linkends.attribute?
+
+   db.tertiaryie =
+      element tertiaryie {
+         tertiaryie.attr,
+         inlines*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "seeie" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   seeie.role.attribute = attribute role { text }
+
+   seeie.attr =
+      seeie.role.attribute?
+    & common.attributes
+    & linkend.attribute?
+
+   db.seeie =
+      element seeie {
+         seeie.attr,
+         inlines*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "seealsoie" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   seealsoie.role.attribute = attribute role { text }
+
+   seealsoie.attr =
+      seealsoie.role.attribute?
+    & common.attributes
+    & linkends.attribute?
+
+   db.seealsoie =
+      element seealsoie {
+         seealsoie.attr,
+         inlines*
+      }
+}
index 5592c8ca35acc4c4d2b85e5344e48d41e98e56e5..145540e4a6e1ec22da62677d507158ae3f94e949 100644 (file)
 
 namespace mml = "http://www.w3.org/1998/Math/MathML"
 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/docbook-ng/absinthe"
+default namespace = "http://docbook.org/docbook-ng/absinthe"
+
+equation.content |= any.mml
+inlineequation.content |= any.mml
 
 any.mml =
    element mml:*
@@ -21,6 +28,3 @@ any.mml =
        | any.mml)*
    }
 
-
-equation.content |= any.mml
-inlineequation.content |= any.mml
index 2d28a4a37bd46ba181fe374402a5d75c104a6b62..81a68bed5b86b591669805f1f8245a840a40184b 100644 (file)
 #
 
 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/docbook-ng/absinthe"
+default namespace = "http://docbook.org/docbook-ng/absinthe"
 
-msgset.info = docbook.info.titleonly
+technical.blocks |= db.msgset
 
-db.msgset = element msgset { msgset.info, (db.msgentry+|db.simplemsgentry+) }
+# ======================================================================
 
-db.msgentry = element msgentry { db.msg+, db.msginfo?, db.msgexplan* }
+[
+   db:refname [ "msgset" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-simplemsgentry.audience.attrib = attribute audience { text }
-simplemsgentry.origin.attrib = attribute origin { text }
-simplemsgentry.level.attrib = attribute level { text }
-db.simplemsgentry = element simplemsgentry { db.msgtext, db.msgexplan+ }
+   msgset.role.attribute = attribute role { text }
 
-msg.info = docbook.info.titleonly
-db.msg = element msg { msg.info, db.msgmain, (db.msgsub|db.msgrel)* }
+   msgset.attr =
+      msgset.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-msgmain.info = docbook.info.titleonly
-db.msgmain = element msgmain { msgmain.info, db.msgtext }
+   msgset.info = docbook.info.titleonly
 
-msgsub.info = docbook.info.titleonly
-db.msgsub = element msgsub { msgsub.info, db.msgtext }
+   db.msgset =
+      element msgset {
+         msgset.attr,
+         msgset.info,
+         (db.msgentry+|db.simplemsgentry+)
+      }
+}
 
-msgrel.info = docbook.info.titleonly
-db.msgrel = element msgrel { msgrel.info, db.msgtext }
+# ======================================================================
 
-db.msgtext = element msgtext { blocks+ }
+[
+   db:refname [ "msgentry" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-db.msginfo = element msginfo { (db.msglevel|db.msgorig|db.msgaud)* }
+   msgentry.role.attribute = attribute role { text }
 
-db.msglevel = element msglevel { docbook.text }
+   msgentry.attr =
+      msgentry.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-db.msgorig = element msgorig { docbook.text }
+   db.msgentry =
+      element msgentry {
+         msgentry.attr,
+         db.msg+,
+         db.msginfo?,
+         db.msgexplan*
+      }
+}
 
-db.msgaud = element msgaud { docbook.text }
+# ======================================================================
 
-msgexplan.info = docbook.info.titleonly
-db.msgexplan = element msgexplan { msgexplan.info, blocks+ }
+[
+   db:refname [ "simplemsgentry" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-technical.blocks |= db.msgset
+   simplemsgentry.role.attribute = attribute role { text }
+
+   simplemsgentry.attr =
+      simplemsgentry.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & attribute audience { text }
+    & attribute origin { text }
+    & attribute level { text }
+
+   db.simplemsgentry =
+      element simplemsgentry {
+         simplemsgentry.attr,
+         db.msgtext,
+         db.msgexplan+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "msg" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   msg.role.attribute = attribute role { text }
+
+   msg.attr =
+      msg.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   msg.info = docbook.info.titleonly
+
+   db.msg =
+      element msg {
+         msg.attr,
+         msg.info,
+         db.msgmain,
+         (db.msgsub|db.msgrel)*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "msgmain" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   msgmain.role.attribute = attribute role { text }
+
+   msgmain.attr =
+      msgmain.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   msgmain.info = docbook.info.titleonly
+
+   db.msgmain =
+      element msgmain {
+         msgmain.attr,
+         msgmain.info,
+         db.msgtext
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "msgsub" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   msgsub.role.attribute = attribute role { text }
+
+   msgsub.attr =
+      msgsub.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   msgsub.info = docbook.info.titleonly
+
+   db.msgsub =
+      element msgsub {
+         msgsub.attr,
+         msgsub.info,
+         db.msgtext
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "msgrel" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   msgrel.role.attribute = attribute role { text }
+
+   msgrel.attr =
+      msgrel.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   msgrel.info = docbook.info.titleonly
+
+   db.msgrel =
+      element msgrel {
+         msgrel.attr,
+         msgrel.info,
+         db.msgtext
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "msgtext" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   msgtext.role.attribute = attribute role { text }
+
+   msgtext.attr =
+      msgtext.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.msgtext =
+      element msgtext {
+         msgtext.attr,
+         blocks+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "msginfo" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   msginfo.role.attribute = attribute role { text }
+
+   msginfo.attr =
+      msginfo.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.msginfo =
+      element msginfo {
+         msginfo.attr,
+         (db.msglevel|db.msgorig|db.msgaud)*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "msglevel" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   msglevel.role.attribute = attribute role { text }
+
+   msglevel.attr =
+      msglevel.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.msglevel =
+      element msglevel {
+         msglevel.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "msgorig" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   msgorig.role.attribute = attribute role { text }
+
+   msgorig.attr =
+      msgorig.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.msgorig =
+      element msgorig {
+         msgorig.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "msgaud" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   msgaud.role.attribute = attribute role { text }
+
+   msgaud.attr =
+      msgaud.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.msgaud =
+      element msgaud {
+         msgaud.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "msgexplan" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   msgexplan.role.attribute = attribute role { text }
+
+   msgexplan.attr =
+      msgexplan.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   msgexplan.info = docbook.info.titleonly
+
+   db.msgexplan =
+      element msgexplan {
+         msgexplan.attr,
+         msgexplan.info,
+         blocks+
+      }
+}
 
index 4727716d6197a4578d13c245f29ef4eea6763125..b744ec8e9d585ff097fdf5bac17c7e3258654f30 100644 (file)
@@ -59,6 +59,8 @@
 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/docbook-ng/absinthe"
+default namespace = "http://docbook.org/docbook-ng/absinthe"
 
 # ======================================================================
 
@@ -72,8 +74,6 @@ remap.attribute     = attribute remap { text }
 
 xreflabel.attribute = attribute xreflabel { text }
 
-role.attribute      = attribute role { text }
-
 revisionflag.attribute =
   attribute revisionflag { "changed" | "added" | "deleted" | "off" }
 
@@ -115,7 +115,7 @@ common.attributes =
   revisionflag.attribute?,
   effectivity.attributes
 
-common.attrib.idreq =
+common.attributes.idreq =
   id.attribute,
   xml.lang.attribute?,
   xml.base.attribute?,
@@ -149,7 +149,7 @@ pgwide.attribute = attribute pgwide { "0" | "1" }
 data.format.attribute = attribute format { text }
 data.fileref.attribute = attribute fileref { text }
 data.entityref.attribute = attribute entityref { xsd:ENTITY }
-data.common.attribute &=
+data.common.attrib &=
    data.format.attribute?,
    (data.fileref.attribute | data.entityref.attribute)
 
@@ -251,7 +251,7 @@ os.inlines =
 # TEI: sgmlKeywords, ident
 
 markup.inlines =
-   db.xmltag
+   db.tag
  | db.markup
  | db.token
  | db.symbol
@@ -382,7 +382,6 @@ list.blocks =
  | db.procedure
  | db.simplelist
  | db.variablelist
- | db.qandaset
  | db.segmentedlist
 
 verbatim.blocks =
@@ -404,11 +403,71 @@ extension.blocks = notAllowed
 
 # ======================================================================
 
-db.title = element title { inlines* }
+[
+   db:refname [ "title" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   title.role.attribute = attribute role { text }
+
+   title.attr =
+      title.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.title =
+      element title {
+         title.attr,
+         inlines*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "titleabbrev" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   titleabbrev.role.attribute = attribute role { text }
+
+   titleabbrev.attr =
+      titleabbrev.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.titleabbrev =
+      element titleabbrev {
+         titleabbrev.attr,
+         inlines*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "subtitle" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   subtitle.role.attribute = attribute role { text }
+
+   subtitle.attr =
+      subtitle.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-db.titleabbrev = element titleabbrev { inlines* }
+   db.subtitle =
+      element subtitle {
+         subtitle.attr,
+         inlines*
+      }
+}
 
-db.subtitle = element subtitle { inlines* }
+# ======================================================================
 
 docbook.title = db.title? & db.titleabbrev? & db.subtitle?
 docbook.titlereq = db.title & db.titleabbrev? & db.subtitle?
@@ -533,1104 +592,5505 @@ ctrl:alternate-define [
    ]
 ]
 
-subjectset.scheme.attrib = attribute scheme { xsd:NMTOKEN }?
-db.subjectset = element subjectset { db.subject+ }
-
-subject.weight.attrib = attribute weight { text }?
-db.subject = element subject { db.subjectterm+ }
-
-db.subjectterm = element subjectterm { text }
-
-db.keywordset = element keywordset { db.keyword+ }
-
-db.keyword = element keyword { text }
+# ======================================================================
 
-qandaset.defaultlabel.attrib = attribute defaultlabel { "none" | "number" | "qanda" }?
-qandaset.info = docbook.info.titleonly
-db.qandaset =
-   element qandaset { qandaset.info, blocks*, (db.qandadiv+ | db.qandaentry+) }
+[
+   db:refname [ "subjectset" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-qandadiv.info = docbook.info.titleonly
-db.qandadiv =
-   element qandadiv { qandadiv.info, blocks*, (db.qandadiv+ | db.qandaentry+) }
+   subjectset.role.attribute = attribute role { text }
 
-qandaentry.info = docbook.info.titleforbidden
-db.qandaentry =
-   element qandaentry { qandaentry.info, db.question, db.answer* }
+   subjectset.attr =
+      subjectset.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & attribute scheme { xsd:NMTOKEN }?
 
-db.question = element question { db.label?, blocks+ }
+   db.subjectset =
+      element subjectset {
+         subjectset.attr,
+         db.subject+
+      }
+}
 
-db.answer = element answer { db.label?, blocks+ }
+# ======================================================================
 
-db.label = element label { docbook.text }
+[
+   db:refname [ "subject" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-table.choice = notAllowed
-informaltable.choice = notAllowed
+   subject.role.attribute = attribute role { text }
 
-db.table = table.choice
-db.informaltable = informaltable.choice
+   subject.attr =
+      subject.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & attribute weight { text }?
 
-procedure.info = docbook.info.titleonly
-db.procedure = element procedure { procedure.info, blocks*, db.step+ }
+   db.subject =
+      element subject {
+         subject.attr,
+         db.subjectterm+
+      }
+}
 
-step.performance.attrib = attribute performance { "optional" | "required" }?
-step.info = docbook.info.titleonly
-db.step = element step {
-   step.info,
-   blocks*,
-   (db.substeps|db.stepalternatives)?,
-   blocks* }
+# ======================================================================
 
-stepalternatives.performance.attrib = attribute performance { "optional" | "required" }?
-stepalternatives.info = docbook.info.titleforbidden
-db.stepalternatives = element stepalternatives { stepalternatives.info, db.step+ }
+[
+   db:refname [ "subjectterm" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-substeps.performance.attrib = attribute performance { "optional" | "required" }?
-db.substeps = element substeps { db.step+ }
+   subjectterm.role.attribute = attribute role { text }
 
-ctrl:exclude [ from="db.sidebar" exclude="db.sidebar" ]
+   subjectterm.attr =
+      subjectterm.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-sidebar.info = docbook.info.titleonly
+   db.subjectterm =
+      element subjectterm {
+         subjectterm.attr,
+         text
+      }
+}
 
-db.sidebar = element sidebar { sidebar.info, blocks+ }
+# ======================================================================
 
-abstract.info = docbook.info.titleonly
-db.abstract = element abstract { abstract.info, para.blocks+ }
+[
+   db:refname [ "keywordset" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-personblurb.info = docbook.info.titleonly
-db.personblurb = element personblurb { personblurb.info, para.blocks+ }
+   keywordset.role.attribute = attribute role { text }
 
-blockquote.info = docbook.info.titleonly
-db.blockquote = element blockquote { blockquote.info, db.attribution?, blocks+ }
+   keywordset.attr =
+      keywordset.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-db.attribution = element attribution { (docbook.text | db.personname) }
+   db.keywordset = element keywordset {
+      keywordset.attr,
+      db.keyword+
+   }
+}
 
-bridgehead.renderas.attrib =
-   attribute renderas {
-      "other"
-    | "sect1"
-    | "sect2"
-    | "sect3"
-    | "sect4"
-    | "sect5" }?
+# ======================================================================
 
-db.bridgehead = element bridgehead { inlines* }
+[
+   db:refname [ "keyword" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-db.remark = element remark { docbook.text }
+   keyword.role.attribute = attribute role { text }
 
-epigraph.info = docbook.info.titleforbidden
+   keyword.attr =
+      keyword.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-db.epigraph =
-   element epigraph {
-      epigraph.info,
-      db.attribution?,
-      (para.blocks | db.literallayout)+
+   db.keyword = element keyword {
+      keyword.attr,
+      text
    }
+}
 
-ctrl:exclude [ from="db.footnote" exclude="db.footnote" ]
+# ======================================================================
 
-db.footnote = element footnote { blocks+ }
+table.choice = notAllowed
+informaltable.choice = notAllowed
 
-db.highlights = element highlights {
-   (list.blocks | admonition.blocks | para.blocks | indexing.inlines)+
-}
+db.table = table.choice
+db.informaltable = informaltable.choice
 
-para.blocks =
-   db.anchor
- | db.para
- | db.formalpara
- | db.simpara
+# ======================================================================
 
-formalpara.info = docbook.info.titleonlyreq
-db.formalpara = element formalpara { formalpara.info, indexing.inlines*, db.para }
+[
+   db:refname [ "procedure" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-para.info = docbook.info.titleforbidden
-db.para = element para { para.info, (inlines | blocks.nopara)* }
+   procedure.role.attribute = attribute role { text }
 
-simpara.info = docbook.info.titleforbidden
-db.simpara = element simpara { simpara.info, inlines* }
+   procedure.attr =
+      procedure.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-# admonitions are not excluded from themselves
-admonition.contentmodel = docbook.info.titleonly, blocks+
+   procedure.info = docbook.info.titleonly
 
-db.caution = element caution { admonition.contentmodel }
+   db.procedure =
+      element procedure {
+         procedure.attr,
+         procedure.info,
+         blocks*,
+         db.step+
+      }
+}
 
-ctrl:exclude [ from="admonition.blocks" exclude="admonition.blocks" ]
+# ======================================================================
 
-db.important = element important { admonition.contentmodel }
+performance.attribute = attribute performance { "optional" | "required" }
 
-db.note = element note { admonition.contentmodel }
+# ======================================================================
 
-db.tip = element tip { admonition.contentmodel }
+[
+   db:refname [ "step" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-db.warning = element warning { admonition.contentmodel }
+   step.role.attribute = attribute role { text }
 
-itemizedlist.mark.attrib = attribute mark { text }?
-itemizedlist.spacing.attrib = attribute spacing { "compact" | "normal" }?
+   step.attr =
+      step.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & performance.attribute
 
-itemizedlist.info = docbook.info.titleonly
-db.itemizedlist = element itemizedlist { itemizedlist.info, blocks*, db.listitem+ }
+   step.info = docbook.info.titleonly
 
-orderedlist.inheritnum.attrib = attribute inheritnum { "ignore" | "inherit" }?
-orderedlist.spacing.attrib = attribute spacing { "compact" | "normal" }?
-orderedlist.continuation.attrib = continuation.attribute?
-orderedlist.numeration.attrib = attribute numeration { text }?
+   db.step = element step {
+      step.attr,
+      step.info,
+      blocks*,
+      (db.substeps|db.stepalternatives)?,
+      blocks*
+   }
+}
 
-orderedlist.info = docbook.info.titleonly
-db.orderedlist = element orderedlist { orderedlist.info, blocks*, db.listitem+ }
+# ======================================================================
 
-listitem.override.attrib = attribute override { text }?
-db.listitem = element listitem { blocks+ }
+[
+   db:refname [ "stepalternatives" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-segmentedlist.info = docbook.info.titleonly
-db.segmentedlist =
-   element segmentedlist {
-      segmentedlist.info,
-      db.segtitle+,
-      db.seglistitem+ }
+   stepalternatives.role.attribute = attribute role { text }
 
-db.segtitle = element segtitle { inlines* }
+   stepalternatives.attr =
+      stepalternatives.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & performance.attribute
 
-db.seglistitem =
-   [
-      s:rule [
-         context = "seglistitem"
-         s:assert [
-            test = "count(seg) = count(../segtitle)"
-            "The number of seg elements must be the same as the number of segtitle elements in the parent segmentedlist"
-         ]
-      ]
-   ]
-   element seglistitem { db.seg+ }
+   stepalternatives.info = docbook.info.titleforbidden
 
-db.seg = element seg { inlines* }
+   db.stepalternatives =
+      element stepalternatives {
+         stepalternatives.attr,
+         stepalternatives.info,
+         db.step+
+      }
+}
 
-simplelist.type.attrib = attribute type { "horiz" | "vert" | "inline" }?
-simplelist.columns.attrib = attribute columns { xsd:integer}?
-db.simplelist = element simplelist { db.member+ }
+# ======================================================================
 
-db.member = element member { inlines* }
+[
+   db:refname [ "substeps" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-variablelist.termlength.attrib = attribute termlength { text }?
-variablelist.info = docbook.info.titleonly
+   substeps.role.attribute = attribute role { text }
 
-db.variablelist = element variablelist { variablelist.info, blocks*, db.varlistentry+ }
+   substeps.attr =
+      substeps.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & performance.attribute
 
-db.varlistentry = element varlistentry { db.term+, db.listitem }
+   db.substeps =
+      element substeps {
+         substeps.attr,
+         db.step+
+      }
+}
 
-db.term = element term { inlines* }
+# ======================================================================
 
-floatstyle.attribute = attribute floatstyle { text }
+[
+   db:refname [ "sidebar" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-example.floatstyle.attrib = floatstyle.attribute?
-example.width.attrib = attribute width { text }?
-example.label.attrib = attribute label { text }?
+   ctrl:exclude [ from="db.sidebar" exclude="db.sidebar" ]
 
-example.info = docbook.info.titleonlyreq
-db.example = element example { example.info, blocks+ }
+   sidebar.role.attribute = attribute role { text }
 
-informalexample.info = docbook.info.titleforbidden
-informalexample.width.attrib = attribute width { text }?
-informalexample.floatstyle.attrib = floatstyle.attribute?
-db.informalexample = element informalexample { informalexample.info, blocks+ }
+   sidebar.attr =
+      sidebar.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-verbatim.inlines = inlines | db.lineannotation
+   sidebar.info = docbook.info.titleonly
 
-verbatim.contentmodel = docbook.info.titleforbidden, (db.textobject|verbatim.inlines*)
+   db.sidebar =
+      element sidebar {
+         sidebar.attr,
+         sidebar.info,
+         blocks+
+      }
+}
 
-programlisting.verbatim.attribs = verbatim.attributes
-programlisting.width.attrib = attribute width { text }?
-db.programlisting = element programlisting { verbatim.contentmodel }
+# ======================================================================
 
-literallayout.verbatim.attribs = verbatim.attributes
-literallayout.class.attrib = attribute class { "monospaced" | "normal" }?
-db.literallayout = element literallayout { verbatim.contentmodel }
+[
+   db:refname [ "abstract" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-screen.verbatim.attribs = verbatim.attributes
-screen.width.attrib = attribute width { text }?
-db.screen = element screen { verbatim.contentmodel }
+   abstract.role.attribute = attribute role { text }
 
-screenshot.block = db.mediaobject
+   abstract.attr =
+      abstract.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-screenshot.info = docbook.info
-db.screenshot =
-   element screenshot { screenshot.info, screenshot.block }
+   abstract.info = docbook.info.titleonly
 
-figure.floatstyle.attrib = floatstyle.attribute?
-figure.float.attrib = attribute float { text }?
-figure.pgwide.attrib = pgwide.attribute?
-figure.label.attrib = attribute label { text }?
-figure.info = docbook.info.titleonlyreq
-db.figure = element figure { figure.info, blocks+ }
+   db.abstract = element abstract {
+      abstract.attr,
+      abstract.info,
+      para.blocks+
+   }
+}
 
-informalfigure.floatstyle.attrib = floatstyle.attribute?
-informalfigure.float.attrib = float.attribute?
-informalfigure.pgwide.attrib = pgwide.attribute?
-informalfigure.label.attrib = attribute label { text }?
-informalfigure.info = docbook.info.titleforbidden
-db.informalfigure = element informalfigure { informalfigure.info, blocks+ }
+# ======================================================================
 
-mediaobject.content =
-   db.videoobject | db.audioobject | db.imageobject | db.textobject
+[
+   db:refname [ "personblurb" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-mediaobject.info = docbook.info.titleforbidden
-db.mediaobject =
-   element mediaobject { mediaobject.info, mediaobject.content+ }
+   personblurb.role.attribute = attribute role { text }
 
-inlinemediaobject.content =
-   db.videoobject | db.audioobject | db.imageobject | db.textobject
+   personblurb.attr =
+      personblurb.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-inlinemediaobject.info = docbook.info.titleforbidden
-db.inlinemediaobject =
-   element inlinemediaobject { inlinemediaobject.info, inlinemediaobject.content+ }
+   personblurb.info = docbook.info.titleonly
 
-videoobject.info = docbook.info.titleforbidden
-db.videoobject = element videoobject { videoobject.info, db.videodata }
+   db.personblurb =
+      element personblurb {
+         personblurb.attr,
+         personblurb.info,
+         para.blocks+
+      }
+}
 
-audioobject.info = docbook.info.titleforbidden
-db.audioobject = element audioobject { audioobject.info, db.audiodata }
+# ======================================================================
 
-imageobject.content = db.imagedata
+[
+   db:refname [ "blockquote" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-imageobject.info = docbook.info.titleforbidden
-db.imageobject = element imageobject { imageobject.info, imageobject.content }
-
-textobject.info = docbook.info.titleforbidden
-db.textobject =
-   element textobject { textobject.info, (db.phrase | db.textdata | blocks+) }
-
-videodata.data.attrib = data.common.attribute
-videodata.align.attrib =
-  attribute align { "center" | "char" | "justify" | "left" | "right" }?
-videodata.valign.attrib = attribute valign { "bottom" | "middle" | "top" }?
-videodata.width.attrib = attribute width { text }?
-videodata.contentwidth.attrib = attribute contentwidth { text }?
-videodata.scalefit.attrib = attribute scalefit { "0" | "1" }?
-videodata.scale.attrib = attribute scale { text }?
-videodata.depth.attrib = attribute depth { text }?
-videodata.contentdepth.attrib = attribute contentdepth { text }?
-
-videodata.info = docbook.info.titleforbidden
-db.videodata = element videodata { videodata.info }
-
-audiodata.data.attrib = data.common.attribute
-audiodata.info = docbook.info.titleforbidden
-db.audiodata = element audiodata { audiodata.info }
-
-imagedata.data.attrib = data.common.attribute
-imagedata.align.attrib =
-  attribute align { "center" | "char" | "justify" | "left" | "right" }?
-imagedata.valign.attrib = attribute valign { "bottom" | "middle" | "top" }?
-imagedata.width.attrib = attribute width { text }?
-imagedata.contentwidth.attrib = attribute contentwidth { text }?
-imagedata.scalefit.attrib = attribute scalefit { "0" | "1" }?
-imagedata.scale.attrib = attribute scale { text }?
-imagedata.depth.attrib = attribute depth { text }?
-imagedata.contentdepth.attrib = attribute contentdepth { text }?
-
-imagedata.info = docbook.info.titleforbidden
-db.imagedata = element imagedata { imagedata.info }
-
-textdata.data.attrib = data.common.attribute
-textdata.encoding.attrib = attribute encoding { text }?
-
-textdata.info = docbook.info.titleforbidden
-db.textdata = element textdata { textdata.info }
+   blockquote.role.attribute = attribute role { text }
 
-# db.caption = element caption { blocks+ }
+   blockquote.attr =
+      blockquote.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-equation.content = db.mediaobject
+   blockquote.info = docbook.info.titleonly
 
-equation.info = docbook.info.titleonlyreq
-db.equation = element equation { equation.info, equation.content+ }
+   db.blockquote =
+      element blockquote {
+         blockquote.attr,
+         blockquote.info,
+         db.attribution?,
+         blocks+
+      }
+}
 
-informalequation.info = docbook.info.titleforbidden
-db.informalequation =
-   element informalequation {
-      informalequation.info,
-      equation.content+
-   }
+# ======================================================================
 
-inlineequation.content = db.inlinemediaobject
+[
+   db:refname [ "attribution" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-db.inlineequation = element inlineequation { inlineequation.content+ }
+   attribution.role.attribute = attribute role { text }
 
-synopsis.verbatim.attribs = verbatim.attributes
-synopsis.label.attrib = attribute label { text }
-db.synopsis = element synopsis { verbatim.contentmodel }
+   attribution.attr =
+      attribution.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-cmdsynopsis.sepchar.attrib = attribute sepchar { text }?
-cmdsynopsis.cmdlength.attrib = attribute cmdlength { text }?
-cmdsynopsis.label.attrib = attribute label { text }?
+   db.attribution =
+      element attribution {
+         attribution.attr,
+         (docbook.text | db.personname)
+      }
+}
 
-cmdsynopsis.info = docbook.info.titleforbidden
-db.cmdsynopsis =
-   element cmdsynopsis {
-      cmdsynopsis.info?,
-      (db.command | db.arg | db.group | db.sbr)+,
-      db.synopfragment*
-   }
+# ======================================================================
 
-rep.attribute = attribute rep { "norepeat" | "repeat" }
-choice.attribute = attribute choice { "opt" | "plain" | "req" }
+renderas.attribute =
+   attribute renderas {
+      "other"
+    | "sect1"
+    | "sect2"
+    | "sect3"
+    | "sect4"
+    | "sect5" }
 
-arg.rep.attrib = rep.attribute?
-arg.choice.attrib = choice.attribute?
-
-db.arg =
-   element arg {
-      (docbook.text
-       | db.arg
-       | db.group
-       | db.option
-       | db.synopfragmentref
-       | db.sbr)*
-   }
+# ======================================================================
+
+[
+   db:refname [ "bridgehead" ]
+   db:refpurpose [ "" ]
+]
+div {
 
+   bridgehead.role.attribute = attribute role { text }
 
-group.rep.attrib = rep.attribute?
-group.choice.attrib = choice.attribute?
+   bridgehead.attr =
+      bridgehead.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & renderas.attribute?
 
-db.group =
-   element group {
-      (db.arg | db.group | db.option | db.synopfragmentref | db.replaceable | db.sbr)+
-   }
+   db.bridgehead =
+      element bridgehead {
+         bridgehead.attr,
+         inlines*
+      }
+}
 
-ctrl:common-linking [ element="sbr" suppress="yes" ]
+# ======================================================================
 
-db.sbr = element sbr { empty }
+[
+   db:refname [ "remark" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-db.synopfragment = element synopfragment { (db.arg | db.group)+ }
+   remark.role.attribute = attribute role { text }
 
-synopfragmentref.linkend.attrib = linkend.attribute
-db.synopfragmentref =
-   [
-      s:rule [
-         context = "synopfragmentref"
-         s:assert [
-            test = "name(//*[@id=current()/@linkend]) = 'synopfragment'"
-            "@linkend on synopfragmentref must point to a synopfragment."
-         ]
-      ]
-   ]
-   element synopfragmentref { text }
+   remark.attr =
+      remark.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-funcsynopsis.info = docbook.info.titleforbidden
-db.funcsynopsis =
-   element funcsynopsis {
-      funcsynopsis.info?,
-      (db.funcsynopsisinfo | db.funcprototype)+
+   db.remark = element remark {
+      remark.attr,
+      docbook.text
    }
+}
 
-funcsynopsisinfo.verbatim.attribs = verbatim.attributes
-db.funcsynopsisinfo = element funcsynopsisinfo { verbatim.contentmodel }
+# ======================================================================
 
-db.funcprototype =
-   element funcprototype {
-      db.modifier*,
-      db.funcdef,
-      (db.void | db.varargs | (db.paramdef+, db.varargs?)),
-      db.modifier*
-   }
+[
+   db:refname [ "epigraph" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-db.funcdef = element funcdef { (docbook.text | db.type | db.function)* }
+   epigraph.role.attribute = attribute role { text }
 
-db.void = element void { empty }
+   epigraph.attr =
+      epigraph.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-db.varargs = element varargs { empty }
+   epigraph.info = docbook.info.titleforbidden
 
-paramdef.choice.attrib = attribute choice { "opt" | "req" }?
+   db.epigraph =
+      element epigraph {
+         epigraph.attr,
+         epigraph.info,
+         db.attribution?,
+         (para.blocks | db.literallayout)+
+      }
+}
 
-db.paramdef =
-   element paramdef { (docbook.text | db.type | db.parameter | db.funcparams)* }
+# ======================================================================
 
-db.funcparams = element funcparams { inlines* }
+[
+   db:refname [ "footnote" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-oo-method.synopsis.blocks =
-  db.methodsynopsis | db.constructorsynopsis | db.destructorsynopsis
+   ctrl:exclude [ from="db.footnote" exclude="db.footnote" ]
 
-oo-field.synopsis.blocks = db.fieldsynopsis
+   footnote.role.attribute = attribute role { text }
 
-classsynopsis.language.attrib = oo-language.attribute
-classsynopsis.class.attrib = attribute class { "class" | "interface" }?
-db.classsynopsis =
-   element classsynopsis {
-      oo.inlines+,
-      (db.classsynopsisinfo
-       | oo-method.synopsis.blocks
-       | oo-field.synopsis.blocks)*
-   }
+   footnote.attr =
+      footnote.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-classsynopsisinfo.verbatim.attribs = verbatim.attributes
-db.classsynopsisinfo = element classsynopsisinfo { verbatim.contentmodel }
+   db.footnote =
+      element footnote {
+         footnote.attr,
+         blocks+
+      }
+}
 
-db.ooclass = element ooclass { db.modifier*, db.classname }
+# ======================================================================
 
-db.oointerface = element oointerface { db.modifier*, db.interfacename }
+[
+   db:refname [ "highlights" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-db.ooexception = element ooexception {db.modifier*, db.exceptionname  }
+   highlights.role.attribute = attribute role { text }
 
-db.modifier = element modifier { docbook.text }
+   highlights.attr =
+      highlights.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-db.interfacename = element interfacename { docbook.text }
+   db.highlights =
+      element highlights {
+         highlights.attr,
+         (list.blocks | admonition.blocks | para.blocks | indexing.inlines)+
+      }
+}
 
-db.exceptionname = element exceptionname { docbook.text }
+# ======================================================================
 
-fieldsynopsis.language.attrib = oo-language.attribute
-db.fieldsynopsis =
-   element fieldsynopsis {
-      db.modifier*,
-      db.type?,
-      db.varname,
-      db.initializer?
-   }
+para.blocks =
+   db.anchor
+ | db.para
+ | db.formalpara
+ | db.simpara
 
-db.initializer = element initializer { docbook.text }
+# ======================================================================
 
-constructorsynopsis.language.attrib = oo-language.attribute
-db.constructorsynopsis =
-   element constructorsynopsis {
-      db.modifier*,
-      db.methodname?,
-      (db.methodparam+ | db.void?),
-      db.exceptionname*
-   }
+[
+   db:refname [ "formalpara" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-destructorsynopsis.language.attrib = oo-language.attribute
-db.destructorsynopsis =
-   element destructorsynopsis {
-      db.modifier*,
-      db.methodname?,
-      (db.methodparam+ | db.void?),
-      db.exceptionname*
-   }
+   formalpara.role.attribute = attribute role { text }
 
-methodsynopsis.language.attrib = oo-language.attribute
-db.methodsynopsis =
-   element methodsynopsis {
-      db.modifier*,
-      (db.type | db.void)?,
-      db.methodname,
-      (db.methodparam+ | db.void),
-      db.exceptionname*,
-      db.modifier*
-   }
+   formalpara.attr =
+      formalpara.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-db.methodname = element methodname { docbook.text }
+   formalpara.info = docbook.info.titleonlyreq
 
-methodparam.rep.attrib = rep.attribute?
-methodparam.choice.attrib = choice.attribute?
+   db.formalpara =
+      element formalpara {
+         formalpara.attr,
+         formalpara.info,
+         indexing.inlines*,
+         db.para
+      }
+}
 
-db.methodparam =
-   element methodparam {
-      db.modifier*,
-      db.type?,
-      ((db.parameter, db.initializer?) | db.funcparams),
-      db.modifier*
-   }
+# ======================================================================
 
-# TEI: addrPart
+[
+   db:refname [ "para" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-address.verbatim.attribs = verbatim.attributes
-db.address =
-   element address {
-      (docbook.text
-       | db.personname
-       | db.pob
-       | db.street
-       | db.city
-       | db.state
-       | db.postcode
-       | db.country
-       | db.phone
-       | db.fax
-       | db.email
-       | db.otheraddr)*
-   }
+   para.role.attribute = attribute role { text }
 
-db.street = element street { docbook.text }
-db.pob = element pob { docbook.text }
-db.postcode = element postcode { docbook.text }
-db.city = element city { docbook.text }
-db.state = element state { docbook.text }
-db.country = element country { docbook.text }
-db.phone = element phone { docbook.text }
-db.fax = element fax { docbook.text }
-db.otheraddr = element otheraddr { docbook.text }
-
-db.affiliation =
-   element affiliation {
-      db.shortaffil?,
-      db.jobtitle*,
-      db.orgname?,
-      db.orgdiv*,
-      db.address*
-   }
+   para.attr =
+      para.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-db.shortaffil = element shortaffil { docbook.text }
+   para.info = docbook.info.titleforbidden
 
-db.jobtitle = element jobtitle { docbook.text }
+   db.para =
+      element para {
+         para.attr,
+         para.info,
+         (inlines | blocks.nopara)*
+      }
+}
 
-ctrl:other-attribute [ name="orgname.class.attrib"
-                       enum-name="orgname.class-enum.attribute"
-                       other-name="orgname.class-other.attributes" ]
+# ======================================================================
 
-orgname.class-enum.attribute =
-   attribute class {
-      "consortium"
-    | "corporation"
-    | "informal"
-    | "nonprofit" }?
+[
+   db:refname [ "simpara" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-orgname.class-other.attributes =
-   attribute class { "other" },
-   attribute otherclass { text }
+   simpara.role.attribute = attribute role { text }
 
-orgname.class.attrib = (orgname.class-enum.attribute | orgname.class-other.attributes)
+   simpara.attr =
+      simpara.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-db.orgname = element orgname { docbook.text }
+   simpara.info = docbook.info.titleforbidden
 
-db.orgdiv = element orgdiv { inlines* }
+   db.simpara =
+      element simpara {
+         simpara.attr,
+         simpara.info,
+         inlines*
+      }
+}
 
-db.artpagenums = element artpagenums { docbook.text }
+# ======================================================================
 
-db.personname =
-   element personname {
-      docbook.text
-    | (db.honorific
-     | db.firstname
-     | db.surname
-     | db.lineage
-     | db.othername)+
-   }
+ctrl:exclude [ from="admonition.blocks" exclude="admonition.blocks" ]
 
-person.author =
-   db.personname,
-   (db.personblurb
-    | db.affiliation
-    | db.email
-    | db.address
-    | db.contrib)*
+admonition.contentmodel = docbook.info.titleonly, blocks+
 
-org.author =
-   db.orgname,
-   (db.orgdiv
-    | db.affiliation
-    | db.email
-    | db.address
-    | db.contrib)*
+# ======================================================================
 
-credit.contentmodel = person.author | org.author
+[
+   db:refname [ "caution" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   caution.role.attribute = attribute role { text }
 
-db.author = element author { credit.contentmodel }
+   caution.attr =
+      caution.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-db.authorgroup = element authorgroup { (db.author | db.editor | db.othercredit)+ }
+   db.caution =
+      element caution {
+         caution.attr,
+         admonition.contentmodel
+      }
+}
 
-db.collab = element collab { (db.personname | db.orgname)+, db.affiliation* }
+# ======================================================================
 
-db.authorinitials = element authorinitials { docbook.text }
+[
+   db:refname [ "important" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-db.confgroup =
-   element confgroup {
-      (db.confdates
-       | db.conftitle
-       | db.confnum
-       | db.confsponsor
-       | db.address)*
-   }
+   important.role.attribute = attribute role { text }
 
-db.confdates = element confdates { docbook.text }
+   important.attr =
+      important.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-db.conftitle = element conftitle { docbook.text }
+   db.important =
+      element important {
+         important.attr,
+         admonition.contentmodel
+      }
+}
 
-db.confnum = element confnum { docbook.text }
+# ======================================================================
 
-db.confsponsor = element confsponsor { docbook.text }
+[
+   db:refname [ "note" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-# db.contractnum = element contractnum { docbook.text }
+   note.role.attribute = attribute role { text }
 
-# db.contractsponsor = element contractsponsor { docbook.text }
+   note.attr =
+      note.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-db.copyright = element copyright { db.year+, db.holder* }
+   db.note =
+      element note {
+         note.attr,
+         admonition.contentmodel
+      }
+}
 
-db.year = element year { docbook.text }
+# ======================================================================
 
-db.holder = element holder { docbook.text }
+[
+   db:refname [ "tip" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-db.date = element date { docbook.text }
+   tip.role.attribute = attribute role { text }
 
-db.edition = element edition { docbook.text }
+   tip.attr =
+      tip.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-db.editor = element editor { credit.contentmodel }
+   db.tip =
+      element tip {
+         tip.attr,
+         admonition.contentmodel
+      }
+}
 
-biblioid.class.attrib = biblio.class.attrib
-db.biblioid = element biblioid { docbook.text }
+# ======================================================================
 
-citebiblioid.class.attrib = biblio.class.attrib
-db.citebiblioid =
-   element citebiblioid { docbook.text }
+[
+   db:refname [ "warning" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-bibliosource.class.attrib = biblio.class.attrib
-db.bibliosource = element bibliosource { docbook.text }
+   warning.role.attribute = attribute role { text }
 
-bibliorelation.class.attrib = biblio.class.attrib
+   warning.attr =
+      warning.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-ctrl:other-attribute [ name="bibliorelation.type.attrib"
-                       enum-name="bibliorelation.type-enum.attribute"
-                       other-name="bibliorelation.type-other.attributes" ]
+   db.warning =
+      element warning {
+         warning.attr,
+         admonition.contentmodel
+      }
+}
 
-bibliorelation.type-enum.attribute =
-   attribute type { "hasformat"
-    | "haspart"
-    | "hasversion"
-    | "isformatof"
-    | "ispartof"
-    | "isreferencedby"
-    | "isreplacedby"
-    | "isrequiredby"
-    | "isversionof"
-    | "othertype"
-    | "references"
-    | "replaces"
-    | "requires" }?
+# ======================================================================
 
-bibliorelation.type-other.attributes =
-   attribute type { "othertype" },
-   attribute othertype { xsd:NMTOKEN }
+spacing.attribute = attribute spacing { "compact" | "normal" }
 
-bibliorelation.type.attrib =
-   (bibliorelation.type-enum.attribute | bibliorelation.type-other.attributes)
+# ======================================================================
 
-db.bibliorelation = element bibliorelation { docbook.text }
+[
+   db:refname [ "itemizedlist" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   itemizedlist.role.attribute = attribute role { text }
+
+   itemizedlist.attr =
+      itemizedlist.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & spacing.attribute?
+    & attribute mark { text }?
+
+   itemizedlist.info = docbook.info.titleonly
+
+   db.itemizedlist =
+      element itemizedlist {
+         itemizedlist.attr,
+         itemizedlist.info,
+         blocks*,
+         db.listitem+
+      }
+}
 
-ctrl:other-attribute [ name="bibliocoverage.spatial.attrib"
-                       enum-name="bibliocoverage.spatial-enum.attribute"
-                       other-name="bibliocoverage.spatial-other.attributes" ]
+# ======================================================================
 
-bibliocoverage.spatial-enum.attribute =
-   attribute spatial {
-      "dcmipoint" | "iso3166" | "dcmibox" | "tgn"
+[
+   db:refname [ "orderedlist" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   orderedlist.role.attribute = attribute role { text }
+
+   orderedlist.attr =
+      orderedlist.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & spacing.attribute?
+    & continuation.attribute?
+    & attribute inheritnum { "ignore" | "inherit" }?
+    & attribute numeration { text }?
+
+   orderedlist.info = docbook.info.titleonly
+
+   db.orderedlist = element orderedlist {
+      orderedlist.attr,
+      orderedlist.info,
+      blocks*,
+      db.listitem+
    }
+}
 
-bibliocoverage.spatial-other.attributes =
-   attribute spatial { "otherspatial" },
-   attribute otherspatial { xsd:NMTOKEN }
+# ======================================================================
 
-bibliocoverage.spatial.attrs =
-   (bibliocoverage.spatial-enum.attribute | bibliocoverage.spatial-other.attributes)
+[
+   db:refname [ "listitem" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-ctrl:other-attribute [ name="bibliocoverage.temporal.attrib"
-                       enum-name="bibliocoverage.temporal-enum.attribute"
-                       other-name="bibliocoverage.temporal-other.attributes" ]
+   listitem.role.attribute = attribute role { text }
 
-bibliocoverage.temporal-enum.attribute =
-   attribute temporal {
-      "dcmiperiod" | "w3c-dtf"
-   }
+   listitem.attr =
+      listitem.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & attribute override { text }?
 
-bibliocoverage.temporal-other.attributes =
-   attribute temporal { "othertemporal" },
-   attribute othertemporal { xsd:NMTOKEN }
+   db.listitem = element listitem {
+      listitem.attr,
+      blocks+
+   }
+}
 
-bibliocoverage.temporal.attrs =
-   (bibliocoverage.temporal-enum.attribute | bibliocoverage.temporal-other.attributes)
+# ======================================================================
 
-bibliocoverage.coverage.attrib =
-   (bibliocoverage.spatial.attrs | bibliocoverage.temporal.attrs)
- | (bibliocoverage.spatial.attrs & bibliocoverage.temporal.attrs)
+[
+   db:refname [ "segmentedlist" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-db.bibliocoverage = element bibliocoverage { docbook.text }
+   segmentedlist.role.attribute = attribute role { text }
 
-legalnotice.info = docbook.info.titleonly
-db.legalnotice = element legalnotice { legalnotice.info, blocks+ }
+   segmentedlist.attr =
+      segmentedlist.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-othercredit.class.attrib = attribute class {
-   "copyeditor"
- | "graphicdesigner"
- | "other"
- | "productioneditor"
- | "technicaleditor"
- | "translator" }?
+   segmentedlist.info = docbook.info.titleonly
 
-db.othercredit = element othercredit { credit.contentmodel }
+   db.segmentedlist =
+      element segmentedlist {
+         segmentedlist.attr,
+         segmentedlist.info,
+         db.segtitle+,
+         db.seglistitem+
+      }
+}
 
-db.pagenums = element pagenums { docbook.text }
+# ======================================================================
 
-db.contrib = element contrib { docbook.text }
+[
+   db:refname [ "segtitle" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-db.honorific = element honorific { docbook.text }
+   segtitle.role.attribute = attribute role { text }
 
-db.firstname = element firstname { docbook.text }
+   segtitle.attr =
+      segtitle.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-db.surname = element surname { docbook.text }
+   db.segtitle =
+      element segtitle {
+         segtitle.attr,
+         inlines*
+      }
+}
 
-db.lineage = element lineage { docbook.text }
+# ======================================================================
 
-db.othername = element othername { docbook.text }
+[
+   db:refname [ "seglistitem" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-db.printhistory = element printhistory { para.blocks+ }
+   seglistitem.role.attribute = attribute role { text }
 
-productname.class.attrib = attribute class {
-   "copyright" | "registered" | "service" | "trade" }?
-db.productname = element productname { docbook.text }
+   seglistitem.attr =
+      seglistitem.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-db.productnumber = element productnumber { docbook.text }
 
-db.pubdate = element pubdate { docbook.text }
+   db.seglistitem =
+      [
+         s:rule [
+            context = "db:seglistitem"
+            s:assert [
+               test = "count(db:seg) = count(../db:segtitle)"
+               "The number of seg elements must be the same as the number of segtitle elements in the parent segmentedlist"
+            ]
+         ]
+      ]
+      element seglistitem {
+         seglistitem.attr,
+         db.seg+
+      }
+}
 
-db.publisher = element publisher { db.publishername, db.address* }
+# ======================================================================
 
-db.publishername = element publishername { docbook.text }
+[
+   db:refname [ "seg" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-db.releaseinfo = element releaseinfo { docbook.text }
+   seg.role.attribute = attribute role { text }
 
-revhistory.info = docbook.info.titleonly
-db.revhistory = element revhistory { revhistory.info, db.revision+ }
+   seg.attr =
+      seg.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-db.revision =
-   element revision {
-      db.revnumber,
-      db.date,
-      (db.authorinitials | db.author)*,
-      (db.revremark | db.revdescription)?
+   db.seg = element seg {
+      seg.attr,
+      inlines*
    }
+}
 
-db.revnumber = element revnumber { docbook.text }
+# ======================================================================
 
-db.revremark = element revremark { docbook.text }
+[
+   db:refname [ "simplelist" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   simplelist.role.attribute = attribute role { text }
+
+   simplelist.attr =
+      simplelist.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & attribute type { "horiz" | "vert" | "inline" }?
+    & attribute columns { xsd:integer}?
+
+   db.simplelist =
+      element simplelist {
+         simplelist.attr,
+         db.member+
+      }
+}
 
-db.revdescription = element revdescription { blocks* }
+# ======================================================================
 
-db.seriesvolnums = element seriesvolnums { docbook.text }
+[
+   db:refname [ "member" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-db.volumenum = element volumenum { docbook.text }
+   member.role.attribute = attribute role { text }
 
-db.issuenum = element issuenum { docbook.text }
+   member.attr =
+      member.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-db.accel  = element accel { docbook.text }
+   db.member =
+      element member {
+         member.attr,
+         inlines*
+      }
+}
 
-application.class.attrib = attribute class { "hardware" | "software" }?
-db.application = element application { docbook.text }
+# ======================================================================
 
-db.classname = element classname { docbook.text }
+[
+   db:refname [ "variablelist" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-db.command = element command { inlines* }
+   variablelist.role.attribute = attribute role { text }
 
-computeroutput.inlines = (inlines)
+   variablelist.attr =
+      variablelist.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & attribute termlength { text }?
 
-db.computeroutput = element computeroutput { computeroutput.inlines* }
+   variablelist.info = docbook.info.titleonly
 
-database.class.attrib =
-   attribute class {
-      "altkey"
-    | "constraint"
-    | "datatype"
-    | "field"
-    | "foreignkey"
-    | "group"
-    | "index"
-    | "key1"
-    | "key2"
-    | "name"
-    | "primarykey"
-    | "procedure"
-    | "record"
-    | "rule"
-    | "secondarykey"
-    | "table"
-    | "user"
-    | "view"
-   }?
-db.database = element database { docbook.text }
+   db.variablelist =
+      element variablelist {
+         variablelist.attr,
+         variablelist.info,
+         blocks*,
+         db.varlistentry+
+      }
+}
 
-db.email = element email { docbook.text }
+# ======================================================================
 
-db.envar = element envar { docbook.text }
+[
+   db:refname [ "varlistentry" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-db.errorcode = element errorcode { docbook.text }
+   varlistentry.role.attribute = attribute role { text }
 
-db.errorname = element errorname { docbook.text }
+   varlistentry.attr =
+      varlistentry.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-db.errortext = element errortext { docbook.text }
+   db.varlistentry =
+      element varlistentry {
+         varlistentry.attr,
+         db.term+,
+         db.listitem
+      }
+}
 
-db.errortype = element errortype { docbook.text }
+# ======================================================================
 
-filename.path.attrib = attribute path { text }?
-filename.class.attrib =
-   attribute class {
-      "devicefile"
-    | "directory"
-    | "extension"
-    | "headerfile"
-    | "libraryfile"
-    | "partition"
-    | "symlink"
-   }?
-db.filename = element filename { docbook.text }
+[
+   db:refname [ "term" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-db.function = element function { docbook.text }
+   term.role.attribute = attribute role { text }
 
-db.guibutton = element guibutton { (docbook.text | db.accel)* }
+   term.attr =
+      term.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-db.guiicon = element guiicon { (docbook.text | db.accel)* }
+   db.term =
+      element term {
+         term.attr,
+         inlines*
+      }
+}
 
-db.guilabel = element guilabel { (docbook.text | db.accel)* }
+# ======================================================================
+
+floatstyle.attribute = attribute floatstyle { text }
+
+# ======================================================================
+
+[
+   db:refname [ "example" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   example.role.attribute = attribute role { text }
+
+   example.attr =
+      example.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & attribute label { text }?
+    & floatstyle.attribute?
+    & attribute width { text }?
+
+   example.info = docbook.info.titleonlyreq
+
+   db.example =
+      element example {
+         example.attr,
+         example.info,
+         blocks+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "informalexample" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   informalexample.role.attribute = attribute role { text }
+
+   informalexample.attr =
+      informalexample.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & floatstyle.attribute?
+    & attribute width { text }?
+
+   informalexample.info = docbook.info.titleforbidden
+
+   db.informalexample =
+      element informalexample {
+         informalexample.attr,
+         informalexample.info,
+         blocks+
+      }
+}
+
+# ======================================================================
+
+verbatim.inlines = inlines | db.lineannotation
+
+verbatim.contentmodel = docbook.info.titleforbidden, (db.textobject|verbatim.inlines*)
+
+# ======================================================================
+
+[
+   db:refname [ "programlisting" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   programlisting.role.attribute = attribute role { text }
+
+   programlisting.attr =
+      programlisting.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & verbatim.attributes
+    & attribute width { text }?
+
+   db.programlisting =
+      element programlisting {
+         programlisting.attr,
+         verbatim.contentmodel
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "literallayout" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   literallayout.role.attribute = attribute role { text }
+
+   literallayout.attr =
+      literallayout.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & verbatim.attributes
+    & attribute class { "monospaced" | "normal" }?
+
+   db.literallayout =
+      element literallayout {
+         literallayout.attr,
+         verbatim.contentmodel
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "screen" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   screen.role.attribute = attribute role { text }
+
+   screen.attr =
+      screen.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & verbatim.attributes
+    & attribute width { text }?
+
+   db.screen =
+      element screen {
+         screen.attr,
+         verbatim.contentmodel
+      }
+}
+
+# ======================================================================
+
+screenshot.block = db.mediaobject
+
+# ======================================================================
+
+[
+   db:refname [ "screenshot" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   screenshot.role.attribute = attribute role { text }
+
+   screenshot.attr =
+      screenshot.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   screenshot.info = docbook.info
+
+   db.screenshot =
+      element screenshot {
+         screenshot.attr,
+         screenshot.info,
+         screenshot.block
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "figure" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   figure.role.attribute = attribute role { text }
+
+   figure.attr =
+      figure.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & attribute label { text }?
+    & pgwide.attribute?
+    & floatstyle.attribute?
+    & float.attribute?
+
+   figure.info = docbook.info.titleonlyreq
+
+   db.figure =
+      element figure {
+         figure.attr,
+         figure.info,
+         blocks+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "informalfigure" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   informalfigure.role.attribute = attribute role { text }
+
+   informalfigure.attr =
+      informalfigure.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & attribute label { text }?
+    & pgwide.attribute?
+    & floatstyle.attribute?
+    & float.attribute?
+
+   informalfigure.info = docbook.info.titleforbidden
+
+   db.informalfigure =
+      element informalfigure {
+         informalfigure.attr,
+         informalfigure.info,
+         blocks+
+      }
+}
+
+# ======================================================================
+
+mediaobject.content =
+   db.videoobject | db.audioobject | db.imageobject | db.textobject
+
+# ======================================================================
+
+[
+   db:refname [ "mediaobject" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   mediaobject.role.attribute = attribute role { text }
+
+   mediaobject.attr =
+      mediaobject.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   mediaobject.info = docbook.info.titleforbidden
+
+   db.mediaobject =
+      element mediaobject {
+         mediaobject.attr,
+         mediaobject.info,
+         mediaobject.content+
+      }
+}
+
+# ======================================================================
+
+inlinemediaobject.content =
+   db.videoobject | db.audioobject | db.imageobject | db.textobject
+
+# ======================================================================
+
+[
+   db:refname [ "inlinemediaobject" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   inlinemediaobject.role.attribute = attribute role { text }
+
+   inlinemediaobject.attr =
+      inlinemediaobject.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   inlinemediaobject.info = docbook.info.titleforbidden
+
+   db.inlinemediaobject =
+      element inlinemediaobject {
+         inlinemediaobject.attr,
+         inlinemediaobject.info,
+         inlinemediaobject.content+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "videoobject" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   videoobject.role.attribute = attribute role { text }
+
+   videoobject.attr =
+      videoobject.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   videoobject.info = docbook.info.titleforbidden
+
+   db.videoobject =
+      element videoobject {
+         videoobject.attr,
+         videoobject.info,
+         db.videodata
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "audioobject" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   audioobject.role.attribute = attribute role { text }
+
+   audioobject.attr =
+      audioobject.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   audioobject.info = docbook.info.titleforbidden
+
+   db.audioobject =
+      element audioobject {
+         audioobject.attr,
+         audioobject.info,
+         db.audiodata
+      }
+}
+
+# ======================================================================
+
+imageobject.content = db.imagedata
+
+# ======================================================================
+
+[
+   db:refname [ "imageobject" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   imageobject.role.attribute = attribute role { text }
+
+   imageobject.attr =
+      imageobject.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   imageobject.info = docbook.info.titleforbidden
+
+   db.imageobject =
+      element imageobject {
+         imageobject.attr,
+         imageobject.info,
+         imageobject.content
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "textobject" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   textobject.role.attribute = attribute role { text }
+
+   textobject.attr =
+      textobject.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   textobject.info = docbook.info.titleforbidden
+
+   db.textobject =
+      element textobject {
+         textobject.attr,
+         textobject.info,
+         (db.phrase | db.textdata | blocks+)
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "videodata" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   videodata.role.attribute = attribute role { text }
+
+   videodata.attr =
+      videodata.role.attribute?
+    & common.attributes
+    & data.common.attrib
+    & attribute align { "center" | "char" | "justify" | "left" | "right" }?
+    & attribute valign { "bottom" | "middle" | "top" }?
+    & attribute width { text }?
+    & attribute contentwidth { text }?
+    & attribute scalefit { "0" | "1" }?
+    & attribute scale { text }?
+    & attribute depth { text }?
+    & attribute contentdepth { text }?
+
+   videodata.info = docbook.info.titleforbidden
+
+   db.videodata = element videodata {
+      videodata.attr,
+      videodata.info
+   }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "audiodata" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   audiodata.role.attribute = attribute role { text }
+
+   audiodata.attr =
+      audiodata.role.attribute?
+    & common.attributes
+    & data.common.attrib
+
+   audiodata.info = docbook.info.titleforbidden
+
+   db.audiodata =
+      element audiodata {
+         audiodata.attr,
+         audiodata.info
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "imagedata" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   imagedata.role.attribute = attribute role { text }
+
+   imagedata.attr =
+      imagedata.role.attribute?
+    & common.attributes
+    & data.common.attrib
+    & attribute align { "center" | "char" | "justify" | "left" | "right" }?
+    & attribute valign { "bottom" | "middle" | "top" }?
+    & attribute width { text }?
+    & attribute contentwidth { text }?
+    & attribute scalefit { "0" | "1" }?
+    & attribute scale { text }?
+    & attribute depth { text }?
+    & attribute contentdepth { text }?
+
+   imagedata.info = docbook.info.titleforbidden
+
+   db.imagedata =
+      element imagedata {
+         imagedata.attr,
+         imagedata.info
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "textdata" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   textdata.role.attribute = attribute role { text }
+
+   textdata.attr =
+      textdata.role.attribute?
+    & common.attributes
+    & data.common.attrib
+    & attribute encoding { text }?
+
+   textdata.info = docbook.info.titleforbidden
+
+   db.textdata =
+      element textdata {
+         textdata.attr,
+         textdata.info
+      }
+}
+
+# ======================================================================
+
+# db.caption = element caption { blocks+ }
+
+equation.content = db.mediaobject
+
+# ======================================================================
+
+[
+   db:refname [ "equation" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   equation.role.attribute = attribute role { text }
+
+   equation.attr =
+      equation.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   equation.info = docbook.info.titleonlyreq
+
+   db.equation =
+      element equation {
+         equation.attr,
+         equation.info,
+         equation.content+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "informalequation" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   informalequation.role.attribute = attribute role { text }
+
+   informalequation.attr =
+      informalequation.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   informalequation.info = docbook.info.titleforbidden
+
+   db.informalequation =
+      element informalequation {
+         informalequation.attr,
+         informalequation.info,
+         equation.content+
+      }
+}
+
+# ======================================================================
+
+inlineequation.content = db.inlinemediaobject
+
+# ======================================================================
+
+[
+   db:refname [ "inlineequation" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   inlineequation.role.attribute = attribute role { text }
+
+   inlineequation.attr =
+      inlineequation.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.inlineequation =
+      element inlineequation {
+         inlineequation.attr,
+         inlineequation.content+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "synopsis" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   synopsis.role.attribute = attribute role { text }
+
+   synopsis.attr =
+      synopsis.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & verbatim.attributes
+    & attribute label { text }?
+
+   db.synopsis =
+      element synopsis {
+         synopsis.attr,
+         verbatim.contentmodel
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "cmdsynopsis" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   cmdsynopsis.role.attribute = attribute role { text }
+
+   cmdsynopsis.attr =
+      cmdsynopsis.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & attribute sepchar { text }?
+    & attribute cmdlength { text }?
+    & attribute label { text }?
+
+   cmdsynopsis.info = docbook.info.titleforbidden
+
+   db.cmdsynopsis =
+      element cmdsynopsis {
+         cmdsynopsis.attr,
+         cmdsynopsis.info?,
+         (db.command | db.arg | db.group | db.sbr)+,
+         db.synopfragment*
+      }
+}
+
+# ======================================================================
+
+rep.attribute = attribute rep { "norepeat" | "repeat" }
+choice.attribute = attribute choice { "opt" | "plain" | "req" }
+
+# ======================================================================
+
+[
+   db:refname [ "arg" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   arg.role.attribute = attribute role { text }
+
+   arg.attr =
+      arg.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & rep.attribute?
+    & choice.attribute?
+
+   db.arg =
+      element arg {
+         arg.attr,
+         (docbook.text
+          | db.arg
+          | db.group
+          | db.option
+          | db.synopfragmentref
+          | db.sbr)*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "group" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   group.role.attribute = attribute role { text }
+
+   group.attr =
+      group.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & rep.attribute?
+    & choice.attribute?
+
+   db.group =
+      element group {
+         group.attr,
+         (db.arg
+          | db.group
+          | db.option
+          | db.synopfragmentref
+          | db.replaceable
+          | db.sbr)+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "sbr" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   sbr.role.attribute = attribute role { text }
+
+   sbr.attr =
+      sbr.role.attribute?
+    & common.attributes
+
+   db.sbr =
+      element sbr {
+         sbr.attr,
+         empty
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "synopfragment" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   synopfragment.role.attribute = attribute role { text }
+
+   synopfragment.attr =
+      synopfragment.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.synopfragment =
+      element synopfragment {
+         synopfragment.attr,
+         (db.arg | db.group)+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "synopfragmentref" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   synopfragmentref.role.attribute = attribute role { text }
+
+   synopfragmentref.attr =
+      synopfragmentref.role.attribute?
+    & common.attributes
+    & linkend.attribute
+
+   db.synopfragmentref =
+      [
+         s:rule [
+            context = "db:synopfragmentref"
+            s:assert [
+               test = "local-name(//*[@id=current()/@linkend]) = 'synopfragment' and namespace-uri(//*[@id=current()/@linkend]) = 'http://docbook.org/docbook-ng/absinthe'"
+               "@linkend on synopfragmentref must point to a synopfragment."
+            ]
+         ]
+      ]
+      element synopfragmentref {
+         synopfragmentref.attr,
+         text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "funcsynopsis" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   funcsynopsis.role.attribute = attribute role { text }
+
+   funcsynopsis.attr =
+      funcsynopsis.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   funcsynopsis.info = docbook.info.titleforbidden
+
+   db.funcsynopsis =
+      element funcsynopsis {
+         funcsynopsis.attr,
+         funcsynopsis.info?,
+         (db.funcsynopsisinfo | db.funcprototype)+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "funcsynopsisinfo" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   funcsynopsisinfo.role.attribute = attribute role { text }
+
+   funcsynopsisinfo.attr =
+      funcsynopsisinfo.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & verbatim.attributes
+
+   db.funcsynopsisinfo =
+      element funcsynopsisinfo {
+         funcsynopsisinfo.attr,
+         verbatim.contentmodel
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "funcprototype" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   funcprototype.role.attribute = attribute role { text }
+
+   funcprototype.attr =
+      funcprototype.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.funcprototype =
+      element funcprototype {
+         funcprototype.attr,
+         db.modifier*,
+         db.funcdef,
+         (db.void | db.varargs | (db.paramdef+, db.varargs?)),
+         db.modifier*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "funcdef" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   funcdef.role.attribute = attribute role { text }
+
+   funcdef.attr =
+      funcdef.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.funcdef =
+      element funcdef {
+         funcdef.attr,
+         (docbook.text | db.type | db.function)*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "void" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   void.role.attribute = attribute role { text }
+
+   void.attr =
+      void.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.void =
+      element void {
+         void.attr,
+         empty
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "varargs" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   varargs.role.attribute = attribute role { text }
+
+   varargs.attr =
+      varargs.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.varargs =
+      element varargs {
+         varargs.attr,
+         empty
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "paramdef" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   paramdef.role.attribute = attribute role { text }
+
+   paramdef.attr =
+      paramdef.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    &  attribute choice { "opt" | "req" }?
+
+   db.paramdef =
+      element paramdef {
+         paramdef.attr,
+         (docbook.text | db.type | db.parameter | db.funcparams)*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "funcparams" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   funcparams.role.attribute = attribute role { text }
+
+   funcparams.attr =
+      funcparams.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.funcparams =
+      element funcparams {
+         funcparams.attr,
+         inlines*
+      }
+}
+
+# ======================================================================
+
+oo-method.synopsis.blocks =
+  db.methodsynopsis | db.constructorsynopsis | db.destructorsynopsis
+
+oo-field.synopsis.blocks = db.fieldsynopsis
+
+# ======================================================================
+
+[
+   db:refname [ "classsynopsis" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   classsynopsis.role.attribute = attribute role { text }
+
+   classsynopsis.attr =
+      classsynopsis.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & oo-language.attribute
+    & attribute class { "class" | "interface" }?
+
+   db.classsynopsis =
+      element classsynopsis {
+         classsynopsis.attr,
+         oo.inlines+,
+         (db.classsynopsisinfo
+          | oo-method.synopsis.blocks
+          | oo-field.synopsis.blocks)*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "classsynopsisinfo" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   classsynopsisinfo.role.attribute = attribute role { text }
+
+   classsynopsisinfo.attr =
+      classsynopsisinfo.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & verbatim.attributes
+
+   db.classsynopsisinfo =
+      element classsynopsisinfo {
+         classsynopsisinfo.attr,
+         verbatim.contentmodel
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "ooclass" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   ooclass.role.attribute = attribute role { text }
+
+   ooclass.attr =
+      ooclass.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.ooclass =
+      element ooclass {
+         ooclass.attr,
+         db.modifier*,
+         db.classname
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "oointerface" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   oointerface.role.attribute = attribute role { text }
+
+   oointerface.attr =
+      oointerface.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.oointerface =
+      element oointerface {
+         oointerface.attr,
+         db.modifier*,
+         db.interfacename
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "ooexception" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   ooexception.role.attribute = attribute role { text }
+
+   ooexception.attr =
+      ooexception.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.ooexception =
+      element ooexception {
+         ooexception.attr,
+         db.modifier*,
+         db.exceptionname
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "modifier" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   modifier.role.attribute = attribute role { text }
+
+   modifier.attr =
+      modifier.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.modifier =
+      element modifier {
+         modifier.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "interfacename" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   interfacename.role.attribute = attribute role { text }
+
+   interfacename.attr =
+      interfacename.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.interfacename =
+      element interfacename {
+         interfacename.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "exceptionname" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   exceptionname.role.attribute = attribute role { text }
+
+   exceptionname.attr =
+      exceptionname.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.exceptionname =
+      element exceptionname {
+         exceptionname.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "fieldsynopsis" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   fieldsynopsis.role.attribute = attribute role { text }
+
+   fieldsynopsis.attr =
+      fieldsynopsis.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & oo-language.attribute
+
+   db.fieldsynopsis =
+      element fieldsynopsis {
+         fieldsynopsis.attr,
+         db.modifier*,
+         db.type?,
+         db.varname,
+         db.initializer?
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "initializer" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   initializer.role.attribute = attribute role { text }
+
+   initializer.attr =
+      initializer.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.initializer =
+      element initializer {
+         initializer.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "constructorsynopsis" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   constructorsynopsis.role.attribute = attribute role { text }
+
+   constructorsynopsis.attr =
+      constructorsynopsis.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & oo-language.attribute
+
+   db.constructorsynopsis =
+      element constructorsynopsis {
+         constructorsynopsis.attr,
+         db.modifier*,
+         db.methodname?,
+         (db.methodparam+ | db.void?),
+         db.exceptionname*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "destructorsynopsis" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   destructorsynopsis.role.attribute = attribute role { text }
+
+   destructorsynopsis.attr =
+      destructorsynopsis.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & oo-language.attribute
+
+   db.destructorsynopsis =
+      element destructorsynopsis {
+         destructorsynopsis.attr,
+         db.modifier*,
+         db.methodname?,
+         (db.methodparam+ | db.void?),
+         db.exceptionname*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "methodsynopsis" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   methodsynopsis.role.attribute = attribute role { text }
+
+   methodsynopsis.attr =
+      methodsynopsis.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & oo-language.attribute
+
+   db.methodsynopsis =
+      element methodsynopsis {
+         methodsynopsis.attr,
+         db.modifier*,
+         (db.type | db.void)?,
+         db.methodname,
+         (db.methodparam+ | db.void),
+         db.exceptionname*,
+         db.modifier*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "methodname" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   methodname.role.attribute = attribute role { text }
+
+   methodname.attr =
+      methodname.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.methodname =
+      element methodname {
+         methodname.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "methodparam" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   methodparam.role.attribute = attribute role { text }
+
+   methodparam.attr =
+      methodparam.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & rep.attribute?
+    & choice.attribute?
+
+   db.methodparam =
+      element methodparam {
+         methodparam.attr,
+         db.modifier*,
+         db.type?,
+         ((db.parameter, db.initializer?) | db.funcparams),
+         db.modifier*
+      }
+}
+
+# ======================================================================
+# TEI: addrPart
+
+[
+   db:refname [ "address" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   address.role.attribute = attribute role { text }
+
+   address.attr =
+      address.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & verbatim.attributes
+
+   db.address =
+      element address {
+         address.attr,
+         (docbook.text
+          | db.personname
+          | db.pob
+          | db.street
+          | db.city
+          | db.state
+          | db.postcode
+          | db.country
+          | db.phone
+          | db.fax
+          | db.email
+          | db.otheraddr)*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "street" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   street.role.attribute = attribute role { text }
+
+   street.attr =
+      street.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.street =
+      element street {
+         street.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "pob" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   pob.role.attribute = attribute role { text }
+
+   pob.attr =
+      pob.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.pob =
+      element pob {
+         pob.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "postcode" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   postcode.role.attribute = attribute role { text }
+
+   postcode.attr =
+      postcode.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.postcode =
+      element postcode {
+         postcode.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "city" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   city.role.attribute = attribute role { text }
+
+   city.attr =
+      city.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.city =
+      element city {
+         city.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "state" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   state.role.attribute = attribute role { text }
+
+   state.attr =
+      state.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.state =
+      element state {
+         state.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "country" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   country.role.attribute = attribute role { text }
+
+   country.attr =
+      country.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.country =
+      element country {
+         country.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "phone" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   phone.role.attribute = attribute role { text }
+
+   phone.attr =
+      phone.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.phone =
+      element phone {
+         phone.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "fax" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   fax.role.attribute = attribute role { text }
+
+   fax.attr =
+      fax.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.fax =
+      element fax {
+         fax.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "otheraddr" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   otheraddr.role.attribute = attribute role { text }
+
+   otheraddr.attr =
+      otheraddr.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.otheraddr =
+      element otheraddr {
+         otheraddr.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "affiliation" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   affiliation.role.attribute = attribute role { text }
+
+   affiliation.attr =
+      affiliation.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.affiliation =
+      element affiliation {
+         affiliation.attr,
+         db.shortaffil?,
+         db.jobtitle*,
+         db.orgname?,
+         db.orgdiv*,
+         db.address*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "shortaffil" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   shortaffil.role.attribute = attribute role { text }
+
+   shortaffil.attr =
+      shortaffil.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.shortaffil =
+      element shortaffil {
+         shortaffil.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "jobtitle" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   jobtitle.role.attribute = attribute role { text }
+
+   jobtitle.attr =
+      jobtitle.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.jobtitle =
+      element jobtitle {
+         jobtitle.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "orgname" ]
+   db:refpurpose [ "" ]
+]
+div {
+   ctrl:other-attribute [ name="orgname.class.attrib"
+                          enum-name="orgname.class-enum.attribute"
+                          other-name="orgname.class-other.attributes" ]
+
+   orgname.class-enum.attribute =
+      attribute class {
+         "consortium"
+       | "corporation"
+       | "informal"
+       | "nonprofit" }?
+
+   orgname.class-other.attributes =
+      attribute class { "other" },
+      attribute otherclass { text }
+
+   orgname.class.attrib = (orgname.class-enum.attribute | orgname.class-other.attributes)
+
+   orgname.role.attribute = attribute role { text }
+
+   orgname.attr =
+      orgname.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & orgname.class.attrib
+
+   db.orgname =
+      element orgname {
+         orgname.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "orgdiv" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   orgdiv.role.attribute = attribute role { text }
+
+   orgdiv.attr =
+      orgdiv.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.orgdiv =
+      element orgdiv {
+         orgdiv.attr,
+         inlines*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "artpagenums" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   artpagenums.role.attribute = attribute role { text }
+
+   artpagenums.attr =
+      artpagenums.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.artpagenums =
+      element artpagenums {
+         artpagenums.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "personname" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   personname.role.attribute = attribute role { text }
+
+   personname.attr =
+      personname.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.personname =
+      element personname {
+         personname.attr,
+         (docbook.text
+          | (db.honorific
+           | db.firstname
+           | db.surname
+           | db.lineage
+           | db.othername)+)
+      }
+}
+
+# ======================================================================
+
+person.author =
+   db.personname,
+   (db.personblurb
+    | db.affiliation
+    | db.email
+    | db.address
+    | db.contrib)*
+
+org.author =
+   db.orgname,
+   (db.orgdiv
+    | db.affiliation
+    | db.email
+    | db.address
+    | db.contrib)*
+
+credit.contentmodel = person.author | org.author
+
+# ======================================================================
+
+[
+   db:refname [ "author" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   author.role.attribute = attribute role { text }
+
+   author.attr =
+      author.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.author =
+      element author {
+         author.attr,
+         credit.contentmodel
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "authorgroup" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   authorgroup.role.attribute = attribute role { text }
+
+   authorgroup.attr =
+      authorgroup.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.authorgroup =
+      element authorgroup {
+         authorgroup.attr,
+         (db.author | db.editor | db.othercredit)+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "collab" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   collab.role.attribute = attribute role { text }
+
+   collab.attr =
+      collab.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.collab =
+      element collab {
+         collab.attr,
+         (db.personname | db.orgname)+,
+         db.affiliation*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "authorinitials" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   authorinitials.role.attribute = attribute role { text }
+
+   authorinitials.attr =
+      authorinitials.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.authorinitials =
+      element authorinitials {
+         authorinitials.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "confgroup" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   confgroup.role.attribute = attribute role { text }
+
+   confgroup.attr =
+      confgroup.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.confgroup =
+      element confgroup {
+         confgroup.attr,
+         (db.confdates
+          | db.conftitle
+          | db.confnum
+          | db.confsponsor
+          | db.address)*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "confdates" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   confdates.role.attribute = attribute role { text }
+
+   confdates.attr =
+      confdates.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.confdates =
+      element confdates {
+         confdates.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "conftitle" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   conftitle.role.attribute = attribute role { text }
+
+   conftitle.attr =
+      conftitle.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.conftitle =
+      element conftitle {
+         conftitle.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "confnum" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   confnum.role.attribute = attribute role { text }
+
+   confnum.attr =
+      confnum.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.confnum =
+      element confnum {
+         confnum.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "confsponsor" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   confsponsor.role.attribute = attribute role { text }
+
+   confsponsor.attr =
+      confsponsor.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.confsponsor =
+      element confsponsor {
+         confsponsor.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "contractnum" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   contractnum.role.attribute = attribute role { text }
+
+   contractnum.attr =
+      contractnum.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.contractnum =
+      element contractnum {
+         contractnum.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "contractsponsor" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   contractsponsor.role.attribute = attribute role { text }
+
+   contractsponsor.attr =
+      contractsponsor.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.contractsponsor =
+      element contractsponsor {
+         contractsponsor.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "copyright" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   copyright.role.attribute = attribute role { text }
+
+   copyright.attr =
+      copyright.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.copyright =
+      element copyright {
+         copyright.attr,
+         db.year+,
+         db.holder*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "year" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   year.role.attribute = attribute role { text }
+
+   year.attr =
+      year.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.year =
+      element year {
+         year.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "holder" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   holder.role.attribute = attribute role { text }
+
+   holder.attr =
+      holder.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.holder =
+      element holder {
+         holder.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "date" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   date.role.attribute = attribute role { text }
+
+   date.attr =
+      date.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.date =
+      element date {
+         date.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "edition" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   edition.role.attribute = attribute role { text }
+
+   edition.attr =
+      edition.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.edition =
+      element edition {
+         edition.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "editor" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   editor.role.attribute = attribute role { text }
+
+   editor.attr =
+      editor.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.editor =
+      element editor {
+         editor.attr,
+         credit.contentmodel
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "biblioid" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   biblioid.role.attribute = attribute role { text }
+
+   biblioid.attr =
+      biblioid.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & biblio.class.attrib
+
+   db.biblioid =
+      element biblioid {
+         biblioid.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "citebiblioid" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   citebiblioid.role.attribute = attribute role { text }
+
+   citebiblioid.attr =
+      citebiblioid.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & biblio.class.attrib
+
+   db.citebiblioid =
+      element citebiblioid {
+         citebiblioid.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "bibliosource" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   bibliosource.role.attribute = attribute role { text }
+
+   bibliosource.attr =
+      bibliosource.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & biblio.class.attrib
+
+   db.bibliosource =
+      element bibliosource {
+         bibliosource.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "bibliorelation" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   ctrl:other-attribute [ name="bibliorelation.type.attrib"
+                          enum-name="bibliorelation.type-enum.attribute"
+                          other-name="bibliorelation.type-other.attributes" ]
+
+   bibliorelation.type-enum.attribute =
+      attribute type {
+         "hasformat"
+       | "haspart"
+       | "hasversion"
+       | "isformatof"
+       | "ispartof"
+       | "isreferencedby"
+       | "isreplacedby"
+       | "isrequiredby"
+       | "isversionof"
+       | "othertype"
+       | "references"
+       | "replaces"
+       | "requires"
+      }?
+
+   bibliorelation.type-other.attributes =
+      attribute type { "othertype" },
+      attribute othertype { xsd:NMTOKEN }
+
+   bibliorelation.type.attrib =
+      (bibliorelation.type-enum.attribute | bibliorelation.type-other.attributes)
+
+   bibliorelation.role.attribute = attribute role { text }
+
+   bibliorelation.attr =
+      bibliorelation.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & biblio.class.attrib
+    & bibliorelation.type.attrib
+
+   db.bibliorelation =
+      element bibliorelation {
+         bibliorelation.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "bibliocoverage" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   ctrl:other-attribute [ name="bibliocoverage.spatial.attrib"
+                          enum-name="bibliocoverage.spatial-enum.attribute"
+                          other-name="bibliocoverage.spatial-other.attributes" ]
+
+   bibliocoverage.spatial-enum.attribute =
+      attribute spatial {
+         "dcmipoint" | "iso3166" | "dcmibox" | "tgn"
+      }
+
+   bibliocoverage.spatial-other.attributes =
+      attribute spatial { "otherspatial" },
+      attribute otherspatial { xsd:NMTOKEN }
+
+   bibliocoverage.spatial.attrs =
+      (bibliocoverage.spatial-enum.attribute | bibliocoverage.spatial-other.attributes)
+
+   ctrl:other-attribute [ name="bibliocoverage.temporal.attrib"
+                          enum-name="bibliocoverage.temporal-enum.attribute"
+                          other-name="bibliocoverage.temporal-other.attributes" ]
+
+   bibliocoverage.temporal-enum.attribute =
+      attribute temporal {
+         "dcmiperiod" | "w3c-dtf"
+      }
+
+   bibliocoverage.temporal-other.attributes =
+      attribute temporal { "othertemporal" },
+      attribute othertemporal { xsd:NMTOKEN }
+
+   bibliocoverage.temporal.attrs =
+      (bibliocoverage.temporal-enum.attribute | bibliocoverage.temporal-other.attributes)
+
+   bibliocoverage.coverage.attrib =
+      (bibliocoverage.spatial.attrs | bibliocoverage.temporal.attrs)
+    | (bibliocoverage.spatial.attrs & bibliocoverage.temporal.attrs)
+
+   bibliocoverage.role.attribute = attribute role { text }
+
+   bibliocoverage.attr =
+      bibliocoverage.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & bibliocoverage.coverage.attrib
+
+   db.bibliocoverage =
+      element bibliocoverage {
+         bibliocoverage.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "legalnotice" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   legalnotice.role.attribute = attribute role { text }
+
+   legalnotice.attr =
+      legalnotice.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   legalnotice.info = docbook.info.titleonly
+
+   db.legalnotice =
+      element legalnotice {
+         legalnotice.attr,
+         legalnotice.info,
+         blocks+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "othercredit" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   othercredit.class.attrib = attribute class {
+      "copyeditor"
+    | "graphicdesigner"
+    | "other"
+    | "productioneditor"
+    | "technicaleditor"
+    | "translator"
+   }?
+
+   othercredit.role.attribute = attribute role { text }
+
+   othercredit.attr =
+      othercredit.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & othercredit.class.attrib
+
+   db.othercredit =
+      element othercredit {
+         othercredit.attr,
+         credit.contentmodel
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "pagenums" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   pagenums.role.attribute = attribute role { text }
+
+   pagenums.attr =
+      pagenums.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.pagenums =
+      element pagenums {
+         pagenums.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "contrib" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   contrib.role.attribute = attribute role { text }
+
+   contrib.attr =
+      contrib.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.contrib =
+      element contrib {
+         contrib.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "honorific" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   honorific.role.attribute = attribute role { text }
+
+   honorific.attr =
+      honorific.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.honorific =
+      element honorific {
+         honorific.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "firstname" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   firstname.role.attribute = attribute role { text }
+
+   firstname.attr =
+      firstname.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.firstname =
+      element firstname {
+         firstname.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "surname" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   surname.role.attribute = attribute role { text }
+
+   surname.attr =
+      surname.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.surname =
+      element surname {
+         surname.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "lineage" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   lineage.role.attribute = attribute role { text }
+
+   lineage.attr =
+      lineage.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.lineage =
+      element lineage {
+         lineage.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "othername" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   othername.role.attribute = attribute role { text }
+
+   othername.attr =
+      othername.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.othername =
+      element othername {
+         othername.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "printhistory" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   printhistory.role.attribute = attribute role { text }
+
+   printhistory.attr =
+      printhistory.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.printhistory =
+      element printhistory {
+         printhistory.attr,
+         para.blocks+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "productname" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   productname.class.attrib = attribute class {
+      "copyright" | "registered" | "service" | "trade"
+   }?
+
+   productname.role.attribute = attribute role { text }
+
+   productname.attr =
+      productname.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & productname.class.attrib
+
+   db.productname =
+      element productname {
+         productname.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "productnumber" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   productnumber.role.attribute = attribute role { text }
+
+   productnumber.attr =
+      productnumber.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.productnumber =
+      element productnumber {
+         productnumber.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "pubdate" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   pubdate.role.attribute = attribute role { text }
+
+   pubdate.attr =
+      pubdate.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.pubdate =
+      element pubdate {
+         pubdate.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "publisher" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   publisher.role.attribute = attribute role { text }
+
+   publisher.attr =
+      publisher.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.publisher =
+      element publisher {
+         publisher.attr,
+         db.publishername,
+         db.address*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "publishername" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   publishername.role.attribute = attribute role { text }
+
+   publishername.attr =
+      publishername.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.publishername =
+      element publishername {
+         publishername.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "releaseinfo" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   releaseinfo.role.attribute = attribute role { text }
+
+   releaseinfo.attr =
+      releaseinfo.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.releaseinfo =
+      element releaseinfo {
+         releaseinfo.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "revhistory" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   revhistory.role.attribute = attribute role { text }
+
+   revhistory.attr =
+      revhistory.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   revhistory.info = docbook.info.titleonly
+
+   db.revhistory =
+      element revhistory {
+         revhistory.attr,
+         revhistory.info,
+         db.revision+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "revision" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   revision.role.attribute = attribute role { text }
+
+   revision.attr =
+      revision.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.revision =
+      element revision {
+         revision.attr,
+         db.revnumber,
+         db.date,
+         (db.authorinitials | db.author)*,
+         (db.revremark | db.revdescription)?
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "revnumber" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   revnumber.role.attribute = attribute role { text }
+
+   revnumber.attr =
+      revnumber.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.revnumber =
+      element revnumber {
+         revnumber.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "revremark" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   revremark.role.attribute = attribute role { text }
+
+   revremark.attr =
+      revremark.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.revremark =
+      element revremark {
+         revremark.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "revdescription" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   revdescription.role.attribute = attribute role { text }
+
+   revdescription.attr =
+      revdescription.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.revdescription =
+      element revdescription {
+         revdescription.attr,
+         blocks*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "seriesvolnums" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   seriesvolnums.role.attribute = attribute role { text }
+
+   seriesvolnums.attr =
+      seriesvolnums.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.seriesvolnums =
+      element seriesvolnums {
+         seriesvolnums.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "volumenum" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   volumenum.role.attribute = attribute role { text }
+
+   volumenum.attr =
+      volumenum.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.volumenum =
+      element volumenum {
+         volumenum.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "issuenum" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   issuenum.role.attribute = attribute role { text }
+
+   issuenum.attr =
+      issuenum.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.issuenum =
+      element issuenum {
+         issuenum.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   accel.role.attribute = attribute role { text }
+
+   accel.attr =
+      accel.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.accel  =
+      element accel {
+         accel.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "application" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   application.class.attrib = attribute class { "hardware" | "software" }
+
+   application.role.attribute = attribute role { text }
+
+   application.attr =
+      application.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & application.class.attrib
+
+   db.application =
+      element application {
+         application.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "classname" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   classname.role.attribute = attribute role { text }
+
+   classname.attr =
+      classname.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.classname =
+      element classname {
+         classname.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "command" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   command.role.attribute = attribute role { text }
+
+   command.attr =
+      command.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.command =
+      element command {
+         command.attr,
+         inlines*
+      }
+}
+
+# ======================================================================
+
+computeroutput.inlines = (inlines)
+
+# ======================================================================
+
+[
+   db:refname [ "computeroutput" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   computeroutput.role.attribute = attribute role { text }
+
+   computeroutput.attr =
+      computeroutput.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.computeroutput =
+      element computeroutput {
+         computeroutput.attr,
+         computeroutput.inlines*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "database" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   database.class.attrib =
+      attribute class {
+         "altkey"
+       | "constraint"
+       | "datatype"
+       | "field"
+       | "foreignkey"
+       | "group"
+       | "index"
+       | "key1"
+       | "key2"
+       | "name"
+       | "primarykey"
+       | "procedure"
+       | "record"
+       | "rule"
+       | "secondarykey"
+       | "table"
+       | "user"
+       | "view"
+      }
+
+   database.role.attribute = attribute role { text }
+
+   database.attr =
+      database.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & database.class.attrib?
+
+   db.database =
+      element database {
+         database.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "email" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   email.role.attribute = attribute role { text }
+
+   email.attr =
+      email.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.email =
+      element email {
+         email.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "envar" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   envar.role.attribute = attribute role { text }
+
+   envar.attr =
+      envar.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.envar =
+      element envar {
+         envar.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "errorcode" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   errorcode.role.attribute = attribute role { text }
+
+   errorcode.attr =
+      errorcode.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.errorcode =
+      element errorcode {
+         errorcode.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "errorname" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   errorname.role.attribute = attribute role { text }
+
+   errorname.attr =
+      errorname.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.errorname =
+      element errorname {
+         errorname.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "errortext" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   errortext.role.attribute = attribute role { text }
+
+   errortext.attr =
+      errortext.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.errortext =
+      element errortext {
+         errortext.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "errortype" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   errortype.role.attribute = attribute role { text }
+
+   errortype.attr =
+      errortype.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.errortype =
+      element errortype {
+         errortype.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "filename" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   filename.path.attrib = attribute path { text }
+   filename.class.attrib =
+      attribute class {
+         "devicefile"
+       | "directory"
+       | "extension"
+       | "headerfile"
+       | "libraryfile"
+       | "partition"
+       | "symlink"
+      }
+
+   filename.role.attribute = attribute role { text }
+
+   filename.attr =
+      filename.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & filename.path.attrib?
+    & filename.class.attrib?
+
+   db.filename =
+      element filename {
+         filename.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "function" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   function.role.attribute = attribute role { text }
+
+   function.attr =
+      function.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.function =
+      element function {
+         function.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "guibutton" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   guibutton.role.attribute = attribute role { text }
+
+   guibutton.attr =
+      guibutton.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.guibutton =
+      element guibutton {
+         guibutton.attr,
+         (docbook.text | db.accel)*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "guiicon" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   guiicon.role.attribute = attribute role { text }
+
+   guiicon.attr =
+      guiicon.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.guiicon =
+      element guiicon {
+         guiicon.attr,
+         (docbook.text | db.accel)*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "guilabel" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   guilabel.role.attribute = attribute role { text }
+
+   guilabel.attr =
+      guilabel.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.guilabel =
+      element guilabel {
+         guilabel.attr,
+         (docbook.text | db.accel)*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "guimenu" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   guimenu.role.attribute = attribute role { text }
+
+   guimenu.attr =
+      guimenu.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.guimenu =
+      element guimenu {
+         guimenu.attr,
+         (docbook.text | db.accel)*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "guimenuitem" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   guimenuitem.role.attribute = attribute role { text }
+
+   guimenuitem.attr =
+      guimenuitem.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.guimenuitem =
+      element guimenuitem {
+         guimenuitem.attr,
+         (docbook.text | db.accel)*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "guisubmenu" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   guisubmenu.role.attribute = attribute role { text }
+
+   guisubmenu.attr =
+      guisubmenu.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.guisubmenu =
+      element guisubmenu {
+         guisubmenu.attr,
+         (docbook.text | db.accel)*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "hardware" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   hardware.role.attribute = attribute role { text }
+
+   hardware.attr =
+      hardware.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.hardware =
+      element hardware {
+         hardware.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "keycap" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   ctrl:other-attribute [ name="keycap.function.attrib"
+                          enum-name="keycap.function-enum.attribute"
+                          other-name="keycap.function-other.attributes" ]
+
+   keycap.function-enum.attribute =
+      attribute function {
+         "alt"
+       | "backspace"
+       | "command"
+       | "control"
+       | "delete"
+       | "down"
+       | "end"
+       | "enter"
+       | "escape"
+       | "home"
+       | "insert"
+       | "left"
+       | "meta"
+       | "option"
+       | "pagedown"
+       | "pageup"
+       | "right"
+       | "shift"
+       | "space"
+       | "tab"
+       | "up"
+      }?
+
+   keycap.function-other.attributes =
+      attribute function { "other" },
+      attribute otherfunction { text }
+
+   keycap.function.attrib =
+      (keycap.function-enum.attribute | keycap.function-other.attributes)
+
+   keycap.role.attribute = attribute role { text }
+
+   keycap.attr =
+      keycap.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & keycap.function.attrib
+
+   db.keycap =
+      element keycap {
+         keycap.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "keycode" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   keycode.role.attribute = attribute role { text }
+
+   keycode.attr =
+      keycode.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.keycode =
+      element keycode {
+         keycode.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "keycombo" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   ctrl:other-attribute [ name="keycombo.action.attrib"
+                          enum-name="keycombo.action-enum.attribute"
+                          other-name="keycombo.action-other.attributes" ]
+
+   keycombo.action-enum.attribute =
+      attribute action {
+         "click" | "double-click" | "press" | "seq" | "simul"
+      }?
+
+   keycombo.action-other.attributes =
+      attribute action { "other" },
+      attribute otheraction { text }
+
+   keycombo.action.attrib =
+      (keycombo.action-enum.attribute | keycombo.action-other.attributes)
+
+   keycombo.role.attribute = attribute role { text }
+
+   keycombo.attr =
+      keycombo.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & keycombo.action.attrib
+
+   db.keycombo =
+      element keycombo {
+         keycombo.attr,
+         (db.keycap|db.keycombo|db.keysym|db.mousebutton)+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "keysym" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   keysym.role.attribute = attribute role { text }
+
+   keysym.attr =
+      keysym.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.keysym =
+      element keysym {
+         keysym.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "lineannotation" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   lineannotation.role.attribute = attribute role { text }
+
+   lineannotation.attr =
+      lineannotation.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.lineannotation =
+      element lineannotation {
+         lineannotation.attr,
+         inlines*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "literal" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-db.guimenu = element guimenu { (docbook.text | db.accel)* }
+   literal.role.attribute = attribute role { text }
 
-db.guimenuitem =  element guimenuitem { (docbook.text | db.accel)* }
+   literal.attr =
+      literal.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-db.guisubmenu = element guisubmenu { (docbook.text | db.accel)* }
+   db.literal =
+      element literal {
+         literal.attr,
+         inlines*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "code" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   code.language.attrib = attribute language { text }
+
+   code.role.attribute = attribute role { text }
+
+   code.attr =
+      code.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & code.language.attrib?
+
+   db.code =
+      element code {
+         code.attr,
+         inlines*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "constant" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   constant.class.attrib = attribute class { "limit" }
+
+   constant.role.attribute = attribute role { text }
+
+   constant.attr =
+      constant.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & constant.class.attrib?
+
+   db.constant =
+      element constant {
+         constant.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "varname" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   varname.role.attribute = attribute role { text }
+
+   varname.attr =
+      varname.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.varname =
+      element varname {
+         varname.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "markup" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   markup.role.attribute = attribute role { text }
 
-db.hardware = element hardware { docbook.text }
+   markup.attr =
+      markup.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-ctrl:other-attribute [ name="keycap.function.attrib"
-                       enum-name="keycap.function-enum.attribute"
-                       other-name="keycap.function-other.attributes" ]
+   db.markup =
+      element markup {
+         markup.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "menuchoice" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   menuchoice.role.attribute = attribute role { text }
+
+   menuchoice.attr =
+      menuchoice.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.menuchoice =
+      element menuchoice {
+         menuchoice.attr,
+         db.shortcut?,
+         (db.guibutton|db.guiicon|db.guilabel|db.guimenu|db.guimenuitem|db.guisubmenu)+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "shortcut" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   shortcut.action.attrib = keycombo.action.attrib
 
-keycap.function-enum.attribute =
-   attribute function {
-      "alt"
-    | "backspace"
-    | "command"
-    | "control"
-    | "delete"
-    | "down"
-    | "end"
-    | "enter"
-    | "escape"
-    | "home"
-    | "insert"
-    | "left"
-    | "meta"
-    | "option"
-    | "pagedown"
-    | "pageup"
-    | "right"
-    | "shift"
-    | "space"
-    | "tab"
-    | "up" }?
+   shortcut.role.attribute = attribute role { text }
 
-keycap.function-other.attributes =
-   attribute function { "other" },
-   attribute otherfunction { text }
+   shortcut.attr =
+      shortcut.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & shortcut.action.attrib
+
+   db.shortcut =
+      element shortcut {
+         shortcut.attr,
+         (db.keycap|db.keycombo|db.keysym|db.mousebutton)+
+      }
+}
 
-keycap.function.attrib =
-   (keycap.function-enum.attribute | keycap.function-other.attributes)
+# ======================================================================
 
-db.keycap = element keycap { docbook.text }
+[
+   db:refname [ "mousebutton" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-db.keycode = element keycode { docbook.text }
+   mousebutton.role.attribute = attribute role { text }
 
-ctrl:other-attribute [ name="keycombo.action.attrib"
-                       enum-name="keycombo.action-enum.attribute"
-                       other-name="keycombo.action-other.attributes" ]
+   mousebutton.attr =
+      mousebutton.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-keycombo.action-enum.attribute =
-  attribute action {
-    "click" | "double-click" | "press" | "seq" | "simul"
-  }?
+   db.mousebutton =
+      element mousebutton {
+         mousebutton.attr,
+         docbook.text
+      }
+}
 
-keycombo.action-other.attributes =
-   attribute action { "other" },
-   attribute otheraction { text }
+# ======================================================================
 
-keycombo.action.attrib =
-   (keycombo.action-enum.attribute | keycombo.action-other.attributes)
+[
+   db:refname [ "option" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-db.keycombo = element keycombo { (db.keycap|db.keycombo|db.keysym|db.mousebutton)+ }
+   option.role.attribute = attribute role { text }
 
-db.keysym = element keysym { docbook.text }
+   option.attr =
+      option.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-db.lineannotation = element lineannotation { inlines* }
+   db.option =
+      element option {
+         option.attr,
+         docbook.text
+      }
+}
 
-db.literal = element literal { inlines* }
+# ======================================================================
 
-code.language.attrib = attribute language { text }?
-db.code = element code { inlines* }
+[
+   db:refname [ "optional" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-constant.class.attrib = attribute class { "limit" }?
-db.constant = element constant { docbook.text }
+   optional.role.attribute = attribute role { text }
 
-db.varname = element varname { docbook.text }
+   optional.attr =
+      optional.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-db.markup = element markup { docbook.text }
+   db.optional =
+      element optional {
+         optional.attr,
+         inlines*
+      }
+}
 
-db.menuchoice = element menuchoice {
-   db.shortcut?,
-   (db.guibutton|db.guiicon|db.guilabel|db.guimenu|db.guimenuitem|db.guisubmenu)+ }
+# ======================================================================
 
-shortcut.action.attrib = keycombo.action.attrib
+[
+   db:refname [ "parameter" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-db.shortcut = element shortcut {  (db.keycap|db.keycombo|db.keysym|db.mousebutton)+ }
+   parameter.class.attrib = attribute class { "command" | "function" | "option" }
 
-db.mousebutton = element mousebutton { docbook.text }
+   parameter.role.attribute = attribute role { text }
 
-db.option = element option { docbook.text }
+   parameter.attr =
+      parameter.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & parameter.class.attrib?
 
-db.optional = element optional { inlines* }
+   db.parameter =
+      element parameter {
+         parameter.attr,
+         docbook.text
+      }
+}
 
-parameter.class.attrib = attribute class { "command" | "function" | "option" }?
-db.parameter = element parameter { docbook.text }
+# ======================================================================
 
 prompt.inlines = (docbook.text)
 
-db.prompt = element prompt { prompt.inlines* }
+# ======================================================================
+
+[
+   db:refname [ "prompt" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+
+   prompt.role.attribute = attribute role { text }
+
+   prompt.attr =
+      prompt.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.prompt =
+      element prompt {
+         prompt.attr,
+         prompt.inlines*
+      }
+}
 
+# ======================================================================
 replaceable.inlines = (docbook.text)
 
-replaceable.class.attrib =
-   attribute class { "command" | "function" | "option" | "parameter" }?
-db.replaceable = element replaceable { replaceable.inlines* }
-
-db.returnvalue = element returnvalue { docbook.text }
-
-xmltag.class.attrib =
-  attribute class {
-    "attribute"
-    | "attvalue"
-    | "element"
-    | "emptytag"
-    | "endtag"
-    | "genentity"
-    | "numcharref"
-    | "paramentity"
-    | "pi"
-    | "sgmlcomment"
-    | "starttag"
-    | "xmlpi"
-  }?
-db.xmltag = element xmltag { docbook.text }
-
-symbol.class.attrib = attribute class { "limit" }?
-db.symbol = element symbol { docbook.text }
-
-systemitem.class.attrib =
-   attribute class {
-      "daemon"
-    | "domainname"
-    | "etheraddress"
-    | "event"
-    | "eventhandler"
-    | "filesystem"
-    | "fqdomainname"
-    | "groupname"
-    | "ipaddress"
-    | "library"
-    | "macro"
-    | "netmask"
-    | "newsgroup"
-    | "osname"
-    | "process"
-    | "resource"
-    | "server"
-    | "service"
-    | "systemname"
-    | "username"
-   }?
+# ======================================================================
+
+[
+   db:refname [ "replaceable" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   replaceable.class.attrib =
+      attribute class { "command" | "function" | "option" | "parameter" }
+
+   replaceable.role.attribute = attribute role { text }
+
+   replaceable.attr =
+      replaceable.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & replaceable.class.attrib?
+
+   db.replaceable =
+      element replaceable {
+         replaceable.attr,
+         replaceable.inlines*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "returnvalue" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   returnvalue.role.attribute = attribute role { text }
+
+   returnvalue.attr =
+      returnvalue.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.returnvalue =
+      element returnvalue {
+         returnvalue.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "tag" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   tag.class.attrib =
+      attribute class {
+         "attribute"
+       | "attvalue"
+       | "element"
+       | "emptytag"
+       | "endtag"
+       | "genentity"
+       | "numcharref"
+       | "paramentity"
+       | "pi"
+       | "sgmlcomment"
+       | "starttag"
+       | "xmlpi"
+      }?
+
+   tag.role.attribute = attribute role { text }
+
+   tag.attr =
+      tag.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & tag.class.attrib
+
+   db.tag =
+      element tag {
+         tag.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "symbol" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   symbol.class.attrib = attribute class { "limit" }?
+
+   symbol.role.attribute = attribute role { text }
+
+   symbol.attr =
+      symbol.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & symbol.class.attrib
+
+   db.symbol =
+      element symbol {
+         symbol.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
 
 systemitem.inlines = (docbook.text)
 
-db.systemitem = element systemitem { systemitem.inlines* }
+# ======================================================================
+
+[
+   db:refname [ "systemitem" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   systemitem.class.attrib =
+      attribute class {
+         "daemon"
+       | "domainname"
+       | "etheraddress"
+       | "event"
+       | "eventhandler"
+       | "filesystem"
+       | "fqdomainname"
+       | "groupname"
+       | "ipaddress"
+       | "library"
+       | "macro"
+       | "netmask"
+       | "newsgroup"
+       | "osname"
+       | "process"
+       | "resource"
+       | "server"
+       | "service"
+       | "systemname"
+       | "username"
+      }
+
+   systemitem.role.attribute = attribute role { text }
+
+   systemitem.attr =
+      systemitem.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & systemitem.class.attrib?
+
+   db.systemitem =
+      element systemitem {
+         systemitem.attr,
+         systemitem.inlines*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "uri" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   uri.type.attrib = attribute type { text }?
+
+   uri.role.attribute = attribute role { text }
+
+   uri.attr =
+      uri.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & uri.type.attrib
+
+   db.uri =
+      element uri {
+         uri.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "token" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   token.role.attribute = attribute role { text }
+
+   token.attr =
+      token.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.token =
+      element token {
+         token.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "type" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   type.role.attribute = attribute role { text }
 
-uri.type.attrib = attribute type { text }?
-db.uri = element uri { docbook.text }
+   type.attr =
+      type.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-db.token = element token { docbook.text }
+   db.type =
+      element type {
+         type.attr,
+         docbook.text
+      }
+}
 
-db.type = element type { docbook.text }
+# ======================================================================
 
 userinput.inlines = inlines
-db.userinput = element userinput { userinput.inlines* }
-
-db.abbrev = element abbrev {
-   (docbook.text
-    | db.superscript
-    | db.subscript
-    | db.trademark)* }
-
-db.acronym = element acronym {
-   (docbook.text
-    | db.superscript
-    | db.subscript
-    | db.trademark)* }
-
-db.citation = element citation { docbook.text }
-
-db.citerefentry = element citerefentry { db.refentrytitle, db.manvolnum? }
-
-db.refentrytitle = element refentrytitle { inlines* }
-
-db.manvolnum = element manvolnum { docbook.text }
-
-citetitle.pubwork.attrib =
-   attribute pubwork {
-      "article"
-    | "bbs"
-    | "book"
-    | "cdrom"
-    | "chapter"
-    | "dvd"
-    | "emailmessage"
-    | "gopher"
-    | "journal"
-    | "manuscript"
-    | "newsposting"
-    | "part"
-    | "refentry"
-    | "section"
-    | "series"
-    | "set"
-    | "webpage"
-    | "wiki"
-   }?
 
-db.citetitle = element citetitle { inlines* }
+# ======================================================================
+
+[
+   db:refname [ "userinput" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   userinput.role.attribute = attribute role { text }
+
+   userinput.attr =
+      userinput.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.userinput =
+      element userinput {
+         userinput.attr,
+         userinput.inlines*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "abbrev" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   abbrev.role.attribute = attribute role { text }
+
+   abbrev.attr =
+      abbrev.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.abbrev =
+      element abbrev {
+         abbrev.attr,
+         (docbook.text
+          | db.superscript
+          | db.subscript
+          | db.trademark)*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "acronym" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   acronym.role.attribute = attribute role { text }
+
+   acronym.attr =
+      acronym.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.acronym =
+      element acronym {
+         acronym.attr,
+         (docbook.text
+          | db.superscript
+          | db.subscript
+          | db.trademark)*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "citation" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   citation.role.attribute = attribute role { text }
+
+   citation.attr =
+      citation.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.citation =
+      element citation {
+         citation.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "citerefentry" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   citerefentry.role.attribute = attribute role { text }
+
+   citerefentry.attr =
+      citerefentry.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.citerefentry =
+      element citerefentry {
+         citerefentry.attr,
+         db.refentrytitle,
+         db.manvolnum?
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "refentrytitle" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   refentrytitle.role.attribute = attribute role { text }
+
+   refentrytitle.attr =
+      refentrytitle.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.refentrytitle =
+      element refentrytitle {
+         refentrytitle.attr,
+         inlines*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "manvolnum" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   manvolnum.role.attribute = attribute role { text }
+
+   manvolnum.attr =
+      manvolnum.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.manvolnum =
+      element manvolnum {
+         manvolnum.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "citetitle" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   citetitle.pubwork.attrib =
+      attribute pubwork {
+         "article"
+       | "bbs"
+       | "book"
+       | "cdrom"
+       | "chapter"
+       | "dvd"
+       | "emailmessage"
+       | "gopher"
+       | "journal"
+       | "manuscript"
+       | "newsposting"
+       | "part"
+       | "refentry"
+       | "section"
+       | "series"
+       | "set"
+       | "webpage"
+       | "wiki"
+      }
+
+   citetitle.role.attribute = attribute role { text }
+
+   citetitle.attr =
+      citetitle.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & citetitle.pubwork.attrib?
+
+   db.citetitle =
+      element citetitle {
+         citetitle.attr,
+         inlines*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "emphasis" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   emphasis.role.attribute = attribute role { text }
 
-db.emphasis = element emphasis { inlines* }
+   emphasis.attr =
+      emphasis.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-db.foreignphrase = element foreignphrase { inlines* }
+   db.emphasis =
+      element emphasis {
+         emphasis.attr,
+         inlines*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "foreignphrase" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   foreignphrase.role.attribute = attribute role { text }
+
+   foreignphrase.attr =
+      foreignphrase.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.foreignphrase =
+      element foreignphrase {
+         foreignphrase.attr,
+         inlines*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "phrase" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   phrase.role.attribute = attribute role { text }
+
+   phrase.attr =
+      phrase.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.phrase =
+      element phrase {
+         phrase.attr,
+         inlines*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "quote" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   quote.role.attribute = attribute role { text }
+
+   quote.attr =
+      quote.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.quote =
+      element quote {
+         quote.attr,
+         inlines*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "subscript" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   subscript.role.attribute = attribute role { text }
+
+   subscript.attr =
+      subscript.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.subscript =
+      element subscript {
+         subscript.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "superscript" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   superscript.role.attribute = attribute role { text }
+
+   superscript.attr =
+      superscript.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.superscript =
+      element superscript {
+         superscript.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "trademark" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   trademark.class.attrib =
+      attribute class { "copyright" | "registered" | "service" | "trade" }
 
-db.phrase = element phrase { inlines* }
+   trademark.role.attribute = attribute role { text }
 
-db.quote = element quote { inlines* }
+   trademark.attr =
+      trademark.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & trademark.class.attrib?
+
+   db.trademark =
+      element trademark {
+         trademark.attr,
+         docbook.text
+      }
+}
 
-db.subscript = element subscript { docbook.text }
+# ======================================================================
 
-db.superscript = element superscript { docbook.text }
+[
+   db:refname [ "wordasword" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-trademark.class.attrib =
-   attribute class { "copyright" | "registered" | "service" | "trade" }?
+   wordasword.role.attribute = attribute role { text }
 
-db.trademark = element trademark { docbook.text }
+   wordasword.attr =
+      wordasword.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-db.wordasword = element wordasword { docbook.text }
+   db.wordasword =
+      element wordasword {
+         wordasword.attr,
+         docbook.text
+      }
+}
 
-ctrl:common-linking [ element="footnoteref" suppress="yes" ]
+# ======================================================================
 
-footnoteref.linkend.attrib = linkend.attribute
-footnoteref.label.attrib = attribute label { text }?
-db.footnoteref =
-   [
-      s:rule [
-         context = "footnoteref"
-         s:assert [
-            test = "name(//*[@id=current()/@linkend]) = 'footnote'"
-            "@linkend on footnoteref must point to a footnote."
+[
+   db:refname [ "footnoteref" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   footnoteref.role.attribute = attribute role { text }
+
+   footnoteref.attr =
+      footnoteref.role.attribute?
+    & common.attributes
+    & linkend.attribute
+    & attribute label { text }?
+
+   db.footnoteref =
+      [
+         s:rule [
+            context = "db:footnoteref"
+            s:assert [
+               test = "local-name(//*[@id=current()/@linkend]) = 'footnote' and namespace-uri(//*[@id=current()/@linkend]) = 'http://docbook.org/docbook-ng/absinthe'"
+               "@linkend on footnoteref must point to a footnote."
+            ]
          ]
       ]
-   ]
-   element footnoteref { empty }
+      element footnoteref {
+         footnoteref.attr,
+         empty
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "xref" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   xref.role.attribute = attribute role { text }
+
+   xref.attr =
+      xref.role.attribute?
+    & common.attributes
+    & common.linking.attributes.req
+    & attribute xrefstyle { text }?
+    & attribute endterm { xsd:IDREF }?
+
+   db.xref =
+      element xref {
+         xref.attr,
+         empty
+      }
+}
 
-ctrl:common-linking [ element="xref" attributes="common.linking.attributes.req" ]
+# ======================================================================
+
+[
+   db:refname [ "anchor" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-xref.xrefstyle.attrib = attribute xrefstyle { text }?
-xref.endterm.attrib = attribute endterm { xsd:IDREF }?
-db.xref = element xref { empty }
+   anchor.role.attribute = attribute role { text }
 
-ctrl:common-linking [ element="anchor" suppress="yes" ]
-ctrl:common-attributes [ element="anchor" attributes="common.attrib.idreq" ]
+   anchor.attr =
+      anchor.role.attribute?
+    & common.attributes.idreq
 
-db.anchor = element anchor { empty }
+   db.anchor =
+      element anchor {
+         anchor.attr,
+         empty
+      }
+}
 
diff --git a/docbook/relaxng/src/qandaset.rnc b/docbook/relaxng/src/qandaset.rnc
new file mode 100644 (file)
index 0000000..35e29c4
--- /dev/null
@@ -0,0 +1,168 @@
+# This file is part of DocBook NG: The "Absinthe" Release.
+
+# This schema is a "work-in-progress". It validates a DocBook-like grammar that
+# may, in some incarnation, form the basis for DocBook V.next. Or it may not.
+# At the moment, it's just an exploration by Norm. It has utterly no normative
+# value at all.
+#
+# Author: Norman Walsh, <ndw@nwalsh.com>
+# Source: Derived from DocBook XML V4.3
+# Release: $Id$
+#
+# ======================================================================
+
+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/docbook-ng/absinthe"
+default namespace = "http://docbook.org/docbook-ng/absinthe"
+
+list.blocks |= db.qandaset
+
+# ======================================================================
+
+[
+   db:refname [ "qandaset" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   qandaset.role.attribute = attribute role { text }
+
+   qandaset.attr =
+      qandaset.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & attribute defaultlabel { "none" | "number" | "qanda" }?
+
+   qandaset.info = docbook.info.titleonly
+
+   db.qandaset =
+      element qandaset {
+         qandaset.attr,
+         qandaset.info,
+         blocks*,
+         (db.qandadiv+ | db.qandaentry+)
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "qandadiv" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   qandadiv.role.attribute = attribute role { text }
+
+   qandadiv.attr =
+      qandadiv.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   qandadiv.info = docbook.info.titleonly
+
+   db.qandadiv =
+      element qandadiv {
+         qandadiv.attr,
+         qandadiv.info,
+         blocks*,
+         (db.qandadiv+ | db.qandaentry+)
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "qandaentry" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   qandaentry.role.attribute = attribute role { text }
+
+   qandaentry.attr =
+      qandaentry.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   qandaentry.info = docbook.info.titleforbidden
+
+   db.qandaentry =
+      element qandaentry {
+         qandaentry.attr,
+         qandaentry.info,
+         db.question,
+         db.answer*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "question" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   question.role.attribute = attribute role { text }
+
+   question.attr =
+      question.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.question =
+      element question {
+         question.attr,
+         db.label?,
+         blocks+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "answer" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   answer.role.attribute = attribute role { text }
+
+   answer.attr =
+      answer.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.answer =
+      element answer {
+         answer.attr,
+         db.label?,
+         blocks+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "label" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   label.role.attribute = attribute role { text }
+
+   label.attr =
+      label.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.label =
+      element label {
+         label.attr,
+         docbook.text
+      }
+}
+
index 26518ed639b61a686aa3ce7e1859215a2b8ba801..af54dc868072ae6c5ef24950ac1cb701c3b49f79 100644 (file)
 #
 # ======================================================================
 
+namespace rng  = "http://relaxng.org/ns/structure/1.0"
+namespace s = "http://www.ascc.net/xml/schematron"
+namespace db = "http://docbook.org/docbook-ng/absinthe"
+default namespace = "http://docbook.org/docbook-ng/absinthe"
+
 start |= db.refentry
 
 divisions |= db.reference
@@ -20,11 +25,35 @@ part.components |= db.refentry | db.reference
 article.components.optional |= db.refentry*
 article.components.required |= db.refentry+
 
-reference.status.attrib = status.attribute?
-reference.label.attrib = label.attribute?
-reference.info = docbook.info.titlereq
-db.reference =
-   element reference { reference.info, db.partintro?, db.refentry+ }
+# ======================================================================
+
+[
+   db:refname [ "reference" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   reference.role.attribute = attribute role { text }
+
+   reference.attr =
+      reference.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & status.attribute?
+    & label.attribute?
+
+   reference.info = docbook.info.titlereq
+
+   db.reference =
+      element reference {
+         reference.attr,
+         reference.info,
+         db.partintro?,
+         db.refentry+
+      }
+}
+
+# ======================================================================
 
 refsections.optional = db.refsection* | db.simplesect*
 
@@ -33,47 +62,247 @@ refsections.required = db.refsection+ | db.simplesect*
 blocks.or.refsections =
   (blocks+, refsections.optional) | refsections.required
 
-refentry.status.attrib = status.attribute?
-refentry.label.attrib = label.attribute?
-refentry.info = docbook.info.titleforbidden
-db.refentry =
-   element refentry {
-      db.indexterm*,
-      refentry.info,
-      db.refmeta?,
-      db.refnamediv+,
-      db.refsynopsisdiv?,
-      db.refsection+
-   }
-
-db.refmeta =
-   element refmeta {
-      db.indexterm*,
-      db.refentrytitle,
-      db.manvolnum?,
-      db.refmiscinfo*,
-      db.indexterm*}
-
-refmiscinfo.class.attrib = attribute class { text }
-db.refmiscinfo = element refmiscinfo { docbook.text }
-
-db.refnamediv =
-   element refnamediv { db.refdescriptor?, db.refname+, db.refpurpose, db.refclass* }
-
-db.refdescriptor = element refdescriptor { inlines* }
-
-db.refname = element refname { inlines* }
-
-db.refpurpose = element refpurpose { inlines* }
-
-db.refclass = element refclass { text | db.application* }
-
-refsynopsisdiv.info = docbook.info
-db.refsynopsisdiv =
-   element refsynopsisdiv { refsynopsisdiv.info, blocks.or.refsections }
-
-refsection.status.attrib = status.attribute?
-refsection.label.attrib = label.attribute?
-refsection.info = docbook.info.titlereq
-db.refsection =
-  element refsection { refsection.info, blocks.or.refsections }
+# ======================================================================
+
+[
+   db:refname [ "refentry" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   refentry.role.attribute = attribute role { text }
+
+   refentry.attr =
+      refentry.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & status.attribute?
+    & label.attribute?
+
+   refentry.info = docbook.info.titleforbidden
+
+   db.refentry =
+      element refentry {
+         refentry.attr,
+         db.indexterm*,
+         refentry.info,
+         db.refmeta?,
+         db.refnamediv+,
+         db.refsynopsisdiv?,
+         db.refsection+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "refmeta" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   refmeta.role.attribute = attribute role { text }
+
+   refmeta.attr =
+      refmeta.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.refmeta =
+      element refmeta {
+         refmeta.attr,
+         db.indexterm*,
+         db.refentrytitle,
+         db.manvolnum?,
+         db.refmiscinfo*,
+         db.indexterm*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "refmiscinfo" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   refmiscinfo.role.attribute = attribute role { text }
+
+   refmiscinfo.attr =
+      refmiscinfo.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & attribute class { text }?
+
+   db.refmiscinfo =
+      element refmiscinfo {
+         refmiscinfo.attr,
+         docbook.text
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "refnamediv" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   refnamediv.role.attribute = attribute role { text }
+
+   refnamediv.attr =
+      refnamediv.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.refnamediv =
+      element refnamediv {
+         refnamediv.attr,
+         db.refdescriptor?,
+         db.refname+,
+         db.refpurpose,
+         db.refclass*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "refdescriptor" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   refdescriptor.role.attribute = attribute role { text }
+
+   refdescriptor.attr =
+      refdescriptor.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.refdescriptor =
+      element refdescriptor {
+         refdescriptor.attr,
+         inlines*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "refname" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   refname.role.attribute = attribute role { text }
+
+   refname.attr =
+      refname.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.refname =
+      element refname {
+         refname.attr,
+         inlines*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "refpurpose" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   refpurpose.role.attribute = attribute role { text }
+
+   refpurpose.attr =
+      refpurpose.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.refpurpose =
+      element refpurpose {
+         refpurpose.attr,
+         inlines*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "refclass" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   refclass.role.attribute = attribute role { text }
+
+   refclass.attr =
+      refclass.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.refclass =
+      element refclass {
+         refclass.attr,
+         (text | db.application*)
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "refsynopsisdiv" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   refsynopsisdiv.role.attribute = attribute role { text }
+
+   refsynopsisdiv.attr =
+      refsynopsisdiv.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   refsynopsisdiv.info = docbook.info
+
+   db.refsynopsisdiv =
+      element refsynopsisdiv {
+         refsynopsisdiv.attr,
+         refsynopsisdiv.info,
+         blocks.or.refsections
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "refsection" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   refsection.role.attribute = attribute role { text }
+
+   refsection.attr =
+      refsection.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+    & status.attribute?
+    & label.attribute?
+
+   refsection.info = docbook.info.titlereq
+
+   db.refsection =
+      element refsection {
+         refsection.attr,
+         refsection.info,
+         blocks.or.refsections
+      }
+}
index 1d3d1c91074923705b5e8af20a7a72c4ebe9b4af..d17591dcacd213d729f598486a8e632158ddc5e4 100644 (file)
 
 namespace svg = "http://www.w3.org/2000/svg"
 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/docbook-ng/absinthe"
+default namespace = "http://docbook.org/docbook-ng/absinthe"
+
+imageobject.content |= any.svg
 
 any.svg =
    element svg:*
@@ -21,4 +27,3 @@ any.svg =
        | any.svg*)*
    }
 
-imageobject.content |= any.svg
index 5d3637f36de1cafdb45eb35f7948e7d41e89e4cc..2f1c612b30c453da0d0c7b4c01e47cbfc30cfb10 100644 (file)
 #
 # ======================================================================
 
+namespace rng  = "http://relaxng.org/ns/structure/1.0"
+namespace s = "http://www.ascc.net/xml/schematron"
+namespace db = "http://docbook.org/docbook-ng/absinthe"
+default namespace = "http://docbook.org/docbook-ng/absinthe"
+
 technical.blocks |= db.task
 
 task.info = docbook.info.titleonly
 
-db.task = element task { task.info,
-                         db.tasksummary?,
-                        db.taskprerequisites?,
-                        db.procedure,
-                        db.example*,
-                        db.taskrelated? }
+# ======================================================================
+
+[
+   db:refname [ "task" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   task.role.attribute = attribute role { text }
+
+   task.attr =
+      task.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   db.task =
+      element task {
+         task.attr,
+         task.info,
+         db.tasksummary?,
+         db.taskprerequisites?,
+         db.procedure,
+         db.example*,
+         db.taskrelated?
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "tasksummary" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   tasksummary.role.attribute = attribute role { text }
+
+   tasksummary.attr =
+      tasksummary.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-tasksummary.info = docbook.info.titleonly
+   tasksummary.info = docbook.info.titleonly
+
+   db.tasksummary =
+      element tasksummary {
+         tasksummary.attr,
+         tasksummary.info,
+         blocks+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "taskprerequisites" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   taskprerequisites.role.attribute = attribute role { text }
+
+   taskprerequisites.attr =
+      taskprerequisites.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   taskprerequisites.info = docbook.info.titleonly
+
+   db.taskprerequisites =
+      element taskprerequisites {
+         taskprerequisites.attr,
+         taskprerequisites.info,
+         blocks+
+      }
+}
+
+# ======================================================================
 
-db.tasksummary = element tasksummary { tasksummary.info, blocks+ }
+[
+   db:refname [ "taskrelated" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-taskprerequisites.info = docbook.info.titleonly
+   taskrelated.role.attribute = attribute role { text }
 
-db.taskprerequisites = element taskprerequisites { taskprerequisites.info, blocks+ }
+   taskrelated.attr =
+      taskrelated.role.attribute?
+    & common.attributes
+    & common.linking.attributes
 
-taskrelated.info = docbook.info.titleonly
+   taskrelated.info = docbook.info.titleonly
 
-db.taskrelated = element taskrelated { taskrelated.info, blocks+ }
+   db.taskrelated =
+      element taskrelated {
+         taskrelated.attr,
+         taskrelated.info,
+         blocks+
+      }
+}
index f0502cb39a5146abca8c3cbd4bf9ec40444ff841..f99e0defb9039983c081d2532727d0f8e9bca54f 100644 (file)
 # Release: $Id$
 #
 
+namespace rng  = "http://relaxng.org/ns/structure/1.0"
+namespace s = "http://www.ascc.net/xml/schematron"
+namespace db = "http://docbook.org/docbook-ng/absinthe"
+default namespace = "http://docbook.org/docbook-ng/absinthe"
+
 navigation.components |= db.toc
 toc.components |= db.toc
 
-toc.info = docbook.info.titleonly
-db.toc = element toc { toc.info, blocks*, (db.tocdiv | db.tocentry)* }
+# ======================================================================
+
+[
+   db:refname [ "toc" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   toc.role.attribute = attribute role { text }
+
+   toc.attr =
+      toc.role.attribute?
+    & common.attributes
+    & common.linking.attributes
+
+   toc.info = docbook.info.titleonly
+
+   db.toc =
+      element toc {
+         toc.attr,
+         toc.info,
+         blocks*,
+         (db.tocdiv | db.tocentry)*
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "tocdiv" ]
+   db:refpurpose [ "" ]
+]
+div {
+
+   tocdiv.role.attribute = attribute role { text }
+
+   tocdiv.attr =
+      tocdiv.role.attribute?
+    & common.attributes
+    & attribute pagenum { text }?
+    & linkend.attribute?
+
+   tocdiv.info = docbook.info
+
+   db.tocdiv =
+      element tocdiv {
+         tocdiv.attr,
+         tocdiv.info,
+         blocks*,
+         (db.tocdiv | db.tocentry)+
+      }
+}
+
+# ======================================================================
+
+[
+   db:refname [ "tocentry" ]
+   db:refpurpose [ "" ]
+]
+div {
 
-tocdiv.pagenum.attrib = attribute pagenum { text }
-tocdiv.linkend.attrib = linkend.attribute?
+   tocentry.role.attribute = attribute role { text }
 
-tocdiv.info = docbook.info
-db.tocdiv = element tocdiv { tocdiv.info, blocks*, (db.tocdiv | db.tocentry)+ }
+   tocentry.attr =
+      tocentry.role.attribute?
+    & common.attributes
+    & attribute pagenum { text }?
+    & linkend.attribute?
 
-tocentry.pagenum.attrib = pagenum.attribute?
-tocentry.linkend.attrib = linkend.attribute?
-db.tocentry = element tocentry { inlines* }
+   db.tocentry =
+      element tocentry {
+         tocentry.attr,
+         inlines*
+      }
+}