Spatial Planning and Connectivity Corpus - Technical Background Report

IPBES Spatial Planning and Connectivity Assessment

Authors

Rainer M. Krug

Gabriella Bishop

Sebastian Villasante

Doi
Abstract

To Be added

Version GitHub License: CC BY 4.0

Version Build

Disclaimer

LLM Usage Disclosure

Code and charts in this project have been generated with the assistance of the codex LLM tools in Positron. All content and code is based on conceptuaisation by the authors and has been thoroughly reviewed and edited by humans afterwards.

Contributors

Assessment Experts

  • xxx, yyy ORCID

Data and Knowledge tsu

Working Title

IPBES_SPC_Corpus

Code repo

Github repository

Introduction

The literature search for the Spatial Planning and Connectivity assessment corpus was conducted using search terms provided by the experts and refined in co-operation with the IPBES task force for data and knowledge management. The search was conducted using OpenAlex, scripted from R to use the OpenAlex API. Search terms for the following searches were defined:

  • Spatial Planning and Connectivity,
  • Nature / Environment
  • additional search terms for specific corpora

To assess the quality of the corpus, sets of key papers were selected by the experts to verify if these are in the corpus.

The following terminology is used in this document:

  • Corpus: A body of works as based on a search on OpenAlex
  • Spatial Planning and Connectivity Assessment Corpus: Short: SPC corpus; The corpus resulting from the search terms TO BE ADDED
  • work: terminology used for a single document in their dataset. Each work has a unique OpenAlex id, but not necessarily a DOI.

The following searches are conducted on Title and Abstract only to account for fluctuating availability of full text searches and make the search more focussed..

Schematic Overview

This is a schematic overview of the search strategy. It is shown again in the Results section with the numbers of resulting hits. ### Overview

%%{init: {'flowchart': {'htmlLabels': true}}}%%
flowchart TD
    Start([Start literature search]) --> SPC["<u><span style='color:#1a0dab;'>spc_corpus.yaml<br/>Assemble base SPC corpus</span></u>"]
    click SPC "./input/search_terms/spc_corpus.yaml" "Open spc_corpus.yaml"
    SPC --> SPC_list["spc keyword set<br/>(planning & connectivity terms)<br/>(n = <<SPC_LIST>>)"
]
    SPC --> NATURE_list["nature keyword set<br/>(environmental context terms)<br/>(n = <<NATURE_LIST>>)"
]
    SPC_list --> BaseQuery["Level 1 query<br/>spc terms AND nature dictionary<br/>(n = <<BASE_QUERY>>)"
]
    NATURE_list --> BaseQuery

    BaseQuery --> ChapterSelect{Apply chapter / theme refinements}

    ChapterSelect --> CH1["<u><span style='color:#1a0dab;'>Chapter 1<br/>chapter_1.yaml<br/>Governance & planning principles</span></u>"]
    click CH1 "./input/search_terms/chapter_1.yaml" "Open chapter_1.yaml"
    ChapterSelect --> CH2["<u><span style='color:#1a0dab;'>Chapter 2<br/>chapter_2.yaml<br/>GBF targets, nexus themes, SDGs</span></u>"]
    click CH2 "./input/search_terms/chapter_2.yaml" "Open chapter_2.yaml"
    ChapterSelect --> CH3["<u><span style='color:#1a0dab;'>Chapter 3<br/>chapter_3.yaml<br/>Restoration & conservation planning</span></u>"]
    click CH3 "./input/search_terms/chapter_3.yaml" "Open chapter_3.yaml"
    ChapterSelect --> CH4["<u><span style='color:#1a0dab;'>Chapter 4<br/>chapter_4.yaml<br/>Connectivity evidence & metrics</span></u>"]
    click CH4 "./input/search_terms/chapter_4.yaml" "Open chapter_4.yaml"
    ChapterSelect --> CH5["<u><span style='color:#1a0dab;'>Chapter 5<br/>chapter_5.yaml<br/>Foresight & futures (sections, themes, cross-cutting)</span></u>"]
    click CH5 "./input/search_terms/Chapter_5_1_2.yaml" "Open Chapter 5 search terms"
    ChapterSelect --> CH6["<u><span style='color:#1a0dab;'>Chapter 6<br/>chapter_6.yaml (+ chapter_6_r2.yaml optional)<br/>Enabling environment</span></u>"]
    click CH6 "./input/search_terms/chapter_6.yaml" "Open chapter_6.yaml"

Chapter 1

%%{init: {'flowchart': {'htmlLabels': true}}}%%
flowchart LR
    Start([SPC Corpus]) --> Ch1["<u><span style='color:#1a0dab;'>chapter_1.yaml<br/>Level 2 refinements</span></u>"]
    click Ch1 "./input/search_terms/chapter_1.yaml" "Open chapter_1.yaml"

    subgraph Chapter1Sets["Chapter 1 thematic searches"]
        direction TB
        C1_1["Set 1:<br/>land/spatial planning<br/>+ biodiversity goals<br/>+ societal needs/values<br/>(n = <<C1_1>>)"]
        C1_2["Set 2:<br/>adaptive/scenario planning<br/>+ monitoring/feedback<br/>(n = <<C1_2>>)"]
        C1_3["Set 3:<br/>evidence & precaution<br/>+ ILK knowledge base<br/>(n = <<C1_3>>)"]
        C1_4["Set 4:<br/>multilevel/transparent governance<br/>+ customary coherence<br/>(n = <<C1_4>>)"]
        C1_5["Set 5:<br/>participatory planning<br/>+ co-design / engagement<br/>(n = <<C1_5>>)"]
        C1_6["Set 6:<br/>equity / rights / tenure<br/>+ justice outcomes<br/>(n = <<C1_6>>)"]
        C1_7["Set 7:<br/>connectivity (land-sea/cross-scale)<br/>+ nexus & climate links<br/>(n = <<C1_7>>)"]
    end

    Ch1 --> C1_1
    Ch1 --> C1_2
    Ch1 --> C1_3
    Ch1 --> C1_4
    Ch1 --> C1_5
    Ch1 --> C1_6
    Ch1 --> C1_7

Search Terms

Click chapter_1.yaml to download

Show the code
params$search_terms$chapter_1 |>
  yaml::as.yaml() |>
  cat()
Set 1:
- ("land use planning" OR "spatial planning") AND
- ("biodiversity goals" OR "ecosystem services") AND
- ("societal needs" OR "value-based planning")
Set 2:
- ("adaptive planning" OR "scenario planning" OR "transformative pathways") AND
- ("monitoring" OR "feedback mechanisms")
Set 3:
- ("evidence-based planning" OR "precautionary principle") AND
- ("Indigenous knowledge" OR "local knowledge" OR "ILK")
Set 4:
- ("multi-level governance" OR "transparent governance" OR "accountable planning")
  AND
- ("customary governance" OR "policy coherence")
Set 5:
- ("participatory planning" OR "community engagement") AND
- ("co-design" OR "stakeholder participation")
Set 6:
- ("equity" OR "rights-based approaches" OR "land tenure") AND
- ("indigenous rights" OR "fairness" OR "just outcomes")
Set 7:
- ("ecological connectivity" OR "land-sea connectivity" OR "cross-scale planning")
  AND
- ("nexus interdependencies" OR "climate-biodiversity linkages")

Chapter 2

%%{init: {'flowchart': {'htmlLabels': true}}}%%
flowchart LR
    Start([SPC Corpus]) --> Ch2L2["<u><span style='color:#1a0dab;'>chapter_2.yaml<br/>Level 2 GBF bundles</span></u>"]
    click Ch2L2 "../search_terms/chapter_2.yaml" "Open chapter_2.yaml"

    subgraph L1_GBF["GBF contexts & targets"]
        direction TB
        GBF_Urban["GBF-1 Urban<br/>(n = <<GBF_Urban>>)"]
        GBF_Rural["GBF-1 Rural<br/>(n = <<GBF_Rural>>)"]
        GBF_Fresh["GBF-1 Freshwater<br/>(n = <<GBF_Fresh>>)"]
        GBF_Marine["GBF-1 Marine<br/>(n = <<GBF_Marine>>)"]
        GBF_Restore["GBF-2 Ecosystem restoration<br/>(n = <<GBF_Restore>>)"]
    end
    Ch2L2 --> GBF_Urban
    Ch2L2 --> GBF_Rural
    Ch2L2 --> GBF_Fresh
    Ch2L2 --> GBF_Marine
    Ch2L2 --> GBF_Restore

    subgraph L1_TARGET["GBF contexts & targets"]
        T3["Target 3<br/>(n = <<T3>>)"]
        T4["Target 4<br/>(n = <<T4>>)"]
        T5["Target 5<br/>(n = <<T5>>)"]
        T6["Target 6<br/>(n = <<T6>>)"]
        T7["Target 7<br/>(n = <<T7>>)"]
        T8["Target 8<br/>(n = <<T8>>)"]
        T9["Target 9<br/>(n = <<T9>>)"]
        T10["Target 10<br/>(n = <<T10>>)"]
        T11["Target 11<br/>(n = <<T11>>)"]
        T12["Target 12<br/>(n = <<T12>>)"]
        T13["Target 13<br/>(n = <<T13>>)"]
        T14["Target 14<br/>(n = <<T14>>)"]
        T15["Target 15<br/>(n = <<T15>>)"]
        T16["Target 16<br/>(n = <<T16>>)"]
        T17["Target 17<br/>(n = <<T17>>)"]
        T18["Target 18<br/>(n = <<T18>>)"]
        T19["Target 19<br/>(n = <<T19>>)"]
        T20["Target 20<br/>(n = <<T20>>)"]
        T21["Target 21<br/>(n = <<T21>>)"]
        T22["Target 22<br/>(n = <<T22>>)"]
        T23["Target 23<br/>(n = <<T23>>)"]
    end
    Ch2L2 --> T3
    Ch2L2 --> T4
    Ch2L2 --> T5
    Ch2L2 --> T6
    Ch2L2 --> T7
    Ch2L2 --> T8
    Ch2L2 --> T9
    Ch2L2 --> T10
    Ch2L2 --> T11
    Ch2L2 --> T12
    Ch2L2 --> T13
    Ch2L2 --> T14
    Ch2L2 --> T15
    Ch2L2 --> T16
    Ch2L2 --> T17
    Ch2L2 --> T18
    Ch2L2 --> T19
    Ch2L2 --> T20
    Ch2L2 --> T21
    Ch2L2 --> T22
    Ch2L2 --> T23

    subgraph L1_REL["Spatial Planning Related"]
        REL["Spatial Planning Related<br/>(n = <<REL>>)"]
    end
    Ch2L2 --> REL

    subgraph L1_NexusSets["Nexus"]
        direction TB
        Nexus_Water["Water<br/>(n = <<Nexus_Water>>)"]
        Nexus_Food["Food<br/>(n = <<Nexus_Food>>)"]
        Nexus_Health["Health<br/>(n = <<Nexus_Health>>)"]
        Nexus_Climate["Climate<br/>(n = <<Nexus_Climate>>)"]
    end
    Ch2L2 --> Nexus_Water
    Ch2L2 --> Nexus_Food
    Ch2L2 --> Nexus_Health
    Ch2L2 --> Nexus_Climate

    L1_GBF --> Ch2L4["<u><span style='color:#1a0dab;'>chapter_2_sdg.yaml<br/>Level 4 SDG filters</span></u>"]
    L1_NexusSets --> Ch2L4
    L1_REL --> Ch2L4
    click Ch2L4 "../search_terms/chapter_2_sdg.yaml" "Open chapter_2_sdg.yaml"
    subgraph SDGSets["SDG goal filters"]
        direction TB
        SDG1["SDG 1"]
        SDG2["SDG 2"]
        SDG3["SDG 3"]
        SDG4["SDG 4"]
        SDG5["SDG 5"]
        SDG6["SDG 6"]
        SDG7["SDG 7"]
        SDG8["SDG 8"]
        SDG9["SDG 9"]
        SDG10["SDG 10"]
        SDG11["SDG 11"]
        SDG12["SDG 12"]
        SDG13["SDG 13"]
        SDG14["SDG 14"]
        SDG15["SDG 15"]
        SDG16["SDG 16"]
        SDG17["SDG 17"]
    end
    Ch2L4 --> SDG1
    Ch2L4 --> SDG2
    Ch2L4 --> SDG3
    Ch2L4 --> SDG4
    Ch2L4 --> SDG5
    Ch2L4 --> SDG6
    Ch2L4 --> SDG7
    Ch2L4 --> SDG8
    Ch2L4 --> SDG9
    Ch2L4 --> SDG10
    Ch2L4 --> SDG11
    Ch2L4 --> SDG12
    Ch2L4 --> SDG13
    Ch2L4 --> SDG14
    Ch2L4 --> SDG15
    Ch2L4 --> SDG16
    Ch2L4 --> SDG17

Search Terms

Click chapter_2.yaml to download

Show the code
params$search_terms$chapter_2 |>
  yaml::as.yaml() |>
  cat()
GBF:
  GBF-1 - Urban:
  - '"urban" OR'
  - '"city" OR'
  - '"periurban" OR'
  - '"metropolis"'
  GBF-1 - Rural:
  - '"rural" OR'
  - '"agriculture" OR'
  - '"forest" OR'
  - '"mountain"'
  GBF-1 - Freshwater:
  - '"freshwater" OR'
  - '"lake" OR'
  - '"stream" OR'
  - '"current" OR'
  - '"river" OR'
  - '"wetland" OR'
  - '"watershed" OR'
  - '"groundwater" OR'
  - '"aquifer" OR'
  - '"lagoon" OR'
  - '"peatland"'
  GBF-1 - Marine:
  - '"sea" OR'
  - '"marine" OR'
  - '"ocean" OR'
  - '"coast" OR'
  - '"mangrove" OR'
  - '"seagrass" OR'
  - '"saltwater" OR'
  - '"brackish water" OR'
  - '"tidal flats" OR'
  - '"intertidal zone" OR'
  - '"subtidal"'
  GBF - 2 (Ecosystem restoration):
  - '"restoration" OR'
  - '"degradation" OR'
  - '"regeneration" OR'
  - '"ecosystem rehabilitation" OR'
  - '"environmental rehabilitation" OR'
  - '"rewilding" OR'
  - '"abandonment" OR'
  - '"let nature do the job" OR'
  - '"renaturalization" OR'
  - '"reclamation" OR'
  - '"conservation" OR'
  - '"protection"'
Targets:
  Target 3 (Protected areas / conservation coverage):
  - '"protected areas" OR'
  - '"conservation" OR'
  - '"connectivity" OR'
  - '"biodiversity hot spots" OR'
  - '"OECMs"'
  Target 4 (Species extinction & genetic diversity):
  - '"extinction" OR'
  - '"human-wildlife conflict" OR'
  - '"genetic diversity" OR'
  - '"Red List of Threated Species" OR'
  - '"Red List of Ecosystems" OR'
  - '"RLE"'
  Target 5 (Wild species trade & use):
  - '"Wildlife trade" OR'
  - '"harvesting" OR'
  - '"overexploitation" OR'
  - '"poaching" OR'
  - '"CITES"'
  Target 6 (Invasive alien species):
  - '"invasive species" OR'
  - '"alien species" OR'
  - '"IAS"'
  Target 7 (Pollution):
  - '"pollution" OR'
  - '"nutrient runoff" OR'
  - '"excess nutrients" OR'
  - '"pesticide" OR'
  - '"plastic" OR'
  - '"PFAS" OR'
  - '"forever chemicals" OR'
  - '"contamination" OR'
  - '"eutrophication" OR'
  - '"industrial liquid waste" OR'
  - '"solid waste" OR'
  - '"waste" OR'
  - '"saline intrusion"'
  Target 8 (Climate change & resilience):
  - '"climate change" OR'
  - '"resilience" OR'
  - '"nature-based solutions" OR'
  - '"ocean acidification"'
  Target 9 (Wild species management & use):
  - '"wild species management" OR'
  - '"sustainable use of wild species" OR'
  - '"indigenous people" OR'
  - '"IPLC" OR'
  - '"community-based management"'
  Target 10 (Sustainability in agriculture, aquaculture, forestry & fisheries):
  - '"agriculture" OR'
  - '"agroecology" OR'
  - '"forestry" OR'
  - '"fisheries aquaculture" OR'
  - '"land use management" OR'
  - '"water use management" OR'
  - '"recreational fisheries"'
  Target 11 (Nature’s contributions to people / ecosystem services):
  - '"ecosystem services" OR'
  - '"nature’s contributions to people" OR'
  - '"NCP" OR'
  - '"people’s contributions to nature"'
  Target 12 (Green & blue spaces, urban planning):
  - '"green space" OR'
  - '"blue space" OR'
  - '"urban planning" OR'
  - '"green infrastructure" OR'
  - '"blue infrastructure" OR'
  - '"green areas"'
  Target 13 (Genetic resources & benefit sharing):
  - '"genetic resources" OR'
  - '"benefit sharing" OR'
  - '"ILK" OR'
  - '"traditional knowledge" OR'
  - '"Nagoya protocol"'
  Target 14 (Biodiversity integration in decision-making):
  - '"biodiversity policy" OR'
  - '"environmental impact assessment" OR'
  - '"EIA" OR'
  - '"strategic environmental assessment" OR'
  - '"SEA" OR'
  - '"biodiversity valuation" OR'
  - '"biodiversity action"'
  Target 15 (Business & financial institutions disclosure & risk):
  - '"company" OR'
  - '"corporate responsibility" OR'
  - '"business" OR'
  - '"supply chain" OR'
  - '"corporate biodiversity reporting" OR'
  - '"social responsibility" OR'
  - '"investment"'
  Target 16 (Sustainable consumption):
  - '"sustainable consumption" OR'
  - '"waste" OR'
  - '"footprint"'
  Target 17 (Biosafety):
  - '"biosafety" OR'
  - '"biotechnology" OR'
  - '"GMO" OR'
  - '"genetically modified organisms"'
  Target 18 (Harmful incentives / subsidies):
  - '"subsidies" OR'
  - '"incentives" OR'
  - '"PES" OR'
  - '"payments for ecosystem services"'
  Target 19 (Finance mobilisation):
  - '"finance mobilization" OR'
  - '"funding" OR'
  - '"private sector" OR'
  - '"biodiversity investments"'
  Target 20 (Capacity building, technology & cooperation):
  - '"capacity building" OR'
  - '"education" OR'
  - '"technology" OR'
  - '"cooperation" OR'
  - '"innovation"'
  Target 21 (Data, knowledge & monitoring):
  - '"data governance" OR'
  - '"monitoring" OR'
  - '"research" OR'
  - '"evaluation"'
  Target 22 (Participation & inclusion):
  - '"indigenous peoples" OR'
  - '"ILK" OR'
  - '"local communities" OR'
  - '"youth" OR'
  - '"participatory governance" OR'
  - '"minority" OR'
  - '"procedural justice" OR'
  - '"non-human" OR'
  - '"women" OR'
  - '"girls" OR'
  - '"rights" OR'
  - '"defender" OR'
  - '"activist" OR'
  - '"guardian"'
  Target 23 (Gender equality):
  - '"gender" OR'
  - '"women" OR'
  - '"woman" OR'
  - '"girls"'
Related to spatial planning process:
  Set Related:
  - '"planning phases" OR'
  - '"planning stages" OR'
  - '"planning steps" OR'
  - '"planning cycle" OR'
  - '"policy formulation" OR'
  - '"decision-making" OR'
  - '"local planning practices of indigenous people" OR'
  - '"traditional practices of indigenous people" OR'
  - '"planning guidelines"'
Nexus:
  Water:
  - '"Water" OR'
  - '"Hydrological" OR'
  - '"Catchment" OR'
  - '"blue infrastructure"'
  Food:
  - '"food" OR'
  - '"agriculture" OR'
  - '"nutrition" OR'
  - '"malnutrition" OR'
  - '"hunger" OR'
  - '"farm"'
  Health:
  - '"health" OR'
  - '"healthy" OR'
  - '"mortality" OR'
  - '"diseases" OR'
  - '"pandemics" OR'
  - '"well-being" OR'
  - '"wellbeing"'
  Climate:
  - '"Climate" OR'
  - '"energy" OR'
  - '"emission" OR'
  - '"GHG" OR'
  - '"greenhouse gas" OR'
  - '"flood" OR'
  - '"drought"'

Non implemented additional searches are:

Chapter 3

%%{init: {'flowchart': {'htmlLabels': true}}}%%
flowchart LR
    Start([SPC Corpus]) --> Ch3["<u><span style='color:#1a0dab;'>chapter_3.yaml<br/>Level 2 refinements</span></u>"]
    click Ch3 "./input/search_terms/chapter_3.yaml" "Open chapter_3.yaml"

    subgraph Chapter3Sets["Chapter 3 searches"]
        direction TB
        C3_1["Set 1:<br/>Protected/OECM + NBSAP + cases<br/>+ spatial prioritization + regional scales<br/>(n = <<C3_1>>)"]
        C3_2["Set 2:<br/>Restoration types + inclusivity & ILK<br/>(n = <<C3_2>>)"]
        C3_3["Set 3:<br/>Restoration planning + connectivity + resilience<br/>(n = <<C3_3>>)"]
        C3_4["Set 4:<br/>Systematic conservation planning / gap analysis<br/>(n = <<C3_4>>)"]
        C3_5["Set 5:<br/>Protected area & connectivity planning<br/>(n = <<C3_5>>)"]
        C3_6["Set 6:<br/>Landscape/species/corridor networks<br/>(n = <<C3_6>>)"]
        C3_7["Set 7:<br/>Conservation planning + ecosystem services<br/>(n = <<C3_7>>)"]
        C3_8["Set 8:<br/>Participatory conservation mapping<br/>(n = <<C3_8>>)"]
        C3_9["Set 9:<br/>Conservation effectiveness + spatial planning<br/>(n = <<C3_9>>)"]
        C3_10["Set 10:<br/>Adaptive management under global change drivers<br/>(n = <<C3_10>>)"]
    end
    Ch3 --> C3_1
    Ch3 --> C3_2
    Ch3 --> C3_3
    Ch3 --> C3_4
    Ch3 --> C3_5
    Ch3 --> C3_6
    Ch3 --> C3_7
    Ch3 --> C3_8
    Ch3 --> C3_9
    Ch3 --> C3_10

Search Terms

Click chapter_3.yaml to download

Show the code
params$search_terms$chapter_3 |>
  yaml::as.yaml() |>
  cat()
Set 1:
- (((protected OR conserved) AND areas) OR "other effective area-based conservation
  measures" OR "indigenous and traditional territories") AND
- ((national AND ("Biodiversity Strategy" OR target)) OR "downscaling") AND
- ("case study" OR "best practice" OR "planning" OR "spatial prioritization") AND
- ("regional" OR "national" OR "subnational" OR "mountain" OR "marine" OR (Indigenous
  AND ("land" OR "protected areas")) OR transboundary)
Set 2:
- '"restoration" AND'
- ("inclusivity" OR "participation" OR "co-management" OR "Indigenous knowledge" OR
  "traditional ecological knowledge" OR "ILK" OR "local knowledge" OR "community-based
  restoration" OR "stakeholder engagement" OR "social equity" OR "justice" OR "gender
  inclusion")
Set 3:
- ("restoration planning" OR "ecological restoration") AND
- ("ecosystem integrity" OR "ecological connectivity" OR "corridors" OR "migration
  pathways" OR "climate resilience" OR "participatory approaches")
Set 4: ("spatial conservation planning" OR "landscape conservation planning" OR "conservation
  gap analysis" OR "systematic conservation planning" OR "ecoregion conservation"
  OR "transboundary conservation planning")
Set 5: ("protected area planning" OR "protected area connectivity planning" OR "conservation
  priority areas" OR "marine protected area planning")
Set 6: ("landscape connectivity and conservation" OR "species connectivity" OR "planning
  conservation network" OR "ecological connectivity planning" OR "conservation corridor
  planning" OR "network conservation planning" OR "marine conservation planning" OR
  "seascape conservation planning" OR "wetland conservation planning")
Set 7: ("conservation planning" AND "ecosystem services")
Set 8: ("participatory conservation mapping" OR "community conservation mapping" OR
  "participatory spatial planning")
Set 9:
- ("conservation effectiveness" OR "protected area management effectiveness") AND
- '"spatial planning"'
Set 10:
- '"adaptive management" AND'
- ("global change" OR "climate change" OR "land use change" OR "sea use change" OR
  "invasive species" OR "overexploitation" OR "pollution") AND
- '"spatial planning"'

Chapter 4

%%{init: {'flowchart': {'htmlLabels': true}}}%%
flowchart LR
    Start([SPC Corpus]) --> Ch4["<u><span style='color:#1a0dab;'>chapter_4.yaml<br/>Level 2 refinements</span></u>"]
    click Ch4 "./input/search_terms/chapter_4.yaml" "Open chapter_4.yaml"

    subgraph Chapter4Sets["Chapter 4 searches"]
        direction TB
        C4_1["Set 1:<br/>Connectivity review articles<br/>(n = <<C4_1>>)"]
        C4_2["Set 2:<br/>Connectivity benefits vs risks<br/>+ ecosystem services<br/>(n = <<C4_2>>)"]
        C4_3["Set 3:<br/>Structural vs functional connectivity<br/>(n = <<C4_3>>)"]
        C4_4["Set 4:<br/>Connectivity modelling toolkits<br/>(n = <<C4_4>>)"]
        C4_5["Set 5:<br/>Connectivity indicators & metrics<br/>(n = <<C4_5>>)"]
        C4_6["Set 6:<br/>Policy & governance integration<br/>(n = <<C4_6>>)"]
        C4_7["Set 7:<br/>Multilevel / transboundary governance<br/>+ IPLC inclusion + land tenure<br/>(n = <<C4_7>>)"]
        C4_8["Set 8:<br/>Movement ecology<br/>(dispersal / migration / permeability)<br/>(n = <<C4_8>>)"]
    end
    Ch4 --> C4_1
    Ch4 --> C4_2
    Ch4 --> C4_3
    Ch4 --> C4_4
    Ch4 --> C4_5
    Ch4 --> C4_6
    Ch4 --> C4_7
    Ch4 --> C4_8

Search Terms

Click chapter_4.yaml to download

Show the code
params$search_terms$chapter_4 |>
  yaml::as.yaml() |>
  cat()
Set 1: '"ecological connectivity"'
Set 2: ("ecological connectivity" OR "habitat connectivity" OR "landscape connectivity"
  OR "wildlife corridor" OR "biological corridor") AND ("benefits" OR "advantages"
  OR "positive" OR "impacts" OR "opportunities") AND ("risks" OR "drawbacks" OR "negative"
  OR "impacts" OR "challenges") AND ("ecosystem services" OR "ecosystem management")
Set 3:
- '"structural connectivity" OR'
- '"functional connectivity"'
Set 4:
- '"connectivity analysis" OR'
- '"network analysis" OR'
- '"circuit theory" OR'
- '"least-cost path" OR'
- '"graph theory" OR'
- '"resistant kernels" OR'
- '"agent-based models" OR'
- '"Conefor" OR'
- '"pattern-oriented model" OR'
- '"state-space model" OR'
- '"corridor model" OR'
- '"simulated individual" OR'
- '"movement paths" OR'
- '"hidden Markov models" OR'
- '"effective connectivity" OR'
- '"gene flow"'
Set 5: '"ecological connectivity" AND ("indicator" OR "index" OR "metric*" OR "objective")'
Set 6:
- ("ecological connectivity" OR "landscape connectivity" OR "functional connectivity"
  OR "connectivity conservation") AND
- ("policy" OR "framework" OR "governance" OR "planning instrument" OR "initiative"
  OR "agreement" OR "global" OR "international" OR "regional strategy" OR "transboundary
  cooperation" OR "joint management" OR "cross-border conservation" OR "bioregional
  planning")
Set 7:
- ("ecological connectivity" OR "spatial governance") AND
- ("multi-level governance" OR "cross-scale governance" OR "transboundary governance")
  AND
- ("inclusive governance" OR "community-based management" OR "co-management") AND
- ("Indigenous Peoples" OR "Local Communities" OR "IPLCs") AND
- ("policy coherence" OR "cross-sectoral integration") AND
- ("land tenure" OR "property rights" OR "private land conservation")
Set 8:
- '"dispersal" OR'
- '"migration" OR'
- '"nomadism" OR'
- '"landscape permeability"'

Chapter 5

%%{init: {'flowchart': {'htmlLabels': true}}}%%
flowchart LR
    Start([SPC Corpus]) --> Ch5L2["<u><span style='color:#1a0dab;'>chapter_5.yaml<br/>Level 2 foresight framing</span></u>"]
    click Ch5L2 "./input/search_terms/chapter_5.yaml" "Open chapter_5.yaml"

    subgraph L2Sets["Section 5.1–5.2 searches"]
        direction TB
        C5_1["Set 1:<br/>Future + project*/predict*/scenario<br/>(n = <<C5_1>>)"]
        C5_2["Set 2:<br/>Future + pathway*/narrative*/vision*<br/>(n = <<C5_2>>)"]
        C5_3["Set 3:<br/>Future-proof*/anticipat*/scenario planning<br/>(n = <<C5_3>>)"]
        C5_4["Set 4:<br/>Foresight*/backcasting/simulat*/trend*<br/>(n = <<C5_4>>)"]
        C5_5["Set 5:<br/>Model* AND scenario<br/>(n = <<C5_5>>)"]
    end
    Ch5L2 --> C5_1
    Ch5L2 --> C5_2
    Ch5L2 --> C5_3
    Ch5L2 --> C5_4
    Ch5L2 --> C5_5

    subgraph L3Sets["Section 5.3 searches"]
        direction TB
        C5_3a["Set 1:<br/>Drivers of change<br/>(n = <<C5_3a>>)"]
        C5_3b["Set 2:<br/>Driver modelling approaches<br/>(n = <<C5_3b>>)"]
        C5_3c["Set 3:<br/>Driver gaps<br/>(n = <<C5_3c>>)"]
    end
    Ch5L2 --> C5_3a
    Ch5L2 --> C5_3b
    Ch5L2 --> C5_3c

    subgraph L4Sets["Section 5.4 searches"]
        direction TB
        C5_4a["Set 1:<br/>Interactions (synergy/trade-off/nexus)<br/>(n = <<C5_4a>>)"]
        C5_4b["Set 2:<br/>Response options (integrated planning / NbS)<br/>(n = <<C5_4b>>)"]
        C5_4c["Set 3:<br/>Cross-scale synergy & trade-off terms<br/>(n = <<C5_4c>>)"]
    end
    Ch5L2 --> C5_4a
    Ch5L2 --> C5_4b
    Ch5L2 --> C5_4c

    subgraph L5Sets["Section 5.5 searches"]
        direction TB
        C5_5a["Set 1:<br/>Adaptive / transformative management<br/>(n = <<C5_5a>>)"]
        C5_5b["Set 2:<br/>Uncertainty quantification<br/>(n = <<C5_5b>>)"]
        C5_5c["Set 3:<br/>Tipping points & thresholds<br/>(n = <<C5_5c>>)"]
        C5_5d["Set 4:<br/>Cascading risks & precaution<br/>(n = <<C5_5d>>)"]
    end
    Ch5L2 --> C5_5a
    Ch5L2 --> C5_5b
    Ch5L2 --> C5_5c
    Ch5L2 --> C5_5d

    subgraph L6Sets["Section 5.6 searches"]
        direction TB
        C5_6a["Set 1:<br/>Science-policy-practice pathways<br/>(n = <<C5_6a>>)"]
        C5_6b["Set 2:<br/>ILK integration & community planning<br/>(n = <<C5_6b>>)"]
        C5_6c["Set 3:<br/>Enabling factors & coordination<br/>(n = <<C5_6c>>)"]
        C5_6d["Set 4:<br/>Shocks, surprises, uncertainties<br/>(n = <<C5_6d>>)"]
    end
    Ch5L2 --> C5_6a
    Ch5L2 --> C5_6b
    Ch5L2 --> C5_6c
    Ch5L2 --> C5_6d

    subgraph CCSets["Cross-cutting searches"]
        direction TB
        CC1["Set 1:<br/>Scales & telecoupling<br/>(n = <<CC1>>)"]
        CC2["Set 2:<br/>Co-production & inclusion<br/>(n = <<CC2>>)"]
    end
    Ch5L2 --> CC1
    Ch5L2 --> CC2

Search Terms

Click chapter_5.yaml to download

Show the code
params$search_terms$chapter_5 |>
  yaml::as.yaml() |>
  cat()
Sections 1 and 2:
  Set 1: Future AND (projection OR projected OR predicted OR prediction OR forecast
    OR scenario)
  Set 2: Future AND (pathway OR narrative OR storyline OR foresight OR vision OR horizon
    scan OR trajectory OR imagination)
  Set 3:
  - '"future-proof" OR'
  - anticipate OR
  - '"forward-looking" OR'
  - '"futures thinking" OR'
  - '"future-oriented" OR'
  - '"prospective" OR'
  - '"plausible future" OR'
  - '"scenario planning"'
  Set 4:
  - Foresight OR
  - backcasting OR
  - simulate OR
  - simulation OR
  - '"delphi method" OR'
  - storytelling OR
  - '"environmental scan" OR'
  - trend OR
  - megatrend
  Set 5: (model AND scenario)
Section 3:
  Set 1:
  - '"drivers of change" OR'
  - '"biodiversity driver" OR'
  - '"social-ecological driver" OR'
  - '"technological driver" OR'
  - '"perennial driver" OR'
  - '"emerging driver" OR'
  - '"cascading driver"'
  Set 2:
  - '"Integrated assessment" OR'
  - '"land-use change model" OR'
  - '"Scenario model" OR'
  - '"Social-ecological model" OR'
  - '"agent-based model" OR'
  - '"telecoupled systems model" OR'
  - '"hybrid model" OR'
  - '"participatory model" OR'
  - '"data-driven foresight model"'
  Set 3:
  - '"value-based driver" OR'
  - '"compound driver" OR'
  - '"interacting driver" OR'
  - '"distant driver"'
Section 4:
  Set 1:
  - Synergy OR
  - tradeoff OR
  - '"trade-off" OR'
  - nexus OR
  - '"win-win" OR'
  - '"cross-sectoral interaction" OR'
  - '"co-benefit"'
  Set 2:
  - '"Integrated planning" OR'
  - '"multifunctional" OR'
  - '"nature-based solution" OR'
  - '"adaptive governance" OR'
  - '"cross-sectoral governance"'
  Set 3:
  - (Spatial OR temporal OR thematic OR "cross-scale") AND
  - (Synergy OR tradeoff OR "trade-off" OR nexus OR "win-win")
Section 5:
  Set 1:
  - '"Adaptative management" OR'
  - '"Adaptative governance" OR'
  - '"Transformative adaptation" OR'
  - '"Adaptive systems" OR'
  - '"Adaptive foresight"'
  Set 2:
  - (Model OR data OR "decision-making under" OR planning OR scenario OR epistemic
    OR ontological) AND
  - uncertainty
  Set 3:
  - '"Tipping points" OR'
  - thresholds OR
  - '"Planetary boundaries" OR'
  - '"Nonlinear system dynamics" OR'
  - Surprise
  Set 4:
  - '"Cascading risk" OR'
  - '"Risk management" OR'
  - '"Environmental shocks" OR'
  - '"Environmental risks" OR'
  - '"Precautionary approach"'
Section 6:
  Set 1:
  - '"Science-policy-practice" OR'
  - '"transformative pathways" OR'
  - '"transdisciplinary co-production"'
  Set 2:
  - '"Knowledge co-production" OR'
  - '"community-based spatial planning" OR'
  - '"indigenous mapping" OR'
  - '"traditional knowledge" OR'
  - '"participatory scenario planning"'
  Set 3:
  - '"Multi-level governance" OR'
  - '"institutional capacity" OR'
  - '"cross-sectoral coordination"'
  Set 4:
  - '"Planning for uncertainty" OR'
  - '"adaptive planning" OR'
  - '"resilience planning" OR'
  - '"anticipatory governance"'
Cross-cutting sets:
  Set 1: ("Spatial scaling" OR "Temporal scaling" OR "Social scale" OR "Nested governance"
    OR "Multi-scale planning" OR "Cross-scale interaction" OR Telecoupling OR Teleconnection
    OR Metacoupling OR Spillover)
  Set 2:
  - ((Indigenous OR local OR ecological OR "co-production of") AND knowledge) OR
  - '"pluralism" OR'
  - epistemic OR
  - '"Community-based" OR'
  - Biocultural OR
  - '"Customary" OR'
  - '"tenure" OR'
  - '"Participatory" OR'
  - '"Cross-cultural" OR'
  - '"knowledge integration" OR'
  - ((Gender OR Social) AND Inclusion) OR
  - '"Gender-responsive" OR'
  - '"Intersectionality" OR'
  - equity OR
  - '"Women’s roles" OR'
  - '"Women''s roles" OR'
  - '"Women`s roles" OR'
  - '"Gendered" OR'
  - '"Empowerment" OR'
  - '"capacity-building"'

Chapter 6

%%{init: {'flowchart': {'htmlLabels': true}}}%%
flowchart LR
    Start([SPC Corpus]) --> Ch6["<u><span style='color:#1a0dab;'>chapter_6.yaml<br/>Level 2 refinements</span></u>"]
    click Ch6 "./input/search_terms/chapter_6.yaml" "Open chapter_6.yaml"

    subgraph Chapter6Sets["Chapter 6 searches"]
        direction TB
        C6_1["Set 1:<br/>Institutional & governance structures<br/>(n = <<C6_1>>)"]
        C6_2["Set 2:<br/>Political & strategic leadership<br/>(n = <<C6_2>>)"]
        C6_3["Set 3:<br/>Socio-cultural & stakeholder engagement<br/>(n = <<C6_3>>)"]
        C6_4["Set 4:<br/>Collaboration, trust & networks<br/>(n = <<C6_4>>)"]
        C6_5["Set 5:<br/>Financial & economic mechanisms<br/>(n = <<C6_5>>)"]
        C6_6["Set 6:<br/>Legal & policy frameworks<br/>(n = <<C6_6>>)"]
        C6_7["Set 7:<br/>Human & institutional capacity<br/>(n = <<C6_7>>)"]
        C6_8["Set 8:<br/>Data, knowledge & decision support<br/>(n = <<C6_8>>)"]
        C6_9["Set 9:<br/>Ecological & spatial planning tools<br/>(n = <<C6_9>>)"]
        C6_10["Set 10:<br/>Cross-cutting process enablers<br/>(n = <<C6_10>>)"]
    end
    Ch6 --> C6_1
    Ch6 --> C6_2
    Ch6 --> C6_3
    Ch6 --> C6_4
    Ch6 --> C6_5
    Ch6 --> C6_6
    Ch6 --> C6_7
    Ch6 --> C6_8
    Ch6 --> C6_9
    Ch6 --> C6_10

Ch6R2["<u><span style='color:#1a0dab;'>chapter_6_r2.yaml<br/>Optional Level 3 filter</span></u>"]
Chapter6Sets --> Ch6R2
click Ch6R2 "./input/search_terms/chapter_6_r2.yaml" "Open chapter_6_r2.yaml"
subgraph Chapter6Case["Chapter 6 searches"]
    R2["Case-study keywords<br/>(case stud*, example*, initiative*, etc.)"]
end
Ch6R2 --> R2

Search Terms

Click chapter_6.yaml to download

Show the code
params$search_terms$chapter_6 |>
  yaml::as.yaml() |>
  cat()
Set 1:
- '"institutional arrangements" OR'
- '"governance structures" OR'
- '"cross-sector coordination" OR'
- '"multi-level governance" OR'
- '"inter-agency collaboration" OR'
- '"policy coherence" OR'
- '"environmental governance" OR'
- '"landscape governance" OR'
- '"seascape governance" OR'
- '"integrated landscape management"'
Set 2:
- '"political support" OR'
- '"environmental leadership" OR'
- '"ministerial alignment" OR'
- '"strategic prioritization" OR'
- '"national biodiversity strategy"'
Set 3:
- '"stakeholder engagement" OR'
- participation OR
- '"co-design" OR'
- '"co-production" OR'
- '"community-based management" OR'
- '"indigenous governance" OR'
- '"traditional knowledge" OR'
- '"Free Prior and Informed Consent" OR'
- FPIC OR
- '"stakeholder workshops" OR'
- '"stakeholder dialogues" OR'
- '"public consultation"'
Set 4:
- collaboration OR
- trust OR
- partnership OR
- '"multi-stakeholder platform" OR'
- coalition OR
- '"inter-organizational network" OR'
- cooperation
Set 5:
- '"biodiversity finance" OR'
- '"blended finance" OR'
- '"green finance" OR'
- '"conservation trust funds" OR'
- '"Payment of ecosystem services" OR'
- '"natural capital accounting" OR'
- '"biodiversity offsets"'
Set 6:
- '"environmental law" OR'
- legislation OR
- '"statutory framework" OR'
- '"policy instruments" OR'
- '"regulatory mechanisms" OR'
- '"strategic environmental assessment" OR'
- '"Environmental Impact Assessment"'
Set 7:
- '"institutional capacity" OR'
- '"technical expertise" OR'
- '"capacity building" OR'
- training OR
- '"professional development" OR'
- '"institutional strengthening" OR'
- '"workforce development" OR'
- education OR
- pipeline OR
- '"diversity and inclusion" OR'
- '"gender inequality" OR'
- '"girl’s education" OR'
- '"girl''s education" OR'
- '"girl`s education" OR'
- '"Indigenous knowledge" OR'
- '"generational knowledge" OR'
- '"institutional memory"'
Set 8.1:
- '"species distribution maps" OR'
- (("land cover" OR "protected area") AND data) OR
- '"Indigenous knowledge" OR'
- '"knowledge co-production" OR'
- '"knowledge and data management" OR'
- '"spatial data infrastructure" OR'
- ((CARE OR FAIR) AND principles) OR
- '"open science" OR'
- '"information delivery" OR'
- (data AND (standards OR stewardship OR "management plan" OR "sharing agreement"
  OR archive OR repository OR structure)) OR
- metadata OR
- (quality AND (assurance OR control))
Set 8.2:
- '"monitoring and evaluation" OR'
- '"decision-support tools" OR'
- '"ecological model" OR'
- '"scenario planning and analysis" OR'
- ("systematic conservation planning" AND ("and model" OR tools)) OR
- '"biodiversity targets" OR'
- '"science communication" OR'
- '"science-practice gap" OR'
- '"participatory mapping and model" OR'
- '"scenario narratives" OR'
- '"evidence bridge" OR'
- '"boundary spanner and organization" OR'
- '"early adopter"'
Set 9:
- '"spatial planning" OR'
- '"landscape governance" OR'
- '"territorial integration" OR'
- '"land-use planning" OR'
- '"ecological connectivity" OR'
- '"ecological networks" OR'
- '"ecological corridors" OR'
- '"green infrastructure" OR'
- '"nature-based Strategic spatial planning solutions" OR'
- '"restoration planning" OR'
- '"blue infrastructure" OR'
- '"blue-green infrastructure" OR'
- '"spatial decision-making" OR'
- '"strategic spatial planning"'
Set 10:
- '"adaptive management" OR'
- '"feedback mechanisms" OR'
- '"monitoring and learning" OR'
- '"institutional innovation" OR'
- '"continuous improvement"'

Non implemented additional searches are:

Type Selsection

OpenAlex contains more then 270 million works of different types. The following table shows and explains the available types and highlights which are selected to be included in the SPC Corpus.

Show the code
params$types |>
  knitr::kable(
    caption = "OpenAlex Work Types and Inclusion in the SPC Corpus",
    booktabs = TRUE,
    align = c("l", "l", "l", "c")
  ) # |>
OpenAlex Work Types and Inclusion in the SPC Corpus
Type Description Included
article Scholarly journal articles and related periodical works TRUE
book Monographs and other long-form published books TRUE
book-chapter Chapters published within edited books or proceedings TRUE
dissertation Doctoral or master level theses and dissertations TRUE
editorial Editorials and editor introductions TRUE
preprint Pre-publication manuscripts shared prior to peer review TRUE
report Technical, institutional, or policy reports TRUE
review Narrative or systematic review articles TRUE
dataset Published datasets and structured data releases FALSE
erratum Published corrections to previously released works FALSE
grant Summaries or descriptions of grant-funded projects FALSE
letter Correspondence, commentaries, and short letters FALSE
libguides Library research guides and curated bibliographies FALSE
other Works that do not align with a more specific OpenAlex type FALSE
paratext Prefaces, introductions, indexes, and other paratextual items FALSE
peer-review Formal peer review reports and evaluations FALSE
reference-entry Encyclopaedia or dictionary reference entries FALSE
retraction Notices retracting previously published works FALSE
standard Standards, protocols, and technical specifications FALSE
supplementary-materials Supplementary files accompanying primary publications FALSE
Show the code
# kableExtra::kable_styling(
#     full_width = FALSE,
#     position = "left"
# )

Methods

SPC Corpus

Assess of Individual Terms in spc and nature search terms

This assessment is done on the whole of the OpenAlex corpus and only filtered for types and not for the date range.

Show the code
fn <- file.path(params$output_dir, "searchterm_assessment_spcc.rds")

if (!file.exists(fn)) {
  result <- list(
    spc = assess_search_term_both(
      st = params$search_terms$spc_corpus$spc,
      and_term = stcompact(params$search_terms$spc_corpus$spc_corpus$nature),
      types = params$types_filter,
      verbose = TRUE
    ),
    nature = assess_search_term_both(
      st = params$search_terms$spc_corpus$nature,
      and_term = stcompact(params$search_terms$spc_corpus$spc_corpus$spc),
      types = params$types_filter,
      verbose = FALSE
    )
  ) |>
    saveRDS(fn)
}

Get Key Paper

Here we get key papers in a parquet database which is partitioned by:

  • found_in: the search term or openalex which is used as the filter, i.e. the key paper occurs in corpus which would result from the search term
  • id_used: the id used to testing,m either the OpenAlex id (id) or the doi (doi)
  • page: only for processing reasons

No filtering, neither by type nor by publication year is done.

The other columns are as returned by the OpenAlex API.

Show the code
#|

st <- list(
  spc = params$search_terms$spc_corpus$spc |>
    paste0(collapse = " "),
  nature = params$search_terms$spc_corpus$nature |>
    paste0(collapse = " ")
)
st$spcc <- paste0("(", st$spc, ") AND (", st$nature, ")")

dois <- params$key_papers$goldstandard$DOI[
  params$key_papers$goldstandard$DOI != ""
]
ids <- params$key_papers$goldstandard$openalex_id[
  params$key_papers$goldstandard$openalex_id != ""
]
Show the code
#|

fn <- file.path(params$keyworks, "parquet", "found_in=openalex")
if (!dir.exists(fn)) {
  ### KP in OpenAlex
  openalexPro::pro_query(
    doi = dois,
    chunk_limit = 50
  ) |>
    openalexPro::pro_request(
      output = file.path(fn, "..", "json_doi")
    ) |>
    openalexPro::pro_request_jsonl(
      output = file.path(fn, "..", "jsonl_doi"),
      delete_input = TRUE
    ) |>
    openalexPro::pro_request_jsonl_parquet(
      output = file.path(fn, "id_used=doi"),
      delete_input = TRUE
    )

  openalexPro::pro_query(
    id = ids,
    multiple_id = TRUE,
    chunk_limit = 50
  ) |>
    openalexPro::pro_request(
      output = file.path(fn, "..", "json_oa_id")
    ) |>
    openalexPro::pro_request_jsonl(
      output = file.path(fn, "..", "jsonl_oa_id"),
      delete_input = TRUE
    ) |>
    openalexPro::pro_request_jsonl_parquet(
      output = file.path(fn, "id_used=oa_id"),
      delete_input = TRUE
    )
}
Show the code
#|

fn <- file.path(params$keyworks, "parquet", "found_in=spc")
if (!dir.exists(fn)) {
  openalexPro::pro_query(
    title_and_abstract.search = st$spc,
    doi = dois,
    chunk_limit = 25
  ) |>
    openalexPro::pro_request(
      output = file.path(fn, "..", "json_doi")
    ) |>
    openalexPro::pro_request_jsonl(
      output = file.path(fn, "..", "jsonl_doi"),
      delete_input = TRUE
    ) |>
    openalexPro::pro_request_jsonl_parquet(
      output = file.path(fn, "id_used=doi"),
      delete_input = TRUE
    )

  openalexPro::pro_query(
    title_and_abstract.search = st$spc,
    id = ids,
    multiple_id = TRUE,
    chunk_limit = 25
  ) |>
    openalexPro::pro_request(output = file.path(fn, "json_oa_id")) |>
    openalexPro::pro_request_jsonl(
      output = file.path(fn, "jsonl_oa_id"),
      delete_input = TRUE
    ) |>
    openalexPro::pro_request_jsonl_parquet(
      output = file.path(fn, "id_used=oa_id"),
      delete_input = TRUE
    )
}
Show the code
#|

fn <- file.path(params$keyworks, "parquet", "found_in=nature")
if (!dir.exists(fn)) {
  ### KP in nature
  openalexPro::pro_query(
    title_and_abstract.search = st$nature,
    doi = dois,
    chunk_limit = 25
  ) |>
    openalexPro::pro_request(output = file.path(fn, "json_doi")) |>
    openalexPro::pro_request_jsonl(
      output = file.path(fn, "jsonl_doi"),
      delete_input = TRUE
    ) |>
    openalexPro::pro_request_jsonl_parquet(
      output = file.path(fn, "id_used=doi"),
      delete_input = TRUE
    )

  openalexPro::pro_query(
    title_and_abstract.search = st$nature,
    id = ids,
    multiple_id = TRUE,
    chunk_limit = 25
  ) |>
    openalexPro::pro_request(output = file.path(fn, "json_oa_id")) |>
    openalexPro::pro_request_jsonl(
      output = file.path(fn, "jsonl_oa_id"),
      delete_input = TRUE
    ) |>
    openalexPro::pro_request_jsonl_parquet(
      output = file.path(fn, "id_used=oa_id"),
      delete_input = TRUE
    )
}
Show the code
#|

fn <- file.path(params$keyworks, "parquet", "found_in=spcc")
if (!dir.exists(fn)) {
  ### KP in spcc
  openalexPro::pro_query(
    title_and_abstract.search = st$spcc,
    doi = params$key_papers$goldstandard$DOI[
      params$key_papers$goldstandard$DOI != ""
    ],
    chunk_limit = 15
  ) |>
    openalexPro::pro_request(output = file.path(fn, "json_doi")) |>
    openalexPro::pro_request_jsonl(
      output = file.path(fn, "jsonl_doi"),
      delete_input = TRUE
    ) |>
    openalexPro::pro_request_jsonl_parquet(
      output = file.path(fn, "id_used=doi"),
      delete_input = TRUE
    )

  openalexPro::pro_query(
    title_and_abstract.search = st$spcc,
    id = params$key_papers$goldstandard$openalex_id[
      params$key_papers$goldstandard$openalex_id != ""
    ],
    multiple_id = TRUE,
    chunk_limit = 25
  ) |>
    openalexPro::pro_request(output = file.path(fn, "json_oa_id")) |>
    openalexPro::pro_request_jsonl(
      output = file.path(fn, "jsonl_oa_id"),
      delete_input = TRUE
    ) |>
    openalexPro::pro_request_jsonl_parquet(
      output = file.path(fn, "id_used=oa_id"),
      delete_input = TRUE
    )
}

Keypaper in Search Terms

The in the previous step retrieved works are analysed here to get a table which shows where the key paper occur.

Show the code
fn <- file.path(params$keyworks, "kp_found_in.rds")
if (!file.exists(fn)) {
  arrow::open_dataset(file.path(params$keyworks, "parquet")) |>
    dplyr::select(
      id,
      doi,
      type,
      found_in,
      title,
      citation
    ) |>
    dplyr::group_by(id, doi, title, citation, type) |>
    dplyr::summarise(
      in_openalex = base::max(found_in == "openalex", na.rm = TRUE),
      in_spc = base::max(found_in == "spc", na.rm = TRUE),
      in_nature = base::max(found_in == "nature", na.rm = TRUE),
      in_spcc = base::max(found_in == "spcc", na.rm = TRUE),
      .groups = "drop"
    ) |>
    dplyr::collect() |>
    saveRDS(fn)
}

Get Numbers from OpenAlex of the Search Terms

These data is gathered from OpenAlex directly, not downloaded any works. The data is used to assess the quality of the TCA Corpus.

The query contains: - the search term (nature, spc, spcc) - the types selected (article, book, book-chapter, dissertation, editorial, preprint, report, review) - the date range (from 1992-01-01 to 2025-12-31)

The following counts are retrieved:

Overall hits

Show the code
#|

fn <- file.path(params$corpus, "st_hits.rds")
if (!file.exists(fn)) {
  st <- list(
    spc = params$search_terms$spc_corpus$spc |>
      paste0(collapse = " "),
    nature = params$search_terms$spc_corpus$nature |>
      paste0(collapse = " ")
  )
  st$spcc <- paste0("(", st$spc, ") AND (", st$nature, ")")

  queries <- lapply(
    st,
    function(s) {
      openalexPro::pro_query(
        title_and_abstract.search = s,
        type = params$types_filter,
        from_publication_date = params$publication_date$from,
        to_publication_date = params$publication_date$to
      )
    }
  )
  queries$openalex <- openalexPro::pro_query(
    type = params$types_filter,
    from_publication_date = params$publication_date$from,
    to_publication_date = params$publication_date$to,
  )

  pbapply::pblapply(
    queries,
    function(query) {
      query |>
        openalexR::oa_request(
          count_only = TRUE,
          verbose = TRUE
        ) |>
        unlist()
    }
  ) |>
    do.call(what = cbind) |>
    t() |>
    as.data.frame() |>
    dplyr::select(count) |>
    saveRDS(file = fn)
}

Counts per Language

Show the code
#|

fn <- file.path(params$corpus, "st_languages.rds")
if (!file.exists(fn)) {
  st <- list(
    spc = params$search_terms$spc_corpus$spc |>
      paste0(collapse = " "),
    nature = params$search_terms$spc_corpus$nature |>
      paste0(collapse = " ")
  )
  st$spcc <- paste0("(", st$spc, ") AND (", st$nature, ")")

  queries <- lapply(
    st,
    function(s) {
      openalexPro::pro_query(
        title_and_abstract.search = s,
        type = params$types_filter,
        from_publication_date = params$publication_date$from,
        to_publication_date = params$publication_date$to,
        group_by = "language"
      )
    }
  )
  queries$openalex <- openalexPro::pro_query(
    type = params$types_filter,
    from_publication_date = params$publication_date$from,
    to_publication_date = params$publication_date$to,
    group_by = "language"
  )

  pbapply::pblapply(
    queries,
    function(query) {
      query |>
        openalexR::oa_request(
          verbose = TRUE
        ) |>
        dplyr::bind_rows()
    }
  ) |>
    dplyr::bind_rows(.id = "source") |>
    dplyr::select(source, language = key_display_name, count) |>
    tidyr::pivot_wider(
      names_from = source,
      values_from = count,
      names_prefix = "count_",
      values_fn = list(count = sum),
      values_fill = list(count = 0)
    ) |>
    dplyr::select(
      language,
      count_openalex,
      count_spc,
      count_nature,
      count_spcc
    ) |>
    dplyr::arrange(desc(count_openalex)) |>
    saveRDS(file = fn)
}

Counts per Publication Year

Show the code
fn <- file.path(params$corpus, "st_years.rds")
if (!file.exists(fn)) {
  st <- list(
    spc = params$search_terms$spc_corpus$spc |>
      paste0(collapse = " "),
    nature = params$search_terms$spc_corpus$nature |>
      paste0(collapse = " ")
  )
  st$spcc <- paste0("(", st$spc, ") AND (", st$nature, ")")

  queries <- lapply(
    st,
    function(s) {
      openalexPro::pro_query(
        title_and_abstract.search = s,
        type = params$types_filter,
        from_publication_date = params$publication_date$from,
        to_publication_date = params$publication_date$to,
        group_by = "publication_year"
      )
    }
  )
  queries$openalex <- openalexPro::pro_query(
    type = params$types_filter,
    from_publication_date = params$publication_date$from,
    to_publication_date = params$publication_date$to,
    group_by = "publication_year"
  )

  result <- pbapply::pblapply(
    queries,
    function(query) {
      query |>
        openalexR::oa_request(
          verbose = TRUE
        ) |>
        dplyr::bind_rows()
    }
  ) |>
    dplyr::bind_rows(.id = "source") |>
    dplyr::select(source, year = key, count) |>
    dplyr::mutate(year = base::as.integer(year)) |>
    tidyr::pivot_wider(
      names_from = source,
      values_from = count,
      names_prefix = "count_",
      values_fn = list(count = sum),
      values_fill = list(count = 0)
    ) |>
    dplyr::select(
      year,
      count_openalex,
      count_spc,
      count_nature,
      count_spcc
    ) |>
    dplyr::arrange(dplyr::desc(year)) |>
    saveRDS(file = fn)
}

Chapter 1

Show the code
# params$search_terms$chapter_1

fn <- file.path(params$chapter_1, "st_hits.rds")
if (!file.exists(fn)) {
  spcc <- paste0(
    "(",
    stcompact(params$search_terms$spc_corpus$spc),
    ") AND (",
    stcompact(params$search_terms$spc_corpus$nature),
    ")"
  )
  queries <- lapply(
    params$search_terms$chapter_1,
    function(s) {
      openalexPro::pro_query(
        title_and_abstract.search = paste0(
          "(",
          spcc,
          ") AND (",
          stcompact(s),
          ")"
        ),
        type = params$types_filter,
        from_publication_date = params$publication_date$from,
        to_publication_date = params$publication_date$to
      )
    }
  )

  result <- pbapply::pblapply(
    queries,
    function(query) {
      query |>
        openalexR::oa_request(
          count_only = TRUE,
          verbose = TRUE
        ) |>
        unlist()
    }
  ) |>
    do.call(what = cbind) |>
    t() |>
    as.data.frame() |>
    dplyr::select(count)

  rownames(result) <- names(queries)
  saveRDS(result, file = fn)
}

Chapter 2

Show the code
fn <- file.path(params$chapter_2, "st_hits.rds")
if (!file.exists(fn)) {
  spcc <- paste0(
    "(",
    stcompact(params$search_terms$spc_corpus$spc),
    ") AND (",
    stcompact(params$search_terms$spc_corpus$nature),
    ")"
  ) |>
    stcompact()

  queries <- lapply(
    params$search_terms$chapter_2,
    function(section) {
      lapply(
        section,
        function(s) {
          openalexPro::pro_query(
            title_and_abstract.search = paste0(
              "(",
              spcc,
              ") AND (",
              stcompact(s),
              ")"
            ),
            type = params$types_filter,
            from_publication_date = params$publication_date$from,
            to_publication_date = params$publication_date$to
          )
        }
      )
    }
  )

  result <- lapply(
    names(queries),
    function(sect_nm) {
      result <- lapply(
        names(queries[[sect_nm]]),
        function(nm) {
          message("Retrieving ", sect_nm, " - ", nm, " ...")
          result <- c(
            count = NA_integer_,
            db_response_time_ms = NA_integer_,
            page = NA_integer_,
            per_page = NA_integer_
          )
          try(
            result <- queries[[sect_nm]][nm] |>
              openalexR::oa_request(
                count_only = TRUE,
                verbose = TRUE
              ) |>
              unlist(),
            silent = FALSE
          )
          return(result)
        }
      ) |>
        do.call(what = cbind) |>
        t() |>
        as.data.frame() |>
        dplyr::select(count)
      browser()
      rownames(result) <- names(queries[[sect_nm]])
      return(result)
    }
  )
  names(result) <- names(queries)

  saveRDS(result, file = fn)
}
Called from: FUN(X[[i]], ...)
debug: rownames(result) <- names(queries[[sect_nm]])
debug: return(result)
Called from: FUN(X[[i]], ...)
debug: rownames(result) <- names(queries[[sect_nm]])
debug: return(result)
Called from: FUN(X[[i]], ...)
debug: rownames(result) <- names(queries[[sect_nm]])
debug: return(result)
Called from: FUN(X[[i]], ...)
debug: rownames(result) <- names(queries[[sect_nm]])
debug: return(result)
Show the code
# fn <- file.path(params$chapter_2, "st_hits.rds")
# if (!file.exists(fn)) {
#   spcc <- paste0(
#     "(",
#     stcompact(params$search_terms$spc_corpus$spc),
#     ") AND (",
#     stcompact(params$search_terms$spc_corpus$nature),
#     ")"
#   )
#   queries <- lapply(
#     params$search_terms$chapter_2,
#     function(s) {
#       openalexPro::pro_query(
#         title_and_abstract.search = paste0(
#           "(",
#           spcc,
#           ") AND (",
#           stcompact(s),
#           ")"
#         ),
#         type = params$types_filter,
#         from_publication_date = params$publication_date$from,
#         to_publication_date = params$publication_date$to
#       )
#     }
#   )

#   result <- pbapply::pblapply(
#     queries,
#     function(query) {
#       query |>
#         openalexR::oa_request(
#           count_only = TRUE,
#           verbose = TRUE
#         ) |>
#         unlist()
#     }
#   ) |>
#     do.call(what = cbind) |>
#     t() |>
#     as.data.frame() |>
#     dplyr::select(count)

#   rownames(result) <- names(queries)
#   saveRDS(result, file = fn)
# }

Chapter 3

Show the code
fn <- file.path(params$chapter_3, "st_hits.rds")
if (!file.exists(fn)) {
  spcc <- paste0(
    "(",
    stcompact(params$search_terms$spc_corpus$spc),
    ") AND (",
    stcompact(params$search_terms$spc_corpus$nature),
    ")"
  )
  queries <- lapply(
    params$search_terms$chapter_3,
    function(s) {
      result <- c(
        count = NA_integer_,
        db_response_time_ms = NA_integer_,
        page = NA_integer_,
        per_page = NA_integer_
      )
      try(
        result <- openalexPro::pro_query(
          title_and_abstract.search = paste0(
            "(",
            spcc,
            ") AND (",
            stcompact(s),
            ")"
          ),
          type = params$types_filter,
          from_publication_date = params$publication_date$from,
          to_publication_date = params$publication_date$to
        ),
        silent = FALSE
      )
    }
  )

  result <- pbapply::pblapply(
    queries,
    function(query) {
      result <- c(
        count = NA_integer_,
        db_response_time_ms = NA_integer_,
        page = NA_integer_,
        per_page = NA_integer_
      )
      try(
        result <- query |>
          openalexR::oa_request(
            count_only = TRUE,
            verbose = TRUE
          ) |>
          unlist()
      )
    }
  ) |>
    do.call(what = cbind) |>
    t() |>
    as.data.frame() |>
    dplyr::select(count)
  rownames(result) <- names(queries)
  saveRDS(result, file = fn)
}

Chapter 4

Show the code
fn <- file.path(params$chapter_4, "st_hits.rds")
if (!file.exists(fn)) {
  spcc <- paste0(
    "(",
    stcompact(params$search_terms$spc_corpus$spc),
    ") AND (",
    stcompact(params$search_terms$spc_corpus$nature),
    ")"
  )
  queries <- lapply(
    params$search_terms$chapter_4,
    function(s) {
      openalexPro::pro_query(
        title_and_abstract.search = paste0(
          "(",
          spcc,
          ") AND (",
          stcompact(s),
          ")"
        ),
        type = params$types_filter,
        from_publication_date = params$publication_date$from,
        to_publication_date = params$publication_date$to
      )
    }
  )

  result <- pbapply::pblapply(
    queries,
    function(query) {
      query |>
        openalexR::oa_request(
          count_only = TRUE,
          verbose = TRUE
        ) |>
        unlist()
    }
  ) |>
    do.call(what = cbind) |>
    t() |>
    as.data.frame() |>
    dplyr::select(count)
  rownames(result) <- names(queries)
  saveRDS(result, file = fn)
}

Chapter 5

Show the code
fn <- file.path(params$chapter_5, "st_hits.rds")
if (!file.exists(fn)) {
  spcc <- paste0(
    "(",
    stcompact(params$search_terms$spc_corpus$spc),
    ") AND (",
    stcompact(params$search_terms$spc_corpus$nature),
    ")"
  ) |>
    stcompact()

  queries <- lapply(
    params$search_terms$chapter_5,
    function(section) {
      lapply(
        section,
        function(s) {
          openalexPro::pro_query(
            title_and_abstract.search = paste0(
              "(",
              spcc,
              ") AND (",
              stcompact(s),
              ")"
            ),
            type = params$types_filter,
            from_publication_date = params$publication_date$from,
            to_publication_date = params$publication_date$to
          )
        }
      )
    }
  )

  result <- lapply(
    names(queries),
    function(sect_nm) {
      result <- lapply(
        names(queries[[sect_nm]]),
        function(nm) {
          message("Retrieving ", sect_nm, " - ", nm, " ...")
          result <- c(
            count = NA_integer_,
            db_response_time_ms = NA_integer_,
            page = NA_integer_,
            per_page = NA_integer_
          )
          try(
            result <- queries[[sect_nm]][nm] |>
              openalexR::oa_request(
                count_only = TRUE,
                verbose = TRUE
              ) |>
              unlist(),
            silent = FALSE
          )
          return(result)
        }
      ) |>
        do.call(what = cbind) |>
        t() |>
        as.data.frame() |>
        dplyr::select(count)
      browser()
      rownames(result) <- names(queries[[sect_nm]])
      return(result)
    }
  )
  names(result) <- names(queries)

  saveRDS(result, file = fn)
}
Called from: FUN(X[[i]], ...)
debug: rownames(result) <- names(queries[[sect_nm]])
debug: return(result)
Called from: FUN(X[[i]], ...)
debug: rownames(result) <- names(queries[[sect_nm]])
debug: return(result)
Called from: FUN(X[[i]], ...)
debug: rownames(result) <- names(queries[[sect_nm]])
debug: return(result)
Called from: FUN(X[[i]], ...)
debug: rownames(result) <- names(queries[[sect_nm]])
debug: return(result)
Called from: FUN(X[[i]], ...)
debug: rownames(result) <- names(queries[[sect_nm]])
debug: return(result)
Called from: FUN(X[[i]], ...)
debug: rownames(result) <- names(queries[[sect_nm]])
debug: return(result)

Chapter 6

Show the code
fn <- file.path(params$chapter_6, "st_hits.rds")
if (!file.exists(fn)) {
  spcc <- paste0(
    "(",
    stcompact(params$search_terms$spc_corpus$spc),
    ") AND (",
    stcompact(params$search_terms$spc_corpus$nature),
    ")"
  )
  queries <- lapply(
    params$search_terms$chapter_6,
    function(s) {
      openalexPro::pro_query(
        title_and_abstract.search = paste0(
          "(",
          spcc,
          ") AND (",
          stcompact(s),
          ")"
        ),
        type = params$types_filter,
        from_publication_date = params$publication_date$from,
        to_publication_date = params$publication_date$to
      )
    }
  )

  pbapply::pblapply(
    queries,
    function(query) {
      query |>
        openalexR::oa_request(
          count_only = TRUE,
          verbose = TRUE
        ) |>
        unlist()
    }
  ) |>
    do.call(what = cbind) |>
    t() |>
    as.data.frame() |>
    dplyr::select(count) |>
    saveRDS(file = fn)
}

Results

Assessment of Search Terms

The individual terms are assessed with the second term as AND, e,g. each individual term in spc is assessed with AND nature. In addition,

SPC Term

Show the code
readRDS(file.path(params$output, "searchterm_assessment_spcc.rds"))$spc |>
  dplyr::arrange(desc(count)) |>
  dplyr::mutate(
    count = format(count, big.mark = ","),
    count_excl = format(count_excl, big.mark = ","),
  ) |>
  knitr::kable(format = "html", escape = FALSE)
term count count_excl
(planning AND ("for ecosystem services" OR process OR scenario OR tools)) 1,218,727 746,350
(scenario AND (analysis OR "based model" OR "based planning" OR building OR planning OR thinking OR "and models" OR "of land use")) 1,022,316 706,717
(spatial AND (composition OR configuration OR "conservation prioritisation" OR "conservation prioritization" OR decision OR development OR "forest planning" OR governance OR planning OR prioritisation OR prioritization OR transformation)) 768,332 554,639
((anticipatory OR "community based" OR "forest management" OR "land-sea" OR participatory OR "place based" OR regional OR sectorial OR territorial OR urban OR "agricultural management") AND planning) 663,643 324,115
connectivity 554,614 503,773
restoration 544,023 483,174
(land AND (allocation OR governance OR system)) 383,086 240,460
(adaptive AND (management OR planning)) 361,759 235,865
(conservation AND (practice OR planning OR program OR strategy)) 281,845 165,028
(("key biodiversity" OR protected OR "remote ocean") AND areas) 265,452 195,022
(landscape AND (complexity OR planning OR governance OR management OR "ecological planning")) 233,040 107,238
("land use" AND (decision OR planning OR governance OR management OR model OR scenario OR trade-offs OR tradeoffs)) 227,101 75,476
((integrative OR "trends and") AND scenarios) 196,829 54,368
(animal AND (migration OR movement)) 87,947 76,316
(("cumulative impact" OR "environmental impact" OR "strategic environmental") AND assessment) 70,707 51,970
((functional OR working) AND landscapes) 68,857 40,036
(ecological AND (corridor OR networks)) 62,020 36,374
zoning 56,647 40,206
(biodiversity AND (assessment OR indicators OR scenario)) 56,260 23,818
"systems integration" 52,524 45,611
((blue OR green) AND infrastructure) 40,341 24,940
("ecosystem service" AND (mapping OR model OR planning)) 32,577 7,701
((inclusive OR marine) AND governance) 26,441 16,587
"stepping stones" 18,505 16,047
(nature AND ("based solutions" OR futures)) 17,547 12,116
(integrated AND ("assessment framework" OR "assessment model" OR "coastal zone management")) 11,620 6,729
((habitat OR wildlife) AND corridor) 10,666 3,089
(("ecosystem based" OR "sea use") AND management) 7,633 3,732
"multi-criteria decision analysis" 6,978 4,807
rewilding 2,204 1,480
IPBES 1,277 713
(("generalized dissimilarity" OR macroecological) AND model) 1,255 785
"reserve design" 806 353
"futures thinking" 675 464
OECM 372 229
"critical areas for biodiversity" 20 8

Nature Term

Show the code
readRDS(file.path(params$output, "searchterm_assessment_spcc.rds"))$nature |>
  dplyr::arrange(desc(count)) |>
  dplyr::mutate(
    count = format(count, big.mark = ","),
    count_excl = format(count_excl, big.mark = ","),
  ) |>
  knitr::kable(format = "html", escape = FALSE)
term count count_excl
environment 6,816,765 4,946,882
species 4,743,745 2,939,232
nature 4,031,428 3,096,309
sustainable 3,422,144 2,392,280
soil 2,212,414 1,381,827
sea 1,448,705 822,073
forest 1,205,932 568,890
river 1,166,528 622,388
ecological 1,092,089 342,458
landscape 1,024,014 571,791
conservation 991,371 432,153
Earth 971,303 619,412
ecosystem 961,345 226,109
marine 880,101 379,056
ocean 761,899 347,411
habitat 655,466 140,310
lake 574,163 312,252
restoration 544,023 358,130
mountain 501,342 249,611
coast 481,259 204,739
biodiversity 410,523 129,514
terrestrial 319,944 101,724
freshwater 254,084 78,441
planet 235,272 121,463
flora 233,964 117,103
fauna 211,730 58,681
maritime 181,995 106,630
plantation 176,543 79,327
desert 169,351 86,871
wildlife 166,122 47,477
wetland 165,543 57,306
grassland 139,372 33,128
estuary 112,545 32,468
bog 76,355 56,301
marshes 73,423 29,153
"protected areas" 70,012 11,160
"natural resource" 69,581 26,335
"agricultural land" 64,245 21,484
meadow 59,775 16,882
woodland 59,115 14,490
biosphere 51,901 13,261
"coastal waters" 41,463 11,565
savanna 32,749 9,332
"coupled system" 32,173 26,272
dryland 28,870 10,406
peatland 23,189 8,714
"arable land" 22,379 5,414
tundra 20,644 4,938
mires 19,932 12,355
fjord 16,056 6,554
shrubland 12,645 1,211
bioeconomy 10,182 4,627
"resource system" 6,004 3,264
seascape 5,059 1,203
heathland 4,024 855
marshland 3,806 931
chaparral 3,055 1,222
"environmental resource" 2,534 840
agroforest 1,828 336
"agro-forest" 567 0

Keypaper in Corpus

No filtering, neither by type nor by publication year is done. Therefore, the pure search terms are evaluated. If a paper is included in this table, doex not mean it is included in the final SPC Corpus due to filtering by dates and types!

Show the code
readRDS(file.path(params$keyworks, "kp_found_in.rds")) |>
  dplyr::mutate(
    id_display = sub("^.*/(W[0-9]+)$", "\\1", id),
    id = sprintf("<a href=\"%s\" target=\"_blank\">%s</a>", id, id_display),
    doi_display = sub("^https://doi.org/", "\\1", doi),
    doi = sprintf("<a href=\"%s\" target=\"_blank\">%s</a>", doi, doi_display)
  ) |>
  dplyr::arrange(
    in_spcc,
    in_spc,
    in_nature,
    in_openalex
  ) |>
  dplyr::mutate(
    dplyr::across(
      dplyr::starts_with("in_"),
      ~ dplyr::case_when(
        .x ~ '<b style="color:#008000;">☑</b>', # green bold checkbox
        !.x ~ '<b style="color:#cc0000;">☐</b>' # red bold empty checkbox
      )
    )
  ) |>
  dplyr::select(
    id,
    doi,
    citation,
    in_spcc,
    in_spc,
    in_nature,
    in_openalex
  ) |>
  knitr::kable(format = "html", escape = FALSE)
id doi citation in_spcc in_spc in_nature in_openalex
W4233598570 10.1146/annurev-anthro-102218-011435 David Valentine & Amelia Hassoun (2019)
W2056591496 10.1016/s0016-3287(98)00101-3 Richard A. Slaughter (1998)
W2090312322 10.1016/j.futures.2007.11.010 Joseph Voros (2007)
W2795786882 10.1007/s00267-018-1028-3 Ida N.S. Djenontin & Alison M. Meadow (2018)
W2128217744 10.1177/0306312713508669 David H. Guston (2013)
W3170399214 10.1016/j.mex.2021.101401 Daniel Beiderbeck et al. (2021)
W2964311550 10.1016/j.techfore.2019.07.002 Ian Belton et al. (2019)
W4414957974 10.1073/pnas.2501695122 Damaris Zurell et al. (2025)
W1992974326 10.1016/j.futures.2007.11.011 Richard A. Slaughter (2007)
W4407294089 10.1080/02697459.2025.2459975 Romina Rodela (2025)
W2116090915 10.1016/j.futures.2012.10.003 Muhammad Amer et al. (2012)
W2057938345 10.1108/14636680810855991 Sohail Inayatullah (2008)
W1973628253 10.1016/j.enpol.2005.12.006 Will McDowall & Malcolm Eames (2006)
W4238224782 10.1016/j.futures.2015.08.007 I. Milojević & Sohail Inayatullah (2015)
W2910481941 10.1080/02513625.2018.1562795 Peter Schmitt & Thorsten Wiechmann (2018)
W1990273831 10.1126/science.1242552 Silke Bauer & Bethany J. Hoye (2014)
W2784805535 10.1126/science.aam9712 Marlee A. Tucker et al. (2018)
W3085078608 10.1038/s41467-020-18457-x Michelle Ward et al. (2020)
W4281717750 10.1126/science.abl8974 Angela Brennan et al. (2022)
W1880093763 10.1111/ecog.01507 Rafael A. Magris et al. (2015)
W2791599583 10.1111/conl.12439 Rafael A. Magris et al. (2018)
W2783683111 10.1016/j.biocon.2017.12.020 Santiago Saura et al. (2018)
W4297536966 10.1016/j.tree.2022.09.002 Maria Beger et al. (2022)
W2965201645 10.1016/j.biocon.2019.07.028 Santiago Saura et al. (2019)
W3132073286 10.1016/j.biocon.2021.109008 Annika T. H. Keeley et al. (2021)
W4390696637 10.1038/s41467-023-43832-9 Rachel Neugarten et al. (2024)
W4302293680 10.1111/csp2.12823 David M. Theobald et al. (2022)
W4387055605 10.1038/s44183-023-00022-w Julie Reimer et al. (2023)
W4402144060 10.1002/ece3.70231 Amanda Liczner et al. (2024)
W4412704230 10.1073/pnas.2410937122 Robin Naidoo et al. (2025)
W4280541891 10.3389/fevo.2022.830822 Sylvia Wood et al. (2022)
W4392367143 10.1111/brv.13066 Steven J. Cooke et al. (2024)
W4410131928 10.3354/meps14888 Susanne E. Tanner et al. (2025)
W4414925393 10.1016/j.tree.2025.09.007 Sandra Neubert et al. (2025)
W4413449508 10.1038/s41467-025-63205-8 Jedediah F. Brodie et al. (2025)
W4415240687 10.1007/s10980-025-02210-0 Tamsin L. Woodman et al. (2025)
W2093445010 10.1126/science.1258832 Jianguo Liu et al. (2015)
W2122104680 10.1111/j.1523-1739.2009.01212.x William J. Sutherland et al. (2009)
W2086673960 10.1016/j.tree.2009.04.008 William J. Sutherland & Harry J. Woodroof (2009)
W3085006993 10.1002/pan3.10146 Laura Pereira et al. (2020)
W2754686867 10.1038/s41559-017-0273-9 Isabel M.D. Rosa et al. (2017)
W4210386268 10.1016/j.envsci.2022.01.013 Andressa V. Mansur et al. (2022)
W4380362703 10.1016/j.gloenvcha.2023.102681 Hyejin Kim et al. (2023)
W4210765186 10.1038/s41893-021-00844-x Roslyn Henry et al. (2022)
W4310004272 10.1007/s11625-022-01251-7 Lucas Rutting et al. (2022)
W2255223904 NA Bob Scholes (2010)
W2978599153 10.26190/unsworks/27456 Peter H. Verburg et al. (2024)
W1963746476 10.1016/j.ecocom.2009.10.006 R.S. de Groot et al. (2009)
W2759207970 10.3390/su9091668 Leena Karrasch et al. (2017)
W2487200415 10.1016/j.marpol.2016.06.023 Elianny Domínguez-Tejo et al. (2016)
W3200717663 10.1007/s10980-021-01329-0 Jianquan Dong et al. (2021)
W3159060995 10.1016/j.ecoser.2021.101273 Karsten Grunewald et al. (2021)
W2956763155 10.1088/1748-9326/ab3234 Annika T. H. Keeley et al. (2019)
W2595174916 10.1038/35012251 C. R. Margules & Sahotra Sarkar (2000)
W4313593374 10.1016/j.mex.2022.101989 Holly Kirk et al. (2023)
W4412257196 10.5281/zenodo.6522392 Unai Pascual et al. (2022)
W3100416804 10.1111/1365-2664.13796 Virgilio Hermoso et al. (2020)
W3215595594 10.1093/biosci/biab091 Abigail J. Lynch et al. (2021)
W4393866290 10.3390/su16072965 Qiqi Hu et al. (2024)
W2554309037 10.1111/btp.12386 Agnieszka E. Latawiec et al. (2016)
W3209482460 10.25607/obp-1666 Alejandro Iglesias-Campos et al. (2021)
W4295308933 10.1073/pnas.2203385119 Natalia Estrada-Carmona et al. (2022)
W4320016094 10.1007/978-3-031-15773-8_4 Falko Buschke et al. (2023)
W4415164578 10.1098/rsos.250810 Rachael Garrett et al. (2025)
W2971398159 10.1111/rec.13035 George D. Gann et al. (2019)
W2114666631 10.1525/bio.2010.60.3.7 Timothy J. Beechie et al. (2010)
W4395447577 10.1126/science.adn3441 Henrique M. Pereira et al. (2024)
W3126018057 10.1111/rec.13346 Jordi Cortina et al. (2021)
W2062482344 10.1073/pnas.1201040109 Joshua Goldstein et al. (2012)
W1540682446 10.1111/brv.12008 Aija S. Kukkala & Atte Moilanen (2012)
W3161819570 10.1126/science.abc4896 Louise O’Connor et al. (2021)
W2015619301 10.1073/pnas.1000530107 Lian Pin Koh & Jaboury Ghazoul (2010)
W4212886831 10.1111/geb.13459 Karel Mokany et al. (2022)
W2952896657 10.5194/gmd-11-4537-2018 Hyejin Kim et al. (2018)
W3151200781 10.1111/rec.13403 Ben L. Gilby et al. (2021)
W3185562566 10.1038/d41586-021-02041-4 Georgina G. Gurney et al. (2021)
W4406904698 10.1016/j.tree.2024.12.002 Sylvaine Giakoumi et al. (2025)
W3074014079 10.1007/s10113-020-01685-8 Clara J. Veerkamp et al. (2020)
W2769947232 10.1016/j.cosust.2017.10.004 Jean Paul Metzger et al. (2017)
W4382181311 10.1007/s11625-023-01316-1 América Paz Durán et al. (2023)
W3145276257 10.1016/j.jenvman.2021.112400 Yuyoung Choi et al. (2021)
W3044450114 10.1016/j.envsoft.2020.104806 Andrew J. Hoskins et al. (2020)
W2614376759 10.1016/j.envsci.2017.05.003 Vanessa M. Adams et al. (2017)
W4382751812 10.1016/j.biocon.2023.110068 Marcel Kok et al. (2023)
W4298615974 10.1007/s10980-022-01534-5 Tom Harwood et al. (2022)
W2972648221 10.1111/1365-2664.13506 Karel Mokany et al. (2019)
W2766457534 10.1016/j.landusepol.2017.10.017 Chiara Cortinovis & Davide Geneletti (2017)
W2035832288 10.1007/s10980-014-0085-0 Christian Albert et al. (2014)
W2046569818 10.1007/s10980-014-0052-9 Christine Fürst et al. (2014)
W2902345284 10.1007/s10980-018-0745-6 Marcin Spyra et al. (2018)
W3134065015 10.1016/j.envsci.2021.02.001 Davide Longato et al. (2021)
W2771003204 10.1080/21513732.2017.1396257 Christine Fürst et al. (2017)
W2999493939 10.1016/j.landurbplan.2019.103741 Christian Albert et al. (2020)
W3158973852 10.1016/j.landurbplan.2021.104129 Chiara Cortinovis et al. (2021)
W2604803374 10.1093/biosci/bix012 Charles H. Nilon et al. (2017)
W2592317409 10.1080/21513732.2017.1296494 Justice Nana Inkoom et al. (2017)
W2966683717 10.1007/978-3-030-20024-4 Davide Geneletti et al. (2019)
W2612157793 10.1016/j.marpol.2017.06.020 Mara Ntona & Elisa Morgera (2017)
W4289516997 10.1007/s41207-022-00315-5 Georgia Pozoukidou et al. (2022)
W4392293717 10.1016/j.ecolind.2024.111816 Wen Song et al. (2024)
W2810876831 10.3897/rio.4.e28045 Evelyn Underwood et al. (2018)
W2804302736 10.1016/j.scitotenv.2018.05.147 Maria da Luz Fernandes et al. (2018)
W4376627395 10.1016/j.marpol.2023.105655 Julie Reimer et al. (2023)
W4406477943 10.1007/s11252-024-01656-5 Israa Mahmoud et al. (2025)
W4404646473 10.1007/s00267-024-02086-x Nina Farwig et al. (2024)
W2904898541 10.1007/s10668-018-00300-5 Azime Tezer et al. (2018)
W4220936177 10.1016/j.oneear.2022.02.008 Christopher M. Raymond et al. (2022)
W2265414043 10.1146/annurev.ecolsys.32.081501.114012 Steward T. A. Pickett et al. (2001)
W2918948909 10.1016/j.gecco.2019.e00569 Arieanna C. Balbar & Anna Meta×as (2019)
W2099188808 10.1016/j.landurbplan.2006.04.005 Jolande W. Termorshuizen et al. (2006)
W2027491594 10.1016/j.ecolind.2015.03.029 Christian Albert et al. (2015)
W2766942546 10.1080/08920753.2017.1373450 Kekuewa Kikiloi et al. (2017)
W3194313759 10.1007/978-94-024-1681-7 Christina von Haaren et al. (2019)
W1966247992 10.1080/21513732.2011.617711 Davide Geneletti (2011)
W4409833817 10.1126/science.adn2225 Jedediah F. Brodie et al. (2025)
W2884329716 10.1007/978-3-319-94021-2 László Miklós & Anna Špinerová (2018)
W2524916285 10.1002/aqc.2645 Alan M. Friedlander et al. (2016)
W3021127236 10.1016/j.marpol.2020.103950 Thomas Robertson et al. (2020)
W4410629764 10.1016/j.rsma.2025.104257 Liisi Lees et al. (2025)
W4413900892 10.1016/j.tree.2025.07.014 Jian Peng et al. (2025)
W4412750811 10.1016/j.marpol.2025.106852 Jean‐Eudes Beuret et al. (2025)
W2023339029 10.1046/j.1523-1739.2003.01491.x Garry Peterson et al. (2003)
W2028797766 10.1016/j.cosust.2013.05.002 Ralf Seppelt et al. (2013)
W2073677603 10.1016/j.biocon.2015.02.015 Sebastián Martinuzzi et al. (2015)
W2159760863 10.1111/j.1466-8238.2010.00620.x Joachim H. Spangenberg et al. (2011)
W2015646994 10.1016/j.tree.2014.07.005 Carly N. Cook et al. (2014)
W1990241575 10.1007/s10021-004-0074-2 Paul Raskin (2005)
W4386734502 10.1146/annurev-environ-112321-095011 Steven J. Cork et al. (2023)
W4411717980 10.1007/s11625-025-01682-y Sana Okayasu et al. (2025)
W2161139387 10.1126/science.1196624 Henrique M. Pereira et al. (2010)
W56780107 10.1007/978-1-4612-0529-6_10 Jack Ahern (1999)
W2156111479 10.1111/gcb.12383 Sebastián Martinuzzi et al. (2013)
W2902463689 10.1016/j.tree.2018.10.006 Emily Nicholson et al. (2018)
W4406487214 10.1007/s10980-024-02042-4 Jiangxiao Qiu et al. (2025)
W4386609980 10.1038/s43588-023-00503-5 Yu Zheng et al. (2023)

SPC Corpus Measures and Numbers

These data is gathered from OpenAlex directly, not downloaded any works. The data is used to assess the quality of the TCA Corpus.

The query contains: - the search term (nature, spc, spcc) - the types selected (article, book, book-chapter, dissertation, editorial, preprint, report, review) - the date range (from 1992-01-01 to 2025-12-31)

Overall counts

Show the code
readRDS(file.path(params$corpus, "st_hits.rds")) |>
  dplyr::mutate(
    count = format(count, big.mark = ",")
  ) |>
  knitr::kable(format = "html", escape = FALSE)
count
spc 5,469,593
nature 23,683,854
spcc 2,723,160
openalex 204,670,196
Show the code
corpus_counts <- readRDS(file.path(params$corpus, "st_hits.rds"))

render_mermaid(
  file.path("figures", "overview.mmd"),
  list(
    SPC_LIST = format_count(corpus_counts[["spc", "count"]]),
    NATURE_LIST = format_count(corpus_counts[["nature", "count"]]),
    BASE_QUERY = format_count(corpus_counts[["spcc", "count"]])
  )
)

%%{init: {'flowchart': {'htmlLabels': true}}}%%
flowchart TD
    Start([Start literature search]) --> SPC["<u><span style='color:#1a0dab;'>spc_corpus.yaml<br/>Assemble base SPC corpus</span></u>"]
    click SPC "./input/search_terms/spc_corpus.yaml" "Open spc_corpus.yaml"
    SPC --> SPC_list["spc keyword set<br/>(planning & connectivity terms)<br/>(n = 5,469,593)"
]
    SPC --> NATURE_list["nature keyword set<br/>(environmental context terms)<br/>(n = 23,683,854)"
]
    SPC_list --> BaseQuery["Level 1 query<br/>spc terms AND nature dictionary<br/>(n = 2,723,160)"
]
    NATURE_list --> BaseQuery

    BaseQuery --> ChapterSelect{Apply chapter / theme refinements}

    ChapterSelect --> CH1["<u><span style='color:#1a0dab;'>Chapter 1<br/>chapter_1.yaml<br/>Governance & planning principles</span></u>"]
    click CH1 "./input/search_terms/chapter_1.yaml" "Open chapter_1.yaml"
    ChapterSelect --> CH2["<u><span style='color:#1a0dab;'>Chapter 2<br/>chapter_2.yaml<br/>GBF targets, nexus themes, SDGs</span></u>"]
    click CH2 "./input/search_terms/chapter_2.yaml" "Open chapter_2.yaml"
    ChapterSelect --> CH3["<u><span style='color:#1a0dab;'>Chapter 3<br/>chapter_3.yaml<br/>Restoration & conservation planning</span></u>"]
    click CH3 "./input/search_terms/chapter_3.yaml" "Open chapter_3.yaml"
    ChapterSelect --> CH4["<u><span style='color:#1a0dab;'>Chapter 4<br/>chapter_4.yaml<br/>Connectivity evidence & metrics</span></u>"]
    click CH4 "./input/search_terms/chapter_4.yaml" "Open chapter_4.yaml"
    ChapterSelect --> CH5["<u><span style='color:#1a0dab;'>Chapter 5<br/>chapter_5.yaml<br/>Foresight & futures (sections, themes, cross-cutting)</span></u>"]
    click CH5 "./input/search_terms/Chapter_5_1_2.yaml" "Open Chapter 5 search terms"
    ChapterSelect --> CH6["<u><span style='color:#1a0dab;'>Chapter 6<br/>chapter_6.yaml (+ chapter_6_r2.yaml optional)<br/>Enabling environment</span></u>"]
    click CH6 "./input/search_terms/chapter_6.yaml" "Open chapter_6.yaml"

Publication Years

Show the code
readRDS(file.path(params$corpus, "st_years.rds")) |>
  dplyr::mutate(
    dplyr::across(
      dplyr::starts_with("count_"),
      ~ base::format(.x, big.mark = ",")
    )
  ) |>
  knitr::kable(format = "html", escape = FALSE)
year count_openalex count_spc count_nature count_spcc
2025 6,759,989 307,595 1,139,326 177,274
2024 8,779,563 392,120 1,425,355 210,763
2023 8,797,625 395,085 1,431,833 200,199
2022 8,839,461 379,614 1,386,345 180,606
2021 8,614,182 340,394 1,296,829 170,475
2020 9,447,631 330,363 1,284,708 163,343
2019 9,300,213 298,454 1,184,897 146,454
2018 8,991,626 267,745 1,089,991 131,015
2017 8,935,977 244,799 1,017,004 118,811
2016 9,093,825 232,566 982,842 113,645
2015 8,858,710 227,094 966,034 111,768
2014 8,657,187 214,951 940,767 105,683
2013 8,386,159 202,080 903,931 99,187
2012 7,923,316 183,481 843,222 90,246
2011 7,666,345 170,144 790,533 83,283
2010 7,162,982 154,035 735,950 75,462
2009 6,722,036 137,435 670,965 66,977
2008 6,207,513 122,736 602,468 59,686
2007 5,758,445 109,176 553,764 53,313
2006 5,434,369 100,451 514,734 48,715
2005 4,975,856 88,987 465,762 43,441
2004 4,580,708 78,163 420,561 38,012
2003 4,281,875 71,410 391,727 34,653
2002 4,073,254 68,433 377,725 32,396
2001 3,482,992 51,394 309,300 25,400
2000 3,500,850 47,806 296,078 23,593
1999 2,882,341 40,271 250,190 19,497
1998 2,788,425 37,325 237,644 17,903
1997 2,624,912 34,810 222,653 16,502
1996 2,525,756 33,373 216,682 15,625
1995 2,330,686 30,547 201,033 14,274
1994 2,200,817 27,518 186,901 12,634
1993 2,089,662 25,549 178,050 11,621
1992 1,994,908 23,689 168,050 10,704

This graph only shows the relative nuymber of publications per year to identify different trends.

Show the code
readRDS(file.path(params$corpus, "st_years.rds")) |>
  tidyr::pivot_longer(
    cols = dplyr::starts_with("count_"),
    names_to = "source",
    values_to = "count",
    names_prefix = "count_"
  ) |>
  # scale each source so its total sum is 1
  dplyr::group_by(source) |>
  dplyr::mutate(
    total_count = base::sum(count, na.rm = TRUE),
    count = dplyr::if_else(total_count > 0, count / total_count, 0)
  ) |>
  dplyr::ungroup() |>
  dplyr::select(-total_count) |>
  ggplot2::ggplot(ggplot2::aes(x = year, y = count, color = source)) +
  ggplot2::geom_line(linewidth = 1) +
  ggplot2::geom_point(size = 1.5) +
  ggplot2::scale_y_continuous(
    labels = scales::label_percent(accuracy = 1),
    expand = ggplot2::expansion(mult = c(0.02, 0.06))
  ) +
  ggplot2::labs(
    x = "Year",
    y = "Share of total works (sum-scaled per source)",
    color = "Source",
    title = "Publications per year by source (each source sums to 1)"
  ) +
  ggplot2::theme_minimal(base_size = 14) +
  ggplot2::theme(
    legend.position = "bottom",
    panel.grid.minor = ggplot2::element_blank()
  )

Language

Show the code
readRDS(file.path(params$corpus, "st_languages.rds")) |>
  dplyr::mutate(
    dplyr::across(
      dplyr::starts_with("count_"),
      ~ base::format(.x, big.mark = ",")
    )
  ) |>
  knitr::kable(format = "html", escape = FALSE)
language count_openalex count_spc count_nature count_spcc
English 148,822,592 5,137,041 22,098,469 2,578,596
Spanish 7,992,326 70,344 340,520 27,611
Japanese 7,787,043 1,671 14,540 778
French 5,975,477 36,971 264,236 17,697
German 5,947,018 13,788 65,913 4,855
Chinese 4,522,690 3,759 35,365 1,720
Portuguese 4,328,272 31,390 133,983 15,180
Indonesian 3,064,780 41,054 164,597 13,762
Korean 3,004,649 27,136 98,825 12,176
Russian 2,810,496 27,888 133,723 13,502
Italian 1,360,461 7,177 31,499 3,990
Polish 1,266,223 4,427 24,397 2,300
Turkish 883,660 5,385 25,615 2,648
Dutch 829,340 2,141 12,381 1,083
Arabic 733,470 3,566 18,605 1,421
Ukrainian 552,461 5,708 21,025 2,951
Swedish 512,730 5,529 17,880 2,380
Persian 489,594 2,445 7,638 1,420
Czech 486,998 4,091 17,725 1,469
Catalan 322,666 1,252 8,669 652
Croatian 228,058 2,992 13,096 1,366
Norwegian 196,572 1,015 4,674 431
Finnish 189,872 856 3,539 405
Latvian 188,997 2,850 13,086 580
Hungarian 176,004 1,560 7,158 744
Modern Greek (1453-) 161,595 1,049 4,177 503
Danish 160,677 323 2,656 126
Malay (macrolanguage) 153,000 2,645 10,174 1,198
Thai 108,263 2,585 5,217 860
Slovenian 106,919 805 3,628 392
Lithuanian 92,243 541 2,253 286
Vietnamese 80,016 215 1,462 141
Serbo-Croatian 79,436 1,216 4,227 510
Romanian 71,162 610 3,741 302
Serbian 65,139 538 2,476 253
NA 50,703 292 2,935 172
Slovak 37,104 301 1,594 130
Estonian 32,065 180 1,371 103
Galician 31,130 121 651 33
Hebrew 26,516 221 2,518 116
Bulgarian 25,723 178 862 98
Basque 25,334 114 603 44
Uzbek 25,000 10 1,093 5
Afrikaans 24,429 299 1,619 164
Latin 21,587 68 535 37
Esperanto 21,008 112 688 45
Hindi 13,249 24 194 8
Kazakh 12,109 152 713 71
Icelandic 11,393 57 271 29
Azerbaijani 11,283 91 382 60
Norwegian Nynorsk 10,321 49 204 22
Macedonian 8,080 55 209 16
Bosnian 7,609 85 365 40
Albanian 7,221 24 149 17
Georgian 6,390 40 173 26
Tagalog 5,503 66 277 30
Belarusian 5,016 16 84 9
Armenian 4,712 86 424 48
Tamil 4,469 11 106 3
Welsh 4,229 9 86 5
Urdu 3,971 16 220 7
Tajik 3,827 7 25 3
Irish 3,788 17 169 13
Yiddish 3,734 20 422 10
Mongolian 3,521 14 95 5
Nepali (macrolanguage) 3,180 13 121 6
Swahili (macrolanguage) 3,036 11 74 8
Bengali 2,780 14 43 9
Malagasy 2,741 5 71 3
Occitan (post 1500) 2,415 10 41 4
Kannada 2,127 10 78 4
Pushto 2,080 1 7 0
Western Frisian 2,076 12 57 7
Marathi 2,060 6 49 4
Ido 2,015 19 158 13
Breton 1,935 10 60 5
Malayalam 1,504 7 99 3
Javanese 1,391 16 63 5
Kirghiz 1,214 10 62 2
Kurdish 1,165 4 23 3
Luxembourgish 1,105 4 46 3
Sundanese 1,016 5 49 1
Sanskrit 1,006 0 11 0
Maltese 963 1 12 0
Sinhala 793 3 9 1
Interlingua (International Auxiliary Language Association) 768 5 17 3
Telugu 767 2 36 2
Gujarati 685 1 6 1
Interlingue 673 11 29 4
Tatar 626 7 11 4
Walloon 585 3 25 1
Scottish Gaelic 571 1 10 1
Ndonga 547 69 253 49
Bashkir 524 2 8 0
Dhivehi 482 0 3 0
Volapük 347 4 7 1
Oriya (macrolanguage) 341 0 2 0
Burmese 340 3 16 1
Panjabi 334 0 11 0
Somali 311 2 4 1
Tibetan 311 0 4 0
Aragonese 305 1 5 0
Haitian 292 1 15 1
Cornish 236 0 5 0
Lao 223 2 11 1
Central Khmer 220 4 7 1
Amharic 184 2 4 2
Quechua 183 0 6 0
Chechen 143 0 1 0
Manx 141 2 6 0
Limburgan 138 0 1 0
Romansh 124 2 4 0
Yoruba 98 2 7 1
Guarani 97 0 1 0
Sindhi 97 0 0 0
Uighur 62 0 1 0
Turkmen 61 1 1 1
Assamese 52 0 0 0
Faroese 50 8 28 8
Chuvash 42 0 2 0
Ossetian 35 0 0 0
Norwegian Bokmål 31 0 1 0
Komi 23 6 4 4
Sardinian 14 0 1 0
Corsican 11 0 0 0
Avaric 9 0 0 0
Inuktitut 1 0 0 0
Northern Sami 1 0 0 0
Tsonga 1 0 0 0

This graph only shows the relative number of publications per year to identify different trends.

Show the code
readRDS(file.path(params$corpus, "st_languages.rds")) |>
  # keep top 15 languages by total (before scaling)
  dplyr::mutate(
    total = count_openalex + count_spc + count_nature + count_spcc
  ) |>
  dplyr::slice_max(total, n = 15) |>
  dplyr::arrange(dplyr::desc(total)) |>
  # fix display order so largest stays on top
  dplyr::mutate(language = factor(language, levels = rev(language))) |>
  dplyr::select(-total) |>
  # reshape wide → long
  tidyr::pivot_longer(
    cols = dplyr::starts_with("count_"),
    names_to = "source",
    values_to = "count",
    names_prefix = "count_"
  ) |>
  # scale so each source sums to 1
  dplyr::group_by(source) |>
  dplyr::mutate(
    total_source = base::sum(count, na.rm = TRUE),
    count = dplyr::if_else(total_source > 0, count / total_source, 0)
  ) |>
  dplyr::ungroup() |>
  dplyr::select(-total_source) |>
  ggplot2::ggplot(ggplot2::aes(x = language, y = count, fill = source)) +
  ggplot2::geom_col(position = "dodge") +
  ggplot2::coord_flip() +
  ggplot2::scale_y_continuous(
    labels = scales::label_percent(accuracy = 1),
    expand = ggplot2::expansion(mult = c(0, 0.05))
  ) +
  ggplot2::labs(
    x = "Language",
    y = "Share of total works within each source",
    fill = "Source",
    title = "Publications by language (top 15), scaled so each source sums to 1"
  ) +
  ggplot2::theme_minimal(base_size = 14) +
  ggplot2::theme(
    legend.position = "bottom",
    panel.grid.minor = ggplot2::element_blank()
  )

Individual Chapter

Here we show the sub-searches for the individual chapters. In the tables indicating the number, an NA value indicates that the search string was to long (most likely) or any other error occured in the search. The same applies when an error message is given.

Chapter 1

Show the code
ch1_hits <- readRDS(file.path(params$chapter_1, "st_hits.rds"))

ch1_counts <- setNames(ch1_hits$count, rownames(ch1_hits))

ch1_hits |>
  dplyr::mutate(count = format_count(count)) |>
  knitr::kable(
    col.names = c("Count"),
    align = "r"
  )
Count
Set 1 7
Set 2 323
Set 3 8
Set 4 7
Set 5 172
Set 6 1,430
Set 7 0
Show the code
render_mermaid(
  file.path("figures", "chapter1.mmd"),
  c(
    C1_1 = format_count(ch1_counts[["Set 1"]]),
    C1_2 = format_count(ch1_counts[["Set 2"]]),
    C1_3 = format_count(ch1_counts[["Set 3"]]),
    C1_4 = format_count(ch1_counts[["Set 4"]]),
    C1_5 = format_count(ch1_counts[["Set 5"]]),
    C1_6 = format_count(ch1_counts[["Set 6"]]),
    C1_7 = format_count(ch1_counts[["Set 7"]])
  )
)

%%{init: {'flowchart': {'htmlLabels': true}}}%%
flowchart LR
    Start([SPC Corpus]) --> Ch1["<u><span style='color:#1a0dab;'>chapter_1.yaml<br/>Level 2 refinements</span></u>"]
    click Ch1 "./input/search_terms/chapter_1.yaml" "Open chapter_1.yaml"

    subgraph Chapter1Sets["Chapter 1 thematic searches"]
        direction TB
        C1_1["Set 1:<br/>land/spatial planning<br/>+ biodiversity goals<br/>+ societal needs/values<br/>(n = 7)"]
        C1_2["Set 2:<br/>adaptive/scenario planning<br/>+ monitoring/feedback<br/>(n = 323)"]
        C1_3["Set 3:<br/>evidence & precaution<br/>+ ILK knowledge base<br/>(n = 8)"]
        C1_4["Set 4:<br/>multilevel/transparent governance<br/>+ customary coherence<br/>(n = 7)"]
        C1_5["Set 5:<br/>participatory planning<br/>+ co-design / engagement<br/>(n = 172)"]
        C1_6["Set 6:<br/>equity / rights / tenure<br/>+ justice outcomes<br/>(n = 1,430)"]
        C1_7["Set 7:<br/>connectivity (land-sea/cross-scale)<br/>+ nexus & climate links<br/>(n = 0)"]
    end

    Ch1 --> C1_1
    Ch1 --> C1_2
    Ch1 --> C1_3
    Ch1 --> C1_4
    Ch1 --> C1_5
    Ch1 --> C1_6
    Ch1 --> C1_7

Chapter 2

Show the code
ch2_hits <- readRDS(file.path(params$chapter_2, "st_hits.rds"))

ch2_counts <- lapply(ch2_hits, function(df) {
  setNames(df$count, rownames(df))
})

do.call(
  rbind,
  lapply(names(ch2_hits), function(sect_nm) {
    df <- ch2_hits[[sect_nm]]
    df$section <- sect_nm
    df$set <- rownames(df)
    rownames(df) <- NULL
    df[,
      c("section", "set", setdiff(names(df), c("section", "set"))),
      drop = FALSE
    ]
  })
) |>
  dplyr::mutate(
    count = format_count(count)
  ) |>
  knitr::kable(
    col.names = c("Section", "Set", "Count"),
    align = c("c", "c", "r")
  )
Section Set Count
GBF GBF-1 - Urban 360,504
GBF GBF-1 - Rural 523,744
GBF GBF-1 - Freshwater 736,401
GBF GBF-1 - Marine 272,191
GBF GBF - 2 (Ecosystem restoration) 1,007,104
Targets Target 3 (Protected areas / conservation coverage) 521,380
Targets Target 4 (Species extinction & genetic diversity) 42,236
Targets Target 5 (Wild species trade & use) 78,533
Targets Target 6 (Invasive alien species) 14,338
Targets Target 7 (Pollution) 193,450
Targets Target 8 (Climate change & resilience) 224,536
Targets Target 9 (Wild species management & use) 8,789
Targets Target 10 (Sustainability in agriculture, aquaculture, forestry & fisheries) 262,439
Targets Target 11 (Nature’s contributions to people / ecosystem services) 57,410
Targets Target 12 (Green & blue spaces, urban planning) 64,676
Targets Target 13 (Genetic resources & benefit sharing) 9,836
Targets Target 14 (Biodiversity integration in decision-making) 141,058
Targets Target 15 (Business & financial institutions disclosure & risk) 242,167
Targets Target 16 (Sustainable consumption) 91,241
Targets Target 17 (Biosafety) 8,226
Targets Target 18 (Harmful incentives / subsidies) 43,606
Targets Target 19 (Finance mobilisation) 83,265
Targets Target 20 (Capacity building, technology & cooperation) 477,610
Targets Target 21 (Data, knowledge & monitoring) 1,158,163
Targets Target 22 (Participation & inclusion) 147,350
Targets Target 23 (Gender equality) 65,793
Related to spatial planning process Set Related 123,964
Nexus Water 450,518
Nexus Food 360,589
Nexus Health 375,691
Nexus Climate 577,765
Show the code
ch2_gbf <- ch2_counts[["GBF"]]
ch2_targets <- ch2_counts[["Targets"]]
ch2_rel <- ch2_counts[["Related to spatial planning process"]]
ch2_nexus <- ch2_counts[["Nexus"]]

fmt_gbf <- function(name) format_count(ch2_gbf[[name]])
fmt_target <- function(name) format_count(ch2_targets[[name]])
fmt_rel <- function(name) format_count(ch2_rel[[name]])
fmt_nexus <- function(name) format_count(ch2_nexus[[name]])

render_mermaid(
  file.path("figures", "chapter2.mmd"),
  c(
    GBF_Urban = fmt_gbf("GBF-1 - Urban"),
    GBF_Rural = fmt_gbf("GBF-1 - Rural"),
    GBF_Fresh = fmt_gbf("GBF-1 - Freshwater"),
    GBF_Marine = fmt_gbf("GBF-1 - Marine"),
    GBF_Restore = fmt_gbf("GBF - 2 (Ecosystem restoration)"),
    T3 = fmt_target("Target 3 (Protected areas / conservation coverage)"),
    T4 = fmt_target("Target 4 (Species extinction & genetic diversity)"),
    T5 = fmt_target("Target 5 (Wild species trade & use)"),
    T6 = fmt_target("Target 6 (Invasive alien species)"),
    T7 = fmt_target("Target 7 (Pollution)"),
    T8 = fmt_target("Target 8 (Climate change & resilience)"),
    T9 = fmt_target("Target 9 (Wild species management & use)"),
    T10 = fmt_target(
      "Target 10 (Sustainability in agriculture, aquaculture, forestry & fisheries)"
    ),
    T11 = fmt_target(
      "Target 11 (Nature\u2019s contributions to people / ecosystem services)"
    ),
    T12 = fmt_target("Target 12 (Green & blue spaces, urban planning)"),
    T13 = fmt_target("Target 13 (Genetic resources & benefit sharing)"),
    T14 = fmt_target("Target 14 (Biodiversity integration in decision-making)"),
    T15 = fmt_target(
      "Target 15 (Business & financial institutions disclosure & risk)"
    ),
    T16 = fmt_target("Target 16 (Sustainable consumption)"),
    T17 = fmt_target("Target 17 (Biosafety)"),
    T18 = fmt_target("Target 18 (Harmful incentives / subsidies)"),
    T19 = fmt_target("Target 19 (Finance mobilisation)"),
    T20 = fmt_target("Target 20 (Capacity building, technology & cooperation)"),
    T21 = fmt_target("Target 21 (Data, knowledge & monitoring)"),
    T22 = fmt_target("Target 22 (Participation & inclusion)"),
    T23 = fmt_target("Target 23 (Gender equality)"),
    REL = fmt_rel("Set Related"),
    Nexus_Water = fmt_nexus("Water"),
    Nexus_Food = fmt_nexus("Food"),
    Nexus_Health = fmt_nexus("Health"),
    Nexus_Climate = fmt_nexus("Climate")
  )
)

%%{init: {'flowchart': {'htmlLabels': true}}}%%
flowchart LR
    Start([SPC Corpus]) --> Ch2L2["<u><span style='color:#1a0dab;'>chapter_2.yaml<br/>Level 2 GBF bundles</span></u>"]
    click Ch2L2 "../search_terms/chapter_2.yaml" "Open chapter_2.yaml"

    subgraph L1_GBF["GBF contexts & targets"]
        direction TB
        GBF_Urban["GBF-1 Urban<br/>(n = 360,504)"]
        GBF_Rural["GBF-1 Rural<br/>(n = 523,744)"]
        GBF_Fresh["GBF-1 Freshwater<br/>(n = 736,401)"]
        GBF_Marine["GBF-1 Marine<br/>(n = 272,191)"]
        GBF_Restore["GBF-2 Ecosystem restoration<br/>(n = 1,007,104)"]
    end
    Ch2L2 --> GBF_Urban
    Ch2L2 --> GBF_Rural
    Ch2L2 --> GBF_Fresh
    Ch2L2 --> GBF_Marine
    Ch2L2 --> GBF_Restore

    subgraph L1_TARGET["GBF contexts & targets"]
        T3["Target 3<br/>(n = 521,380)"]
        T4["Target 4<br/>(n = 42,236)"]
        T5["Target 5<br/>(n = 78,533)"]
        T6["Target 6<br/>(n = 14,338)"]
        T7["Target 7<br/>(n = 193,450)"]
        T8["Target 8<br/>(n = 224,536)"]
        T9["Target 9<br/>(n = 8,789)"]
        T10["Target 10<br/>(n = 262,439)"]
        T11["Target 11<br/>(n = 57,410)"]
        T12["Target 12<br/>(n = 64,676)"]
        T13["Target 13<br/>(n = 9,836)"]
        T14["Target 14<br/>(n = 141,058)"]
        T15["Target 15<br/>(n = 242,167)"]
        T16["Target 16<br/>(n = 91,241)"]
        T17["Target 17<br/>(n = 8,226)"]
        T18["Target 18<br/>(n = 43,606)"]
        T19["Target 19<br/>(n = 83,265)"]
        T20["Target 20<br/>(n = 477,610)"]
        T21["Target 21<br/>(n = 1,158,163)"]
        T22["Target 22<br/>(n = 147,350)"]
        T23["Target 23<br/>(n = 65,793)"]
    end
    Ch2L2 --> T3
    Ch2L2 --> T4
    Ch2L2 --> T5
    Ch2L2 --> T6
    Ch2L2 --> T7
    Ch2L2 --> T8
    Ch2L2 --> T9
    Ch2L2 --> T10
    Ch2L2 --> T11
    Ch2L2 --> T12
    Ch2L2 --> T13
    Ch2L2 --> T14
    Ch2L2 --> T15
    Ch2L2 --> T16
    Ch2L2 --> T17
    Ch2L2 --> T18
    Ch2L2 --> T19
    Ch2L2 --> T20
    Ch2L2 --> T21
    Ch2L2 --> T22
    Ch2L2 --> T23

    subgraph L1_REL["Spatial Planning Related"]
        REL["Spatial Planning Related<br/>(n = 123,964)"]
    end
    Ch2L2 --> REL

    subgraph L1_NexusSets["Nexus"]
        direction TB
        Nexus_Water["Water<br/>(n = 450,518)"]
        Nexus_Food["Food<br/>(n = 360,589)"]
        Nexus_Health["Health<br/>(n = 375,691)"]
        Nexus_Climate["Climate<br/>(n = 577,765)"]
    end
    Ch2L2 --> Nexus_Water
    Ch2L2 --> Nexus_Food
    Ch2L2 --> Nexus_Health
    Ch2L2 --> Nexus_Climate

    L1_GBF --> Ch2L4["<u><span style='color:#1a0dab;'>chapter_2_sdg.yaml<br/>Level 4 SDG filters</span></u>"]
    L1_NexusSets --> Ch2L4
    L1_REL --> Ch2L4
    click Ch2L4 "../search_terms/chapter_2_sdg.yaml" "Open chapter_2_sdg.yaml"
    subgraph SDGSets["SDG goal filters"]
        direction TB
        SDG1["SDG 1"]
        SDG2["SDG 2"]
        SDG3["SDG 3"]
        SDG4["SDG 4"]
        SDG5["SDG 5"]
        SDG6["SDG 6"]
        SDG7["SDG 7"]
        SDG8["SDG 8"]
        SDG9["SDG 9"]
        SDG10["SDG 10"]
        SDG11["SDG 11"]
        SDG12["SDG 12"]
        SDG13["SDG 13"]
        SDG14["SDG 14"]
        SDG15["SDG 15"]
        SDG16["SDG 16"]
        SDG17["SDG 17"]
    end
    Ch2L4 --> SDG1
    Ch2L4 --> SDG2
    Ch2L4 --> SDG3
    Ch2L4 --> SDG4
    Ch2L4 --> SDG5
    Ch2L4 --> SDG6
    Ch2L4 --> SDG7
    Ch2L4 --> SDG8
    Ch2L4 --> SDG9
    Ch2L4 --> SDG10
    Ch2L4 --> SDG11
    Ch2L4 --> SDG12
    Ch2L4 --> SDG13
    Ch2L4 --> SDG14
    Ch2L4 --> SDG15
    Ch2L4 --> SDG16
    Ch2L4 --> SDG17

Chapter 3

Show the code
ch3_hits <- readRDS(file.path(params$chapter_3, "st_hits.rds"))

ch3_counts <- setNames(ch3_hits$count, rownames(ch3_hits))

ch3_hits |>
  dplyr::mutate(count = format_count(count)) |>
  knitr::kable(
    col.names = c("Count"),
    align = "r"
  )
Count
Set 1 1,947
Set 2 11,292
Set 3 658
Set 4 1,318
Set 5 560
Set 6 439
Set 7 694
Set 8 26
Set 9 0
Set 10 26
Show the code
render_mermaid(
  file.path("figures", "chapter3.mmd"),
  c(
    C3_1 = format_count(ch3_counts[["Set 1"]]),
    C3_2 = format_count(ch3_counts[["Set 2"]]),
    C3_3 = format_count(ch3_counts[["Set 3"]]),
    C3_4 = format_count(ch3_counts[["Set 4"]]),
    C3_5 = format_count(ch3_counts[["Set 5"]]),
    C3_6 = format_count(ch3_counts[["Set 6"]]),
    C3_7 = format_count(ch3_counts[["Set 7"]]),
    C3_8 = format_count(ch3_counts[["Set 8"]]),
    C3_9 = format_count(ch3_counts[["Set 9"]]),
    C3_10 = format_count(ch3_counts[["Set 10"]])
  )
)

%%{init: {'flowchart': {'htmlLabels': true}}}%%
flowchart LR
    Start([SPC Corpus]) --> Ch3["<u><span style='color:#1a0dab;'>chapter_3.yaml<br/>Level 2 refinements</span></u>"]
    click Ch3 "./input/search_terms/chapter_3.yaml" "Open chapter_3.yaml"

    subgraph Chapter3Sets["Chapter 3 searches"]
        direction TB
        C3_1["Set 1:<br/>Protected/OECM + NBSAP + cases<br/>+ spatial prioritization + regional scales<br/>(n = 1,947)"]
        C3_2["Set 2:<br/>Restoration types + inclusivity & ILK<br/>(n = 11,292)"]
        C3_3["Set 3:<br/>Restoration planning + connectivity + resilience<br/>(n = 658)"]
        C3_4["Set 4:<br/>Systematic conservation planning / gap analysis<br/>(n = 1,318)"]
        C3_5["Set 5:<br/>Protected area & connectivity planning<br/>(n = 560)"]
        C3_6["Set 6:<br/>Landscape/species/corridor networks<br/>(n = 439)"]
        C3_7["Set 7:<br/>Conservation planning + ecosystem services<br/>(n = 694)"]
        C3_8["Set 8:<br/>Participatory conservation mapping<br/>(n = 26)"]
        C3_9["Set 9:<br/>Conservation effectiveness + spatial planning<br/>(n = 0)"]
        C3_10["Set 10:<br/>Adaptive management under global change drivers<br/>(n = 26)"]
    end
    Ch3 --> C3_1
    Ch3 --> C3_2
    Ch3 --> C3_3
    Ch3 --> C3_4
    Ch3 --> C3_5
    Ch3 --> C3_6
    Ch3 --> C3_7
    Ch3 --> C3_8
    Ch3 --> C3_9
    Ch3 --> C3_10

Chapter 4

Show the code
ch4_hits <- readRDS(file.path(params$chapter_4, "st_hits.rds"))

ch4_counts <- setNames(ch4_hits$count, rownames(ch4_hits))

ch4_hits |>
  dplyr::mutate(count = format_count(count)) |>
  knitr::kable(
    col.names = c("Count"),
    align = "r"
  )
Count
Set 1 1,381
Set 2 242
Set 3 6,107
Set 4 28,416
Set 5 373
Set 6 2,619
Set 7 0
Set 8 82,136
Show the code
render_mermaid(
  file.path("figures", "chapter4.mmd"),
  c(
    C4_1 = format_count(ch4_counts[["Set 1"]]),
    C4_2 = format_count(ch4_counts[["Set 2"]]),
    C4_3 = format_count(ch4_counts[["Set 3"]]),
    C4_4 = format_count(ch4_counts[["Set 4"]]),
    C4_5 = format_count(ch4_counts[["Set 5"]]),
    C4_6 = format_count(ch4_counts[["Set 6"]]),
    C4_7 = format_count(ch4_counts[["Set 7"]]),
    C4_8 = format_count(ch4_counts[["Set 8"]])
  )
)

%%{init: {'flowchart': {'htmlLabels': true}}}%%
flowchart LR
    Start([SPC Corpus]) --> Ch4["<u><span style='color:#1a0dab;'>chapter_4.yaml<br/>Level 2 refinements</span></u>"]
    click Ch4 "./input/search_terms/chapter_4.yaml" "Open chapter_4.yaml"

    subgraph Chapter4Sets["Chapter 4 searches"]
        direction TB
        C4_1["Set 1:<br/>Connectivity review articles<br/>(n = 1,381)"]
        C4_2["Set 2:<br/>Connectivity benefits vs risks<br/>+ ecosystem services<br/>(n = 242)"]
        C4_3["Set 3:<br/>Structural vs functional connectivity<br/>(n = 6,107)"]
        C4_4["Set 4:<br/>Connectivity modelling toolkits<br/>(n = 28,416)"]
        C4_5["Set 5:<br/>Connectivity indicators & metrics<br/>(n = 373)"]
        C4_6["Set 6:<br/>Policy & governance integration<br/>(n = 2,619)"]
        C4_7["Set 7:<br/>Multilevel / transboundary governance<br/>+ IPLC inclusion + land tenure<br/>(n = 0)"]
        C4_8["Set 8:<br/>Movement ecology<br/>(dispersal / migration / permeability)<br/>(n = 82,136)"]
    end
    Ch4 --> C4_1
    Ch4 --> C4_2
    Ch4 --> C4_3
    Ch4 --> C4_4
    Ch4 --> C4_5
    Ch4 --> C4_6
    Ch4 --> C4_7
    Ch4 --> C4_8

Chapter 5

Show the code
ch5_hits <- readRDS(file.path(params$chapter_5, "st_hits.rds"))

ch5_counts <- lapply(ch5_hits, function(df) {
  setNames(df$count, rownames(df))
})

do.call(
  rbind,
  lapply(names(ch5_hits), function(sect_nm) {
    df <- ch5_hits[[sect_nm]]
    df$section <- sect_nm
    df$set <- rownames(df)
    rownames(df) <- NULL
    df[,
      c("section", "set", setdiff(names(df), c("section", "set"))),
      drop = FALSE
    ]
  })
) |>
  dplyr::mutate(
    count = format_count(count)
  ) |>
  knitr::kable(
    col.names = c("Section", "Set", "Count"),
    align = c("c", "c", "r")
  )
Section Set Count
Sections 1 and 2 Set 1 191,656
Sections 1 and 2 Set 2 59,140
Sections 1 and 2 Set 3 56,844
Sections 1 and 2 Set 4 384,213
Sections 1 and 2 Set 5 262,209
Section 3 Set 1 2,784
Section 3 Set 2 14,829
Section 3 Set 3 113
Section 4 Set 1 58,886
Section 4 Set 2 20,753
Section 4 Set 3 13,694
Section 5 Set 1 14,967
Section 5 Set 2 77,271
Section 5 Set 3 48,732
Section 5 Set 4 26,570
Section 6 Set 1 166
Section 6 Set 2 4,055
Section 6 Set 3 2,908
Section 6 Set 4 2,389
Cross-cutting sets Set 1 43,582
Cross-cutting sets Set 2 216,655
Show the code
fmt_ch5 <- function(section, set) {
  format_count(ch5_counts[[section]][[set]])
}

render_mermaid(
  file.path("figures", "chapter5.mmd"),
  c(
    C5_1 = fmt_ch5("Sections 1 and 2", "Set 1"),
    C5_2 = fmt_ch5("Sections 1 and 2", "Set 2"),
    C5_3 = fmt_ch5("Sections 1 and 2", "Set 3"),
    C5_4 = fmt_ch5("Sections 1 and 2", "Set 4"),
    C5_5 = fmt_ch5("Sections 1 and 2", "Set 5"),
    C5_3a = fmt_ch5("Section 3", "Set 1"),
    C5_3b = fmt_ch5("Section 3", "Set 2"),
    C5_3c = fmt_ch5("Section 3", "Set 3"),
    C5_4a = fmt_ch5("Section 4", "Set 1"),
    C5_4b = fmt_ch5("Section 4", "Set 2"),
    C5_4c = fmt_ch5("Section 4", "Set 3"),
    C5_5a = fmt_ch5("Section 5", "Set 1"),
    C5_5b = fmt_ch5("Section 5", "Set 2"),
    C5_5c = fmt_ch5("Section 5", "Set 3"),
    C5_5d = fmt_ch5("Section 5", "Set 4"),
    C5_6a = fmt_ch5("Section 6", "Set 1"),
    C5_6b = fmt_ch5("Section 6", "Set 2"),
    C5_6c = fmt_ch5("Section 6", "Set 3"),
    C5_6d = fmt_ch5("Section 6", "Set 4"),
    CC1 = fmt_ch5("Cross-cutting sets", "Set 1"),
    CC2 = fmt_ch5("Cross-cutting sets", "Set 2")
  )
)

%%{init: {'flowchart': {'htmlLabels': true}}}%%
flowchart LR
    Start([SPC Corpus]) --> Ch5L2["<u><span style='color:#1a0dab;'>chapter_5.yaml<br/>Level 2 foresight framing</span></u>"]
    click Ch5L2 "./input/search_terms/chapter_5.yaml" "Open chapter_5.yaml"

    subgraph L2Sets["Section 5.1–5.2 searches"]
        direction TB
        C5_1["Set 1:<br/>Future + project*/predict*/scenario<br/>(n = 191,656)"]
        C5_2["Set 2:<br/>Future + pathway*/narrative*/vision*<br/>(n = 59,140)"]
        C5_3["Set 3:<br/>Future-proof*/anticipat*/scenario planning<br/>(n = 56,844)"]
        C5_4["Set 4:<br/>Foresight*/backcasting/simulat*/trend*<br/>(n = 384,213)"]
        C5_5["Set 5:<br/>Model* AND scenario<br/>(n = 262,209)"]
    end
    Ch5L2 --> C5_1
    Ch5L2 --> C5_2
    Ch5L2 --> C5_3
    Ch5L2 --> C5_4
    Ch5L2 --> C5_5

    subgraph L3Sets["Section 5.3 searches"]
        direction TB
        C5_3a["Set 1:<br/>Drivers of change<br/>(n = 2,784)"]
        C5_3b["Set 2:<br/>Driver modelling approaches<br/>(n = 14,829)"]
        C5_3c["Set 3:<br/>Driver gaps<br/>(n = 113)"]
    end
    Ch5L2 --> C5_3a
    Ch5L2 --> C5_3b
    Ch5L2 --> C5_3c

    subgraph L4Sets["Section 5.4 searches"]
        direction TB
        C5_4a["Set 1:<br/>Interactions (synergy/trade-off/nexus)<br/>(n = 58,886)"]
        C5_4b["Set 2:<br/>Response options (integrated planning / NbS)<br/>(n = 20,753)"]
        C5_4c["Set 3:<br/>Cross-scale synergy & trade-off terms<br/>(n = 13,694)"]
    end
    Ch5L2 --> C5_4a
    Ch5L2 --> C5_4b
    Ch5L2 --> C5_4c

    subgraph L5Sets["Section 5.5 searches"]
        direction TB
        C5_5a["Set 1:<br/>Adaptive / transformative management<br/>(n = 14,967)"]
        C5_5b["Set 2:<br/>Uncertainty quantification<br/>(n = 77,271)"]
        C5_5c["Set 3:<br/>Tipping points & thresholds<br/>(n = 48,732)"]
        C5_5d["Set 4:<br/>Cascading risks & precaution<br/>(n = 26,570)"]
    end
    Ch5L2 --> C5_5a
    Ch5L2 --> C5_5b
    Ch5L2 --> C5_5c
    Ch5L2 --> C5_5d

    subgraph L6Sets["Section 5.6 searches"]
        direction TB
        C5_6a["Set 1:<br/>Science-policy-practice pathways<br/>(n = 166)"]
        C5_6b["Set 2:<br/>ILK integration & community planning<br/>(n = 4,055)"]
        C5_6c["Set 3:<br/>Enabling factors & coordination<br/>(n = 2,908)"]
        C5_6d["Set 4:<br/>Shocks, surprises, uncertainties<br/>(n = 2,389)"]
    end
    Ch5L2 --> C5_6a
    Ch5L2 --> C5_6b
    Ch5L2 --> C5_6c
    Ch5L2 --> C5_6d

    subgraph CCSets["Cross-cutting searches"]
        direction TB
        CC1["Set 1:<br/>Scales & telecoupling<br/>(n = 43,582)"]
        CC2["Set 2:<br/>Co-production & inclusion<br/>(n = 216,655)"]
    end
    Ch5L2 --> CC1
    Ch5L2 --> CC2

Chapter 6

Show the code
ch6_hits <- readRDS(file.path(params$chapter_6, "st_hits.rds"))

ch6_counts <- setNames(ch6_hits$count, rownames(ch6_hits))

ch6_hits |>
  dplyr::mutate(count = format_count(count)) |>
  knitr::kable(
    col.names = c("Count"),
    align = "r"
  )
Count
Set 1 12,026
Set 2 1,442
Set 3 79,048
Set 4 157,749
Set 5 3,560
Set 6 50,361
Set 7 234,056
Set 8.1 295,693
Set 8.2 17,742
Set 9 58,537
Set 10 18,407
Show the code
render_mermaid(
  file.path("figures", "chapter6.mmd"),
  c(
    C6_1 = format_count(ch6_counts[["Set 1"]]),
    C6_2 = format_count(ch6_counts[["Set 2"]]),
    C6_3 = format_count(ch6_counts[["Set 3"]]),
    C6_4 = format_count(ch6_counts[["Set 4"]]),
    C6_5 = format_count(ch6_counts[["Set 5"]]),
    C6_6 = format_count(ch6_counts[["Set 6"]]),
    C6_7 = format_count(ch6_counts[["Set 7"]]),
    C6_8 = format_count(sum(ch6_counts[c("Set 8.1", "Set 8.2")], na.rm = TRUE)),
    C6_9 = format_count(ch6_counts[["Set 9"]]),
    C6_10 = format_count(ch6_counts[["Set 10"]])
  )
)

%%{init: {'flowchart': {'htmlLabels': true}}}%%
flowchart LR
    Start([SPC Corpus]) --> Ch6["<u><span style='color:#1a0dab;'>chapter_6.yaml<br/>Level 2 refinements</span></u>"]
    click Ch6 "./input/search_terms/chapter_6.yaml" "Open chapter_6.yaml"

    subgraph Chapter6Sets["Chapter 6 searches"]
        direction TB
        C6_1["Set 1:<br/>Institutional & governance structures<br/>(n = 12,026)"]
        C6_2["Set 2:<br/>Political & strategic leadership<br/>(n = 1,442)"]
        C6_3["Set 3:<br/>Socio-cultural & stakeholder engagement<br/>(n = 79,048)"]
        C6_4["Set 4:<br/>Collaboration, trust & networks<br/>(n = 157,749)"]
        C6_5["Set 5:<br/>Financial & economic mechanisms<br/>(n = 3,560)"]
        C6_6["Set 6:<br/>Legal & policy frameworks<br/>(n = 50,361)"]
        C6_7["Set 7:<br/>Human & institutional capacity<br/>(n = 234,056)"]
        C6_8["Set 8:<br/>Data, knowledge & decision support<br/>(n = 313,435)"]
        C6_9["Set 9:<br/>Ecological & spatial planning tools<br/>(n = 58,537)"]
        C6_10["Set 10:<br/>Cross-cutting process enablers<br/>(n = 18,407)"]
    end
    Ch6 --> C6_1
    Ch6 --> C6_2
    Ch6 --> C6_3
    Ch6 --> C6_4
    Ch6 --> C6_5
    Ch6 --> C6_6
    Ch6 --> C6_7
    Ch6 --> C6_8
    Ch6 --> C6_9
    Ch6 --> C6_10

Ch6R2["<u><span style='color:#1a0dab;'>chapter_6_r2.yaml<br/>Optional Level 3 filter</span></u>"]
Chapter6Sets --> Ch6R2
click Ch6R2 "./input/search_terms/chapter_6_r2.yaml" "Open chapter_6_r2.yaml"
subgraph Chapter6Case["Chapter 6 searches"]
    R2["Case-study keywords<br/>(case stud*, example*, initiative*, etc.)"]
end
Ch6R2 --> R2

Reuse

Citation

BibTeX citation:
@report{krug,
  author = {Krug, Rainer M. and Bishop, Gabriella and Villasante,
    Sebastian},
  title = {Spatial {Planning} and {Connectivity} {Corpus} - {Technical}
    {Background} {Report}},
  doi = {10.5281/zenodo.XXXXX},
  langid = {en},
  abstract = {To Be added}
}
For attribution, please cite this work as:
Krug, Rainer M., Gabriella Bishop, and Sebastian Villasante. n.d. “Spatial Planning and Connectivity Corpus - Technical Background Report.” IPBES Spatial Planning and Connectivity Assessment. https://doi.org/10.5281/zenodo.XXXXX.