Anzeige
Anzeige
UX & Design
Artikel merken

Bereitstellung von XML-Dokumenten mit Hilfe von TypoScript: Valides XML mit TypoScript erzeugen

Die Auszeichnungssprache XML ist mittlerweile zum Standard geworden, wenn es um die hierarchisch strukturierte Speicherung und Weitergabe von Daten im Textformat geht. Viele Möglichkeiten entstanden gerade durch den simplen Aufbau, die Plattformunabhängigkeit und die leichte Lesbarkeit von XML. Der Artikel zeigt anhand eines kleinen Beispiels einen schnellen und einfachen Weg auf, wie Entwickler TYPO3 valides XML entlocken können. Zum Einsatz kommt dabei TypoScript.

4 Min. Lesezeit
Anzeige
Anzeige

XML steht für „Extensible Markup Language“ und wurde 1996 vom World Wide Web Consortium (W3C) auf Basis von SGML ins Leben gerufen. Die aktuelle Version 1.0 (Fourth Edition) wurde am 29. September 2006 veröffentlicht. XML spielt bei Web-Anwendungen vor allem beim Austausch von Daten zwischen mehreren Applikationen eine immer größere Rolle. So kann es beispielsweise dafür genutzt werden, eine Flash-Animation mit Inhalten zu versorgen oder Daten aus einer Datenbank für die externe Weiterverarbeitung zur Verfügung zu stellen.

Grundregeln

Anzeige
Anzeige

Die Regeln, nach denen ein XML-Dokument aufgebaut sein muss, wurden durch das W3C genau definiert [1]. Bei der Ausgabe sollten Entwickler auf folgendes achten:

  • Deklarierung der XML-Version am Anfang
  • genau ein Wurzelelement
  • alle Elemente besitzen ein jeweils gleichnamiges Start- und Endtag (z. B. <magazin>T3N</magazin>)
  • Attribute dürfen nur im Starttag vorkommen

Sofern man gegen eine der Regeln verstößt, kann das komplette Dokument nicht verarbeitet werden und der Vorgang wird abgebrochen. XML-Dokumente, die alle Regeln erfüllen, werden als „wohlgeformt“ bezeichnet.

Anzeige
Anzeige

Konfiguration

Um valides XML auszugeben, bedarf es keiner Extension, da TYPO3 nach wenigen Zeilen TypoScript von Haus aus dazu in der Lage ist. Zuerst sollte man ein neues PAGE-Objekt erstellen, bei dem der automatisch generierte Header ausgeblendet sowie ein eigener Dokumententyp und Zeichensatz für die Ausgabe definiert wird. Mit weiteren kleinen Konfigurationen wird das Template für die Ausgabe von XML konfiguriert. Über die Eigenschaft „typeNum“, die man später als GET-Parameter an die URL hängt, kann das PAGE-Objekt leicht direkt angesprochen werden.

Anzeige
Anzeige
TYPOSCRIPT
xml = PAGE
xml {
	typeNum = 123
	config {
		# Standard-Header deaktivieren
		disableAllHeaderCode = 1
		# keine Tags in XHTML umwandeln
		xhtml_cleaning = none
		admPanel = 0
		metaCharset = utf-8 
		# Inhalt und Zeichensatz definieren
		additionalHeaders = Content-Type:text/xml;charset=utf-8
	}
	10 = COA
	10 {
		wrap = <?xml version="1.0" encoding="UTF-8" standalone="yes" ?><navi>|</navi>
		# Platzhalter für XML-Ausgabe
	}
}

Listing 1

Das COA-Objekt dient als Container für den eigentlichen XML-Code. Das Template lässt sich bereits jetzt über „http://domain.com/index.php?type=123“ im Browser aufrufen, jedoch bleibt das Fenster noch bis auf das Root-Element leer, da Inhalt fehlt.

Ein Beispiel

Um dem XML-Dokument Leben einzuhauchen, wird exemplarisch ein Menü mit Hilfe von TypoScript aus einem bestehenden Seitenbaum generiert und als Inhalt in das Dokument eingefügt. Man sollte dabei darauf achten, dass HTML-Tags nicht unformatiert ausgeben werden, da sie ansonsten als XML-Elemente verstanden werden. Falls man HTML-Code in das XML einbetten muss, kann dieser mit CDATA [2] geschützt werden. Dazu wird der Code mit „<![CDATA[“ und „]]>“ umschlossen. Dadurch weiß der XML-Parser, dass er diesen Abschnitt ignorieren soll.

Anzeige
Anzeige

Für die Ausgabe der Navigation reicht ein ganz normales TMENU. Man muss lediglich den Wrap jedes einzelnen Menüpunkts optimieren, um die URL von dem Titel zu trennen und in zwei unterschiedlichen Elementen unterzubringen. Das folgende TypoScript nimmt die Stelle des Platzhalters aus Listing 1 ein.

TYPOSCRIPT
10 = HMENU
10 {
	special = directory
	special.value = 1
	1 = TMENU
	1 {
		NO {
			doNotLinkIt = 1
			stdWrap.cObject = COA
			stdWrap.cObject {
				wrap = <item>|</item>
				5 = TEXT
				5.wrap = <link>|</link>
				5.typolink.parameter.data = field:uid
				5.typolink.returnLast = url
				10 = TEXT
				10.wrap = <title><![CDATA[|]]></title>
				10.data = field:title
			}
		}
	}
}

Listing 2

Sicherheitshalber sollte man bei der Ausgabe des Titels auf CDATA zurückgreifen, um mögliche Probleme zu vermeiden.

Im Moment lässt sich durch den Aufbau der URL (z. B. http://domain.com/index.php?type=123) nicht auf ein XML-Dokument schließen. TYPO3 generiert die XML-Ausgabe bei jedem Aufruf dynamisch und kann jedoch mit der entsprechenden Konfiguration nach außen hin als Pfad zu einer XML-Datei dargestellt werden.

Anzeige
Anzeige

So bietet die TYPO3-Extension „RealURL“ [3] die Möglichkeit Dateiendungen in URLs zu interpretieren und zum Beispiel alle Anfragen an http://domain.com/test.xml mit dem TYPO3-Seitentyp 123 zu generieren. Aber auch Weiterleitungen (sogenannte „Redirects“) können gezielt eingerichtet werden, um bestimmte, gut lesbare Pfade und Dateinamen zu verwenden und diese nach außen zu kommunizieren. Dies macht insbesondere dann Sinn, wenn man die gleichen Inhalte einer TYPO3-Seite in mehreren Formaten anbieten möchte. Zum Beispiel wäre es so möglich, die Einzelansicht einer News-Meldung sowohl in Standard-HTML (http://domain.com/news/22.htm) als auch in einem strukturierten XML-Format zur Weiterverarbeitung (http://domain.com/news/22.xml) anzubieten.

Fazit

Wie bereits erwähnt, benötigt man keine Extension, um XML mit TYPO3 dynamisch zu generieren. Dies lässt sich einfach durch TypoScript und einen zusätzlichen Seitentyp realisieren. Beim Erstellen der XML-Datei kann auf die gesamte Funktionsreferenz zurückgegriffen und können somit nahezu alle Daten aus TYPO3 als Inhalte verwendet werden.

Der Artikel bietet zwar nur einen kleinen Einblick in die Thematik, kann aber gut als Basis für weitere Experimente dienen. Grundsätzlich kann jedes Content-Element durch TypoScript in generiertes XML eingebettet werden. Eine große Hilfe dabei dürften die CONTENT- und RECORDS-Objekte sein, die in der TypoScript-Referenz TSRef [4] ausführlich dokumentiert sind.

Mehr zu diesem Thema
Fast fertig!

Bitte klicke auf den Link in der Bestätigungsmail, um deine Anmeldung abzuschließen.

Du willst noch weitere Infos zum Newsletter? Jetzt mehr erfahren

Anzeige
Anzeige
Schreib den ersten Kommentar!
Bitte beachte unsere Community-Richtlinien

Wir freuen uns über kontroverse Diskussionen, die gerne auch mal hitzig geführt werden dürfen. Beleidigende, grob anstößige, rassistische und strafrechtlich relevante Äußerungen und Beiträge tolerieren wir nicht. Bitte achte darauf, dass du keine Texte veröffentlichst, für die du keine ausdrückliche Erlaubnis des Urhebers hast. Ebenfalls nicht erlaubt ist der Missbrauch der Webangebote unter t3n.de als Werbeplattform. Die Nennung von Produktnamen, Herstellern, Dienstleistern und Websites ist nur dann zulässig, wenn damit nicht vorrangig der Zweck der Werbung verfolgt wird. Wir behalten uns vor, Beiträge, die diese Regeln verletzen, zu löschen und Accounts zeitweilig oder auf Dauer zu sperren.

Trotz all dieser notwendigen Regeln: Diskutiere kontrovers, sage anderen deine Meinung, trage mit weiterführenden Informationen zum Wissensaustausch bei, aber bleibe dabei fair und respektiere die Meinung anderer. Wir wünschen Dir viel Spaß mit den Webangeboten von t3n und freuen uns auf spannende Beiträge.

Dein t3n-Team

Melde dich mit deinem t3n Account an oder fülle die unteren Felder aus.

Bitte schalte deinen Adblocker für t3n.de aus!
Hallo und herzlich willkommen bei t3n!

Bitte schalte deinen Adblocker für t3n.de aus, um diesen Artikel zu lesen.

Wir sind ein unabhängiger Publisher mit einem Team von mehr als 75 fantastischen Menschen, aber ohne riesigen Konzern im Rücken. Banner und ähnliche Werbemittel sind für unsere Finanzierung sehr wichtig.

Schon jetzt und im Namen der gesamten t3n-Crew: vielen Dank für deine Unterstützung! 🙌

Deine t3n-Crew

Anleitung zur Deaktivierung
Artikel merken

Bitte melde dich an, um diesen Artikel in deiner persönlichen Merkliste auf t3n zu speichern.

Jetzt registrieren und merken

Du hast schon einen t3n-Account? Hier anmelden

oder
Auf Mastodon teilen

Gib die URL deiner Mastodon-Instanz ein, um den Artikel zu teilen.

Anzeige
Anzeige