{"id":59243,"date":"2026-10-07T12:50:48","date_gmt":"2026-10-07T10:50:48","guid":{"rendered":"https:\/\/notiz.blog\/?p=59243"},"modified":"2026-10-07T15:47:34","modified_gmt":"2026-10-07T13:47:34","slug":"wer-sieht-schon-gerne-xml","status":"publish","type":"post","link":"https:\/\/notiz.blog\/2026\/10\/07\/wer-sieht-schon-gerne-xml\/","title":{"rendered":"Wer sieht schon gerne XML?"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Ich habe <a href=\"http:\/\/scripting.com\/2026\/09\/26.html#a184140\" target=\"_blank\" rel=\"noopener\">bei Dave Winer gelesen<\/a>, dass XSLT aus den Browsern entfernt werden soll.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ich habe gerade alle XML Formate die ich in WordPress finden konnte, mit XSLT aufgeh\u00fcbscht und jetzt beschlie\u00dfen Google &amp; Co. ernsthaft den Support einzustellen!?!?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aber bevor ich weiter &#8222;rante&#8220;, hier ein kurzer Einschub was XSLT \u00fcberhaupt ist: Mit XSLT lassen sich XML-Dateien in andere Formate umwandeln, zum Beispiel HTML. Man verlinkt dazu ein Stylesheet in der XML-Datei und der Browser \u00fcbernimmt die Umwandlung. So wird aus einem RSS-Feed eine lesbare Webseite. Ohne JavaScript und ohne dass man daf\u00fcr auf dem Server etwas installieren muss.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr den Feed-Reader \u00e4ndert sich dabei nichts. Der bekommt weiterhin die XML-Datei. Wenn ihr den Feed im Browser \u00f6ffnet, seht ihr dagegen Beitr\u00e4ge, Links und eine Erkl\u00e4rung wie ihr ihn abonnieren k\u00f6nnt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ich benutze das hier seit einer ganzen Weile. <a href=\"https:\/\/notiz.blog\/2020\/11\/13\/folgen-sie-mir-unauffaellig\/\" target=\"_blank\" rel=\"noopener\">2020 hab ich meinen RSS-Feed mit XSLT und CSS gestaltet<\/a>. Sp\u00e4ter kam die <a href=\"https:\/\/notiz.blog\/rss-club\/well-known-opml-xslt\/\" target=\"_blank\" rel=\"noopener\">OPML-Ausgabe meines <code>.well-known\/feeds<\/code> Plugins<\/a> dazu. Und jetzt auch die OPML-Dateien meiner <a href=\"https:\/\/notiz.blog\/2026\/09\/23\/blogrolle\/\" target=\"_blank\" rel=\"noopener\">Blogroll<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><picture class=\"wp-picture-59247\" style=\"display: contents;\"><source type=\"image\/webp\" srcset=\"https:\/\/notiz.blog\/wp-content\/uploads\/2026\/10\/rss-xslt-900x897-png.webp 900w, https:\/\/notiz.blog\/wp-content\/uploads\/2026\/10\/rss-xslt-700x697-png.webp 700w, https:\/\/notiz.blog\/wp-content\/uploads\/2026\/10\/rss-xslt-150x150-png.webp 150w, https:\/\/notiz.blog\/wp-content\/uploads\/2026\/10\/rss-xslt-768x765-png.webp 768w, https:\/\/notiz.blog\/wp-content\/uploads\/2026\/10\/rss-xslt-1536x1530-png.webp 1536w, https:\/\/notiz.blog\/wp-content\/uploads\/2026\/10\/rss-xslt-2048x2041-png.webp 2048w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\"><img data-dominant-color=\"f4f0dc\" data-has-transparency=\"true\" style=\"--dominant-color: #f4f0dc;\" data-wp-picture-wrapped loading=\"lazy\" decoding=\"async\" width=\"900\" height=\"897\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" src=\"https:\/\/notiz.blog\/wp-content\/uploads\/2026\/10\/rss-xslt-900x897.png\" alt=\"Screenshot des RSS-Feeds von notiz.blog im Browser, mit XSLT als lesbare Webseite dargestellt. Oben erkl\u00e4rt ein gelber Bereich mit RSS-Symbol, wie man den Feed abonniert. Darunter stehen das Blog-Logo, die Beschreibung und die neuesten Beitr\u00e4ge als anklickbare Links.\" class=\"wp-image-59247 has-transparency\" srcset=\"https:\/\/notiz.blog\/wp-content\/uploads\/2026\/10\/rss-xslt-900x897.png 900w, https:\/\/notiz.blog\/wp-content\/uploads\/2026\/10\/rss-xslt-700x697.png 700w, https:\/\/notiz.blog\/wp-content\/uploads\/2026\/10\/rss-xslt-150x150.png 150w, https:\/\/notiz.blog\/wp-content\/uploads\/2026\/10\/rss-xslt-768x765.png 768w, https:\/\/notiz.blog\/wp-content\/uploads\/2026\/10\/rss-xslt-1536x1530.png 1536w, https:\/\/notiz.blog\/wp-content\/uploads\/2026\/10\/rss-xslt-2048x2041.png 2048w\" \/><\/picture><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Bei OPML finde ich das besonders praktisch: Ihr klickt auf den Link und bekommt eine Liste von Blogs durch die ihr st\u00f6bern k\u00f6nnt. Die gleiche URL k\u00f6nnt ihr in euren Feed-Reader importieren. Man muss nicht einmal wissen was OPML ist um etwas damit anfangen zu k\u00f6nnen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a rel=\"mention\" class=\"u-url mention\" href=\"https:\/\/mstdn.wirres.net\/@ix\">@ix<\/a> hat auch gerade nochmal <a href=\"https:\/\/wirres.net\/articles\/aus-dem-maschinen-und-todo-raum\" target=\"_blank\" rel=\"noopener\" class=\"u-in-reply-to\">\u00fcber seine Basteleien geschrieben<\/a>. Er h\u00fcbscht seine OPML-Dateien auch mit XSLT auf und inzwischen auch seine RSS-Feeds.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die generelle Idee hinter XSLT erinnert mich sehr an den Microformats-Grundsatz:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Designed for humans first and machines second<\/p>\n<cite><a href=\"https:\/\/microformats.org\/wiki\/about\" target=\"_blank\" rel=\"noopener\">microformats.org<\/a><\/cite><\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Bei Microformats erg\u00e4nzt man das HTML einer Webseite so, dass auch Software etwas damit anfangen kann. Das gleiche HTML f\u00fcr Menschen und Maschinen. Bestehendes sinnvoll erweitern, mit dem arbeiten was schon da ist.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">XSLT macht im Prinzip das Gleiche, nur aus der anderen Richtung:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Designed for machines first and humans second<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Die XML-Dateien bleiben f\u00fcr Maschinen lesbar. Mit einem Stylesheet k\u00f6nnen aber auch Menschen etwas damit anfangen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">RSS und OPML sind ein wesentlicher Bestandteil des Open Webs. Wir verlinken sie an so vielen Stellen, weil wir wollen dass Besucher es einfach haben den Blog zu abonnieren oder weil wir ihnen neue Links vorschlagen wollen. Was sie in Zukunft sehen werden ist reines XML. Keine M\u00f6glichkeit irgendetwas zu erkl\u00e4ren oder auf das Wesentliche aufmerksam zu machen! Nur XML!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Leider ist das auch keine rein theoretische Diskussion mehr. Stand 5. Oktober 2026:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Chrome:<\/strong> XSLT ist bereits deprecated. Die Abschaltung ist f\u00fcr Chrome 158 am <strong>17. November 2026<\/strong> geplant. Befristete Ausnahmen f\u00fcr registrierte Websites und verwaltete Browser sollen am 17. August 2027 enden. Betroffen sind sowohl die Verkn\u00fcpfung mit einem XSLT-Stylesheet als auch die JavaScript-API <code>XSLTProcessor<\/code>. <a href=\"https:\/\/developer.chrome.com\/docs\/web-platform\/deprecating-xslt\" target=\"_blank\" rel=\"noopener\">Zeitplan von Chrome<\/a><\/li>\n\n\n\n<li><strong>Firefox:<\/strong> Mozilla hat die Abschaltung f\u00fcr <strong>August 2027<\/strong> angek\u00fcndigt. <a href=\"https:\/\/www.mail-archive.com\/dev-platform@mozilla.org\/msg01872.html\" target=\"_blank\" rel=\"noopener\">Intent to Unship<\/a><\/li>\n\n\n\n<li><strong>Safari\/WebKit:<\/strong> WebKit unterst\u00fctzt die Entfernung grunds\u00e4tzlich, formuliert seine Zustimmung aber vorsichtig. Einen verbindlichen Abschalttermin habe ich in den gepr\u00fcften Quellen nicht gefunden. <a href=\"https:\/\/github.com\/whatwg\/html\/issues\/11523#issuecomment-3149280766\" target=\"_blank\" rel=\"noopener\">WebKits Stellungnahme<\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Bei Chromium ist die <a href=\"https:\/\/groups.google.com\/a\/chromium.org\/g\/blink-dev\/c\/CxL4gYZeSJA\/m\/yNs4EsD5AQAJ\" target=\"_blank\" rel=\"noopener\">Entfernung bereits beschlossen<\/a>. Noch ist XSLT aber nicht aus allen Browsern verschwunden und auch die <a href=\"https:\/\/github.com\/whatwg\/html\/pull\/11563\" target=\"_blank\" rel=\"noopener\">\u00c4nderung am HTML-Standard<\/a> ist noch offen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">RSS, Atom und OPML funktionieren nat\u00fcrlich weiter. Entfernt wird die XSLT-Verarbeitung im Browser. Der Reader kann meinen Feed also weiterhin lesen, aber wer auf den Link klickt bekommt die XML-Ansicht.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die <a href=\"https:\/\/developer.chrome.com\/docs\/web-platform\/deprecating-xslt#why_does_xslt_need_to_be_removed\" target=\"_blank\" rel=\"noopener\">Begr\u00fcndung der Browserentwickler<\/a> sind Sicherheitsl\u00fccken, Wartungsaufwand und geringe Nutzung. Das sind alles nachvollziehbare Argumente. Trotzdem finde ich den Verweis auf JavaScript und moderne Frameworks als Ersatz unbefriedigend. Ich hab eine XML-Datei und ein Stylesheet. F\u00fcr das was ich damit machen will hat das bisher gereicht!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Was k\u00f6nnen wir stattdessen machen?<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>XSLT mit JavaScript nachr\u00fcsten.<\/strong> Es gibt einen <a href=\"https:\/\/github.com\/mfreed7\/xslt_polyfill\" target=\"_blank\" rel=\"noopener\">Polyfill mit WebAssembly<\/a>, den man direkt in die XML-Datei einbindet. Der Browser f\u00fchrt damit das Stylesheet aus, der Reader bekommt weiterhin XML. Das k\u00f6nnte die bisherige Darstellung unter der gleichen URL erhalten. Allerdings dokumentiert das Projekt Unterschiede zur eingebauten XSLT-Verarbeitung, etwa beim Nachladen weiterer Dateien. Ob es mit meinen Stylesheets und den Readern funktioniert m\u00fcsste ich ausprobieren.<\/li>\n\n\n\n<li><strong>XML mit CSS gestalten.<\/strong> <a href=\"https:\/\/developer.chrome.com\/docs\/web-platform\/deprecating-xslt#xml_css_is_not_being_removed\" target=\"_blank\" rel=\"noopener\">Das bleibt m\u00f6glich<\/a>. Die gleiche XML-Datei l\u00e4sst sich damit im Browser lesbar darstellen, f\u00fcr Reader \u00e4ndert sich nichts. CSS kann aber nicht alles was XSLT kann: Aus einer URL in einer OPML-Datei wird dadurch noch kein anklickbarer HTML-Link. F\u00fcr eine einfache Ansicht kann es trotzdem reichen.<\/li>\n\n\n\n<li><strong>HTML und XML unter der gleichen URL ausliefern.<\/strong> Mit <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Guides\/Content_negotiation\" target=\"_blank\" rel=\"noopener\">Content Negotiation<\/a> k\u00f6nnte der Server anhand des <code>Accept<\/code>-Headers entscheiden welche Version er zur\u00fcckgibt. Nur f\u00fcr die HTML-Version w\u00fcrde ich XSLT auf dem Server ausf\u00fchren, Reader m\u00fcssten weiterhin das urspr\u00fcngliche XML bekommen. Eine zus\u00e4tzliche \u00f6ffentliche URL braucht es daf\u00fcr nicht. Der Haken: Browser und Reader lassen sich \u00fcber den Header nicht zuverl\u00e4ssig auseinanderhalten. Das m\u00fcsste ich mit verschiedenen Readern testen. Caches brauchen au\u00dferdem <code>Vary: Accept<\/code> damit sie die Versionen nicht verwechseln.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Ganz ehrlich? Das ist alles \ud83d\udca9 und keine wirkliche Alternative!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Gew\u00f6hnt euch lieber schon mal wieder an XML!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ich habe bei Dave Winer gelesen, dass XSLT aus den Browsern entfernt werden soll. Ich habe gerade alle XML Formate die ich in WordPress finden konnte, mit XSLT aufgeh\u00fcbscht und jetzt beschlie\u00dfen Google &amp; Co. ernsthaft den Support einzustellen!?!? Aber bevor ich weiter &#8222;rante&#8220;, hier ein kurzer Einschub was XSLT \u00fcberhaupt ist: Mit XSLT lassen [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"webmentions_disabled_pings":false,"webmentions_disabled":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":4,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"federated","footnotes":"","atmosphere_disabled":false,"atmosphere_custom_text":"","atmosphere_reply_restriction":[]},"categories":[2],"tags":[126,5171,579,309,164,102,103,214,718],"class_list":["post-59243","post","type-post","status-publish","format-standard","category-web","tag-css","tag-fediblog","tag-feed","tag-javascript","tag-microformats","tag-opml","tag-rss","tag-xml","tag-xslt","h-entry","hentry"],"_links":{"self":[{"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/posts\/59243","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/comments?post=59243"}],"version-history":[{"count":5,"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/posts\/59243\/revisions"}],"predecessor-version":[{"id":59353,"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/posts\/59243\/revisions\/59353"}],"wp:attachment":[{"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/media?parent=59243"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/categories?post=59243"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/tags?post=59243"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}