Verschlagwortung
In Hugo können Inhalte mit Schlagworten versehen werden, sodass Benutzer gezielt Inhalte zu bestimmten Themenbereichen finden können. In diesem Zusammenhang spricht Hugo von Taxonomien. Sie ermöglichen eine differenzierte Verschlagwortung im Vergleich zu einfachen Hashtags.
Dazu muss zunächst ein Klassifikationssystem definiert werden. Inhalte können dann in der Frontmatter der entsprechenden Markup-Dateien klassifiziert werden. Im Folgenden wird zunächst ein Beispiel besprochen, bevor auf Anwendungsfälle der klassifizierten Inhalte eingegangen wird.
Beispiel: Klassifikation von Filmen
Wie ein solches Klassifikationssystem aufgebaut wird lässt sich am besten anhand eines konkreten Beispiels nachvollziehen. Nehmen wir an, es handelt sich um eine Webseite, die ähnlich wie IMDb aufgebaut.
Auf Einzelseiten werden hier Informationen zu Filmen präsentiert. Diese Filme können anhand verschiedener Kriterien gruppiert werden, etwa nach Genre, SchauspielerInnen, Veröffentlichungsjahr (oder -jahrzehnt) oder Bewertung. Solche Kriterien werden als Schlüssel im Klassifikationssystem abgebildet.
Das System wird in der Hauptkonfiguration definiert. Ein entsprechender Ausschnitt in hugo.yaml
könnte folgendermaßen aussehen:
taxonomies:
genre: 'genres'
actor: 'actors'
year: 'years'
rating: 'ratings'
Die Definition folgt einer Konvention: Die Schlüssel sind im Singular und die Werte als Plural angegeben. In der Frontmatter der Markup-Dateien wird der Singular verwendet, während in der URL automatisch die Pluralform für Überblicksseiten eingesetzt wird.
Nun können Inhalte entsprechend klassifiziert werden. Die Einzelseite zum Film Terminator (1984) könnte zum Beispiel folgende Frontmatter enthalten:
---
genre:
- action
- science-fiction
actor:
- 'Arnold Schwarzenegger'
- 'Linda Hamilton'
year: 1984
rating: 5
---
Die aufgelisteten Informationen werden als Terme der jeweiligen Taxonomie bezeichnet. Als Werte (values) werden die Inhalte oder Einzelseiten betrachtet, für die ein Term zutrifft. So wäre The Terminator ein Wert für den Term Arnold Schwarzenegger bezüglich der Taxonomie SchauspielerInnen.
Überblicksseiten
Somit können Inhalte nach mehreren Kriterien oder auf mehreren Achsen klassifiziert werden, was zwei Arten von Überblicksseiten ermöglicht:
- Taxonomie-Seiten: Sie listen alle auf der Webseite verwendeten Terme einer bestimmten Taxonomie auf. Sie sind von der Art
taxonomy
und unterdomain.com/<TAXONOMY>/
verfügbar. - Term-Seiten: Sie listen alle Inhalte auf, die mit einem bestimmten Term einer Taxonomie verknüpft sind. Sie sind von der Art
term
und unterdomain.com/<TAXONOMY>/<TERM>/
verfügbar.
Diese Seiten werden wie bei Sektionen automatisch generiert. Im Beispiel unseres Klassifikationssystems entstehen z.B. domain.com/genre/
und domain.com/actor/
als Taxonomie-Seiten sowie domain.com/genre/action/
, domain.com/actor/arnold-schwarzenegger/
als Term-Seiten.
Um die Überblicksseiten zu gestalten, werden wie üblich die entsprechenden Layouts definiert. Dabei kann man auf
Metadaten zugreifen, die spezifisch für bestimmte Taxonomien oder Terme sind. Die entsprechenden Informationen werden in der Frontmatter von Index-Seiten gespeichert, die unter /content/<TAXONOMY>/_index.md
und /content/<TAXONOMY>/<TERM>/_index.md
angelegt werden.
Die offizielle Dokumentation gibt ein Beispiel für die Verwendung dieses Features. Auf der Index-Seite für einen bestimmten Schauspieler (ein Term der Kategorie actor
) könnten wir neben seinem Namen noch die URL zu seinem Wikipedia-Artikel festhalten:
---
title: Bruce Willis
wikipedia: https://en.wikipedia.org/wiki/Bruce_Willis
---
Damit könnte die actor
-Überblicksseite eine Liste der SchauspielerInnen anzeigen und gleichzeitig auf die entsprechenden Wikipedia-Artikel verlinken. Die Nutzung solcher Metadaten bleibt flexibel und kann an individuelle Anforderungen angepasst werden.
Standard-Taxonomien
Das Klassifikationssystem muss nicht zwingend definiert werden. Fehlt der Eintrag in der Hauptkonfiguration, werden zwei Taxonomien von Hugo automatisch angelegt: tags
und categories
. Auch in diesem Fall sind die entsprechenden Taxonomie-Überblicksseiten automatisch verfügbar.
Diese Standarddefinition wird überschrieben, sobald ein eigenes Klassifikationssystem definiert wird. Das gilt insbesondere, wenn nur eine der Standard-Taxonomien genutzt werden soll. Die folgende Konfiguration aktiviert somit nur die tags
-Taxonomie:
taxonomies:
tag: 'tags'
Die categories
-Taxonomie wird in diesem Fall nicht erstellt.
Wer Taxonomien vollständig deaktivieren möchte, kann dies ebenfalls tun. Dafür wird das Feature mit disableKinds
ausgeschaltet:
disableKinds: ['taxonomy', 'term']
Komplexitätsgrade
Zuletzt wurde der einfachste Fall angesprochen: Es werden gar keine Taxonomien verwendet. Das nächstkomplexere Szenario ist eine eindimensionale Verschlagwortung, die für viele Seiten ausreichen dürfte. Statt semantisch sprechende Klassen zu unterscheiden, wird bei dieser Herangehensweise nur eine Taxonomie definiert – oft mit generischer Bezeichnung wie Schlagwörter oder Tags.
Im Prinzip entspricht dieser Vorgehen der Praxis von Hashtags, jedoch bleibt die Syntax unverändert. Dieser Artikel beispielsweise könnte folgendermaßen klassifiziert werden:
---
schlagwoerter:
- hugo
- webentwicklung
---
Komplexität in einem anderen Sinne ergibt sich auf mehrsprachigen Seiten, da hier auch Klassennamen, Terme und URLs übersetzt werden sollen. Zu diesem Zweck werden Taxonomien relativ zu Sprachen definiert:
languages:
en:
taxonomies:
tag: 'tags'
de:
taxonomies:
schlagwort: 'schlagwoerter'
Stichwörter: eine Alternative für eine eindimensionale Klassifikation?
Im vorausgegangenen Abschnitt wurden Klassifikationssysteme mit nur einer Taxonomie angesprochen. Hugo bietet mit Stichwörtern (keywords) ein vordefiniertes Feld in der Frontmatter, das auf den ersten Blick genau diesem Anwendungsfall zu dienen scheint.
Wir können dieses Feld für ein eindimensionales Klassifikationssystem nutzen. Damit dies jedoch funktioniert, muss das Feld in der Hauptkonfiguration genau so definiert werden wie oben beschrieben. Ist dies nicht der Fall, liefert domain.com/keywords/
nur eine 404-Fehlerseite. Was also ist der Sinn der Stichwörter?
Soweit ich sehe wird ihr intendierter Zweck in der offiziellen Dokumentation nicht weiter erläutert. In Layouts können wir alle verwendeten Stichwörtern mit der PAGE.Keywords
-Methode abrufen. So könnten wir sie beispielsweise im Base-Template nutzen, um die Stichwörter automatisch in den Head der Seite aufzunehmen:
<meta name="keywords" content="keyword-1, keyword-2" />`
Da zumindest Google diese Informationen nicht mehr berücksichtigt, lohnt es sich dafür allein kaum, Inhalte mit Stichwörtern zu versehen. Möchte man die Information dennoch im Head festhalten, so kann ebenso gut eine Taxonomie genutzt werden.
Stichwörter bleiben Besuchern der Seite bewusst verborgen und könnten daher für programmgesteuerte Features wie eine eigene Suchfunktion nützlich sein. Für die meisten Anwender dürften sie jedoch von geringem Interesse sein.
Selbst auferlegte Beschränkungen
Die Definition des Klassifikationssystems in der Hauptkonfiguration lässt einige Details offen. Hugo bietet bisher keine Möglichkeit, die erlaubten Terme einer Taxonomie zu beschränken. Anwender sind daher selbst dafür verantwortlich, die Konsistenz ihrer Klassifikationen sicherzustellen.
Die Taxonomie rating
ist ein gutes Beispiel. Es liegt in der Natur der Sache, dass für einen Film höchstens eine Wertung vergeben werden kann. Da Hugo jedoch semantische Anforderungen dieser Art nicht kennt, kann die Build-Engine solche Regeln nicht durchsetzen. Technisch wäre es daher problemlos möglich, Terminator zugleich eine 5
und eine 2
als Wertung zu geben.
Auch mögliche Terme oder Formate lassen sich nicht allgemein in der Definition festlegen. Wer als Terme nur ganze Zahlen oder Strings mit Angabe der Höchstnote (x/5
) zulassen möchte, muss selbst darauf achten, dass die eigenen Regeln bei der Klassifikation eingehalten werden.
Anmerkungen zur Terminologie
Die Terminologie der offiziellen Dokumentation kann irreführend sein. Für gewöhnlich wird das Gesamtsystem zur Klassifizierung von Inhalten oder Dingen als eine Taxonomie (Singular) bezeichnet. Alternative Taxonomien (Plural) wären dann verschiedene Möglichkeiten, einen gegebenen Sachbereich zu klassifizieren. Die Klassen einer Taxonomie wurden in der klassisch orientierten Wissenschaftssprache Taxa genannt.
Doch wenn in der Doku von Taxonomien gesprochen wird, so sind damit Klassen bzw. Kategorien eines Klassifikationssystems gemeint. Für das Klassifikationssystem selbst wird in der Doku kein technischer Begriff eingeführt.
Auch die oben angesprochene Konvention darf nicht zu wörtlich gelesen werden. Mit der Verwendung vom Singular in der Frontmatter der Markup-Dateien ist nicht gesagt, dass für sie jeweils nur ein Wert pro Inhalt festgelegt werden kann. Das ist für manche Kategorien selbstverständlich, etwa für rating
oder year
. Für andere Kategorien (wie actor
) würden wir typischerweise mehr als einen Wert setzen wollen.
Auch das Wort Wert wird im Kontext von Taxonomien eher ungewöhnlich gebraucht. Die Definitionen in der Frontmatter sind typische Schlüssel-Wert-Paare. Das sind aber nicht die Werte, die in der Doku gemeint sind. Die Dinge auf der rechten Seite der Frontmatter-Definitionen werden Terme (einer bestimmten Taxonomie) genannt. Werte im vorgegebenen Sinne – Werte eines Terms – sind die Inhalte, die damit klassifiziert werden, beispielsweise die Seite zum Film Terminator.