{"id":605,"date":"2025-05-11T23:56:26","date_gmt":"2025-05-11T22:56:26","guid":{"rendered":"https:\/\/www.javaeinfacherkl\u00e4rt.de\/?p=605"},"modified":"2025-06-10T23:58:40","modified_gmt":"2025-06-10T22:58:40","slug":"java-diff-utils-unterschiede-zwischen-textdateien-effizient-erkennen","status":"publish","type":"post","link":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=605","title":{"rendered":"Java-Diff-Utils \u2013 Unterschiede zwischen Textdateien effizient erkennen"},"content":{"rendered":"\n<p>Beim Vergleich von Texten, wie Quellcode, Konfigurationsdateien oder anderen textbasierten Inhalten, ist es oft notwendig, die Unterschiede (engl. <em>diffs<\/em>) zwischen zwei Versionen zu ermitteln. Genau hier setzt die Bibliothek <strong>Java-Diff-Utils<\/strong> an. Sie stellt eine einfache, aber leistungsf\u00e4hige API bereit, um Unterschiede zwischen Texten zu analysieren, darzustellen und zu verarbeiten. In diesem Artikel betrachten wir die Funktionsweise, Einsatzm\u00f6glichkeiten und Beispiele dieser Bibliothek im Detail.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Was ist Java-Diff-Utils?<\/strong><\/h2>\n\n\n\n<p><strong>Java-Diff-Utils<\/strong> ist eine Open-Source-Java-Bibliothek zur Berechnung von Differenzen zwischen zwei Textlisten. Sie basiert auf dem LCS-Algorithmus (Longest Common Subsequence), der auch bei klassischen <em>diff<\/em>-Tools zum Einsatz kommt. Die Bibliothek unterst\u00fctzt sowohl reine Berechnung der Differenzen als auch deren Darstellung in verschiedenen Formaten wie Unified-Diff oder Inline-Darstellungen.<\/p>\n\n\n\n<p>Die Bibliothek ist besonders hilfreich in Anwendungen wie:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Versionskontrollsystemen<\/li>\n\n\n\n<li>Merge-Tools<\/li>\n\n\n\n<li>Editoren mit \u00c4nderungsverfolgung<\/li>\n\n\n\n<li>Unit-Testing von Textausgaben<\/li>\n\n\n\n<li>Synchronisationswerkzeugen<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Installation<\/strong><\/h2>\n\n\n\n<p>Java-Diff-Utils ist \u00fcber Maven Central verf\u00fcgbar. F\u00fcr Maven-Projekte gen\u00fcgt folgender Eintrag:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dependency<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>io.github.java-diff-utils<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>java-diff-utils<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">version<\/span>&gt;<\/span>4.12<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">version<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">dependency<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>F\u00fcr Gradle-Projekte:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">implementation <span class=\"hljs-string\">'io.github.java-diff-utils:java-diff-utils:4.12'<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Die Version kann je nach Ver\u00f6ffentlichungsstand abweichen. Eine aktuelle Version ist auf <a href=\"https:\/\/search.maven.org\/search?q=g:io.github.java-diff-utils\">Maven Central<\/a> zu finden.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Grundprinzip: DiffUtils<\/strong><\/h2>\n\n\n\n<p>Das Herzst\u00fcck der Bibliothek ist die Klasse <code>DiffUtils<\/code>. Diese erm\u00f6glicht den Vergleich von zwei Textlisten (<code>List&lt;String&gt;<\/code>) und liefert eine Liste von sogenannten \u201eDeltas\u201c, die die \u00c4nderungen beschreiben.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Beispiel: Zwei Texte vergleichen<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> java.util.*;\n<span class=\"hljs-keyword\">import<\/span> com.github.difflib.DiffUtils;\n<span class=\"hljs-keyword\">import<\/span> com.github.difflib.patch.*;\n\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">DiffExample<\/span> <\/span>{\n    public <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> main(<span class=\"hljs-built_in\">String<\/span>&#91;] args) {\n        List&lt;<span class=\"hljs-built_in\">String<\/span>&gt; original = Arrays.asList(<span class=\"hljs-string\">\"Zeile 1\"<\/span>, <span class=\"hljs-string\">\"Zeile 2\"<\/span>, <span class=\"hljs-string\">\"Zeile 3\"<\/span>);\n        List&lt;<span class=\"hljs-built_in\">String<\/span>&gt; ge\u00e4ndert = Arrays.asList(<span class=\"hljs-string\">\"Zeile 1\"<\/span>, <span class=\"hljs-string\">\"Zeile Zwei\"<\/span>, <span class=\"hljs-string\">\"Zeile 3\"<\/span>, <span class=\"hljs-string\">\"Zeile 4\"<\/span>);\n\n        Patch&lt;<span class=\"hljs-built_in\">String<\/span>&gt; patch = DiffUtils.diff(original, ge\u00e4ndert);\n\n        <span class=\"hljs-keyword\">for<\/span> (AbstractDelta&lt;<span class=\"hljs-built_in\">String<\/span>&gt; delta : patch.getDeltas()) {\n            System.out.println(delta);\n        }\n    }\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Ausgabe:<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">ChangeDelta<\/span>, <span class=\"hljs-selector-tag\">position<\/span>: 1, <span class=\"hljs-selector-tag\">lines<\/span>: <span class=\"hljs-selector-attr\">&#91;Zeile 2]<\/span> <span class=\"hljs-selector-tag\">to<\/span> <span class=\"hljs-selector-attr\">&#91;Zeile Zwei]<\/span>\n<span class=\"hljs-selector-tag\">InsertDelta<\/span>, <span class=\"hljs-selector-tag\">position<\/span>: 3, <span class=\"hljs-selector-tag\">lines<\/span>: <span class=\"hljs-selector-attr\">&#91;]<\/span> <span class=\"hljs-selector-tag\">to<\/span> <span class=\"hljs-selector-attr\">&#91;Zeile 4]<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Die Ausgabe zeigt:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Bei Zeile 2 wurde \u201eZeile 2\u201c zu \u201eZeile Zwei\u201c ge\u00e4ndert.<\/li>\n\n\n\n<li>Eine neue Zeile (\u201eZeile 4\u201c) wurde am Ende eingef\u00fcgt.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Delta-Typen<\/strong><\/h2>\n\n\n\n<p>Die Bibliothek kennt mehrere Typen von \u00c4nderungen:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>InsertDelta<\/strong> \u2013 Eine oder mehrere Zeilen wurden hinzugef\u00fcgt.<\/li>\n\n\n\n<li><strong>DeleteDelta<\/strong> \u2013 Zeilen wurden entfernt.<\/li>\n\n\n\n<li><strong>ChangeDelta<\/strong> \u2013 Zeilen wurden ersetzt.<\/li>\n<\/ul>\n\n\n\n<p>Diese Deltas enthalten Informationen \u00fcber die Position und die betroffenen Zeilen. Damit lassen sich pr\u00e4zise \u00c4nderungen rekonstruieren oder auch r\u00fcckg\u00e4ngig machen.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Darstellung im Unified-Diff-Format<\/strong><\/h2>\n\n\n\n<p>Java-Diff-Utils kann die Unterschiede im bekannten Unified-Diff-Format (wie bei Git oder Unix-Diff) darstellen:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">List&lt;<span class=\"hljs-built_in\">String<\/span>&gt; unifiedDiff = UnifiedDiffUtils.generateUnifiedDiff(\n    <span class=\"hljs-string\">\"original.txt\"<\/span>, <span class=\"hljs-string\">\"ge\u00e4ndert.txt\"<\/span>, original, patch, <span class=\"hljs-number\">3<\/span>);\n\n<span class=\"hljs-keyword\">for<\/span> (<span class=\"hljs-built_in\">String<\/span> line : unifiedDiff) {\n    System.out.println(line);\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Beispielausgabe:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">---<\/span> <span class=\"hljs-selector-tag\">original<\/span><span class=\"hljs-selector-class\">.txt<\/span>\n+++ <span class=\"hljs-selector-tag\">ge<\/span>\u00e4<span class=\"hljs-selector-tag\">ndert<\/span><span class=\"hljs-selector-class\">.txt<\/span>\n@@ -<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">3<\/span> +<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">4<\/span> @@\n Zeile <span class=\"hljs-number\">1<\/span>\n-Zeile <span class=\"hljs-number\">2<\/span>\n+Zeile Zwei\n Zeile <span class=\"hljs-number\">3<\/span>\n+Zeile <span class=\"hljs-number\">4<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Dies macht die Bibliothek auch f\u00fcr Tools n\u00fctzlich, die mit externen Diff-Engines interoperieren m\u00fcssen.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Anwenden von Patches<\/strong><\/h2>\n\n\n\n<p>Man kann mit einem erzeugten <code>Patch<\/code> auch \u00c4nderungen anwenden oder r\u00fcckg\u00e4ngig machen. Dies ist besonders hilfreich in Synchronisationsanwendungen oder bei Merge-Operationen:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\">List<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">String<\/span>&gt;<\/span> result = DiffUtils.patch(original, patch);\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>F\u00fcr den umgekehrten Fall:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\">List<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">String<\/span>&gt;<\/span> revert = DiffUtils.unpatch(ge\u00e4ndert, patch);\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Einsatz in Unit-Tests<\/strong><\/h2>\n\n\n\n<p>Diffs sind n\u00fctzlich beim Testen von Funktionen, die Textausgaben erzeugen. Anstatt zwei Strings manuell zu vergleichen, kann man mit Java-Diff-Utils eine aussagekr\u00e4ftige Differenz visualisieren:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">if<\/span> (!expected.equals(actual)) {\n    Patch&lt;<span class=\"hljs-built_in\">String<\/span>&gt; diff = DiffUtils.diff(expected, actual);\n    System.err.println(<span class=\"hljs-string\">\"Unterschiede gefunden:\"<\/span>);\n    System.err.println(UnifiedDiffUtils.generateUnifiedDiff(<span class=\"hljs-string\">\"expected\"<\/span>, <span class=\"hljs-string\">\"actual\"<\/span>, expected, diff, <span class=\"hljs-number\">3<\/span>));\n    fail(<span class=\"hljs-string\">\"Test fehlgeschlagen. Unterschiede siehe oben.\"<\/span>);\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Dadurch werden Fehlerursachen schneller erkennbar.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Erweiterte Funktionen<\/strong><\/h2>\n\n\n\n<p>Neben den Basisfunktionen bietet Java-Diff-Utils auch:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Optionale Konfigurationen f\u00fcr die Vergleichslogik<\/strong> (z.\u202fB. <code>DiffAlgorithmFactory<\/code>)<\/li>\n\n\n\n<li><strong>Inline-Diffs<\/strong>, bei denen \u00c4nderungen innerhalb einer Zeile markiert werden<\/li>\n\n\n\n<li><strong>LineComparator<\/strong> f\u00fcr benutzerdefinierte Zeilenvergleiche (z.\u202fB. ignorieren von Leerzeichen oder Gro\u00df-\/Kleinschreibung)<\/li>\n<\/ul>\n\n\n\n<p>Beispiel: Vergleich mit ignorierter Gro\u00df-\/Kleinschreibung<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">Patch&lt;<span class=\"hljs-built_in\">String<\/span>&gt; patch = DiffUtils.diff(original, ge\u00e4ndert,\n    DiffAlgorithmFactory.createDefault(), <span class=\"hljs-literal\">true<\/span>);\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Leistung und Grenzen<\/strong><\/h2>\n\n\n\n<p>Die Bibliothek ist ausreichend performant f\u00fcr typische Anwendungsf\u00e4lle mit einigen Tausend Zeilen. F\u00fcr sehr gro\u00dfe Dateien oder Streams sollte man allerdings eine angepasste L\u00f6sung verwenden, da alles im Speicher verarbeitet wird. F\u00fcr strukturierte Daten (wie XML oder JSON) ist ggf. ein spezialisierter Diff-Algorithmus sinnvoller.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Fazit<\/strong><\/h2>\n\n\n\n<p>Java-Diff-Utils ist eine flexible und leicht einsetzbare Bibliothek f\u00fcr die Analyse und Darstellung von Unterschieden zwischen Textdateien. Ihre St\u00e4rken liegen in der einfachen API, der Unterst\u00fctzung g\u00e4ngiger Formate wie Unified-Diff und der M\u00f6glichkeit, Patches zu erzeugen und anzuwenden.<\/p>\n\n\n\n<p>Ob in Versionskontrollsystemen, Editoren, Testframeworks oder Synchronisierungsdiensten \u2013 \u00fcberall dort, wo Unterschiede zwischen Texten eine Rolle spielen, bietet Java-Diff-Utils eine solide Basis. Die Bibliothek ist aktiv gepflegt und erfreut sich in der Java-Community gro\u00dfer Beliebtheit.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Beim Vergleich von Texten, wie Quellcode, Konfigurationsdateien oder anderen textbasierten Inhalten, ist es oft notwendig, die Unterschiede (engl. diffs) zwischen zwei Versionen zu ermitteln. Genau hier setzt die Bibliothek Java-Diff-Utils an. Sie stellt eine einfache, aber leistungsf\u00e4hige API bereit, um Unterschiede zwischen Texten zu analysieren, darzustellen und zu verarbeiten. In diesem Artikel betrachten wir die [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-605","post","type-post","status-publish","format-standard","hentry","category-plain_java"],"_links":{"self":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/605","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=605"}],"version-history":[{"count":1,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/605\/revisions"}],"predecessor-version":[{"id":606,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/605\/revisions\/606"}],"wp:attachment":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=605"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=605"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=605"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}