Einfügen eines Block-Elements

(Auszug aus "DocBook-XML: Medienneutrales und plattformunabhängiges Publizieren" von Thomas Schraitle)

Das Ziel dieses Abschnittes ist es, ein (Block-)Element einzufügen, mit dem Sie Übungsaufgaben auszeichnen. Hierfür wird der Name exercise gewählt mit folgendem Inhaltsmodell:

exercise ::= title, question, answer

Dadurch enthält jede Übungsaufgabe einen Titel (title) mit Frage (question) und einer dazugehörigen Antwort (answer). Glücklicherweise existieren bereits alle drei Elemente in DocBook, sodass Sie nur auf deren Definition verweisen brauchen.

DocBook 4 anpassen

Für DocBook 4 gehen Sie wie folgt vor:

Prozedur: Einfügen von exercise als Block-Element für DocBook 4

  1. Suchen Sie das passende Parameter-Entity für Block-Elemente
    Bestimmen Sie zunächst, zu welchem Bereich Ihr neues Element passt. Dies ist der schwierigste Teil. Ihr Element exercise passt gut zu Gleichungen, Beispielen, Abbildungen usw. Diese sind alle im Parameter-Entity %formal.class; (Datei dbpoolx.mod) gruppiert. Entsprechende Anpassungen werden in %local.formal.class; vorgenommen. Orientieren Sie sich daher am Aufbau dieser Elemente aus dieser Klasse.
  2. Anpassen von %local.formal.class;
    Erstellen Sie eine neue Datei und fügen Sie Ihr Element exercise zum Parameter-Entity %local.formal.class; hinzu:
<!ENTITY % local.formal.class   "|exercise"> 
  1. Laden der DocBook-DTD
    Fügen Sie folgenden Zeilen in Ihre Anpassungsdatei ein, um die DocBook-DTD zu laden:
<!ENTITY % DocBookDTD PUBLIC 
   "-//OASIS//DTD DocBook XML V4.5//EN" 
   "http://www.docbook.org/xml/4.5/docbookx.dtd"> 
%DocBookDTD;
  1. Definieren von exercise
    Fügen Sie im letzten Schritt Ihr neues Element nach den vorigen Zeilen ein. Verwenden Sie einen ähnlichen Aufbau wie beispielsweise example, um spätere Anpassungen an Ihrer Datei zu vereinfachen:
<!ENTITY % exercise.module "INCLUDE"> 
<![%exercise.module;[ 
  <!ENTITY % local.exercise.attrib ""> 
  <!ENTITY % exercise.role.attrib "%role.attrib;"> 
  <!ENTITY % exercise.element "INCLUDE"> 
  <![%exercise.element;[ 
   <!ELEMENT exercise ((%formalobject.title.content;), 
                       question, answer)> 
  <!--end of exercise.element-->]]> 
  <!ENTITY % exercise.attlist "INCLUDE"> 
   <![%exercise.attlist;[ 
   <!ATTLIST exercise 
        %common.attrib; 
        %label.attrib; 
        %exercise.role.attrib; 
        %local.exercise.attrib;> 
  <!--end of exercise.attlist-->]]> 
<!--end of exercise.module-->]]> 

Durch die Parameter-Entities %exercise.module;, %exercise.element; und %exercise.attlist; lässt sich Ihre komplette Zusammenstellung zu exercise, nur das Element oder nur die Attribute nachträglich ausblenden und damit anpassen. Der Titel wurde aus dem Parameter-Entity %formalobject.title.content; entnommen.

  1. Verwenden der Anpassungsdatei
    Verwenden Sie die Anpassungsdatei an Stelle der Originaldatei von DocBook (vgl. Validieren mit einer DocBook 4-Anpassungsdatei).

DocBook 5 anpassen

Für DocBook 5 gehen Sie wie folgt vor:

Prozedur: Einfügen von exercise als Block-Element für DocBook 5

  1. Suchen des passenden Definitionsmusters
    Das Suchen eines geeigneten Definitionsmusters ist der schwierigste Teil der Anpassung (vgl. Tabelle Namenskonventionen für DocBook 5). Überprüfen Sie, zu welchen der vielen db.*.blocks-Muster Ihr Element am besten passt. Je nach Intention kann es mehrere Möglichkeiten geben. Für exercise gibt es beispielsweise db.formal.blocks, db.para.blocks oder db.technical.blocks. Für dieses Beispiel wird das Muster db.formal.blocks angenommen.
  2. Anlegen der Anpassungsdatei
    Erzeugen Sie eine Anpassungsdatei mit folgendem Inhalt:
<grammar ns="http://docbook.org/ns/docbook" xmlns:db="http://docbook.org/ns/docbook" xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" xmlns="http://relaxng.org/ns/structure/1.0"> 
    <include href="docbook.rng"/> 
    <define name="db.formal.blocks" combine="choice"> 
        <ref name="db.exercise"/> 
    </define> 
    <!-- Definieren des exercise Elements: --> 
</grammar>
default namespace db = "http://docbook.org/ns/docbook" 
include "docbook.rnc" 
db.formal.blocks |= db.exercise 
# Definieren von exercis
  1. Definieren von exercise
    Fügen Sie als letzten Schritt Ihr neues Element nach dem vorigen Kommentar ein.
<define name="db.exercise.role.attribute"> 
    <attribute name="role"/> 
</define> 
<define name="db.exercise.attlist"> 
    <interleave> 
        <optional> 
            <ref name="db.exercise.role.attribute"/> 
        </optional> 
        <ref name="db.common.attributes"/> 
        <ref name="db.common.linking.attributes"/> 
    </interleave> 
</define> 
<define name="db.exercise.info"> 
    <ref name="db._info.title.onlyreq"/> 
</define> 
<define name="db.exercise"> 
    <!-- Schematron-Regeln ausgeblendet --> 
    <element name="exercise"> 
        <ref name="db.exercise.attlist"> 
            <a:documentation>An exercise</a:documentation> 
        </ref> 
        <ref name="db.exercise.info"/> 
        <oneOrMore> 
            <ref name="db.para.blocks"/> 
        </oneOrMore> 
        <ref name="db.answer"/> 
    </element> 
</define>
db.exercise.role.attribute = attribute role { text } 
db.exercise.attlist = 
  db.exercise.role.attribute? 
  & db.common.attributes 
  & db.common.linking.attributes 
db.exercise.info = db._info.title.onlyreq 
db.exercise = 
  # Schematron-Regeln ausgeblendet 
element exercise { 
   ## An exercise 
    db.exercise.attlist, 
    db.exercise.info, 
    db.question, 
    db.answer 
}
  1. Verwenden der Anpassungsdatei
    Verwenden Sie die Anpassungsdatei an Stelle der Originaldatei von DocBook (vgl. Validieren mit einer DocBook 5-Anpassungsdatei).

  

<< zurück vor >>
Tipp der data2type-Redaktion:
Zum Thema DocBook bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © 2009 Millin Verlag
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "DocBook-XML: Medienneutrales und plattformunabhängiges Publizieren" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

Millin Verlag, Siebengebirgsring 36, 53797 Lohmar, info(at)millin.de