von Patrick Gundlach |

Version 3.1.11 / Layoutvalidierung

Die Version 3.1.11 hat eine Reihe von Neuerungen enthalten. Für mich besonders spannend ist die Möglichkeit, nun auch eine neuere LuaTeX-Version zu benutzen. Dazu hatte ich ja kürzlich schon einen eigenen Beitrag. Daneben habe ich auch wieder einmal den Lua-Filter erweitert. Einerseits um die Möglichkeit, Excel-Dateien zu lesen (und nach XML zu konvertieren) und andererseits habe ich die Möglichkeit der Layoutvalidierung eingebaut. Das erste Feature beschreibe ich noch einmal separat, hier gibt es eine Beschreibung der Validierung.

Validierung mithilfe von Jing

Um RelaxNG-Dateien zu validieren gibt es mehrere Möglichkeiten. Eine davon ist Jing. Seit Version 3.11.1 wird das mit dem Publisher mitgeliefert.

In der Lua-Vorverarbeitung gibt es eine neue Funktion, die die Validierung übernimmt:

runtime.validate_relaxng(<xmldatei>,<schemadatei>)

Die Funktion liefert im Fehlerfall false und die Fehlermeldung zurück. Beispiel:

-- die Pfade natürlich anpassen!
ok, msg = runtime.validate_relaxng("layout.xml","../schema/layoutschema-de.rng")
if not ok then
    print(msg)
    os.exit(-1)
end

Das speichert man in einer Datei, z.B. validate.lua und ruft dann den Publisher mit

sp --filter validate.lua

auf. Vor jedem Lauf wird nun überprüft, ob die Layoutdatei dem Schema entspricht und nur dann wird mit der Verarbeitung fortgefahren.

Warum validieren?

Im Beitrag Feature der Woche: Einbinden des RelaxNG Schemas bin ich schon mal auf das Schema eingegangen. Wenn man nicht mit einem XML-Editor die Layoutdatei bearbeitet, der während der Eingabe das Layout überprüft, dann sollte man das Layout wenigstens vor den Änderungen mal validieren, damit eine syntaktisch falsche Layoutdatei als Fehlerquelle ausgeschlossen werden kann.

Der Laufzeitnachteil ist meines Erachtens vernachlässigbar, da man sich die Zeit schnell bei der Fehlersuche spart.

Validieren von Daten

Man kann nicht nur die Layoutdatei auf Korrektheit überprüfen, sondern auch alle anderen XML-Dateien. Hierzu muss man sich jedoch ein eigenes RelaxNG-Schema erstellen. Dazu habe ich im August eine Anleitung geschrieben. Je nach Datendatei ist das auch recht einfach. Insbesondere wenn man immer wieder Daten aus fremden Quellen geliefert bekommt, kann man sich so sicher sein, dass die gewünschte Struktur eingehalten wird.