Anhang B

Dokumenttyp-Definitionen und DSSSL-Sylesheets

Dieser Anhang enthält die Sammlung der DTDs, die ich im Rahmen dieser Diplomarbeit entworfen haben. Um die Lesbarkeit des Textes zu verbessern, habe ich sie am Ende der Arbeit plaziert.

B.1 DTD für Suchmuster

Das folgende Listing zeigt die DTD für ein Suchmuster.

<!--


  DTD für Suchmuster

  Teil einer Diplomarbeit am
  Lehrstuhl für Künstliche Intelligenz
  Fachbereich Informatik
  Uni Dortmund
  Germany


  (c) 1998 Stefan Mintert


  Benutzung:

  <!DOCTYPE PUBLIC "-//mintert.com//DTD IP4W3 Suchmuster 1.0//DE"
            SYSTEM "http://www.mintert.com/ip4w3/suchmuster10.dtd">


  Formal Public Identifier (PID):
  "-//mintert.com//DTD IP4W3 Suchmuster 1.0//DE"

-->

<!-- ======== Entity-Deklarationen ======== -->

<!ENTITY % elemcont "element | any">
<!ENTITY % elematt  "type  CDATA  #IMPLIED">
<!ENTITY % telematt "type  CDATA  #REQUIRED">
<!ENTITY % attatt   "name  CDATA  #REQUIRED
		     value CDATA  #IMPLIED"  >



<!-- ======== Element-Deklarationen ======== -->

<!ELEMENT suchmuster - -	(element | target-element) >
<!ATTLIST suchmuster id         ID      #REQUIRED >
<!ELEMENT element    - -        (attribute*, (%elemcont; | target-element) ) >
<!ATTLIST element
	%elematt;
	>
<!ELEMENT target-element - -    (beschreibung, form, attribute*)>
<!ATTLIST target-element
	%telematt;
	>


<!-- informelle Beschreibung des Suchmusters; 
     sollte kurz sein, dient zur Ausgabe auf 
     der HTML-Seite 
-->
<!ELEMENT beschreibung - - (#PCDATA) >

<!-- 
das form-element enthaelt informationen darueber, wie das
suchmuster in ein korrespondierendes HTML-formular umgewandelt
werden soll; zwei moeglichkeiten: 1-aus-n-Auswahl,
oder freie Eingabe (Text) 
-->
<!ELEMENT form - - (select|textinput) >

<!-- select ist ein auswahlfeld und besteht aus... -->
<!ELEMENT select - - (option+) >

<!-- 
...ein oder mehr optionen. jede option benoetigt eine textuelle
beschreibung, die im HTML-formular erscheint sowie einen
optionalen wert (Attribut value), nach dem gesucht wird. falls value
fehlt, wird der Inhalt als Wert angenommen 
-->
<!ELEMENT option - - (#PCDATA) >
<!ATTLIST option
          value CDATA #IMPLIED >


<!-- 
textinput erlaubt die freie eingabe eines suchbegriffs; 
ueber das attribut wertebereich laesst sich der wertebereich 
festlegen
-->
<!ELEMENT textinput - - EMPTY >
<!ATTLIST textinput
          wertebereich (beliebig|buchstaben|posinteger) beliebig >



<!ELEMENT attribute - - EMPTY>
<!ATTLIST attribute %attatt;>
<!ELEMENT any - - (%elemcont; | target-element)>

Da eine Anwendung in IP4W3 normalerweise mehr als ein Suchmuster benötigt, muß es ein Element geben, das mehrere Elemente vom Typ suchmuster aufnehmen kann. Zu diesem Zweck habe ich folgende DTD geschrieben, die lediglich das Wurzelelement ip4w3project deklariert. Für den modularen Aufbau der DTDs habe ich mich entschieden, um zukünftige Änderungen zu begünstigen.

<!--


	DTD für das System IP4W3

	Teil einer Diplomarbeit am
	Lehrstuhl für Künstliche Intelligenz
	Fachbereich Informatik
	Uni Dortmund
	Germany


	(c) 1998 Stefan Mintert


	Benutzung:

	<!DOCTYPE PUBLIC "-//mintert.com//DTD IP4W3 Project 1.0//DE"
		  SYSTEM "http://www.mintert.com/...">


	Formal Public Identifier (PID):
	"-//mintert.com//DTD IP4W3 Project 1.0//DE"

-->
<!ELEMENT ip4w3project - - (suchmuster)+> 
<!ENTITY % suchmuster-dtd PUBLIC "-//mintert.com//DTD IP4W3 Suchmuster 1.0//DE" SYSTEM "suchmuster.dtd">
%suchmuster-dtd;

B.2 DTD für die Uebe-Bücher

Aufbauend auf der in Kapitel 6 beschriebenen Textanalyse habe ich folgende Dokumenttyp-Definition entwickelt. Sie orientiert sich an den vorgegebenen Büchern [UEBE92] und [UEBE95], ist jedoch auch geeignet, andere Schriften des gleichen Typs zu beschreiben. Zusammen mit dieser DTD lassen sich die bisher umgewandelten Kapitel fehlerfrei verarbeiten (insbesondere einwandfreies Parsing). Dennoch ist diese DTD als unvollständig anzusehen, da die noch fehlenden Kapitel für ihren Entwurf nicht herangezogen werden konnten.

Die DTD stellt keine besonderen Anforderungen an die SGML-Deklaration. Beim Parsing mit nsgmls habe ich die implizite System-Deklaration des Parsers verwendet (siehe www.jclark.com). Sollen die Instanzen als XML-Instanzen betrachtet werden, so ist lediglich die Markup-Minimierung (- -) aus der DTD zu entfernen. Sämtliche Inhaltsmodelle sind XML-konform.


<!ENTITY % block " Abbildung | absatz | gleichungssystem | tabelle |
nl | ul | bl | bibliste | illustration | definition | UNBEKANNTERBLOCK " >


<!ENTITY % zeichen "#PCDATA | em | br | strong | Fussnote | Keyword |
KeyThema | KeyBeschreibung | BibRef | Formel | Acronym | Person | Land
| Zitat | Modellname | Modelltyp | Querverweis | Gleichungsref |
Modellreferenz | Autor | UNBEKANNT | Buchtitel | Verlag | Jahr |
bildref| tabref | sub | sup | bild | stadt  | defref" >



<!-- ================== Parameter Entities =============================== -->



<!ENTITY % coreattrs
 "id          ID             #IMPLIED  -- document-wide unique id --"
  >

<!ENTITY % refattrs
 "idref          IDREF             #REQUIRED  -- document-wide unique id --"
  >

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


<!ELEMENT kapitel  	- - (ueberschrift , keyword* , (%block;)* , 
				abschnitt+) >
<!ATTLIST kapitel
  %coreattrs;
>





<!ELEMENT abschnitt  	- - (ueberschrift , (%block;)* , unterabschnitt*) >
<!ATTLIST abschnitt
  %coreattrs;
>
<!ELEMENT unterabschnitt  	- - (ueberschrift , (%block;)* , unterunterabschnitt*) >
<!ATTLIST unterabschnitt
  %coreattrs;
>
<!ELEMENT unterunterabschnitt  	- - (ueberschrift , (%block;)+) >
<!ATTLIST unterunterabschnitt
  %coreattrs;
>


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

<!ELEMENT absatz  	- - (%zeichen;)* >


<!-- Listen -->
<!ELEMENT nl  	- - (le+) >
<!ELEMENT le  	- - ((%zeichen;)* | (%block;)*) >
<!ELEMENT ul  	- - (le+) >
<!ELEMENT bl  	- - (be,bb)+ >
<!ELEMENT be  	- - (%zeichen;)* >
<!ELEMENT bb  	- - ((%zeichen;)* | (%block;)*) >


<!-- Tabelle -->
<!ELEMENT tabelle  	- - (tabellentext?,tr+) >
<!ATTLIST tabelle
  %coreattrs;
>
<!ELEMENT tr  	- - (th|td)+ >
<!ELEMENT th  	- - ((%zeichen;)* | (%block;)*) >
<!ELEMENT td  	- - ((%zeichen;)* | (%block;)*) >
<!ELEMENT tabellentext  	- - (%zeichen;)* >

<!-- mathematische Texte -->
<!ELEMENT gleichungssystem  	- - (Gleichung+) >
<!ELEMENT Gleichung  	- - (%zeichen;)* >
<!ATTLIST Gleichung
  %coreattrs;
>


<!ELEMENT Definition  	- - (defUeberschrift, (%block;)+) >
<!ATTLIST Definition
  %coreattrs;
>
<!ELEMENT Blockzitat  	- - (%zeichen;)* >



<!ELEMENT bibliste  	- - (bibeintrag+) >
<!ELEMENT bibeintrag   	- - (#PCDATA|titel |verlag|jahr|autor|person )* >
<!ATTLIST bibeintrag
  %coreattrs;
>
<!ELEMENT titel  	- - (#PCDATA) >
<!ELEMENT Verlag  	- - (#PCDATA) >
<!ELEMENT Jahr  	- - (#PCDATA) >

<!ELEMENT illustration  	- - (ueberschrift, (%block;)+) >
<!ATTLIST illustration
  %coreattrs;
>



<!ELEMENT abbildung  	- - (bild,bildtext?) >
<!ATTLIST abbildung
  %coreattrs;
>
<!ELEMENT bild  	- o EMPTY >
<!ATTLIST bild
  src 		CDATA	#REQUIRED
>
<!ELEMENT bildtext  	- - (%zeichen;)* >



<!-- ================== Zeichen =============================== -->
<!ELEMENT em  	- - (#PCDATA) >
<!ELEMENT br  	- o EMPTY >
<!ELEMENT strong  	- - (#PCDATA) >
<!ELEMENT Fussnote  	- - (%zeichen;)* >
<!ELEMENT Keyword  	- - (#PCDATA) >
<!ELEMENT KeyThema  	- - (#PCDATA) >
<!ELEMENT KeyBeschreibung  	- - (#PCDATA) >
<!ELEMENT Formel  	- - (#PCDATA) >
<!ELEMENT Acronym  	- - (#PCDATA) >
<!ELEMENT Person  	- - (#PCDATA) >
<!ELEMENT stadt  	- - (#PCDATA) >
<!ELEMENT Land  	- - (#PCDATA) >
<!ELEMENT Zitat  	- - (#PCDATA) >
<!ELEMENT Modellname  	- - (#PCDATA) >
<!ELEMENT Modelltyp  	- - (#PCDATA) >



<!ELEMENT BibRef  	- o EMPTY >
<!ATTLIST bibref
  %refattrs;
>
<!ELEMENT Querverweis  	- o EMPTY >
<!ATTLIST Querverweis
  %refattrs;
>
<!ELEMENT Gleichungsref  	- o EMPTY >
<!ATTLIST Gleichungsref
  %refattrs;
>
<!ELEMENT Modellreferenz  	- o EMPTY >
<!ATTLIST Modellreferenz
  %refattrs;
>
<!ELEMENT bildref  	- o EMPTY >
<!ATTLIST bildref
  %refattrs;
>
<!ELEMENT tabref  	- o EMPTY >
<!ATTLIST tabref
  %refattrs;
>
<!ELEMENT defref  	- o EMPTY >
<!ATTLIST defref
  %refattrs;
>


<!ELEMENT Autor  	- - (#PCDATA) >
<!ELEMENT Buchtitel  	- - (#PCDATA) >
<!ELEMENT ueberschrift  	- - (%zeichen;)* >
<!ELEMENT sup  	- - (#PCDATA) >
<!ELEMENT sub  	- - (#PCDATA) >
<!ELEMENT defUeberschrift  	- - (%zeichen;)* >


<!ELEMENT UNBEKANNT  	- - ANY >
<!ELEMENT UNBEKANNTERBLOCK  	- - ANY >



<!ELEMENT TODO  	o o ANY >





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

<!-- Character References -->

<!ENTITY amp     CDATA "&#38;"    -- ampersand, u+0026 ISOnum -->
<!ENTITY lt      CDATA "&#60;"    -- less-than sign, u+003C ISOnum -->
<!ENTITY gt      CDATA "&#62;"    -- greater-than sign, u+003E ISOnum -->

B.3 DSSSL-Stylesheet für die Uebe-DTD

Das folgende Listing zeigt das DSSSL-Stylesheet, das ich für die Uebe-DTD geschrieben habe.

<!DOCTYPE style-sheet PUBLIC "-//James Clark//DTD DSSSL Style Sheet//EN">

(declare-flow-object-class element
  "UNREGISTERED::James Clark//Flow Object Class::element")
(declare-flow-object-class empty-element
  "UNREGISTERED::James Clark//Flow Object Class::empty-element")
(declare-flow-object-class entity-ref
  "UNREGISTERED::James Clark//Flow Object Class::entity-ref")
(declare-flow-object-class document-type
  "UNREGISTERED::James Clark//Flow Object Class::document-type")
(declare-characteristic preserve-sdata?
  "UNREGISTERED::James Clark//Characteristic::preserve-sdata?"
  #t)

(define (copy-attributes #!optional (nd (current-node)))
  (let loop ((atts (named-node-list-names (attributes nd))))
    (if (null? atts)
        '()
        (let* ((name (car atts))
               (value (attribute-string name nd)))
          (if value
              (cons (list name value)
                    (loop (cdr atts)))
              (loop (cdr atts)))))))


(default
      (process-children))

; ===================================== Xrefs

(mode xref
  (element KAPITEL
    (process-matching-children 'ueberschrift))
  
  (element (KAPITEL ueberschrift)
    (literal (ancestor-kind-nummer "Kapitel")))
  
  
  (element Abschnitt
    (process-matching-children 'ueberschrift))
  
  (element (Abschnitt ueberschrift)
    (literal (string-append
	      (let ((kapnum (ancestor-kind-nummer "Kapitel")))
		(string-append kapnum "."))
	      (let ((absnum (ancestor-kind-nummer "Abschnitt")))
		absnum))))
  
  (element Unterabschnitt
    (process-matching-children 'ueberschrift))
  
  (element (Unterabschnitt ueberschrift)
    (literal (string-append
	      (let ((kapnum (ancestor-kind-nummer "Kapitel")))
		(string-append kapnum "."))
	      (let ((absnum (ancestor-kind-nummer "Abschnitt")))
		(string-append absnum "."))
	      (let ((uabsnum (ancestor-kind-nummer "Unterabschnitt")))
		uabsnum))))
  
  
  (element Unterunterabschnitt
    (process-matching-children 'ueberschrift))
  
  (element (Unterunterabschnitt ueberschrift)
    (literal (string-append
	      (let ((kapnum (ancestor-kind-nummer "Kapitel")))
		(string-append kapnum "."))
	      (let ((absnum (ancestor-kind-nummer "Abschnitt")))
		(string-append absnum "."))
	      (let ((uabsnum (ancestor-kind-nummer "Unterabschnitt")))
		(string-append uabsnum "."))
	      (let ((uuabsnum (ancestor-kind-nummer "UnterUnterabschnitt")))
		uuabsnum))))
  
  (element bibeintrag
    (literal (string-append "[" (element-nummer (current-node)) "]")))
  
  (element abbildung
    (process-matching-children 'bildtext))
  
  (element (abbildung bildtext)
    (literal (string-append "figure " (element-nummer (current-node)))))
  
  (element tabelle
    (process-matching-children 'tabellentext))
  
  (element (tabelle tabellentext)
    (literal (string-append "table " (element-nummer (current-node)))))
  
  (element (gleichungssystem gleichung)
    (literal (string-append "(" (element-nummer (current-node)) ")")))
  
  )


(element bibref
  (let ((ziel-id (attribute-string "idref")))
    (with-mode xref (process-element-with-id ziel-id))))


(element Gleichungsref
  (let ((ziel-id (attribute-string "idref")))
    (with-mode xref (process-element-with-id ziel-id))))


(element bildref
  (let ((ziel-id (attribute-string "idref")))
    (with-mode xref (process-element-with-id ziel-id))))


(element tabref
  (let ((ziel-id (attribute-string "idref")))
    (with-mode xref (process-element-with-id ziel-id))))


;(element ref
;  (let ((ziel-id (attribute-string "idref")))
;    (with-mode xref (process-element-with-id ziel-id))))





; ===================================== Fussnoten

(mode kap-fussnoten
  (default (process-node-list 
	    (select-elements 
	     (descendants  
	      (current-node)) 
	     "fussnote")))
  (element fussnote
    (let ((zieladresse 
	   (string-append 
	    "fussnote" 
	    (element-nummer (current-node)))))
      (make element gi: "tr"
	    (make sequence
	      (make element gi: "td"
		    attributes: (cons (list "valign" "top")
				      '())
		    (make element gi: "A"
			  attributes: (cons (list "NAME" zieladresse)
					    '())
			  (literal (element-nummer (current-node)))))
	      (make element gi: "td"
		    (with-mode #f (process-children)))))))
  )

(element fussnote
  (let ((zieladresse (string-append 
		      (string-append "#" "fussnote")
		      (element-nummer (current-node)))))
;    (make element gi: "A"         ; keine Hyperlinks
;	  attributes: (cons (list "HREF" zieladresse)
;			    '())
	  (make element gi: "SUP"
		(make element gi: "FONT"
		      attributes: (attribute 
				   (list 
				    "SIZE" 
				    "-2" 
				    "class" 
				    "fussnotennummer"))
		      (literal (element-nummer (current-node))))
		)
;	  )
       )
)

; ===================================== RUMPF

(element KAPITEL                     
;  (make element gi: "body"
;	attributes: (attribute (list "bgcolor" "white"))
	(make sequence
	  (process-children)
	  (if (node-list=? (empty-node-list)
			   (select-elements 
			    (descendants  
			     (current-node)) 
			    "fussnote"))
	      (empty-sosofo)
	      (make sequence
		(footseprule)
		(make element gi: "strong"        
		      (literal "Footnotes"))
		(br)
		(make element gi: "table"
		      (with-mode kap-fussnoten (process-children)))
		(chapseprule))))
;	)
  )


(element abschnitt
  (process-children))
(element unterabschnitt
  (process-children))
(element unterunterabschnitt
  (process-children))


; ===================================== Ueberschriften 

(element (KAPITEL ueberschrift)
  (let ((kapnummer (ancestor-kind-nummer "Kapitel"))
	(kaptext   (if (node-list=?
			(ancestor "ANHANGTEIL")
			(empty-node-list)) ; nicht im Anhang
		       "Chapter"
		       "Appendix")))
    (make sequence
      (make element gi: "H1"
	    attributes: (attribute (list "class" "kapnummer"))
	    (make element gi: "A"
		  attributes: (attribute (list "name" kapnummer ))
		  (make sequence
		    (literal (string-append kaptext " "))
		    (literal kapnummer))))
      (make element gi: "H1"
	    (make element gi: "span"
		  attributes: (attribute (list "class" "kaptitel"))
		  (process-children))))))

(element (KAPITEL Abschnitt ueberschrift)
  (make element gi: "H2"	
	(let ((praefix (string-append
			(string-append (ancestor-kind-nummer "Kapitel") ".")
			(ancestor-kind-nummer "Abschnitt"))))
	  (make element gi: "A"
		attributes:(cons (list "name" praefix )
				 '() 
				 )
		(make sequence
		  (literal praefix)
		  (literal " ")
		  (process-children))))))



(element (KAPITEL Abschnitt Unterabschnitt ueberschrift)
  (make element gi: "H3"
	(let ((praefix (string-append
			(let ((kapnum (ancestor-kind-nummer "Kapitel")))
			  (string-append kapnum "."))
			(let ((absnum (ancestor-kind-nummer "Abschnitt")))
			  (string-append absnum "."))
			(let ((uabsnum (ancestor-kind-nummer "Unterabschnitt")))
			  uabsnum))))
	  (make element gi: "A"
		attributes:(cons (list "name" praefix )
				 '() 
				 )
		(make sequence
		  (literal praefix)
		  (literal " ")
		  (process-children))))))

(element (KAPITEL Abschnitt Unterabschnitt Unterunterabschnitt ueberschrift)
  (make element gi: "H4"
	(let ((praefix (string-append
			(let ((kapnum (ancestor-kind-nummer "Kapitel")))
			  (string-append kapnum "."))
			(let ((absnum (ancestor-kind-nummer "Abschnitt")))
			  (string-append absnum "."))
			(let ((uabsnum (ancestor-kind-nummer "Unterabschnitt")))
			  (string-append uabsnum "."))
			(let ((uuabsnum (ancestor-kind-nummer "unterunterabschnitt")))
			  uuabsnum))))
	  (make element gi: "A"
		attributes:(cons (list "name" praefix )
				 '() 
				 )
		(make sequence
		  (literal praefix)
		  (literal " ")
		  (process-children))))))

; ===================================== normale Bloecke

(element absatz
  (make element gi: "p"))

(element gleichungssystem
  (make element gi: "div"
	attributes: (attribute (list 
				"align" 
				"center" 
				"class" 
				"gleichungssystem"))
	(make element gi: "table"
	      attributes: (attribute (list  
				      "align" 
				      "center")))))

(element (gleichungssystem gleichung)
  (make element gi: "tr"
	attributes: (attribute (list "class" "gleichung"))
	(make sequence
	  (make element gi: "td"
		(literal (string-append 
			  "(" 
			  (element-nummer (current-node)) ")")))
	  (make element gi: "td"
		(process-children)))))



(element abbildung
  (make element gi: "div"
	attributes: (attribute (list 
				"align" 
				"center" 
				"class" 
				"abbildung"))))

(element (abbildung bild)
  (make element gi: "p"
	(make element gi: "img"
	      attributes: (copy-attributes))))
(element (abbildung bildtext)
  (make element gi: "p"
	(make sequence
	  (make element gi: "strong"
		(literal (string-append 
			  "Figure " 
			  (element-nummer (current-node))
			  ": ")))
	  (process-children-trim))))


(element definition
  (make element gi: "blockquote"
	attributes: (attribute (list "class" "definition"))))

(element (definition defUeberschrift)
  (make sequence
    (make element gi: "strong"
		(literal (string-append 
			  "Definition " 
			  (element-nummer (current-node)) ": ")))
    (process-children)))


(element illustration
  (make element gi: "div"
	attributes: (attribute (list "class" "illustration"))))

(element (illustration ueberschrift)
  (make sequence
    (make element gi: "strong"
		(literal (string-append 
			  "Illustration " 
			  (element-nummer 
			   (current-node)) ": ")))
    (process-children)))


(element unbekannt
  (make element gi: "pre"))

(element unbekannterblock
  (make element gi: "pre"))

(element bild
  (make element gi: "img"
	attributes: (copy-attributes)))

; ===================================== Listen
(element nl
  (make element gi: "ol"))
(element ul
  (make element gi: "ul"))
(element bl
  (make element gi: "dl"))
(element le
  (make element gi: "li"))
(element be
  (make element gi: "dt"
	(make element gi: "strong")))
(element bb
  (make element gi: "dd"))


; ===================================== Tabellen


(element tabelle
  (make element gi: "div"
	attributes: (attribute (list "align" "center"))
	(make element gi: "table"
	      attributes: (attribute (list "border" "1")))))

(element tr
  (make element))
(element th
  (make element))
(element td
  (make element))
(element (tabelle tabellentext)
  (make element gi: "caption"
	(make sequence
	  (make element gi: "strong"
		(literal (string-append 
			  "Table " 
			  (element-nummer (current-node)) ": ")))
	  (process-children-trim))))



(element bibliste
  (make element gi: "table"))
(element bibeintrag
  (make element gi: "tr"
	(make sequence 
	  (make element gi: "td"
		attributes: (attribute (list "valign" "top"))
		(literal (string-append 
			  "[" 
			  (element-nummer 
			   (current-node)) "]")))
	  (make element gi: "td"
		(process-children)))))
(element (bibeintrag titel)
  (make element gi: "em"
	attributes: (attribute (list "class" "buchtitel"))))
(element (bibeintrag autor)
  (make element gi: "strong"
	attributes: (attribute (list "class" "buchautor"))))

  

; ===================================== Zeichen

(element sub
  (make element))
(element sup
  (make element))


; ==========================================================================
; ==========================================================================
; ==========================================================================
; ==========================================================================
; Hilfsfunktionen
;

; (attribute aliste) wandelt die aliste in eine Form um,
; die fuer die attributes-Charakteristik eines 
; Flow-Objects geeignet ist
(define (attribute aliste)
  (if (null? aliste)
      (list)
      (cons (list (car aliste) (car (cdr aliste)))
	    (attribute (cdr (cdr aliste))))))

;
; (kind-nummer node) liefert die child-number in formatierter Form
; d.h. bei Kapiteln im Anhangteil werden Buchstaben verwendet,
; sonst Ziffern
; 
(define (kind-nummer node)
  (let ((nummer (child-number node)))
    (if (string=? (gi node) "KAPITEL")
	(if (node-list=?
	     (ancestor "ANHANGTEIL")
	     (empty-node-list)) ; nicht im Anhang
	    (format-number nummer "1")
	    (format-number nummer "A"))
	(format-number nummer "1"))))


; (ancestor-kind-nummer string-name)
; liefert die (kind-nummer) des naechsten
; Vorfahren mit dem GI string-name
(define (ancestor-kind-nummer string-name)
  (kind-nummer (ancestor string-name)))

; (element-nummer node)
; liefert die (element-number) des Knotens in
; formatierter (arabischer) Schreibweise
(define (element-nummer node)
  (let ((nummer (element-number node)))
    (format-number nummer "1")))


; Trennlinien
(define (chapseprule)
    (make empty-element gi: "HR"
	  attributes: (attribute (list "size" "1" "noshade" "noshade"))))
(define (footseprule)
    (make empty-element gi: "HR"
	  attributes: (attribute (list "size" "1" "noshade" "noshade" "width" "33%" "align" "left"))))

; Zeilenumbruch
(define (br)
  (make empty-element gi: "BR"))






© Stefan Mintert
checked HTML4