SML: Minimalistisches Markup für Textdokumente

Aus LinuxUser 12/2021

SML: Minimalistisches Markup für Textdokumente

© Enki / 123RF.com

Klar strukturiert

Dank der Simple Markup Language bringen Sie ein Dokument mit minimalem Aufwand in eine strukturierte Form.

Ungeachtet der vielfältigen Ideen hinter diversen Markup-Sprachen haben alle eines gemeinsam: Der erstellte Text soll unabhängig von einem bestimmten Programm zum Bearbeiten bleiben. Sie sind als Benutzer also nicht an einen spezifischen Editor gebunden, sondern wählen selbst aus, welchen Sie verwenden.

Das Formatieren und Strukturieren des Texts erfolgt durch Tags und ausgewählte Zeichen darin – je nach Format dienen dazu Klammern, Schlüsselworte oder eine bestimmte Tiefe der Einrückung. Das standardisierte Markup liegt für jeden Benutzer, Entwickler und Interessenten offen und ist dokumentiert. Die Unabhängigkeit von einer Plattform erlaubt das Umwandeln ins gewünschte Format (PDF, HTML oder Ähnliches) über einen entsprechenden Konverter.

Ausschlaggebend für die Möglichkeiten ist die Eindeutigkeit beim Formatieren und Strukturieren – ein bestimmtes Tag kennzeichnet einen Absatz, eine Hervorhebung oder eine Überschrift. Das geht mit dem Ziel einher, möglichst wenig Tags und Formatierung zu verwenden und sich so auf die Inhalte zu konzentrieren, statt sich durch viele Gestaltungsmöglichkeiten abzulenken. Das resultierende Dokument trennt in einer typografisch sauberen Datei Inhalt und Aussehen.

Vollautomatisch

Das Automatisieren von Übersetzungen in ein bestimmtes Format zählt zu den wesentlichen Einsatzgebieten für per Markup strukturierte Dateien. Das hilft beispielsweise bei in Entwicklungsumgebungen eingebundenen Texten: Es läuft ein Prozess an, der das gewünschte Dokument generiert, sobald Sie am Original etwas ändern. Beispiele dafür sind etwa Github-Pages und Sphinx [10].

Lösungsansätze

Über die Jahre haben sich unterschiedliche Markup-Ansätze verbreitet [1]. Dazu zählen neben XML und HTML auch LaTeX, Asciidoc, Restructured Text, Markdown und YAML [2]. Die letzten vier Vertreter beziehen bei der Gestaltung der Ausgabe die Einrückungstiefe mit ein.

Die Simple Markup Language (SML [3]) nutzt dieses Prinzip konsequent und verzichtet auf das Verwenden zusätzlicher Sonderzeichen wie Klammern und Schrägstrichen. Damit wird sie ihrem Anspruch als einfache Auszeichnungssprache aufgrund des Minimalismus voll gerecht.

Abbildung 1 zeigt, wie ein Dokument mit SML aussieht. Es besteht aus Begriffen, die Sie durch Leerzeichen voneinander trennen, und verzichtet beim Markup auf Klammern, Kommas, Doppelpunkte, Gleichheitszeichen oder ähnliche Elemente. Der Text entstand im SML Playground [4], den Stefan John – der Autor der Sprache – auf der Projektseite als Spielwiese bereitstellt. Das Beispiel verwendet ein Zitat des Tages aus einer fiktiven E-Mail des Minions Bob an seinen Kollegen Stuart [5].

Abbildung 1: Wenn Sie die Markup-Sprache SML ausprobieren möchten, bietet sich dazu die passende Umgebung auf der Webseite des Projekts an.

Abbildung 1: Wenn Sie die Markup-Sprache SML ausprobieren möchten, bietet sich dazu die passende Umgebung auf der Webseite des Projekts an.

Ursprünglich stammt SML von kanonischem XML [6] ab, das wiederum vom World Wide Web Consortium (W3C [7]) spezifiziert wurde. SML bildet eine Untermenge dieses XML-Typs, verfügt jedoch nicht über die dort übliche Attributschreibweise, Processing Instructions, Document Type Declarations (DTD) sowie als CDATA markierte Abschnitte. Es arbeitet ausschließlich mit dem Zeichensatz UTF-8. Als Besonderheit kennt es per Raute (#) eingeleitete Kommentare. Diese Mischung macht den Dialekt für Konfigurationsdateien interessant.

Einordnung und Vergleich

Laut der Beschreibung auf EverybodyWiki [8] handelt es sich bei SML um “ein Datenformat zur einfachen textuellen Beschreibung hierarchischer Daten”. Selbst weniger versierte Benutzer können es einfach und schnell schreiben. Durch die kompakte Schreibweise entstehen besonders kleine Dateien, die Sie auch ohne spezielle Tools öffnen.

Suchen Sie nach Werkzeugen und Bibliotheken rund um SML, seien Sie gewarnt: Die Abkürzung ist mehrdeutig. Es besteht daher Verwechslungsgefahr unter anderem mit der Smart Meter Language, der Smart Message Language, der Service Messaging Language sowie der funktionalen Programmiersprache Standard ML.

Aufbau

Wie Sie bereits in Abbildung 1 gesehen haben, handelt es sich bei einem SML-Dokument um eine Textdatei, die Sie mit einem Texteditor Ihrer Wahl bearbeiten. Ein SML-Dokument folgt einer simplen Hierarchie, die lediglich zwei Knotentypen umfasst, Elemente und Attribute. Erstere dienen der Gruppierung, Letztere enthalten die eigentlichen Daten.

Analog zu XML oder HTML dient der oberste Knoten in der Hierarchie als Wurzelknoten. Listing 1 zeigt ein Anwendungsbeispiel für eine Menüstruktur, die sich am Texteditor Vim orientiert, in Listing 2 sehen Sie das Ganze zum Vergleich als mögliche XML-Struktur.

Listing 1

Einfaches Menü in SML

Menu
  Datei
    Öffnen      :e
    Neu         :enew
    Speichern   :w
  End
  Editieren
    Zurück      u
    Vor         ^R
    Wiederholen .
  End
End

Listing 2

Einfaches Menü in XML

<menu>
  <item description="Datei">
    <entry description="Öffnen" key=":e"/>
    <entry description="Neu" key=":enew"/>
    <entry description="Speichern" key=":w"/>
  </item>
  <item description="Editieren">
    <item description="Zurück" key="u"/>
    <item description="Vor" key="^R"/>
    <item description="Wiederholen" key="."/>
  </item>
</menu>

SML benutzt eine Einrückung mithilfe von Whitespace, wobei es die Anzahl pro Ebene beim Einrücken nicht festlegt. Als Whitespace gelten Leerzeichen, Tabulatoren und weitere Unicode-Zeichen für Leerraum.

Einzelne Blöcke beenden Sie mit einem frei wählbaren Wert, etwa End bei englischsprachigen Dokumenten oder Ende bei deutschsprachigen Pendants. Die Wahl des Worts steht Ihnen frei, es darf nur nicht mit dem gewählten Begriff für das Element identisch sein.

Die Namen von Elementen und Attributen verarbeitet SML unabhängig von Groß- und Kleinschreibung. Paare aus Attribut und Wert trennen Sie mit Leerzeichen. Bei den Werten handelt es sich um einfache Zeichenketten, es findet keine Typunterscheidung statt. Besteht ein Wert aus mehreren Begriffen, schließen Sie ihn komplett in doppelte Anführungszeichen ein. Listing 3 verdeutlicht das anhand eines Inhaltsverzeichnisses für ein Python-Buch.

Listing 3

Buch
  Kapitel "Einführung in Python"
  Kapitel "Sprachelemente"
  Kapitel "Aufteilung in Module"
End

Referenzbibliotheken

Der Autor von SML ist recht umtriebig und hat eine Reihe von Referenzbibliotheken veröffentlicht, unter anderem für Javascript, Java, Python, PHP und C#. Sie stehen alle auf seiner Github-Seite [9] zum Herunterladen bereit. Auf seiner To-do-Liste stehen noch zwei weitere Implementierungen für C++ sowie LimaScript, einen speziellen SML-Dialekt. Der Blick auf den Quellcode der Implementationen verrät ein sauberes Arbeiten. Tools, die diese Bibliotheken verwenden, konnten wir aber nicht finden.

Asciidoc in diverse Formate konvertieren

LU 01/2018 [11]

Asciidoctor: Asciidoc mit neuen Funktionen

LU 10/2020 [12]

Asciidoc(tor) und Sphinx im Praxistest

LU 04/2021 [13]

Fazit

Geht es um das Zusammenstellen und Übermitteln kompakter, strukturierter Daten, bietet SML einen möglichen Weg. Bezüglich der Datenmenge gibt es sich genügsamer als JSON und XML. Bei Konfigurationsdateien sieht es ähnlich gut aus, ein Test in der Praxis steht aber noch aus. Wir bleiben diesbezüglich am Ball und halten Sie auf dem Laufenden. (agr)

Der Autor

Frank Hofmann arbeitet zumeist unterwegs, bevorzugte von Berlin, Genf und Kapstadt aus, als Entwickler, Trainer und Autor. Er gehört zu den beiden Autoren des Debian-Paketmanagement-Buches.

Infos

  1. Lightweight Markup Language: https://en.wikipedia.org/wiki/Lightweight_markup_language

  2. Yet Another Markup Language (YAML): https://yaml.org

  3. Simple Markup Language (SML): http://www.simpleml.com

  4. SML Playground: https://dev.stenway.com/SMLPlayground/Parse.html

  5. The Minions: https://despicableme.fandom.com/wiki/Minions

  6. XML: https://www.xml.com/pub/1999/11/sml/index.html

  7. World Wide Web Consortium (W3C): https://www.w3.org

  8. Simple Markup Language: https://de.everybodywiki.com/Simple_Markup_Language

  9. Stenway: https://github.com/Stenway

  10. Sphinx: https://www.sphinx-doc.org

  11. Asciidoc: Frank Hofmann, “Transformationsprozess”, LU 01/2018, S. 52, https://www.linux-community.de/40163

  12. Asciidoctor: Karsten Günther, “Bis der Arzt kommt”, LU 10/2020, S. 50, https://www.linux-community.de/45288

  13. Sphinx vs. Asciidoc(tor): Frank Hofmann, Veit Schiele, “Gut angeleitet”, LU 04/2021, S. 86, https://www.linux-community.de/45730

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDF
LinuxUser 12/2021 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben