Handbuch durchsuchen:

- Startseite
- Einleitung
- Hallo Welt!
- Grundlagen
  - Erstellen eines Layoutregelwerks
  - Aufbau der Datendatei und des Layoutregelwerks
  - Objekte ausgeben
  - Raster
  - Bereiche auf der Seite (PositioningArea)
  - Dateiorganisation
  - Silbentrennung / Spracheinstellungen
  - Einbinden von Schriftarten
  - Textformate
  - Textformatierung
  - Farben
- Programmierung
- Bilder einbinden
- Tabellen
- Fortgeschrittene Themen
  - Lesezeichen (Bookmarks)
  - Erzeugen von XML-Strukturen
  - Druckausgabe / Schnittmarken
  - CSS
  - Gruppen (virtuelle Objekte)
  - Virtuelle Seiten
  - Rotieren von Inhalten
  - Sortieren von Daten
  - Umfließen von Bildern
  - Seitentypen
  - Starten des Publishers über den Hotfolder
  - Lua-Filter / Datenvorverarbeitung
  - Schemavalidierung
  - Qualitätssicherung (PDF-Vergleich)
  - Fehlersuche / Debugging
  - Servermodus
- Kochbuch
  - Griffmarken
  - Mehrseitige PDF-Dateien einbinden
  - Layoutoptimierung mithilfe von Gruppen
  - Verzeichnisse erstellen
  - Seitenzahlen: Seite x von y
  - Aufzählungslisten nachahmen
- Installationsanleitung
- Voreinstellungen im speedata Publisher
- Starten des Publishers über die Kommandozeile
- Konfiguration des Publishers
- Längenangaben und Maßeinheiten
- XPath- und Layoutfunktionen
- Interne Variablen
- Liste der Änderungen
- Glossar
- Befehlsreferenz
  - A
  - Action
  - AddSearchpath
  - AtPageCreation
  - AtPageShipout
  - AttachFile
  - Attribute
  - B
  - Barcode
  - Bold
  - BoldItalic
  - Bookmark
  - Box
  - Br
  - Case
  - Circle
  - Color
  - Column
  - Columns
  - Compatibility
  - Contents
  - Copy-of
  - DefineColor
  - DefineFontalias
  - DefineFontfamily
  - DefineTextformat
  - Element
  - Fontface
  - ForAll
  - Frame
  - Grid
  - Group
  - Groupcontents
  - HSpace
  - Hyphenation
  - I
  - Image
  - Include
  - Initial
  - InsertPages
  - Italic
  - Layout
  - Li
  - LoadDataset
  - LoadFontfile
  - Loop
  - Makeindex
  - Margin
  - Mark
  - Message
  - NewPage
  - NextFrame
  - NextRow
  - NoBreak
  - Ol
  - Options
  - Otherwise
  - Output
  - Overlay
  - Pageformat
  - Pagetype
  - Paragraph
  - PDFOptions
  - PlaceObject
  - Position
  - PositioningArea
  - PositioningFrame
  - ProcessNode
  - Record
  - Regular
  - Rule
  - SaveDataset
  - SavePages
  - SetGrid
  - SetVariable
  - SortSequence
  - Stylesheet
  - Span
  - Sub
  - Sup
  - Switch
  - Table
  - Tablefoot
  - Tablehead
  - Tablerule
  - Td
  - Text
  - Textblock
  - Tr
  - Trace
  - Transformation
  - U
  - Ul
  - Until
  - URL
  - Value
  - VSpace
  - While

Version 3.2.0
Handbuch durchsuchen:

- Startseite
- Einleitung
- Hallo Welt!
- Grundlagen
  - Erstellen eines Layoutregelwerks
  - Aufbau der Datendatei und des Layoutregelwerks
  - Objekte ausgeben
  - Raster
  - Bereiche auf der Seite (PositioningArea)
  - Dateiorganisation
  - Silbentrennung / Spracheinstellungen
  - Einbinden von Schriftarten
  - Textformate
  - Textformatierung
  - Farben
- Programmierung
- Bilder einbinden
- Tabellen
- Fortgeschrittene Themen
  - Lesezeichen (Bookmarks)
  - Erzeugen von XML-Strukturen
  - Druckausgabe / Schnittmarken
  - CSS
  - Gruppen (virtuelle Objekte)
  - Virtuelle Seiten
  - Rotieren von Inhalten
  - Sortieren von Daten
  - Umfließen von Bildern
  - Seitentypen
  - Starten des Publishers über den Hotfolder
  - Lua-Filter / Datenvorverarbeitung
  - Schemavalidierung
  - Qualitätssicherung (PDF-Vergleich)
  - Fehlersuche / Debugging
  - Servermodus
- Kochbuch
  - Griffmarken
  - Mehrseitige PDF-Dateien einbinden
  - Layoutoptimierung mithilfe von Gruppen
  - Verzeichnisse erstellen
  - Seitenzahlen: Seite x von y
  - Aufzählungslisten nachahmen
- Installationsanleitung
- Voreinstellungen im speedata Publisher
- Starten des Publishers über die Kommandozeile
- Konfiguration des Publishers
- Längenangaben und Maßeinheiten
- XPath- und Layoutfunktionen
- Interne Variablen
- Liste der Änderungen
- Glossar
- Befehlsreferenz
  - A
  - Action
  - AddSearchpath
  - AtPageCreation
  - AtPageShipout
  - AttachFile
  - Attribute
  - B
  - Barcode
  - Bold
  - BoldItalic
  - Bookmark
  - Box
  - Br
  - Case
  - Circle
  - Color
  - Column
  - Columns
  - Compatibility
  - Contents
  - Copy-of
  - DefineColor
  - DefineFontalias
  - DefineFontfamily
  - DefineTextformat
  - Element
  - Fontface
  - ForAll
  - Frame
  - Grid
  - Group
  - Groupcontents
  - HSpace
  - Hyphenation
  - I
  - Image
  - Include
  - Initial
  - InsertPages
  - Italic
  - Layout
  - Li
  - LoadDataset
  - LoadFontfile
  - Loop
  - Makeindex
  - Margin
  - Mark
  - Message
  - NewPage
  - NextFrame
  - NextRow
  - NoBreak
  - Ol
  - Options
  - Otherwise
  - Output
  - Overlay
  - Pageformat
  - Pagetype
  - Paragraph
  - PDFOptions
  - PlaceObject
  - Position
  - PositioningArea
  - PositioningFrame
  - ProcessNode
  - Record
  - Regular
  - Rule
  - SaveDataset
  - SavePages
  - SetGrid
  - SetVariable
  - SortSequence
  - Stylesheet
  - Span
  - Sub
  - Sup
  - Switch
  - Table
  - Tablefoot
  - Tablehead
  - Tablerule
  - Td
  - Text
  - Textblock
  - Tr
  - Trace
  - Transformation
  - U
  - Ul
  - Until
  - URL
  - Value
  - VSpace
  - While

# Schemavalidierung

Eine Besonderheit beim speedata Publisher ist, dass die Eingabesprache in XML formuliert ist. Im Vergleich zu anderen Programmiersprachen ist XML »geschwätzig«: Man muss für die Start-Tags auch immer Ende-Tags schreiben:

    <PlaceObject>
       ...
    </PlaceObject>

Im Vergleich zu einer C-ähnlichen Schreibweise wie

    placeObject(...)

ist das mehr Tipparbeit. Die Lösung für dieses »Problem« ist die Verwendung eines Texteditors, der gut mit XML umgehen kann. Die Eingabe eines Start-Tags würde beispielsweise sofort auch das Ende-Tag einfügen. Oder bei einer Änderung im Tagnamen würden sowohl Start-Tag als auch das Ende-Tag gleichzeitig geändert werden. Gute XML-Editoren bewirken noch viel mehr, als nur die erleichterte Eingabe von Tags, z.B. die Validierung des Codes gegen ein Schema.

## Was ist ein Schema?

In einem Schema (z. B. XML-Schema oder RELAX NG) stehen Informationen über den erlaubten Aufbau einer XML-Datei. So steht im Schema, das mit dem speedata Publisher mitgeliefert wird, beispielsweise:

- Das Wurzelelement muss `<Layout>` heißen
- Das Kindelement von `<PlaceObject>` muss entweder `<Barcode>`, `<Box>`, `<Circle>`, `<Frame>`, `<Image>`, `<Rule>`, `<Table>`, `<Textblock>` oder `<Transformation>` sein.
- Das Attribut `valign` in der Tabellenzeile darf eines der Werte `top`, `middle` oder `bottom` sein
- u.v.m.

Ebenso steht in dem mitgelieferten Schema die Dokumentation der einzelnen Befehle sowie die der Auwahlmöglichkeiten. Ein guter XML-Editor kann ein solches Schema einlesen und dem Anwender die Eingabe des Quelltextes erheblich erleichtern. Die Eingabe mit einem guten Schema mach viel Spaß und hat einige Vorteile gegenüber dem klassischen Texteditor:

- Syntaxfehler werden sofort angezeigt
- Befehle (Tags) müssen nicht vollständig eingegeben werden, weil der Editor eine Autovervollständigung bietet
- Die Attribute werden sofort auf sinnvolle Werte überprüft
- Dokumentation steht direkt im Editor bereit

… im Prinzip das, was man von einer integrierten Entwicklungsumgebung (IDE) erwartet.

Auswahl an erlaubten Kindelementen

Erlaubte Attribute bei Textblock

## Einbinden des RELAX NG-Schemas

Wie das Schema eingebunden wird, ist abhängig vom Editor. Für oXygen XML kann z. B. man in den Einstellungen eine neue Dokumenttypen-Zuordnung erstellen. Es muss festgelegt werden, für welchem Namensraum das Schema benutzt werden soll.

Verknüpfungsregeln in der oXygen XML-Konfiguration

Dann muss man noch definieren, welches Schema für diese Verknüpfungsregeln geladen werden soll. Das wird im zweiten Reiter der Einstellung festgelegt.

Als Schema RELAX NG + Schematron einstellen in der oXygen XML-Konfiguration

Ab sofort sollte zu jedem Layout im Namensraum

    xmlns="urn:speedata.de:2009/publisher/en"

das Schema hinterlegt sein. Das erkennt man daran, dass nun bei Eingabe einer öffnenden spitzen Klammer (<) eine Auswahl der Befehle erscheint.

Ist das Schema richtig eingebunden, dann erscheint eine Auswahlliste sobald man einen Befehl eingibt.

- Lua-Filter / Datenvorverarbeitung
- Qualitätssicherung (PDF-Vergleich)