Adding Elements

Adding a new inline or block element is generally a straightforward matter of creating a pattern for the new element and using |= to add it to the right pattern, as we did in Example 5-1. But if your new element is more intimately related to the existing structure of the document, it may require more surgery.

Example 5-12 extends DocBook by adding a sect6 element.

Example 5-12. Adding a sect6 element

namespace db = "http://docbook.org/ns/docbook"
default namespace = "http://docbook.org/ns/docbook"

include "docbook.rnc" {
   db.sect5.sections = (db.sect6+, db.simplesect*) | db.simplesect+
}

db.sect6.sections = db.simplesect+

db.sect6.status.attribute = db.status.attribute
db.sect6.role.attribute = attribute role { text }
db.sect6.attlist =
   db.sect6.role.attribute?
 & db.common.attributes
 & db.common.linking.attributes
 & db.label.attribute?
 & db.sect6.status.attribute?

db.sect6.info = db._info.title.req

db.sect6 =
   element sect6 {
      db.sect6.attlist,
      db.sect6.info,
      ((db.all.blocks+, db.sect6.sections?)
       | db.sect6.sections),
      db.navigation.components*
   }

Here we’ve redefined sect5 to include sect6 and provided a pattern for sect6.

Get DocBook 5: The Definitive Guide now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.