{"id":55000077,"date":"2017-02-01T00:00:00","date_gmt":"2020-03-27T19:25:10","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=77"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"EDM_1nBeziehungen_mit_DataGrid","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/EDM_1nBeziehungen_mit_DataGrid\/","title":{"rendered":"EDM: 1:n-Beziehungen mit DataGrid"},"content":{"rendered":"<p><b>Unter Access haben wir 1:n-Beziehungen einfach in einem Haupt- und einem Unterformular abgebildet, wobei wir beiden einfach die Datenquellen und gebundenen Steuerelemente zugewiesen haben &#8211; den Rest hat Access automatisch erledigt. Unter C# und WPF ist das ein wenig mehr Arbeit, aber nach der Lekt&uuml;re dieses Artikels haben Sie das Wissen, das f&uuml;r die Anzeige zweier per 1:n-Beziehung verkn&uuml;pfter Tabellen in einem Fenster beziehungsweise einer Seite und einem DataGrid als Unterformular-Ersatz n&ouml;tig ist.<\/b><\/p>\n<h2>Beispieldaten<\/h2>\n<p>Als Beispiel wollen wir uns die Kategorien und die damit verkn&uuml;pften Produkte ansehen. Dabei sollen die beiden Felder einer Kategorie im Fenster\/in der Seite selbst angezeigt werden, die dazugeh&ouml;rigen Produkte in einem DataGrid unter den Kategoriedaten. Wir verwenden die SQLite-Datenbank <b>Bestellverwaltung.db <\/b>und ein daraus abgeleitetes Entity Data Model namens <b>BestellverwaltungEntities.edmx <\/b>als Datenquelle. Die verwendeten Auflistungen beziehungsweise Entit&auml;ten hei&szlig;en <b>Kategorien<\/b>, <b>Kategorie<\/b>, <b>Produkte <\/b>und <b>Produkt<\/b>.<\/p>\n<h2>Einbau in die Bestellverwaltung<\/h2>\n<p>In einigen weiteren Beitr&auml;gen verwenden wir die Bestellverwaltung als Beispielanwendung. Diese verwendet im Office-Stil ein Ribbon zur Auswahl der verschiedenen Bereiche und Funktionen. Die einzelnen Bereiche etwa zur Anzeige einer Kundenliste oder einer Kundendetailansicht werden auf Seiten (<b>Page<\/b>) statt auf eigenen Fenstern (<b>Window<\/b>) erstellt und je nach angeklickter Ribbon-Schaltfl&auml;che in einem Frame-Element eingeblendet &#8211; also etwa wie die Unterformulare in einem Unterformular-Steuerelement in Access. Wir f&uuml;gen also in diesem Artikel weitere <b>Page<\/b>-Elemente hinzu, die dann nach dem Anklicken der ebenfalls noch anzulegenden Ribbon-Schaltfl&auml;chen angezeigt werden sollen.<\/p>\n<h2>Ribbon-Eintr&auml;ge<\/h2>\n<p>Als Erstes legen wir die drei Ribbon-Eintr&auml;ge an, die Sie in Bild 1 sehen. Die Elemente f&uuml;r diese Ribbon-Gruppe sehen wie folgt aus:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_01\/pic_77_001.png\" alt=\"&Uuml;bersicht der Kategorien\" width=\"499,6607\" height=\"394,7936\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: &Uuml;bersicht der Kategorien<\/span><\/b><\/p>\n<pre>&lt;RibbonGroup Header=\"Kategorien\"&gt;&nbsp;&nbsp;&nbsp;&nbsp;\/\/MainWindow.xaml\r\n     &lt;RibbonButton Name=\"btnKategorieuebersicht\" Label=\"&Uuml;bersicht\" Click=\"btnKategorieuebersicht_Click\"\r\n         LargeImageSource=\"images\/elements4.png\"&gt;&lt;\/RibbonButton&gt;\r\n     &lt;RibbonButton Name=\"btnNeueKategorie\" Label=\"Neue Kategorie\" Click=\"btnNeueKategorie_Click\" \r\n         LargeImageSource=\"images\/elements4_new.png\"&gt;&lt;\/RibbonButton&gt;\r\n     &lt;RibbonButton Name=\"btnKategorieLoeschen\" Label=\"Kategorie l&ouml;schen\" Click=\"btnKategorieLoeschen_Click\" \r\n         LargeImageSource=\"images\/elements4_delete.png\"&gt;&lt;\/RibbonButton&gt;\r\n&lt;\/RibbonGroup&gt;<\/pre>\n<p>Wir haben f&uuml;r jedes Element ein Bild hinterlegt, das wir gleichzeitig zum Ordner <b>images <\/b>des Projekts hinzugef&uuml;gt haben.<\/p>\n<h2>&Uuml;bersichtsseite f&uuml;r die Kategorien<\/h2>\n<p>Die Kategorien werden in der &Uuml;bersichtsseite <b>KategorieUebersicht.xaml <\/b>in einem <b>DataGrid<\/b>-Element aufgelistet. Das F&uuml;llen dieses <b>DataGrid<\/b>-Elements erfolgt genauso, wie wir es bereits im Artikel <b>EDM: Kunden verwalten mit Ribbon <\/b>f&uuml;r die Anzeige der Kunden realisiert und im Artikel <b>Bestellveraltung planen <\/b>angepasst haben &#8211; nur, dass wir diesmal auf die Entit&auml;tsliste der Kategorien statt der Kunden zugreifen und nur die Felder <b>ID <\/b>und <b>Bezeichnung <\/b>anzeigen.<\/p>\n<h2>Detailseite f&uuml;r die Kategorien<\/h2>\n<p>Der interessante Teil folgt nun, n&auml;mlich die Detailseite f&uuml;r eine Kategorie. Eine Kategorie enth&auml;lt zwar nur die beiden Felder <b>ID <\/b>und <b>Bezeichnung<\/b>, was sich genau so leicht abbilden l&auml;sst wie in der Detailansicht f&uuml;r Kunden (<b>Kundendetails.xaml<\/b>) &#8211; nur mit weniger Feldern. Allerdings wollen wir ja zu jeder Kategorie auch noch die Liste der Produkte anzeigen, die der jeweiligen Kategorie zugeordnet sind! Und das wollen wir wiederum mit einem <b>DataGrid<\/b>-Element erledigen.<\/p>\n<p>Im Grunde brauchen wir also eine Kombination der bereits einmal gezeigten Detailansicht f&uuml;r die Kunden (diesmal f&uuml;r die Kategorien) und einer &Uuml;bersicht f&uuml;r die Produkte. Der Unterschied bei der &Uuml;bersichtsseite diesmal ist, dass wir nicht mehr einfach alle Elemente der Produkte-Liste anzeigen k&ouml;nnen, sondern nur noch diejenigen Elemente, die der aktuellen Kategorie zugeordnet sind. Die Definition der Seite mit den Kategoriedetails und der Produktliste startet mit ein paar <b>Page.Resources<\/b>-Elementen, welche globale Attribute der verschiedenen Steuerelemente festlegen und die wir hier ebenso gek&uuml;rzt haben wie die Definition des Grids:<\/p>\n<pre>&lt;Page x:Class=\"Bestellverwaltung.Kategoriedetails\" ...Title=\"Kategoriedetails\"&gt;&nbsp;&nbsp;&nbsp;&nbsp;\/\/Kategoriedetails.xaml\r\n     &lt;Page.Resources&gt;...&lt;\/Page.Resources&gt;\r\n     &lt;Grid&gt;\r\n         &lt;Grid.ColumnDefinitions&gt;...&lt;\/Grid.ColumnDefinitions&gt;\r\n         &lt;Grid.RowDefinitions&gt;...&lt;\/Grid.RowDefinitions&gt;<\/pre>\n<p>Danach folgt das Label f&uuml;r die <b>ID <\/b>der Kategorie und die <b>TextBox<\/b>, die wir an das Feld <b>kategorie.ID <\/b>binden:<\/p>\n<pre>         &lt;Label Content=\"ID:\" Grid.Column=\"0\" \/&gt;\r\n         &lt;TextBox x:Name=\"txtID\" Grid.Column=\"1\" HorizontalAlignment=\"Left\" Text=\"{Binding kategorie.ID, Mode=TwoWay,             ValidatesOnExceptions=true}\" Width=\"50\" IsEnabled=\"False\" BorderBrush=\"Transparent\" \/&gt;<\/pre>\n<p>Die Bezeichnung erh&auml;lt ebenfalls ein Label und eine Bindung an das Feld <b>kategorie.Bezeichnung<\/b> &#8211; beide landen in jeweils einer Spalte, genau wie die Steuerelemente f&uuml;r die ID:<\/p>\n<pre>         &lt;Label Content=\"Bezeichnung:\" Grid.Column=\"0\" Grid.Row=\"1\" \/&gt;\r\n         &lt;TextBox x:Name=\"txtBezeichnung\" Grid.Column=\"1\" HorizontalAlignment=\"Stretch\" Grid.Row=\"1\"             Text=\"{Binding kategorie.Bezeichnung, Mode=TwoWay, ValidatesOnDataErrors=true}\" \/&gt;<\/pre>\n<p>Schlie&szlig;lich folgt das <b>DataGrid<\/b>-Element namens <b>dgProdukte<\/b>, das in der folgenden Zeile landet und sich &uuml;ber zwei Spalten erstrecken soll (<b>Grid.ColumnSpan=&#8221;2&#8243;<\/b>). Als <b>ItemsSource <\/b>f&uuml;r das <b>DataGrid <\/b>legen wir das Element <b>Produkte <\/b>fest. Das automatische Generieren der Spalten sowie das Anzeigen einer leeren Spalte zum Hinzuf&uuml;gen von Elementen deaktivieren wir:<\/p>\n<pre>         &lt;DataGrid x:Name=\"dgProdukte\" Grid.Column=\"0\" Grid.Row=\"2\" Grid.ColumnSpan=\"2\" ItemsSource=\"{Binding Produkte}\"                 AutoGenerateColumns=\"false\" CanUserAddRows=\"False\"&gt;<\/pre>\n<p>Die beiden Spalten des <b>DataGrid<\/b>-Elements binden wir an die Felder <b>ID <\/b>und <b>Bezeichnung<\/b>:<\/p>\n<pre>             &lt;DataGrid.Columns&gt;\r\n                 &lt;DataGridTextColumn Binding=\"{Binding Path=ID}\" Header=\"ID\"  \/&gt;\r\n                 &lt;DataGridTextColumn Binding=\"{Binding Path=Bezeichnung}\" Header=\"Produkt\" \/&gt;\r\n             &lt;\/DataGrid.Columns&gt;<\/pre>\n<p>Au&szlig;erdem wollen wir, wie schon bei den &uuml;brigen &Uuml;bersichten, ein &Ouml;ffnen der Produktdetails per Doppelklick erlauben und f&uuml;gen dazu einen <b>EventSetter <\/b>hinzu:<\/p>\n<pre>             &lt;DataGrid.Resources&gt;\r\n                 &lt;Style TargetType=\"DataGridRow\"&gt;\r\n                     &lt;EventSetter Event=\"MouseDoubleClick\" Handler=\"Row_DoubleClick\"\/&gt;\r\n                 &lt;\/Style&gt;\r\n             &lt;\/DataGrid.Resources&gt;\r\n         &lt;\/DataGrid&gt;<\/pre>\n<p>Schlie&szlig;lich folgen noch die beiden Schaltfl&auml;chen zum Speichern und Verwerfen der aktuellen &Auml;nderungen:<\/p>\n<pre>         &lt;StackPanel Orientation=\"Horizontal\" Grid.Row=\"6\" Grid.ColumnSpan=\"4\" &gt;\r\n             &lt;Button x:Name=\"btnSpeichern\" Margin=\"3\" Padding=\"3\" Click=\"btnSpeichern_Click\" Height=\"23\"                 Content=\"Speichern\"&gt;&lt;\/Button&gt;\r\n             &lt;Button x:Name=\"btnVerwerfen\" Margin=\"3\" Padding=\"3\" Click=\"btnVerwerfen_Click\" Height=\"23\"                 Content=\"Verwerfen\"&gt;&lt;\/Button&gt;\r\n         &lt;\/StackPanel&gt;\r\n     &lt;\/Grid&gt;\r\n&lt;\/Page&gt;<\/pre>\n<p>Der Entwurf sieht in der XAML-Ansicht nun wie in Bild 2 aus. Im Entwurf haben wir nun schon einige Bindungen gesehen, die wir nun in der Code behind-Klasse bereitstellen wollen. Diese Klasse enth&auml;lt zun&auml;chst eine Variable f&uuml;r das <b>DBContext<\/b>-Element, &uuml;ber das wir auf das Entity Data Model zugreifen (<b>dbContext<\/b>). Au&szlig;erden finden wir hier die Definition f&uuml;r die Objekte, an die wir die Elemente der XAML-Seite binden wollen. Die erste ist das <b>Kategorie<\/b>-Objekt, das wir in der &ouml;ffentlichen Variablen <b>kategorie <\/b>speichern.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_01\/pic_77_002.png\" alt=\"Entwurf der Kategoriedetail-Seite\" width=\"424,7115\" height=\"295,3755\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Entwurf der Kategoriedetail-Seite<\/span><\/b><\/p>\n<p>Die zweite ist das <b>ObservableCollection<\/b>-Objekt <b>Produkte<\/b>, dessen Inhalt wir in der als privat deklarierten Variablen <b>produkte <\/b>speichern und &uuml;ber entsprechende Eigenschaften f&uuml;r den Zugriff von au&szlig;en bereitstellen:<\/p>\n<pre>public partial class Kategoriedetails : Page {&nbsp;&nbsp;&nbsp;&nbsp;\/\/Kategoriedetails.xaml.cs\r\n     private BestellverwaltungEntities dbContext;\r\n     public Kategorie kategorie { get; set; }\r\n     private ObservableCollection&lt;Produkt&gt; produkte;\r\n     public ObservableCollection&lt;Produkt&gt; Produkte {\r\n         get {\r\n             return produkte;\r\n         }\r\n         set {\r\n             produkte = value;\r\n         }\r\n     }\r\n     ...\r\n}<\/pre>\n<p>Die Konstruktor-Methode <b>Kategoriedetails<\/b>, die beim Erstellen eines Objekts auf Basis unserer Klasse aufgerufen wird, erwartet als Parameter den Prim&auml;rschl&uuml;sselwert der ID einer Kategorie. Wird dieser nicht &uuml;bergeben, setzt die Methode ihn auf <b>0 <\/b>fest &#8211; dies bedeutet, dass ein neues, leeres <b>Kategorie<\/b>-Element angezeigt werden soll.<\/p>\n<p>Die Methode erstellt ein neues Objekt auf Basis der Klasse <b>BestellverwaltungEntities <\/b>und stellt den <b>DataContext <\/b>auf die Code behind-Klasse (<b>this<\/b>) ein, damit die XAML-Elemente auf die per Eigenschaft zug&auml;ngig gemachten Elemente der Code behind-Klasse zugreifen k&ouml;nnen. Ist die mit dem Parameter <b>kategorieID <\/b>&uuml;bergebene <b>ID <\/b>der Kategorie nicht gleich <b>0<\/b>, sucht die <b>Find<\/b>-Methode in der <b>Kategorien<\/b>-Auflistung nach dem entsprechenden Element. Anderenfalls wird ein neues Kategorie-Element angelegt.<\/p>\n<pre>public Kategoriedetails(long kategorieID = 0) {&nbsp;&nbsp;&nbsp;&nbsp;\/\/Kategoriedetails.xaml.cs\r\n     InitializeComponent();\r\n     dbContext = new BestellverwaltungEntities();\r\n     DataContext = this;\r\n     if (kategorieID != 0) {\r\n         kategorie = dbContext.Kategorien.Find(kategorieID);\r\n     }\r\n     else {\r\n         kategorie = new Kategorie();\r\n         dbContext.Kategorien.Add(kategorie);\r\n     }\r\n     produkte = new ObservableCollection&lt;Produkt&gt;(dbContext.Produkte.Where(d =&gt; d.KategorieID == kategorie.ID));\r\n}<\/pre>\n<p>Danach folgt der interessante Schritt: Wir f&uuml;llen das DataGrid, und zwar nur mit den Entit&auml;ten, die einem bestimmten Suchkriterium entsprechen.<\/p>\n<p>Dieses soll nur die Entit&auml;ten liefern, deren Feld <b>KategorieID <\/b>dem Wert des Feldes <b>ID <\/b>der angezeigten <b>Kategorie<\/b>-Entit&auml;t entspricht. Dazu verwenden wir einen entsprechenden Linq-Ausdruck (siehe auch Artikel <b>LINQ to Entities: Daten abfragen<\/b>):<\/p>\n<pre>produkte = new ObservableCollection&lt;Produkt&gt;(dbContext.Produkte.Where(d=&gt;d.KategorieID==kategorie.ID));<\/pre>\n<p>Das Ergebnis sieht dann wie in Bild 3 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2017_01\/pic_77_003.png\" alt=\"Anzeige von Kategorien und Produkten\" width=\"499,6607\" height=\"346,3557\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Anzeige von Kategorien und Produkten<\/span><\/b><\/p>\n<h2>Fokus auf Bezeichnung<\/h2>\n<p>Damit gleich beim &Ouml;ffnen der Seite der Fokus auf das Textfeld zur Eingabe der Bezeichnung gelegt wird, geben Sie f&uuml;r das <b>Page<\/b>-Objekt den Wert <b>Page_Loaded <\/b>f&uuml;r das Attribut <b>Loaded <\/b>an:<\/p>\n<pre>&lt;Page x:Class=\"Bestellverwaltung.Kategoriedetails\" ... Loaded=\"Page_Loaded\"&gt;&nbsp;&nbsp;&nbsp;&nbsp;\/\/Kategoriedetails.xaml<\/pre>\n<p>Dies soll die folgende Ereignismethode ausl&ouml;sen, die lediglich den Fokus auf das Feld <b>txtBezeichnung <\/b>legt:<\/p>\n<pre>private void Page_Loaded(object sender, RoutedEventArgs e) {&nbsp;&nbsp;&nbsp;&nbsp;\/\/Kategoriedetails.xaml.cs\r\n     txtBezeichnung.Focus();\r\n}<\/pre>\n<h2>Speichern der Kategorie<\/h2>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Visual Basic Entwickler<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/363\/visual-basic-entwickler-jahresabonnement?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 200 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000077\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/data\/wp\/v2\/posts\/55000077?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000077\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"122f66fc6a\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Unter Access haben wir 1:n-Beziehungen einfach in einem Haupt- und einem Unterformular abgebildet, wobei wir beiden einfach die Datenquellen und gebundenen Steuerelemente zugewiesen haben &#8211; den Rest hat Access automatisch erledigt. Unter C# und WPF ist das ein wenig mehr Arbeit, aber nach der Lekt&uuml;re dieses Artikels haben Sie das Wissen, das f&uuml;r die Anzeige zweier per 1:n-Beziehung verkn&uuml;pfter Tabellen in einem Fenster beziehungsweise einer Seite und einem DataGrid als Unterformular-Ersatz n&ouml;tig ist.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[66012017,662017,44000002,44000027,44000004,44000026,44000015],"tags":[],"yst_prominent_words":[],"class_list":["post-55000077","post","type-post","status-publish","format-standard","hentry","category-66012017","category-662017","category-Benutzeroberflaeche_mit_WPF","category-Excel_programmieren","category-Loesungen","category-Outlook_programmieren","category-WPFSteuerelemente"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000077","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000077"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000077\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000077"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000077"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000077"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000077"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}