Skelett eines XML-Dokuments

Skelett eines DocBook-Dokuments
Skelett eines DocBook-Dokuments

Nachdem ich, wie im letzten Artikel beschrieben, eine Übersicht aller XML-Elemente in einem größeren DocBook-Projekt generiert hatte, ging es nun darum dessen Gestalt zu sehen. Wie ist die Staffelung? Welche Elemente werden wo verwendet? Dass dieses Arbeitsdokument ziemlich gleichmäßig aufgebaut war, hatte man schon an den wenigen Elementen gesehen.

Um den Aufwand für die Verarbeitung des Dokuments abschätzen zu können, verschaffe ich mir aber auch gern einen Überblick des Dokumentaufbaus. Ist es einfach oder kompliziert strukturiert? Ich möchte ja schon gern wissen, wie viele Transformationsregeln ich da schreiben muss.

Wie in der Abbildung zu sehen ist, muss ich mir bei diesem Dokument nicht allzu viel Sorgen machen. Das Skript (siehe unten) zeigt mir die Staffelungstiefe der vom Autor verwendeten DocBook-Elemente. Bei Wiederholungen der gleichen Elemente wird die Anzahl in Klammern angehängt.

Das Arbeits-Dokument besteht aus vielen, vielen simparas. Also handelt es sich hier wohl um einen klassischen Text, mit vielen Buchstaben und Absätzen; kein Werk aus dem DTP- oder Multimedia-Zeitalter. Da sollte die Transformation schnell gehen.

Das Skript, das diese Übersicht erstellte, sieht übrigens so aus:

#!/usr/bin/env ruby
require 'nokogiri'

@branches = []
@tags = []
def recurse_tags(node)
	@tags.push(node.name)
	@branches << @tags.join(' > ')
	if node.elements.empty?
		@tags.pop
	else
		node.elements.each { |e| recurse_tags(e)}
		@tags.pop
	end
end

doc = Nokogiri::XML.parse(File.open(ARGV[0]))
recurse_tags(doc.root)
until @branches.empty?
	first = @branches.shift
	repeat = @branches.take_while {|b| b == first}
	if (repeat.size > 0)
		@branches.shift(repeat.size)
		puts "#{first} ... (#{repeat.size})"
	else
		puts "#{first}"
	end
end