The following has evaluated to null or missing: ==> FrontendService.media.getDMTJsonObject( coverBild.groupId?number, coverBild.uuid, locale ) [in template "252001#252047#252845" at line 128, column 37] ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: dMTJsonObject = FrontendService.media... [in template "252001#252047#252845" at line 128, column 21] ----
1<#-- used @ Veranstaltung-Detailseite Intro
2 used @ Publikation-Detailseite Intro
3-->
4
5<#--
6Web content templates to display teaser on thema detail page
7
8Generic template for detail pages Intro / Teaser element
9-->
10<#--
11Display the current page title
12-->
13<#include "${fullTemplatesPath}/functions/relatedContentUtil.ftl" />
14<#include "${fullTemplatesPath}/macros/debugging.ftl" />
15
16<#include "${fullTemplatesPath}/macros/page-modules/PMIntro.ftl" />
17<#include "${fullTemplatesPath}/macros/atomic-modules/AMPublicationCarousel.ftl" />
18<#include "${fullTemplatesPath}/macros/atomic-modules/AMMetadata.ftl" />
19<#include "${fullTemplatesPath}/macros/atomic-modules/AMDatetime.ftl" />
20
21
22<#--
23 renders the Intro for nearly all Pages
24 TODO: remove Share? (was in the designs, but not anymore?)
25 TODO: check if languageSelect/filter are working (js)
26
27 - portletId
28 - data = {
29 "media": string (src from image),
30 "category": string,
31 "title": string,
32 "author": string,
33 "subheadline": string,
34 "copy": string,
35 "filter": {
36 "id": string,
37 "name": string,
38 "entries": Array<Object> ({key:value}),
39 },
40 "languageSelect": {
41 "id": string,
42 "name": string,
43 "entries": Array<Object> ({key:value}),
44 },
45 "meta": {
46 "pos"; string (top/bottom)
47 "date": string,
48 "hash": string,
49 "info": string, (url)
50 },
51 "share" : {
52 "login": string,
53 "print": string,
54 "mail": string,
55 "multishare": string?? (tbd)
56 }
57 - AMMetadata: macro
58 - position: String ("top") -> defines wether the meta-data should be rendered above or below the intro-content
59 }
60-->
61
62<#assign
63 JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")
64
65 ServiceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext()
66 DLAPP = serviceLocator.findService("com.liferay.document.library.kernel.service.DLAppLocalService")
67
68 themeDisplay = ServiceContext.getThemeDisplay()
69 editmode = FrontendService.user.isPrivilegedUser(themeDisplay)
70
71 languageId = themeDisplay.getLocale()
72 groupId = themeDisplay.getScopeGroupId()
73 currentUrl = themeDisplay.getURLCurrent()
74
75 layout = themeDisplay.getLayout()
76 layouttpl = layout.getTypeSettingsProperties().getProperty("layout-template-id")
77/>
78
79<#setting locale="${languageId}">
80
81<#-- get article from url -->
82
83<#assign entry = FrontendService.article.getArticleToUrl(currentUrl, groupId?number)! >
84
85
86<#if entry?has_content>
87
88 <#if entry.resourcePrimKey??>
89 <#assign primaryKey = entry.resourcePrimKey?number >
90 <#elseif entry.classPK??>
91 <#assign primaryKey = entry.classPK?number >
92 </#if>
93
94 <#assign
95 jsonString = FrontendService.article.getWebcontent(primaryKey)
96 json = FrontendService.json.parseAsJson(jsonString)
97 availablelanguages = FrontendService.article.getAssetEntryToUrl(primaryKey).getAvailableLanguageIds()
98
99 title = entry.getTitle(languageId)
100 data = {
101 "title": title
102 }
103 />
104 <@debugJsonString jsonString "ADT_KASDE_DYNAMIC_INTRO" />
105
106 <#if hasContent('untertitel', languageId, json)>
107 <#assign data = data + { "subheadline": getValueForLanguage('untertitel', languageId, json, "first") } >
108 </#if>
109
110 <#if hasContent('beschreibung', languageId, json)>
111 <#assign data = data + { "copy": getValueForLanguage('beschreibung', languageId, json, "first") } >
112 </#if>
113
114 <#-- fill meta data -->
115 <#assign meta = {} />
116
117 <#-- PUBLIKATIONEN DETAIL -->
118 <#if layouttpl?contains("LAYOUT_KASDE_PUBLIKATIONEN_DETAIL")>
119
120 <#if hasContent('coverDMTKASDEMEDIUM', languageId, json)>
121 <#assign
122 coverBildString = getValueForLanguage('coverDMTKASDEMEDIUM', languageId, json, "first")
123 />
124
125 <#if coverBildString?has_content>
126 <#assign
127 coverBild = FrontendService.json.parseAsJson(coverBildString)
128 dMTJsonObject = FrontendService.media.getDMTJsonObject( coverBild.groupId?number, coverBild.uuid, locale )
129 linkToDMT = FrontendService.media.getImageURLForAMConfiguration('hd-resolution',coverBild.groupId?number, coverBild.uuid )
130 data = data + { "media": linkToDMT, "meta" : dMTJsonObject }
131 />
132 <#if dMTJsonObject.altText?? >
133 <#assign data = data + {"alt" : dMTJsonObject.altText} />
134 </#if>
135 <#if dMTJsonObject.quelle??>
136 <#assign meta = meta + { "quelle": dMTJsonObject.quelle } />
137 </#if>
138 </#if>
139 <#-- uncomment to display pdf cover as Intro Image
140 <#elseif hasContent('document_pdfDMTBASICDOCUMENT', languageId, json)>
141 <#assign
142 pdfDocument = getValueForLanguage('document_pdfDMTBASICDOCUMENT', languageId, json, "first")
143 fileEntry = FrontendService.media.getFileEntry(pdfDocument.uuid, groupId?number)!/>
144 <#if fileEntry?has_content>
145 <#assign
146 linkToThumbnail = FrontendService.link.getThumbnailSrc(fileEntry , themeDisplay)
147 data = data + { "media": linkToThumbnail }
148 />
149 </#if>
150 -->
151 </#if>
152
153 <#assign
154 meta = meta + { "orderInfo": "true" }
155 verbundJournalArticle = FrontendService.publication.getVerbundToPublikation( entry )!""
156 />
157
158
159
160 <#if hasContent('erscheinungsdatum', languageId, json)>
161 <#assign
162 erscheinungsdatum = getValueForLanguage('erscheinungsdatum', languageId, json, "first")
163 />
164 <#if erscheinungsdatum?has_content >
165 <#assign
166 erscheinungsdatumFormatted = FrontendService.date.getDateFormatLong( erscheinungsdatum, languageId )
167 meta = meta + { "date": erscheinungsdatumFormatted }
168 />
169 </#if>
170 </#if>
171
172 <#if verbundJournalArticle?has_content>
173 <#assign
174 verbundJsonString = FrontendService.article.getWebcontent(verbundJournalArticle.resourcePrimKey)
175 verbundJson = FrontendService.json.parseAsJson(verbundJsonString)
176 laufendenummer = getValueForLanguage('laufendenummer', languageId, verbundJson, "first")
177 coverImg = getValueForLanguage('mediumDMTKASDEMEDIUM', languageId, verbundJson, "first")
178 />
179 <@debugJsonString verbundJsonString "ADT_KASDE_DYNAMIC_INTRO-verbundJournalArticle" />
180 <#assign meta = meta + { "laufendenummer": laufendenummer } >
181
182 <#if coverImg?has_content && coverImg.url?has_content >
183 <#assign meta = meta + { "coverImg": coverImg.url } >
184 </#if>
185 </#if>
186
187
188 <#if meta?has_content>
189 <#assign data = data + {"meta": meta } >
190 </#if>
191
192 </#if>
193 <#-- PUBLIKATIONEN DETAIL END -->
194
195
196 <#-- VERANSTALTUNGEN DETAIL -->
197 <#if layouttpl?contains("LAYOUT_KASDE_VERANSTALTUNGEN_DETAIL")>
198 <#assign
199 friendlyUrl = FrontendService.article.getFriendlyUrl(primaryKey, languageId, groupId)!""
200 links = []
201 />
202 <#if availablelanguages?has_content && friendlyUrl?has_content>
203 <#if (availablelanguages?size > 1) >
204 <#list availablelanguages as language>
205 <#assign
206 defaultLanguage = "de_DE"
207 defaultLocale = FrontendService.language.getLocaleByKey(defaultLanguage)
208 linkLocale = (FrontendService.language.getLocaleByKey(language))!defaultLocale
209 langFriendlyUrl = FrontendService.article.getFriendlyUrl(primaryKey, linkLocale, groupId)
210
211 link = {
212 "key": language!defaultLanguage,
213 "value": linkLocale.getDisplayLanguage(languageId),
214 "url": "/c/portal/update_language?p_l_id=" +
215 layout.plid + "&redirect=" + langFriendlyUrl +
216 "&languageId=" + language
217 }
218 />
219 <#if language == languageId>
220 <#assign link = link + { "selected": "true" } >
221 </#if>
222 <#assign links = links + [link]>
223 </#list>
224 <#assign
225 data = data + {
226 "languageSelect": {
227 "id": "languageSelectRedirect",
228 "name": "languageselectRedirect",
229 "entries": links,
230 "label": languageUtil.get(languageId, "diese.veranstaltung.ist.in.weiteren.sprachen.verfuegbar")
231 }
232 }
233 />
234 </#if>
235 </#if>
236 </#if>
237
238 <#if hasContent('erscheinungsdatum', languageId, json)>
239 <#assign
240 startdate = getValueForLanguage('erscheinungsdatum', languageId, json, "first")
241 meta = meta + { "start": startdate?date.iso, "end": "" }
242 />
243 </#if>
244
245 <#if hasContent('startdatum', languageId, json)>
246 <#assign
247 startdate = getValueForLanguage('startdatum', languageId, json, "first")
248 meta = meta + { "start": startdate?date.iso, "end": "" }
249 />
250 </#if>
251
252 <#if hasValue('einfuehrungText', locale, json)>
253 <#assign data = data + { "einfuehrungText" : getValueForLanguage('einfuehrungText', locale, json, "first") } >
254 <#elseif hasValue(FrontendService.article.getFieldNameByReferenceName(primaryKey, 'einfuehrungText'), locale, json, "first")>
255 <#assign data = data + { "einfuehrungText" : getValueForLanguage(FrontendService.article.getFieldNameByReferenceName(primaryKey, 'einfuehrungText'), locale, json, "first") } >
256 </#if>
257
258 <#if hasContent('endedatum', languageId, json)>
259 <#assign
260 enddate = getValueForLanguage('endedatum', languageId, json, "first")
261 meta = meta + { "end": enddate?date.iso }
262 />
263 </#if>
264
265 <#if hasContent('startzeit', languageId, json)>
266 <#assign
267 startzeit = getValueForLanguage('startzeit', languageId, json, "first")
268 />
269 <#if startzeit?has_content >
270 <#assign meta = meta + { "startzeit": startzeit } />
271 </#if>
272 </#if>
273
274 <#if hasContent('endezeit', languageId, json)>
275 <#assign
276 endezeit = getValueForLanguage('endezeit', languageId, json, "first")
277 meta = meta + { "endezeit": endezeit }
278 />
279 </#if>
280
281 <#if hasContent('ortWCSKASDEORT', languageId, json)>
282 <#assign
283 ortWCSKASDEORT = FrontendService.json.parseAsJson(getValueForLanguage('ortWCSKASDEORT', languageId, json, "first"))
284 ortWCSKASDEORTPrimaryKey = ortWCSKASDEORT.classPK?number
285 ortWCSKASDEORTWebContent = FrontendService.article.getWebcontentByPk(ortWCSKASDEORTPrimaryKey)!""
286 />
287 <#if ortWCSKASDEORTWebContent?has_content >
288 <#assign
289 ortWCSKASDEORTTitle = ortWCSKASDEORTWebContent.getTitle(languageId)!""
290 />
291 <#if ortWCSKASDEORTTitle?has_content >
292 <#assign
293 meta = meta + { "ortWCSKASDEORT": ortWCSKASDEORTTitle }
294 />
295 </#if>
296 </#if>
297 </#if>
298
299
300 <#if hasContent('veranstaltungsnummer', languageId, json)>
301 <#assign
302 verauuid = getValueForLanguage('veranstaltungsnummer', languageId, json, "first")
303 meta = meta + { "verauuid": verauuid }
304 />
305 </#if>
306
307
308 <#if (data.meta)?has_content >
309 <#assign meta = data.meta />
310 </#if>
311
312 <#if !(data.media)?has_content && hasContent('mediumDMTKASDEMEDIUM', languageId, json)>
313 <#assign
314 medium = getValueForLanguage('mediumDMTKASDEMEDIUM', languageId, json, "first")
315 mediaData = getRelatedMediaObject(medium, themeDisplay, languageId, FrontendService, "hd-resolution")
316 />
317 <#assign data = data + { "media": mediaData.url , "meta" : mediaData.meta} >
318
319
320 <#if mediaData.meta?? && mediaData.meta.quelle??>
321 <#assign meta = meta + data.meta + { "quelle": mediaData.meta.quelle } />
322 </#if>
323 </#if>
324
325
326 <#if meta?has_content>
327 <#assign data = data + {"meta": meta } >
328 </#if>
329
330 <#-- END fill meta data -->
331
332 <#if hasContentForSequence('autorenWCSKASDEPERSON', languageId, json)>
333 <#assign
334 journalArticles = getValueForLanguageAnsprechpartner('autorenWCSKASDEPERSON', languageId, json)
335 authors = []
336 />
337 <#list journalArticles as articleString>
338 <#assign article = FrontendService.json.parseAsJson(articleString) />
339 <#if article?has_content && article?is_hash && article.classPK??>
340 <#assign articleDereferenced = FrontendService.person.resolveContactInstanceToPerson(article, languageId)!"" />
341 <#if articleDereferenced?has_content >
342 <#assign
343 author = ""
344 articlePrimaryKey = articleDereferenced.classPK?number
345 articleJsonString = FrontendService.article.getWebcontent(articlePrimaryKey)
346 articleJson = FrontendService.json.parseAsJson(articleJsonString)
347 />
348 <@debugJsonString articleJsonString "ADT_KASDE_DYNAMIC_INTRO-autorenWCSKASDEPERSON" />
349 <#if hasValue('anredetitel', languageId, articleJson)>
350 <#assign author = author + getValueForLanguage('anredetitel', languageId, articleJson, " ") + " ">
351 </#if>
352 <#if hasValue('vorname', languageId, articleJson)>
353 <#assign author = author + getValueForLanguage('vorname', languageId, articleJson, " ") + " ">
354 </#if>
355 <#if hasValue('nachname', languageId, articleJson)>
356 <#assign author = author + getValueForLanguage('nachname', languageId, articleJson, " ") + " ">
357 </#if>
358
359 <#attempt>
360 <#assign href = FrontendService.article.getFriendlyUrl(articlePrimaryKey, languageId, groupId)!"#" >
361 <#recover>
362 <#assign href = "#" >
363 </#attempt>
364 <#if href?has_content && href != "#" && href != "/_404">
365 <#assign author = '<a href="' + href + '">' + author?trim + '</a>'>
366 </#if>
367
368 <#assign authors = authors + [author?trim]>
369 </#if>
370 </#if>
371 </#list>
372 <#if authors?has_content>
373 <#assign data = data + { "author": authors?join(", ") } >
374 </#if>
375 </#if>
376
377 <#if layouttpl?contains("LAYOUT_KASDE_VERANSTALTUNGEN_DETAIL") >
378 <#assign categories = FrontendService.category.getCategoriesToArticle(primaryKey, "VERANSTALTUNGSTYP")! >
379 <#if categories?has_content && categories[0]?has_content >
380 <#assign data = data + { "category": categories[0].getTitle(languageId,true)! } >
381 </#if>
382
383 <#if hasContent('ausgebucht', languageId, json)>
384 <#assign data = data + { "ausgebucht" : getValueForLanguage('ausgebucht', languageId, json, "first") }>
385 </#if>
386
387 <#if hasContent('storniert', languageId, json)>
388 <#assign data = data + { "storniert" : getValueForLanguage('storniert', languageId, json, "first") }>
389 </#if>
390
391 <#elseif layouttpl?contains("LAYOUT_KASDE_PUBLIKATIONEN_DETAIL") >
392 <#assign categories = FrontendService.category.getCategoriesToArticle(primaryKey, "PUBLIKATIONSREIHE")! >
393 <#if categories?has_content && categories[0]?has_content >
394 <#assign data = data + { "category": categories[0].getTitle(languageId,true)! } >
395 </#if>
396 <#else>
397 <#assign categories = FrontendService.category.getCategoriesToArticle(primaryKey, "THEMA")! >
398 <#if categories?has_content && categories[0]?has_content >
399 <#assign data = data + { "category": categories[0].getTitle(languageId,true)! } >
400 </#if>
401 </#if>
402
403
404 <#assign
405 languages = []
406 />
407
408 <#attempt>
409 <#if json["document_pdfDMTBASICDOCUMENT"]?? >
410 <#if availablelanguages?has_content>
411 <#list availablelanguages as pdf_language>
412 <#assign
413 docRefJson = getValueForLanguage('document_pdfDMTBASICDOCUMENT', pdf_language, json, "first")
414 docRef = FrontendService.json.parseAsJson(docRefJson)
415 />
416 <#if docRef?is_hash && pdf_language != languageId >
417 <#assign
418 lang = FrontendService.language.getLocaleByKey(pdf_language)!""
419 docGroupId = docRef["groupId"]?number
420 docUuid = docRef["uuid"]
421 dMTJsonObject = FrontendService.media.getDMTJsonObject( docGroupId, docUuid, locale )
422 dMTLink = FrontendService.media.getLinkToDMT( dMTJsonObject )
423 />
424 <#if lang?has_content>
425 <#assign
426 languages = languages + [
427 {
428 "key": pdf_language,
429 "value": FrontendService.language.getLocaleByKey(pdf_language).getDisplayLanguage(),
430 "url": dMTLink
431 }]
432 />
433 </#if>
434 </#if>
435 </#list>
436 </#if>
437 </#if>
438 <#recover>
439 </#attempt>
440
441 <#if (languages?size > 0)>
442 <#attempt>
443 <#assign
444 data = data + { "languageSelect": {
445 "id": "languageSelect",
446 "name": "languageselect",
447 "entries": languages,
448 "documents": "",
449 "button": "true"
450 }}
451 />
452 <#recover>
453 </#attempt>
454 </#if>
455
456 <@PMIntro "ADT_KASDE_DYNAMIC_INTRO" data AMMetadata AMDatetime "bottom" />
457 ${FrontendService.article.getEditArticleHtml(primaryKey, themeDisplay)}
458
459 <#if data.meta?has_content>
460 <#if data.meta.laufendenummer?has_content !isACColorScheme() && !isVLCColorScheme() && !isDPMColorScheme()>
461 <div>
462 <div id="publicationVerbundPagination">
463 <@AMPublicationCarousel data.meta.laufendenummer data.meta.date data.meta.coverImg />
464 </div>
465 </div>
466 </#if>
467 </#if>
468
469<#elseif (editmode?? && editmode)>
470 <@errorMessage languageUtil.get(locale, "kein.journalArticle.gefunden") "ADT_KASDE_DYNAMIC_INTRO" layouttpl currentUrl />
471</#if>
Das HLPF fand 2021 unter der Ägide des Wirtschafts- und Sozialrates der Vereinten Nationen (ECOSOC) statt. Es gilt als die zentrale Plattform der Vereinten Nationen (VN) für die Überprüfung der Agenda 2030 und ihrer 17 Nachhaltigkeitsziele (Sustainable Development Goals, SDGs). Jedes Jahr werden exemplarisch einige dieser SDGs für eine nähere Betrachtung ausgewählt (siehe Graphik). Eine verbesserte Datengrundlage erlaubt es inzwischen, die Entwicklung der SDGs umfassend und global zu messen. Die aktuellen Charts des Statistikbüros des VN geben dabei allerdings für 2021 ein ernüchterndes Bild ab:[1] keines der 17 Ziele ist momentan auf globaler Ebene auf Erfolgskurs, wobei Ziel 3 (Gesundheit), Ziel 7 (Energie) und Ziel 9 (Infrastruktur) noch die beste Bilanz abliefern. Besondere Problemfälle stellen die Ziele 2 (Ernährung), 11 (nachhaltige Städte) und 13 (Klima) dar, die weit abgefallen zurückliegen. Die Lage stellt sich erwartungsgemäß weitaus besser in den Industriestaaten dar, jedoch liegen auch dort rund die Hälfte der SDGs hinter den Erwartungen zurück. Manche von den VN veröffentlichen Zahlen stellen noch die Situation vor der COVID-19-Krise dar, sodass weitere Verschlechterungen zu erwarten sind.
Die Idee der eingangs erwähnten VNRs ist nicht nur, dass Mitgliedsstaaten gegenüber der internationalen Gemeinschaft Rechenschaft ablegen, welche konkreten Maßnahmen sie ergriffen haben, um die SDGs voranzutreiben; sondern es soll auch ein globaler Lernprozess damit angestoßen werden. Deutschland war nach 2016 bereits das zweite Mal vertreten und hatte mit Angela Merkel die vermutlich promineste Rednerin aller VNR-Präsentationen.
"Zukunft sichern, statt zu verbrauchen"
Mit diesem Slogan fasste Bundeskanzlerin Angela Merkel in einer Videobotschaft zusammen, was für sie Nachhaltigkeit im Kern bedeutete. Sie betonte, dass Nachhaltigkeit als politisches Leitprinzip für die Bundesregierung äußerste Priorität genieße, gab aber unumwunden zu, dass Deutschland vor großen Herausforderungen und Schwierigkeiten stünde, die notwendigen Transformationen in allen Lebensbereichen umzusetzen. Wir alle müssten erheblich ehrgeiziger und entschlossener handeln, um die Agenda 2030 noch zu erreichen. Deutschland möchte durch höhere Etappenziele Klimaneutralität bereits 2045 (also fünf Jahre vor dem Ziel des Europäischen Green Deals) erreichen. Diese Anstrengungen würden sich letztlich bezahlt machen. In ihrem Beitrag erwähnte sie auch das historische Urteil des Bundesverfassungsgerichts vom 29. April 2021, das einen stärkeren Klimaschutz im Hinblick auf die Generationengerechtigkeit fordert.
Nach der Botschaft der Kanzlerin erfolgten Einlassungen der parlamentarischen Staatssekretärinnen Maria Flachsbarth (Bundesministerium für wirtschaftliche Zusammenarbeit und Entwicklung) und Rita Schwarzelühr-Sutter (Bundesministerium für Umwelt, Naturschutz und nukleare Sicherheit). Frau Dr. Flachsbarth äußerte, dass die COVID-19-Krise uns lehre, unsere Ambitionen zu vergrößern, statt sie zu verringern. Die Krise müsste als Chance verstanden werden. Auf Bitte des Schweizer Botschafters ging sie nochmal vertieft auf das deutsche Lieferkettengesetz ein, welches einen Beitrag Deutschlands zu einer gerechteren und nachhaltigeren Globalisierung sei. Größere deutsche Unternehmen hätten künftig eine sich auf die gesamte Lieferkette erstreckende Sorgfaltspflicht und eine Verantwortung, die Einhaltung von Menschenrechten und Umweltstandards bei ihren Geschäftspartnern zu prüfen. Frau Schwarzelühr-Sutter merkte an, dass die Hitzewellen und die Flutkatastrophe in Deutschland Weckrufe seien, die Belastungsgrenzen der Erde nicht weiter zu überschreiten. Sie erinnerte auch daran, dass sich das Zeitfenster für eine vergleichsweise kostengünstige Umsetzung von Nachhaltigkeitsmaßnahmen bald schließe. Daher dürfe man diesen politisch günstigen Moment nicht verstreichen lassen.
Erwartungsgemäß kamen von den beiden Vertreterinnen der deutschen Zivilgesellschaft kritischere Töne und Forderungen nach einem ehrgeizigeren Engagement auf nationaler und internationaler Ebene. Die strukturellen Ursachen von Ungleichheit und Rassismus müssten bekämpft, internationale Steuervermeidung begrenzt und universeller Zugang zu Impfstoffen gesichert werden. Deutschland müsse Verantwortung übernehmen für seinen Beitrag zur Klima- und Biodiversitätskrise.
Die Deutsche Nachhaltigkeitsstrategie[2]
Grundlage der deutschen VNR und Leitmotiv der Einlassungen der drei Rednerinnen der Bundesregierung war die 2021 durchgeführte Fortschreibung der Deutschen Nachhaltigkeitsstrategie (DNS), die im März verabschiedet wurde. Tatsächlich stellt auch der schriftliche Bericht, der dieses Jahr für Deutschland beim HLPF eingereicht wurde, im Großen und Ganzen lediglich eine Zusammenfassung der zeitnah entstandenen aktuellen DNS dar.
Die erste Nachhaltigkeitsstrategie Deutschlands wurde 2002 verabschiedet und wurde seitdem mehrfach weiterentwickelt im Sinne eines "lebenden Dokuments." Seit 2015 ist sie vollständig mit den 17 Zielen der Agenda 2030 verknüpft, die jetzt als Grundlage dienen. Für jedes SDG werden dabei Maßnahmen auf drei Wirkungsebenen beschrieben: (i) Maßnahmen mit Wirkungen in Deutschland, (ii) Maßnahmen, die durch Deutschland durchgeführt werden mit weltweiter Wirkung und zuletzt (iii) weltweite Maßnahmen mit deutscher Beteiligung. Ein Novum in der Fortschreibung der DNS von 2021 ist die Einführung von sechs Transformationsbereichen, die nach Ansicht der Bundesregierung von besonderer Relevanz sind, um Fortschritte bei der Umsetzung von Agenda 2030 zu erzielen und die mehrere SDGs betreffen mit besonderer Betonung auf deren Wechselwirkungen (siehe Tabelle). Getreu des Multi-Akteursansatzes fand die Entwicklung der DNS unter breiter Einbindung von Politik, Wissenschaft, Wirtschaft, Gewerkschaften und Verbänden in einem "Gemeinschaftswerk Nachhaltigkeit" statt.
Seit 2017 wurden der DNS sogenannte Schlüsselindikatoren als Steuerinstrumente hinzugefügt, die 2021 nochmals erweitert wurden und nunmehr 75 Indikatoren und Ziele in 31 Bereichen beinhalten. Diese werden im Zweijahresrhythmus vom Bundesamt für Statistik erhoben und veröffentlicht.[3] Die von der Bundesregierung definierten DNS-Schlüsselindikatoren stehen dabei beispielhaft für Themen, die für Deutschland von herausragender Bedeutung sind.[4] Bemerkenswert ist, dass hierdurch die DNS in gewisser Weise objektiv messbar gemacht wurde und sich definitiv davon wegbewegt hat, eine Ansammlung politischer Willensbekundungen zu sein. Ein Problem ist jedoch, dass diese nationalen Indikatoren meist nur für Deutschland erhoben werden und daher der internationale Vergleich fehlen kann. Interessanterweise beschloss die Bundesregierung in ihrer diesjährigen VNR als Gradmesser der SDG-Umsetzung die eigenen, nationalen Indikatoren der DNS für ihre Berichterstattung zu verwenden und nicht die offizielle, normierte Indikatorenmatrix der Agenda 2030.[5] Dies wurde damit begründet, dass die internationalen Indikatoren im deutschen Fall für ein spezifisches nationales Monitoring, aus dem auch politische Handlungserfordernisse abgeleitet werden können, zu generisch erscheinen. Die 231 internationalen SDG-Indikatoren werden freilich vom Bundesamt für Statistik zusätzlich zu den 75 DNS-Indikatoren und weiteren 100 EU-Indikatoren erhoben, was wahrlich eine Mammutaufgabe ist.
Infolge des Feedbacks einer internationalen Peer-Review unter der Leitung der ehemaligen UNDP-Chefin Helen Clark im Jahr 2018 wurde die institutionelle Architektur zur Umsetzung der Deutschen Nachhaltigkeitsstrategie neu gestaltet. Seit 5. Juni 2018 tagt der Staatssekretärausschuss für nachhaltige Entwicklung unter Leitung des Chefs des Bundeskanzleramts, und achtet als zentrales Steuerungsorgan darauf, dass das Leitprinzip Nachhaltigkeit ressortübergreifend Anwendung findet. Die Rolle des fraktionsübergreifenden Parlamentarischen Beirats für nachhaltige Entwicklung (PBnE) mit seinen 17 ordentlichen Mitglieder besteht darin, das Thema Nachhaltigkeit in den Deutschen Bundestag hineinzutragen.[6]
Insgesamt muss man festhalten, dass die DNS über die Jahre inhaltlich stark an Substanz gewonnen hat und sich die Vorstellungen über eine Politik der Nachhaltigkeit stark konkretisiert haben. Besonders hervorzuheben sind die enormen Fortschritte in der Ausarbeitung von statistischen Kennzahlen und deren systematische Erhebung, um Erfolge und Rückschläge bei den SDGs künftig messbar zu machen. Dies ist auch in der diesjährigen VNR im Vergleich mit der Präsentation von 2016 erkennbar, wo es noch eine dürftige Datengrundlage und keine Angaben zu institutionellen und prozeduralen Aspekten von Nachhaltigkeitspolitik gab. Auch konnten laut Indikatorenbericht 2021 des Bundesamtes für Statistik gegenüber 2015 bei vielen Kennzahlen deutliche Fortschritte erzielt werden, beispielsweise bei der Erhaltung und nachhaltigen Nutzung der biologischen Vielfalt und bei den Bruttoentwicklungsausgaben für medizinische Forschung und grundlegende Gesundheitsversorgung.[7]
Freiwillige Staatenberichte im Vergleich
Neben Deutschland präsentierten 41 weitere Staaten freiwillige Berichte. Die drei skandinavischen Länder Schweden, Dänemark und Norwegen traten mit besonders starken VNRs an und führten aus, wie ihre SDGs Eingang in alle nationalen Strategiedokumente gefunden haben. Alle drei Staaten (wie auch Japan) nutzten in den VNRs im Gegensatz zu Deutschland die offiziellen internationalen Indikatoren der Agenda 2030. Dänemark und Norwegen standen zudem in einem engen Kontakt im Rahmen eines "Peer-Dialogs," der gedacht war, sich wechselseitig Feedback zu erteilen. Beide Länder verfolgen einen ähnlichen Ansatz in ihren VNRs und stellen für jedes einzelne der 17 Ziele der Agenda 2030 der Beurteilung der Regierung zum Stand der Umsetzung eine unabhängige Beurteilung der Zivilgesellschaft gegenüber, die erwartungsgemäß pessimistischer ausfällt.
In den mündlichen Einlassungen zeigte sich vor allem Dänemark selbstkritisch am eigenen Konsummuster und -verhalten und sah sich mit unangenehmen Fragen von Vertretern der Zivilgesellschaft konfrontiert. Dänemarks Regierung war besonders darauf stolz, wie engagiert das dänische Parlament in Sachen Agenda 2030 sei. Einem parteiübergreifenden parlamentarischen Netzwerk für die SDGs (wohl das Pendant zum deutschen PBnE) gehörten demnach 74 der 179 Abgeordneten an. Auch würden alle Gesetzesvorschläge nunmehr auf ihre Nachhaltigkeit überprüft, wie es auch in Deutschland gemäß §44 der Gemeinsamen Geschäftsordnung der Bundesministerien ebenfalls vorgesehen ist. Norwegen stellte die besondere Rolle von Innovationen und des Privatsektors, inklusive Start-ups, sowie die Mobilisierung der Jugend für die SDGs in den Vordergrund. Schweden misst dem Multi-Akteursansatz besondere Bedeutung zu. In keiner anderen VNR waren mehr Akteure aus allen Teilen der Gesellschaft zu Wort gekommen. Auf europäischer Seite nutzte Spanien vor allem die Gelegenheit, im Rahmen des HLPF seine Frontline Workers zu ehren.
Keine selbstkritischen Töne waren in der chinesischen VNR zu hören. Die Regierung nutzte den Anlass, um die Erfolge der Kommunistischen Partei anlässlich ihres 100-jährigen Bestehens zu zelebrieren. Die Neue Seidenstraße wurde dabei als monumentaler Beitrag zur Agenda 2030 gefeiert.
Wie jedes Jahr gab es auch 2021 eine Reihe der sogenannten Voluntary Local Reviews (VLRs), die sub-staatlichen Akteuren die Möglichkeit einräumen, ihre lokalen Maßnahmen und Strategien zur Umsetzung der Agenda 2030 vorzustellen. Dieses Mal waren unter anderem die Städte Tokyo, Stockholm und Helsinki vertreten. In der Vergangenheit haben aus Deutschland die Städte Bonn (2020), Stuttgart (2020), Mannheim (2019) und das Land Nordrhein-Westfalen in New York präsentiert; und es bleibt zu hoffen, dass sich künftig weitere deutsche lokale Akteure hierfür finden.
Ausblick HLPF 2022
Aufgrund von Reisebeschränkungen fanden Veranstaltungen im Rahmen des HLPF meist in einer Art Hybridformat statt; die VNRs waren rein virtuell. Die Situation stellte die Veranstalter vor technische Herausforderungen und die Hoffnung war groß, dass man 2022 zu einem traditionellen Treffen vor Ort zurückkehren können wird.
Es ist auch bedauerlich, dass die Vereinigten Staaten bislang bei den VNRs nicht vertreten waren, jedoch gaben in der Vergangenheit einige Städte wie New York VLRs ab. Die Hoffnung ist, dass sich die neue US-Regierung bald an diesem multilateralen Prozess beteiligen möchte.
Anlässlich des HLPFs werden regelmäßig auch diejenigen Stimmen lauter, welche die Schwächen des Forums und des VNR-Mechanismus anprangern und grundlegende Reformen fordern, beispielsweise die Gründung eines UN-Nachhaltigkeitsrates. Der HLPF Review, ein Reformprozess der Mitgliedstaaten, nahm in der Tat einige der Kritikpunkte auf, ohne jedoch den "großen Wurf" liefern zu wollen. Ab 2022 werden somit eine Reihe von kleineren Veränderungen im HLPF eintreten. Beispielsweise möchte man die Schnittstelle zwischen den debattierten Umsetzungsstrategien und der Wissenschaft stärken und die Wechselwirkungen der SDGs untereinander genauer beleuchten. Als Reaktion darauf, dass VNRs von vielen Ländern als reine Public Diplomacy Maßnahme angesehen werden und weit entfernt sind von einer ernsthaften Auseinandersetzung mit den Problemen der SDG Umsetzung, haben sich die Mitgliedsstaaten selbst verpflichtet, künftig auch ihre Herausforderungen in den Vordergrund zu rücken und mehr Mittel zur Umsetzung zu mobilisieren.
Den Länderbericht inklusive Grafiken finden Sie hier als PDF.
[1] Sustainable Development Goals Progress Chart 2021, Statistics Division, Department of Economic and Social Affairs, United Nations (https://unstats.un.org/sdgs/report/2021/progress-chart-2021.pdf).
[2] Eine ausführliche Analyse und Bewertung der DNS finden sie im KAS Monitor Nachhaltigkeit Nr. 1 vom März 2021 (verfasst von Sabina Wölkner und Gisela Elsner) (https://www.kas.de/documents/252038/11055681/Monitor+Nachhaltigkeit%2C+1-2021%2C+Deutsche+Nachhaltigkeitsstrategie+2021.pdf/919b1e59-8aca-e17c-2d04-347c89b59498?version=1.0&t=1617110029188)
[3] Beispiel für einen DNS-Schlüsselindikator für SDG 1 ist "materielle Deprivation" sowie "erhebliche materielle Deprivation," wobei mit dem Phänomen der Mangel an bestimmten Gebrauchsgütern und der unfreiwillige Verzicht auf ausgewählte Konsumgüter aus finanziellen Gründen beschrieben wird.
[4] Deutsche Nachhaltigkeitsstrategie, Weiterentwicklung 2021, herausgegeben von der Bundesregierung Deutschlands, Seite 93. (https://www.bundesregierung.de/resource/blob/998006/1873516/3d3b15cd92d0261e7a0bcdc8f43b7839/2021-03-10-dns-2021-finale-langfassung-nicht-barrierefrei-data.pdf?download=1)
[5] Beispiel für einen offiziellen SDG-Indikator für SDG 1 ist "Anteil der Bevölkerung, der unter der internationalen Armutsgrenze lebt."
[6] Deutsche Nachhaltigkeitsstrategie, Weiterentwicklung 2021, Seite 85
[7] Nachhaltige Entwicklung in Deutschland, Indikatorenbericht 2021, Statistisches Bundesamt (Destatis), März 2021
(https://nachhaltige-entwicklung-deutschland.github.io/open-sdg-site-starter/assets/publications/reports/de/2021.pdf)