This is the mail archive of the docbook@lists.oasis-open.org mailing list for the DocBook project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Modularity and PE reorganization


I spent some time this weekend with several hundred little slips of
paper[1] making a stab at a more logical set of parameter entities (or
at least, of classes) for DocBook. At the same time, I considered what
sets of elements might be grouped as modules.

The following document is my first stab at describing the results. I
make no claims that any of this will ever get finished or survive in
any form. I'm just exploring.

I think the psuedo-RELAX NG syntax will ultimately be useful as a
source for generating concrete realizations of DocBook with specific
modules selected. Actually, this little schema-description language
looks like an exciting project in its own right.

<schema-description xmlns:in="http://nwalsh.com/xmlns/inclusions";
                    xmlns:ex="http://nwalsh.com/xmlns/exclusions";
                    xmlns:min="http://nwalsh.com/xmlns/minimizations";
                    min:start="-"
                    min:end="o">

  <module name="link"/>
  <module name="olink"/>
  <module name="anchor"/>
  <module name="section"/>
  <module name="sectn"/>
  <module name="simplesect"/>
  <module name="admonition"/>
  <module name="math"/>
  <module name="gui"/>
  <module name="keyboard"/>
  <module name="callout"/>
  <module name="synopsis"/>
  <module name="verbatim"/>
  <module name="oo-programming"/>
  <module name="refentry"/>
  <module name="table"/>
  <module name="htmltable"/>
  <module name="programming"/>
  <module name="error"/>
  <module name="product"/>
  <module name="os"/>
  <module name="markup"/>
  <module name="bridgehead"/>
  <module name="metadata"/>
  <module name="publishing"/>
  <module name="legacy"/>
  <module name="list"/>
  <module name="segmentedlist"/>
  <module name="simplelist"/>
  <module name="procedure"/>
  <module name="glossary"/>
  <module name="bibliography"/>
  <module name="releaseinfo"/>
  <module name="qanda"/>
  <module name="credits"/>
  <module name="personname"/>
  <module name="address"/>
  <module name="toc-lot"/>
  <module name="ebnf"/>
  <module name="alt-para"/>
  <module name="svg"/>
  <module name="htmlform"/>
  <module name="affiliation"/>
  <module name="collab"/>
  <module name="contract"/>
  <module name="partnumber"/>
  <module name="msgset"/>
  <module name="indexing"/>
  <module name="indexes"/>
  <module name="conference"/>
  <module name="keyword"/>
  <module name="graphic"/>
  <module name="book"/>
  <module name="set"/>
  <module name="formal"/>
  <module name="informal"/>
  <module name="remark"/>

  <class name="technical.inlines.class">
    <ref name="replaceable"/>
    <ref name="systemitem"/>
    <ref name="option"/>
    <ref name="optional"/>
  </class>

  <class name="error.inlines.class">
    <ref name="errocode"/>
    <ref name="errortext"/>
    <ref name="errorname"/>
    <ref name="errortype"/>
  </class>

  <class name="programming.inlines.class">
    <ref name="function"/>
    <ref name="parameter"/>
    <ref name="varname"/>
    <ref name="returnvalue"/>
    <ref name="type"/>
  </class>

  <class name="product.inlines.class">
    <ref name="productnumber"/>
    <ref name="productname"/>
    <ref name="database"/>
    <ref name="application"/>
    <ref name="hardware"/>
    <ref name="trademark"/>
  </class>

  <class name="os.inlines.class">
    <ref name="prompt"/>
    <ref name="envar"/>
    <ref name="filename"/>
    <ref name="command"/>
    <ref name="computeroutput"/>
    <ref name="userinput"/>
  </class>

  <class name="markup.inlines.class">
    <ref name="sgmltag"/>
    <ref name="markup"/>
    <ref name="token"/>
    <ref name="symbol"/>
    <ref name="literal"/>
    <ref name="constant"/>
  </class>

  <class name="bibliography.inlines.class">
    <ref name="citation"/>
  </class>

  <class name="glossary.inlines.class">
    <ref name="glossterm"/>
    <ref name="firstterm"/>
  </class>

  <class name="publishing.inlines.class">
    <ref name="superscript"/>
    <ref name="citetitle"/>
    <ref name="bibliography.inlines.class"/>
    <ref name="glossary.inlines.class"/>
    <ref name="citerefentry"/>
    <ref name="footnote"/>
    <ref name="foreignphrase"/>
    <ref name="emphasis"/>
    <ref name="phrase"/>
    <ref name="footnoteref"/>
    <ref name="subscript"/>
    <ref name="quote"/>
    <ref name="acronym"/>
    <ref name="wordasword"/>
    <ref name="abbrev"/>
    <ref name="coref"/>
  </class>

  <class name="list.class">
    <ref name="itemizedlist"/>
    <ref name="orderedlist"/>
    <ref name="variablelist"/>
    <ref name="segmentedlist"/>
    <ref name="simplelist"/>
    <ref name="calloutlist"/>
    <ref name="segmentedlist"/>
  </class>

  <class name="procedure.class">
    <ref name="procedure"/>
  </class>

  <class name="core.info.class">
    <ref name="abstract"/>
    <ref name="artpagenums"/>
    <ref name="bibliocoverage"/>
    <ref name="biblioid"/>
    <ref name="bibliosource"/>
    <ref name="copyright"/>
    <ref name="edition"/>
    <ref name="issuenum"/>
    <ref name="legalnotice"/>
    <ref name="pagenums"/>
    <ref name="pubdate"/>
    <ref name="publisher"/>
    <ref name="publishername"/>
    <ref name="seriesvolnums"/>
    <ref name="volumenum"/>
  </class>

  <class name="legacy.info.class">
    <ref name="modespec"/>
    <ref name="issn"/>
    <ref name="isbn"/>
  </class>

  <class name="legacy.inlines.class">
    <ref name="structname"/>
    <ref name="structfield"/>
    <ref name="inlinegraphic"/>
    <ref name="medialabel"/>
    <ref name="interface"/>
    <ref name="action"/>
    <ref name="property"/>
  </class>

  <class name="legacy.class">
    <ref name="highlights"/>
    <ref name="graphic"/>
    <ref name="screenshot"/>
  </class>

  <class name="math.class">
    <ref name="equation"/>
    <ref name="informalequation"/>
  </class>

  <class name="math.inlines.class">
    <ref name="inlineequation"/>
  </class>

  <class name="tables.class">
    <ref name="tablen"/>
    <ref name="informaltable"/>
  </class>

  <class name="publishing.class">
    <ref name="example"/>
    <ref name="informalexample"/>
    <ref name="figure"/>
    <ref name="informalfigure"/>
    <ref name="math.class"/>
    <ref name="tables.class"/>
    <ref name="graphics.class"/>
    <ref name="blockquote"/>
    <ref name="sidebar"/>
  </class>

  <class name="graphics.class">
    <ref name="mediaobject"/>
    <ref name="mediaobjectco"/>
    <ref name="graphic"/>
    <ref name="graphicco"/>
  </class>

  <class name="graphic.inlines.class">
    <ref name="inlinemediaobject"/>
    <ref name="inlinegraphic"/>
  </class>

  <class name="para.class">
    <ref name="para"/>
    <ref name="simpara"/>
    <ref name="formalpara"/>
  </class>

  <class name="book.class">
    <ref name="book"/>
  </class>

  <class name="dedication.class">
    <ref name="dedication"/>
  </class>

  <class name="preface.class">
    <ref name="preface"/>
  </class>

  <class name="part.class">
    <ref name="part"/>
  </class>

  <class name="reference.class">
    <ref name="reference"/>
  </class>

  <class name="chapter.class">
    <ref name="chapter"/>
  </class>

  <class name="appendix.class">
    <ref name="appendix"/>
  </class>

  <class name="article.class">
    <ref name="article"/>
  </class>

  <class name="conference.info.class">
    <ref name="conftitle"/>
    <ref name="confdates"/>
    <ref name="confsponsor"/>
    <ref name="confgroup"/>
    <ref name="confnum"/>
  </class>

  <class name="keyword.info.class">
    <ref name="keywordset"/>
    <ref name="subjectset"/>
  </class>

  <class name="indexing.inlines.class">
    <ref name="indexterm"/>
  </class>

  <class name="partnumbers.inlines.class">
    <ref name="pubsnumber"/>
    <ref name="invpartnumber"/>
  </class>

  <class name="contract.info.class">
    <ref name="contractsponsor"/>
    <ref name="contractnumber"/>
  </class>

  <class name="ebnf.class">
    <ref name="constraintdef"/>
    <ref name="production"/>
    <ref name="productionset"/>
    <ref name="productionrecap"/>
  </class>

  <class name="ebnf.inlines.class">
    <ref name="nonterminal"/>
  </class>

  <class name="credits.info.class">
    <ref name="author"/>
    <ref name="editor"/>
    <ref name="authorgroup"/>
    <ref name="corpauthor"/>
    <ref name="othercredit"/>
  </class>

  <class name="oo-prog.inlines.class">
    <ref name="initializer"/>
    <ref name="interfacename"/>
    <ref name="methodname"/>
    <ref name="classname"/>
    <ref name="modifier"/>
    <ref name="ooexception"/>
    <ref name="oointerface"/>
    <ref name="exceptionname"/>
    <ref name="ooclass"/>
  </class>

  <class name="oo-prog.class">
    <ref name="destructorsynopsis"/>
    <ref name="classsynopsis"/>
    <ref name="constructorsynopsis"/>
    <ref name="methodsynopsis"/>
    <ref name="fieldsynopsis"/>
  </class>

  <class name="verbatim.class">
    <ref name="programlisting"/>
    <ref name="programlistingco"/>
    <ref name="screen"/>
    <ref name="screenco"/>
    <ref name="literallayout"/>
  </class>

  <class name="synopsis.class">
    <ref name="synopsis"/>
    <ref name="funcsynopsis"/>
    <ref name="cmdsynopsis"/>
  </class>

  <class name="gui.inlines.class">
    <ref name="guiicon"/>
    <ref name="guibutton"/>
    <ref name="guimenuitem"/>
    <ref name="guimenu"/>
    <ref name="guisubmenu"/>
    <ref name="guilabel"/>
    <ref name="menuchoice"/>
    <ref name="mousebutton"/>
  </class>

  <class name="keyboard.inlines.class">
    <ref name="keycombo"/>
    <ref name="keycap"/>
    <ref name="keycode"/>
    <ref name="keysym"/>
    <ref name="shortcut"/>
    <ref name="accell"/>
  </class>

  <class name="admonition.class">
    <ref name="note"/>
    <ref name="tip"/>
    <ref name="important"/>
    <ref name="warning"/>
    <ref name="caution"/>
  </class>

  <class name="link.inlines.class">
    <ref name="xref"/>
    <ref name="ulink"/>
    <ref name="link"/>
    <ref name="olink"/>
    <ref name="anchor"/>
  </class>

  <class name="nav.class">
    <ref name="toc"/>
    <ref name="lot"/>
    <ref name="index"/>
    <ref name="glossary"/>
    <ref name="bibliography"/>
  </class>

  <class name="object.descriptions.class">
    <ref name="abstract"/>
    <ref name="epigraph"/>
  </class>

  <class name="section.class">
    <ref name="section"/>
  </class>

  <class name="sect1.class">
    <ref name="section"/>
  </class>

  <class name="form.class">
    <ref name="html-form"/>
  </class>

  <class name="form.inlines.class">
    <ref name="html-input"/>
    <ref name="html-button"/>
    <ref name="html-label"/>
    <ref name="html-select"/>
    <ref name="html-textarea"/>
  </class>

  <!-- ====================================================================== -->

  <mixture name="info.mix">
    <ref name="core.info.class"/>
    <ref name="legacy.info.class"/>
    <ref name="conference.info.class"/>
    <ref name="keyword.info.class"/>
    <ref name="itermset"/>
  </mixture>

  <mixture name="div.component.mix">
    <ref name="list.class"/>
    <ref name="admonition.class"/>
    <ref name="verbatim.class"/>
    <ref name="synopsis.class"/>
    <ref name="para.class"/>
    <ref name="publishing.class"/>
    <ref name="object.descriptions.class"/>
    <ref name="msgset"/>
    <ref name="procedure.class"/>
    <ref name="qandaset"/>
    <ref name="highlights"/>
    <ref name="remark"/>
    <ref name="bridgehead"/>
    <ref name="anchor"/>
    <ref name="address"/>
    <ref name="indexterm"/>
    <ref name="beginpage"/>
    <ref name="form.class"/>
  </mixture>

  <mixture name="title.char.mix">
    <text/>
    <ref name="publishing.inlines.class"/>
    <ref name="link.inlines.class"/>
    <ref name="technical.inlines.class"/>
    <ref name="remark"/>
    <ref name="math.inlines.class"/>
    <ref name="graphic.inlines.class"/>
    <ref name="indexing.inlines.class"/>
    <ref name="glossary.inlines.class"/>
    <ref name="product.inlines.class"/>
    <ref name="personname"/>
    <ref name="error.inlines.class"/>
    <ref name="legacy.inlines.class"/>
    <ref name="programming.inlines.class"/>
    <ref name="os.inlines.class"/>
    <ref name="markup.inlines.class"/>
    <ref name="legacy.inlines.class"/>
    <ref name="indexing.inlines.class"/>
    <ref name="partnumbers.inlines.class"/>
    <ref name="ebnf.inlines.class"/>
    <ref name="oo-prog.inlines.class"/>
    <ref name="gui.inlines.class"/>
    <ref name="keyboard.inlines.class"/>
    <ref name="form.inlines.class"/>
  </mixture>

  <mixture name="ubiq.mix">
    <ref name="indexing.inlines.class"/>
    <ref name="beginpage"/>
  </mixture>

  <mixture name="ubiq.inclusion">
    <ref name="ubiq.mix"/>
  </mixture>

  <!-- ====================================================================== -->

  <define name="title.content">
    <sequence>
      <ref name="title"/>
      <optional>
	<ref name="subtitle"/>
      </optional>
      <optional>
	<ref name="titleabbrev"/>
      </optional>
    </sequence>
  </define>

  <define name="set.title.content">
    <ref name="title.content"/>
  </define>

  <define name="book.title.content">
    <ref name="title.content"/>
  </define>

  <define name="book.component.title.content">
    <ref name="title.content"/>
  </define>

  <define name="section.title.content">
    <ref name="title.content"/>
  </define>

  <define name="refsection.title.content">
    <ref name="title.content"/>
  </define>

  <class name="book.component.content">
    <choice>
      <sequence>
	<one-or-more>
	  <ref name="div.component.mix"/>
	</one-or-more>
	<choice>
	  <zero-or-more>
	    <ref name="sect1"/>
	  </zero-or-more>
	  <zero-or-more>
	    <ref name="refentry.class">
	  </zero-or-more>
	  <zero-or-more>
	    <ref name="simplesect">
	  </zero-or-more>

	  <zero-or-more>
	    <ref name="section.class">
	  </zero-or-more>
	</choice>
      </sequence>
      <choice>
	<one-or-more>
	  <ref name="sect1">
	</one-or-more>
	<one-or-more>
	  <ref name="refentry.class">
	</one-or-more>
	<one-or-more>
	  <ref name="simplesect">
	</one-or-more>
	<one-or-more>
	  <ref name="section.class">
	</one-or-more>
      </choice>
    </choice>
  </class>

  <!-- ====================================================================== -->

  <define name="set" in:name="ubiq.inclusion">
    <sequence>
      <optional>
	<ref name="set.title.content"/>
      </optional>
      <optional>
	<ref name="setinfo"/>
      </optional>
      <optional>
	<ref name="toc"/>
      </optional>
      <one-or-more>
	<ref name="book.class"/>
      </one-or-more>
      <optional>
	<ref name="setindex"/>
      </optional>
    </sequence>
  </define>

  <define name="setinfo">
    <one-or-more>
      <ref name="info.mix"/>
    </one-or-more>
  </define>

  <!-- ====================================================================== -->

  <define name="article" in:name="ubiq.inclusion">
    <sequence>
      <optional>
	<ref name="book.component.title.content"/>
      </optional>
      <optional>
	<ref name="articleinfo"/>
      </optional>
      <optional>
	<ref name="tocchap"/>
      </optional>
      <zero-or-more>
	<ref name="lot"/>
      </zero-or-more>
      <one-or-more>
	<ref name="book.component.class"/>
      </one-or-more>
      <ref name="book.component.content"/>
      <zero-or-more>
	<choice>
	  <ref name="nav.class"/>
	  <ref name="appendix.class"/>
	  <ref name="ackno"/>
	</choice>
      </zero-or-more>
    </sequence>
  </define>

  <define name="title">
    <zero-or-more>
      <ref name="title.char.mix"/>
    </zero-or-more>
  </define>

  <!-- ====================================================================== -->
  <!-- toc-lot module -->

  <define name="toc" in:module="toc-lot">
    <sequence>
      <optional>
	<ref name="beginpage"/>
      </optional>
      <optional>
	<ref name="book.component.title.content"/>
      </optional>
      <zero-or-more>
	<ref name="tocfront"/>
      </zero-or-more>
      <zero-or-more>
	<choice>
	  <ref name="tocpart"/>
	  <ref name="tocchap"/>
	</choice>
      </zero-or-more>
      <zero-or-more>
	<ref name="tocback"/>
      </zero-or-more>
    </sequence>
  </define>

  <define name="tocfront" in:module="toc-lot">
    <ref name="para.char.mix"/>
  </define>

  <define name="tocpart" in:module="toc-lot">
    <sequence>
      <one-or-more>
	<ref name="tocentry"/>
      </one-or-more>
      <zero-or-more>
	<ref name="tocchap"/>
      </zero-or-more>
    </sequence>
  </define>

  <define name="tocchap" in:module="toc-lot">
    <sequence>
      <one-or-more>
	<ref name="tocentry"/>
      </one-or-more>
      <zero-or-more>
	<ref name="toclevel1"/>
      </zero-or-more>
    </sequence>
  </define>

</schema-description>

                                        Be seeing you,
                                          norm

[1] http://nwalsh.com/docbook/docbook-clippings.png

-- 
Norman Walsh <ndw@nwalsh.com>      | During the first period of a man's
http://www.oasis-open.org/docbook/ | life the greatest danger is:
Chair, DocBook Technical Committee | <em>not to take the
                                   | risk</em>.--Kierkegaard


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]