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.1["Set 2.1:<br/>???<br/>(n = <<C1_2.1>>)"]
        C1_2.2["Set 2.2:<br/>???<br/>(n = <<C1_2.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.1
    Ch1 --> C1_2.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:
- ((indigenous AND (knowledge OR perspectives OR governance OR rights OR values OR
  practices OR land)) OR "local knowledge" OR biocultural OR customary OR (diverse
  AND ("knowledge systems" OR "world views" OR worldviews))) AND
- (planning OR governance OR policy OR tenure OR rights) AND
- (just OR inclusive OR fair OR effective OR equity OR equitable) AND
- (area OR territory OR "land use" OR "sea use" OR marine OR coastal OR "land-sea")
Set 2.1:
- ("multi-level" OR integrated OR accountable OR customary OR diverse OR "context-dependent"
  OR "cross-scale" OR polycentric OR pluralism OR adaptive) AND
- (governance OR policy OR framework) AND
- ("spatial planning" OR "marine planning" OR "land-use planning" OR "sea-use planning"
  OR "coastal planning" OR "territorial planning")
Set 2.2:
- ("legal pluralism" OR "institutional diversity" OR "polycentric governance" OR "multi-level
  governance" OR "customary governance" OR "co-management" OR "adaptive governance"
  OR "integrated governance" OR "cross-scale governance") AND
- (institution OR authority OR legitimacy) AND
- ("spatial planning" OR "marine planning" OR "land-use planning" OR "sea-use planning"
  OR "coastal planning" OR "territorial planning")
Set 3:
- (participatory OR community OR "co-design" OR stakeholder OR plurality OR tailored
  OR "different contexts" OR transformative OR adaptive OR "place-based" OR integrated
  OR multifunctional OR diverse) AND
- (approach OR strategy OR practice OR plan OR policy OR framework OR instrument)
  AND
- ("spatial planning" OR "marine planning" OR "land-use planning" OR "sea-use planning"
  OR "coastal planning" OR "territorial planning") AND
- (landscape OR seascape OR watershed OR ecosystem OR area OR region OR "land-sea"
  OR connectivity OR marine OR ocean OR maritime)

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_3["Set 3:<br/>Restoration planning + connectivity + resilience<br/>(n = <<C3_3>>)"]
        C3_3.1A["Set 3.1 A:<br/>Objective<br/>(n = <<C3_3.1A>>)"]
        C3_3.1BCD["Set 3.1 BCD:<br/>Concept<br/>(n = <<C3_3.1BCD>>)"]
        C3_3.2D["Set 3.2 D:<br/>???<br/>(n = <<C3_3.2D>>)"]
        C3_3.2F["Set 3.2 F:<br/>???<br/>(n = <<C3_3.2F>>)"]
        C3_3.3["Set 3.3:<br/>???<br/>(n = <<C3_3.3>>)"]
        C3_4["Set 4:<br/>Systematic conservation planning / gap analysis<br/>(n = <<C3_4>>)"]
        C3_4.1AB["Set 4.1 AB:<br/>???<br/>(n = <<C3_4.1AB>>)"]
        C3_4.1CD["Set 4.1 CD:<br/>???<br/>(n = <<C3_4.1CD>>)"]
        C3_4.2["Set 4.2:<br/>???<br/>(n = <<C3_4.2>>)"]

        C3_5.1["Set 5.1:<br/>???<br/>(n = <<C3_5.1>>)"]
        C3_5.2["Set 5.1:<br/>???<br/>(n = <<C3_5.2>>)"]
    end
    Ch3 --> C3_1
    Ch3 --> C3_3
    Ch3 --> C3_3.1A
    Ch3 --> C3_3.1BCD
    Ch3 --> C3_3.2D
    Ch3 --> C3_3.2F
    Ch3 --> C3_3.3
    Ch3 --> C3_4
    Ch3 --> C3_4.1AB
    Ch3 --> C3_4.1CD
    Ch3 --> C3_4.2
    Ch3 --> C3_5.1
    Ch3 --> C3_5.2

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 OR Indigenous) AND areas) OR OECM OR "other effective
  area-based conservation measures" OR ITT OR "indigenous and traditional territories")
  AND
- (NBSAP OR target OR (National AND ("Biodiversity Strategy")))  AND
- (regional OR national OR subnational OR marine OR interpretation OR interpret OR
  implement OR implementation OR adapt OR adaptation OR translate OR translation governance
  OR "decision-making" OR transboundary)
Set 3:
- (ecology OR ecological OR biodiversity OR habitat OR ecosystem) AND
- (restoration OR rewilding) AND
- (spatial AND (planning OR prioritization OR prioritisation))
Set 3.1A:
- (ecology OR ecological OR biodiversity OR habitat OR ecosystem) AND
- (restoration OR rewilding) AND
- (spatial AND (planning OR prioritization OR prioritisation)) AND
- (goal OR objective)
Set 3.1BCD:
- (ecology OR ecological OR biodiversity OR habitat OR ecosystem) AND
- (restoration OR rewilding) AND
- (spatial AND (planning OR prioritization OR prioritisation)) AND
- (concept OR principle)
Set 3.2CE:
- (ecology OR ecological OR biodiversity OR habitat OR ecosystem) AND
- (restoration OR rewilding) AND
- (spatial AND (planning OR prioritization OR prioritisation)) AND
- ("multi-criteria" OR "multi-objective" OR multicriteria OR (multiple AND (criteria
  OR objective OR goal)))
Set 3.2D:
- (ecology OR ecological OR biodiversity OR habitat OR ecosystem) AND
- (restoration OR rewilding) AND
- (spatial AND (planning OR prioritization OR prioritisation)) AND
- (method OR tool OR approach OR software)
Set 3.2F:
- (ecology OR ecological OR biodiversity OR habitat OR ecosystem) AND
- (restoration OR rewilding) AND
- (spatial AND (planning OR prioritization OR prioritisation)) 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)
Set 3.3:
- (ecology OR ecological OR biodiversity OR habitat OR ecosystem) AND
- (restoration OR rewilding) AND
- planning AND
- (indicator OR index OR metric OR objective)
Set 4:
- (conservation OR biodiversity OR "protected area" OR OECM OR reserve) AND
- spatial AND
- (planning OR prioritization OR prioritisation)
Set 4.1AB:
- (conservation OR biodiversity OR "protected area" OR OECM OR reserve) AND
- spatial AND
- (planning OR prioritization OR prioritisation) AND
- (concept OR principle)
Set 4.1CD:
- (conservation OR biodiversity OR "protected area" OR OECM OR reserve) AND
- spatial AND
- (planning OR prioritization OR prioritisation) AND
- (method OR tool OR approach OR software)
Set 4.2:
- (conservation OR biodiversity OR "protected area" OR OECM or reserve) AND
- (indicator OR index OR metric OR objective)
Set 5.1:
- (conservation OR biodiversity OR "protected area" OR OECM OR reserve) AND
- restoration AND
- spatial AND
- (planning OR prioritization OR prioritisation)
Set 5.2:
- ("adaptive management" OR "adaptive co-management" OR "adaptive comanagement" OR
  "learning-based management" OR "iterative management") AND
- ("protected area" OR park OR reserve OR "conservation area" OR "biodiversity conservation"
  OR "ecological restoration" OR "habitat restoration" OR "ecosystem restoration")
  AND
- (planning OR implementation)

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 (8.1 + 8.2)<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 = st_compact(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 = st_compact(params$search_terms$spc_corpus$spc_corpus$spc),
      types = params$types_filter,
      verbose = TRUE
    )
  ) |>
    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
#|

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)) {
  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,
  )

  results <- pbapply::pblapply(
    queries,
    function(query) {
      query |>
        openalexPro::pro_request(
          count_only = TRUE,
          verbose = TRUE
        )
    }
  ) |>
    dplyr::bind_rows() |>
    dplyr::select(count)
  rownames(results) <- names(queries)
  saveRDS(results, file = fn)
}

Counts per Language

Show the code
#|

fn <- file.path(params$corpus, "st_languages.rds")
if (!file.exists(fn)) {
  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)) {
  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)) {
  get_count_L1(
    sets = params$search_terms$chapter_1,
    types_filter = params$types_filter,
    publication_year_from = params$publication_date$from,
    publication_year_to = params$publication_date$to,
    st_AND = st$spcc
  ) |>
    saveRDS(file = fn)
}

Chapter 2

Show the code
fn <- file.path(params$chapter_2, "st_hits.rds")
if (!file.exists(fn)) {
  # queries <- lapply(
  #   params$search_terms$chapter_2,
  #   function(section) {
  #     lapply(
  #       section,
  #       function(s) {
  #         openalexPro::pro_query(
  #           title_and_abstract.search = paste0(
  #             "(",
  #             st$spcc,
  #             ") AND (",
  #             st_compact(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)

  get_count_L2(
    sets = params$search_terms$chapter_2,
    types_filter = params$types_filter,
    publication_year_from = params$publication_date$from,
    publication_year_to = params$publication_date$to,
    st_AND = st$spcc
  ) |>
    saveRDS(file = fn)
}

Chapter 3

Show the code
fn <- file.path(params$chapter_3, "st_hits.rds")
if (!file.exists(fn)) {
  get_count_L1(
    sets = params$search_terms$chapter_3,
    types_filter = params$types_filter,
    publication_year_from = params$publication_date$from,
    publication_year_to = params$publication_date$to,
    st_AND = st$spcc
  ) |>
    saveRDS(file = fn)
}

Due to length limitations of the API call, the initial download is done without the types filter (parquet folder) and afterwards filtered using the types filter (corpus directory).

Show the code
corpus_dir <- file.path(params$chapter_3, "corpus.openalex_pro", "corpus")
if (!dir.exists(corpus_dir)) {
  fetch_corpus(
    project_dir = file.path(params$chapter_3, "corpus.openalex_pro"),
    search_terms = params$search_terms$chapter_3,
    st_spcc = st$spcc,
    publication_date = params$publication_date,
    types_filter = params$types_filter,
    workers = 8
  )
}
Show the code
#|

# fn <- file.path(
#   params$chapter_3,
#   "corpus.openalex_pro",
#   paste0("random_", n, ".xlsx")
# )
# if (!file.exists(fn)) {
#   sets <- list.dirs(
#     file.path(
#       params$chapter_3,
#       "corpus.openalex_pro",
#       "corpus"
#     ),
#     full.names = TRUE
#   )

#   names(sets) <- sets |>
#     basename() |>
#     utils::URLdecode() |>
#     gsub(
#       pattern = "page=",
#       replacement = ""
#     )

#   samples <- lapply(
#     sets,
#     openalexPro::sample_parquet_n,
#     n = params$n_samples,
#     select = c("id", "doi", "citation", "title", "abstract")
#   )

#   lapply(
#     seq_along(samples),
#     function(i) {
#       samples[[i]] |>
#         dplyr::mutate(
#           abstract = substr(abstract, 1, 5000)
#         ) |>
#         writexl::write_xlsx(
#           path = file.path(
#             params$chapter_3,
#             "corpus.openalex_pro",
#             paste0(
#               names(samples)[[i]],
#               "_",
#               n,
#               ".xlsx"
#             )
#           )
#         )
#     }
#   )
# }
Show the code
fn <- file.path(
  params$chapter_3,
  "corpus.openalex_pro",
  "csl_json"
)

if (!file.exists(fn)) {
  sets <- list.files(
    file.path(
      params$chapter_3,
      "corpus.openalex_pro",
      "corpus"
    ),
    full.names = TRUE,
    recursive = FALSE
  )

  names(sets) <- sets |>
    basename() |>
    utils::URLdecode() |>
    gsub(
      pattern = "page=",
      replacement = ""
    )

  samples <- lapply(
    seq_along(sets),
    function(part) {
      message("Converting ", names(sets)[[part]], " ...")
      openalexConvert::corpus_to_csljson(
        corpus = sets[[part]],
        output = sets[[part]] |>
          dirname() |>
          dirname() |>
          file.path(
            "csl_json",
            names(sets)[[part]]
          ),
        chunk_size = params$csljson_batch_size,
        verbose = TRUE
      )
    }
  )
}
Show the code
# TODO:
#   create groups
#   get API key
#

fn <- file.path(
  params$chapter_3,
  "corpus.openalex_pro",
  "csl_json.exported"
)
if (!file.exists(fn)) {
  sets <- list.files(
    file.path(
      params$chapter_3,
      "corpus.openalex_pro",
      "csljson"
    ),
    full.names = TRUE,
    recursive = FALSE
  )

  names(sets) <- basename(sets)

  lapply(
    seq_along(sets),
    function(part) {
      openalexConvert::csljson_to_zotero_upload(
        sets[[part]],
        group_id = params$zotero_groups$chapter_3[[names(sets)[[part]]]],
        api_key = keyring::key_get("API_zotero_IPBES_spc_corpus"),
        pause = 0.1
      )
    }
  )
}

Chapter 4

Show the code
fn <- file.path(params$chapter_4, "st_hits.rds")
if (!file.exists(fn)) {
  get_count_L1(
    sets = params$search_terms$chapter_4,
    types_filter = params$types_filter,
    publication_year_from = params$publication_date$from,
    publication_year_to = params$publication_date$to,
    st_AND = st$spcc
  ) |>
    saveRDS(file = fn)
}

Chapter 5

Show the code
fn <- file.path(params$chapter_5, "st_hits.rds")
if (!file.exists(fn)) {
  get_count_L2(
    sets = params$search_terms$chapter_5,
    types_filter = params$types_filter,
    publication_year_from = params$publication_date$from,
    publication_year_to = params$publication_date$to,
    st_AND = st$spcc
  ) |>
    saveRDS(file = fn)
}

Chapter 6

Show the code
fn <- file.path(params$chapter_6, "st_hits.rds")
if (!file.exists(fn)) {
  get_count_L1(
    sets = params$search_terms$chapter_6,
    types_filter = params$types_filter,
    publication_year_from = params$publication_date$from,
    publication_year_to = params$publication_date$to,
    st_AND = st$spcc
  ) |>
    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,221,968 744,079
(scenario AND (analysis OR "based model" OR "based planning" OR building OR planning OR thinking OR "and models" OR "of land use")) 1,026,806 703,275
(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)) 770,979 550,644
((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) 665,609 323,157
connectivity 556,389 504,070
restoration 545,919 483,532
(("land use" OR "sea use" OR marine) AND (decision OR planning OR governance OR management OR model OR scenario OR trade-offs OR tradeoffs)) 457,807 239,564
(land AND (allocation OR governance OR system)) 383,908 238,410
(adaptive AND (management OR planning)) 363,907 235,182
(conservation AND (practice OR planning OR program OR strategy)) 282,871 162,528
(("key biodiversity" OR protected OR "remote ocean") AND areas) 265,919 190,692
(landscape AND (complexity OR planning OR governance OR management OR "ecological planning")) 234,211 107,275
((integrative OR "trends and") AND scenarios) 198,464 54,153
(animal AND (migration OR movement)) 88,083 75,793
(("cumulative impact" OR "environmental impact" OR "strategic environmental") AND assessment) 70,944 51,347
((functional OR working) AND landscapes) 69,190 40,190
(ecological AND (corridor OR networks)) 62,327 35,913
zoning 56,775 40,046
(biodiversity AND (assessment OR indicators OR scenario)) 56,511 23,042
"systems integration" 53,021 45,926
((blue OR green) AND infrastructure) 40,701 24,977
("ecosystem service" AND (mapping OR model OR planning)) 32,708 7,422
((inclusive OR marine) AND governance) 26,940 13,492
"stepping stones" 18,549 16,027
(nature AND ("based solutions" OR futures)) 17,758 12,201
(integrated AND ("assessment framework" OR "assessment model" OR "coastal zone management")) 11,695 6,581
((habitat OR wildlife) AND corridor) 10,691 3,050
(("ecosystem based" OR "sea use") AND management) 7,663 2,586
"multi-criteria decision analysis" 7,006 4,797
rewilding 2,223 1,494
IPBES 1,284 714
(("generalized dissimilarity" OR macroecological) AND model) 1,258 720
"reserve design" 806 321
"futures thinking" 678 463
OECM 374 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,833,509 4,913,689
species 4,751,451 2,918,991
nature 4,039,424 3,075,191
sustainable 3,442,154 2,374,580
soil 2,216,293 1,361,726
sea 1,450,752 794,057
forest 1,209,167 560,348
river 1,168,420 606,588
ecological 1,095,869 335,775
landscape 1,028,229 562,399
conservation 994,246 427,872
Earth 972,889 615,926
ecosystem 965,798 220,529
marine 881,662 368,791
ocean 762,961 334,620
habitat 656,908 136,469
coastal 575,714 181,793
lake 574,824 306,679
restoration 545,919 355,642
territories 542,695 330,802
mountain 502,009 244,257
coast 481,719 189,720
biodiversity 411,869 128,639
terrestrial 320,470 100,829
((protected OR conserved) AND areas) 304,378 106,052
((agricultural OR arable) AND land) 290,583 82,479
freshwater 254,644 76,852
planet 235,789 121,099
flora 234,317 116,580
fauna 212,001 58,114
maritime 182,472 104,186
plantation 176,844 77,142
desert 169,601 85,063
wildlife 166,431 46,816
wetland 165,876 54,185
grassland 139,600 32,674
estuary 112,667 30,843
bog 76,634 56,321
marshes 73,495 27,845
"natural resource" 69,697 25,425
meadow 59,903 16,627
woodland 59,176 14,186
biosphere 51,995 13,062
savanna 32,798 9,147
"coupled system" 32,262 26,300
dryland 28,935 10,149
peatland 23,295 8,628
tundra 20,690 4,786
mires 19,964 12,251
fjord 16,080 6,333
shrubland 12,716 1,167
bioeconomy 10,280 4,616
"resource system" 6,013 3,227
seascape 5,065 1,161
heathland 4,034 794
marshland 3,802 870
chaparral 3,057 1,193
"environmental resource" 2,538 817
agroforest 1,834 328
"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
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)
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)
W4414957974 10.1073/pnas.2501695122 Damaris Zurell et al. (2025)
W2910481941 10.1080/02513625.2018.1562795 Peter Schmitt & Thorsten Wiechmann (2018)
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)
W1992974326 10.1016/j.futures.2007.11.011 Richard A. Slaughter (2007)
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)
W2783683111 10.1016/j.biocon.2017.12.020 Santiago Saura et al. (2018)
W2791599583 10.1111/conl.12439 Rafael A. Magris 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)
W4413449508 10.1038/s41467-025-63205-8 Jedediah F. Brodie et al. (2025)
W4414925393 10.1016/j.tree.2025.09.007 Sandra Neubert et al. (2025)
W4415240687 10.1007/s10980-025-02210-0 Tamsin L. Woodman et al. (2025)
W2255223904 NA Bob Scholes (2010)
W2978599153 10.26190/unsworks/27456 Peter H. Verburg et al. (2019)
W2035832288 10.1007/s10980-014-0085-0 Christian Albert et al. (2014)
W3200717663 10.1007/s10980-021-01329-0 Jianquan Dong et al. (2021)
W2604803374 10.1093/biosci/bix012 Charles H. Nilon et al. (2017)
W4220936177 10.1016/j.oneear.2022.02.008 Christopher M. Raymond et al. (2022)
W2612157793 10.1016/j.marpol.2017.06.020 Mara Ntona & Elisa Morgera (2017)
W2766457534 10.1016/j.landusepol.2017.10.017 Chiara Cortinovis & Davide Geneletti (2017)
W2999493939 10.1016/j.landurbplan.2019.103741 Christian Albert et al. (2020)
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)
W3134065015 10.1016/j.envsci.2021.02.001 Davide Longato et al. (2021)
W4392293717 10.1016/j.ecolind.2024.111816 Wen Song et al. (2024)
W2902345284 10.1007/s10980-018-0745-6 Marcin Spyra et al. (2018)
W3159060995 10.1016/j.ecoser.2021.101273 Karsten Grunewald et al. (2021)
W2046569818 10.1007/s10980-014-0052-9 Christine Fürst et al. (2014)
W2810876831 10.3897/rio.4.e28045 Evelyn Underwood et al. (2018)
W3158973852 10.1016/j.landurbplan.2021.104129 Chiara Cortinovis et al. (2021)
W2904898541 10.1007/s10668-018-00300-5 Azime Tezer et al. (2018)
W2771003204 10.1080/21513732.2017.1396257 Christine Fürst et al. (2017)
W4406477943 10.1007/s11252-024-01656-5 Israa Mahmoud et al. (2025)
W2592317409 10.1080/21513732.2017.1296494 Justice Nana Inkoom et al. (2017)
W4320016094 10.1007/978-3-031-15773-8_4 Falko Buschke et al. (2023)
W4404646473 10.1007/s00267-024-02086-x Nina Farwig et al. (2024)
W4289516997 10.1007/s41207-022-00315-5 Georgia Pozoukidou et al. (2022)
W1963746476 10.1016/j.ecocom.2009.10.006 R.S. de Groot et al. (2009)
W2487200415 10.1016/j.marpol.2016.06.023 Elianny Domínguez-Tejo et al. (2016)
W2759207970 10.3390/su9091668 Leena Karrasch et al. (2017)
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)
W3209482460 10.25607/obp-1666 Alejandro Iglesias-Campos et al. (2021)
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)
W4295308933 10.1073/pnas.2203385119 Natalia Estrada-Carmona et al. (2022)
W4415164578 10.1098/rsos.250810 Rachael Garrett et al. (2025)
W2027491594 10.1016/j.ecolind.2015.03.029 Christian Albert et al. (2015)
W1966247992 10.1080/21513732.2011.617711 Davide Geneletti (2011)
W2918948909 10.1016/j.gecco.2019.e00569 Arieanna C. Balbar & Anna Meta×as (2019)
W3194313759 10.1007/978-94-024-1681-7 Christina von Haaren et al. (2019)
W2099188808 10.1016/j.landurbplan.2006.04.005 Jolande W. Termorshuizen et al. (2006)
W2265414043 10.1146/annurev.ecolsys.32.081501.114012 Steward T. A. Pickett et al. (2001)
W2766942546 10.1080/08920753.2017.1373450 Kekuewa Kikiloi et al. (2017)
W2884329716 10.1007/978-3-319-94021-2 László Miklós & Anna Špinerová (2018)
W4413900892 10.1016/j.tree.2025.07.014 Jian Peng et al. (2025)
W4409833817 10.1126/science.adn2225 Jedediah F. Brodie et al. (2025)
W2524916285 10.1002/aqc.2645 Alan M. Friedlander et al. (2016)
W4410629764 10.1016/j.rsma.2025.104257 Liisi Lees et al. (2025)
W3021127236 10.1016/j.marpol.2020.103950 Thomas Robertson et al. (2020)
W4412750811 10.1016/j.marpol.2025.106852 Jean‐Eudes Beuret et al. (2025)
W3085006993 10.1002/pan3.10146 Laura Pereira et al. (2020)
W2093445010 10.1126/science.1258832 Jianguo Liu et al. (2015)
W2754686867 10.1038/s41559-017-0273-9 Isabel M.D. Rosa et al. (2017)
W4380362703 10.1016/j.gloenvcha.2023.102681 Hyejin Kim et al. (2023)
W4210386268 10.1016/j.envsci.2022.01.013 Andressa V. Mansur et al. (2022)
W2122104680 10.1111/j.1523-1739.2009.01212.x William J. Sutherland et al. (2009)
W4210765186 10.1038/s41893-021-00844-x Roslyn Henry et al. (2022)
W2086673960 10.1016/j.tree.2009.04.008 William J. Sutherland & Harry J. Woodroof (2009)
W4310004272 10.1007/s11625-022-01251-7 Lucas Rutting et al. (2022)
W2161139387 10.1126/science.1196624 Henrique M. Pereira et al. (2010)
W2023339029 10.1046/j.1523-1739.2003.01491.x Garry Peterson et al. (2003)
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)
W2062482344 10.1073/pnas.1201040109 Joshua Goldstein et al. (2012)
W1540682446 10.1111/brv.12008 Aija S. Kukkala & Atte Moilanen (2012)
W2028797766 10.1016/j.cosust.2013.05.002 Ralf Seppelt et al. (2013)
W2470861343 10.1016/j.landurbplan.2016.05.003 Adrienne Grêt‐Regamey et al. (2016)
W2015619301 10.1073/pnas.1000530107 Lian Pin Koh & Jaboury Ghazoul (2010)
W2015646994 10.1016/j.tree.2014.07.005 Carly N. Cook et al. (2014)
W3185562566 10.1038/d41586-021-02041-4 Georgina G. Gurney et al. (2021)
W4395447577 10.1126/science.adn3441 Henrique M. Pereira et al. (2024)
W4212886831 10.1111/geb.13459 Karel Mokany et al. (2022)
W3126018057 10.1111/rec.13346 Jordi Cortina et al. (2021)
W2902463689 10.1016/j.tree.2018.10.006 Emily Nicholson et al. (2018)
W2073677603 10.1016/j.biocon.2015.02.015 Sebastián Martinuzzi et al. (2015)
W4386609980 10.1038/s43588-023-00503-5 Yu Zheng et al. (2023)
W2952896657 10.5194/gmd-11-4537-2018 Hyejin Kim et al. (2018)
W3161819570 10.1126/science.abc4896 Louise O’Connor et al. (2021)
W2769947232 10.1016/j.cosust.2017.10.004 Jean Paul Metzger et al. (2017)
W4386734502 10.1146/annurev-environ-112321-095011 Steven J. Cork et al. (2023)
W3151200781 10.1111/rec.13403 Ben L. Gilby et al. (2021)
W4382181311 10.1007/s11625-023-01316-1 América Paz Durán et al. (2023)
W4406904698 10.1016/j.tree.2024.12.002 Sylvaine Giakoumi et al. (2025)
W4406487214 10.1007/s10980-024-02042-4 Jiangxiao Qiu et al. (2025)
W1990241575 10.1007/s10021-004-0074-2 Paul Raskin (2005)
W56780107 10.1007/978-1-4612-0529-6_10 Jack Ahern (1999)
W2156111479 10.1111/gcb.12383 Sebastián Martinuzzi et al. (2013)
W2159760863 10.1111/j.1466-8238.2010.00620.x Joachim H. Spangenberg et al. (2011)
W3044450114 10.1016/j.envsoft.2020.104806 Andrew J. Hoskins et al. (2020)
W3074014079 10.1007/s10113-020-01685-8 Clara J. Veerkamp et al. (2020)
W2614376759 10.1016/j.envsci.2017.05.003 Vanessa M. Adams et al. (2017)
W3145276257 10.1016/j.jenvman.2021.112400 Yuyoung Choi et al. (2021)
W4382751812 10.1016/j.biocon.2023.110068 Marcel Kok et al. (2023)
W2972648221 10.1111/1365-2664.13506 Karel Mokany et al. (2019)
W4298615974 10.1007/s10980-022-01534-5 Tom Harwood et al. (2022)
W4411717980 10.1007/s11625-025-01682-y Sana Okayasu et al. (2025)

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
nature 24,198,955
spc 5,636,809
spcc 3,012,239
openalex 204,925,445
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,636,809)"
]
    SPC --> NATURE_list["nature keyword set<br/>(environmental context terms)<br/>(n = 24,198,955)"
]
    SPC_list --> BaseQuery["Level 1 query<br/>spc terms AND nature dictionary<br/>(n = 3,012,239)"
]
    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 7,024,215 331,075 1,148,157 198,063
2024 8,672,251 400,237 1,433,604 226,457
2023 8,800,438 404,415 1,456,730 218,067
2022 7,945,924 355,335 1,329,258 189,721
2021 8,655,439 354,061 1,334,177 188,928
2020 9,467,779 340,077 1,314,812 179,764
2019 9,186,561 299,234 1,194,205 156,951
2018 8,960,894 275,594 1,113,328 144,676
2017 8,920,577 252,218 1,039,376 131,548
2016 9,108,688 240,796 1,006,504 126,257
2015 8,879,550 231,523 982,924 121,665
2014 8,761,131 224,144 973,759 118,497
2013 8,482,636 211,059 934,487 111,122
2012 8,020,462 192,702 875,804 102,068
2011 7,753,054 178,462 820,324 94,208
2010 7,241,883 162,139 765,335 85,762
2009 6,785,530 145,079 698,345 76,646
2008 6,276,250 128,869 624,309 67,795
2007 5,817,068 114,654 573,333 60,482
2006 5,481,662 104,924 531,430 54,936
2005 5,018,808 92,872 480,920 48,944
2004 4,620,470 81,646 434,493 42,851
2003 4,317,436 74,728 403,805 39,187
2002 4,105,570 71,375 389,172 36,511
2001 3,512,306 53,975 319,330 28,871
2000 3,528,569 50,249 305,546 26,879
1999 2,908,060 42,387 258,993 22,310
1998 2,811,560 39,149 245,375 20,324
1997 2,644,466 36,505 229,958 18,840
1996 2,544,070 34,986 223,725 17,814
1995 2,347,216 32,055 207,527 16,291
1994 2,216,839 28,771 192,955 14,327
1993 2,102,230 26,755 183,703 13,284
1992 2,005,853 24,759 173,252 12,193

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,846,144 5,288,696 22,525,939 2,845,795
Spanish 8,000,764 71,029 352,929 30,375
Japanese 7,787,128 1,701 14,813 847
French 5,980,155 38,307 269,824 20,131
German 5,957,848 13,895 63,583 5,261
Chinese 4,526,511 4,051 36,358 2,013
Portuguese 4,330,547 31,673 139,789 16,513
Indonesian 3,065,227 42,083 168,957 15,798
Korean 3,004,656 27,795 101,468 13,631
Russian 2,812,938 28,366 148,424 15,485
Italian 1,359,451 7,301 33,437 4,414
Polish 1,266,118 4,473 25,693 2,534
Turkish 884,257 5,415 26,426 2,932
Dutch 828,958 2,198 12,452 1,177
Arabic 734,494 3,589 18,948 1,541
Ukrainian 552,998 5,810 23,068 3,339
Swedish 512,579 5,564 18,269 2,606
Persian 489,990 2,521 7,940 1,539
Czech 486,942 4,093 18,998 1,659
Catalan 322,723 1,284 8,898 726
Croatian 228,056 3,082 13,735 1,586
Norwegian 196,452 1,068 4,788 505
Finnish 189,852 864 3,587 427
Latvian 188,932 2,863 13,130 606
Hungarian 175,778 1,582 7,548 820
Modern Greek (1453-) 161,551 1,083 4,300 571
Danish 160,609 334 2,692 147
Malay (macrolanguage) 153,050 2,710 10,498 1,346
Slovenian 107,001 830 3,894 448
Thai 106,295 2,476 5,129 875
Lithuanian 92,242 549 2,445 331
Vietnamese 80,039 243 1,512 177
Serbo-Croatian 79,403 1,241 4,513 606
Romanian 71,179 618 3,884 336
Serbian 65,154 552 2,600 285
Slovak 37,132 302 1,745 148
Estonian 32,041 181 1,407 109
Galician 31,127 125 683 41
Hebrew 26,528 227 2,565 128
Bulgarian 25,746 180 926 102
Uzbek 25,479 10 1,109 5
Basque 25,339 117 626 54
Afrikaans 24,413 305 1,668 189
Latin 21,507 71 553 43
Esperanto 20,983 116 703 52
Hindi 13,316 25 195 10
Kazakh 12,314 152 772 81
Icelandic 11,398 57 284 32
Azerbaijani 11,354 95 423 67
Norwegian Nynorsk 10,318 49 208 22
Macedonian 8,073 57 239 26
Bosnian 7,604 88 388 47
Albanian 7,220 24 154 17
Georgian 6,389 40 199 29
Tagalog 5,496 66 287 31
Belarusian 5,014 16 123 11
Armenian 4,707 86 483 54
Tamil 4,469 11 108 3
Welsh 4,229 9 86 5
Urdu 3,971 17 229 8
Tajik 3,820 7 30 5
Irish 3,787 17 173 14
Yiddish 3,734 20 426 11
Mongolian 3,565 16 122 7
Nepali (macrolanguage) 3,180 13 122 6
Swahili (macrolanguage) 3,038 16 74 13
Bengali 2,782 14 43 9
Malagasy 2,739 4 70 2
Occitan (post 1500) 2,417 10 43 5
Kannada 2,118 10 79 4
Marathi 2,084 7 51 6
Pushto 2,081 1 7 0
Western Frisian 2,075 12 59 7
Ido 2,007 20 162 15
Breton 1,932 10 61 6
Malayalam 1,502 9 109 6
Javanese 1,388 15 65 6
Kirghiz 1,212 10 65 3
Kurdish 1,171 4 24 3
Luxembourgish 1,107 4 46 3
Ndonga 1,037 138 504 97
Sundanese 1,017 6 49 2
Sanskrit 1,008 0 11 0
Maltese 962 1 13 0
Sinhala 793 3 10 1
Telugu 770 3 37 3
Interlingua (International Auxiliary Language Association) 764 5 17 3
Gujarati 693 1 6 1
Interlingue 674 11 29 4
Tatar 627 7 11 4
Walloon 580 3 25 1
Scottish Gaelic 570 1 10 1
Bashkir 524 2 9 0
Dhivehi 481 0 3 0
Volapük 344 4 7 1
Oriya (macrolanguage) 341 0 2 0
Burmese 339 3 16 1
Panjabi 333 0 11 0
Tibetan 311 0 4 0
Somali 311 2 4 1
Aragonese 304 1 5 0
Haitian 302 3 20 3
Cornish 236 0 5 0
Lao 223 2 11 1
Central Khmer 221 4 10 3
Quechua 184 0 7 0
Amharic 184 2 4 2
Chechen 143 0 1 0
Manx 141 2 6 0
Limburgan 138 0 2 0
Romansh 125 2 5 1
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
Norwegian Bokmål 52 1 1 0
Assamese 52 0 0 0
Faroese 50 8 28 8
Chuvash 42 0 2 0
Ossetian 35 0 0 0
Komi 23 6 4 4
Sardinian 14 0 1 0
Corsican 11 0 0 0
Avaric 9 0 0 0
South Ndebele 5 2 4 2
Zulu 3 0 0 0
Northern Sami 1 0 0 0
Tsonga 1 0 0 0
NA 0 321 3,062 209

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 4,190
Set 2.1 4,768
Set 2.2 88
Set 3 -4,209
Show the code
render_mermaid(
  file.path("figures", "chapter1.mmd"),
  c(
    C1_1 = format_count(ch1_counts[["Set 1"]]),
    C1_2.1 = format_count(ch1_counts[["Set 2.1"]]),
    C1_2.2 = format_count(ch1_counts[["Set 2.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 = 4,190)"]
        C1_2.1["Set 2.1:<br/>???<br/>(n = 4,768)"]
        C1_2.2["Set 2.2:<br/>???<br/>(n = 88)"]
        C1_3["Set 3:<br/>evidence & precaution<br/>+ ILK knowledge base<br/>(n = -4,209)"]
        %% 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.1
    Ch1 --> C1_2.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 383,482
GBF GBF-1 - Rural 556,382
GBF GBF-1 - Freshwater 799,095
GBF GBF-1 - Marine 423,677
GBF GBF - 2 (Ecosystem restoration) 1,046,971
Targets Target 3 (Protected areas / conservation coverage) 530,567
Targets Target 4 (Species extinction & genetic diversity) 44,671
Targets Target 5 (Wild species trade & use) 87,692
Targets Target 6 (Invasive alien species) 15,151
Targets Target 7 (Pollution) 214,601
Targets Target 8 (Climate change & resilience) 239,276
Targets Target 9 (Wild species management & use) 9,583
Targets Target 10 (Sustainability in agriculture, aquaculture, forestry & fisheries) 286,570
Targets Target 11 (Nature’s contributions to people / ecosystem services) 58,111
Targets Target 12 (Green & blue spaces, urban planning) 66,948
Targets Target 13 (Genetic resources & benefit sharing) 10,266
Targets Target 14 (Biodiversity integration in decision-making) 178,602
Targets Target 15 (Business & financial institutions disclosure & risk) 262,899
Targets Target 16 (Sustainable consumption) 98,452
Targets Target 17 (Biosafety) 9,339
Targets Target 18 (Harmful incentives / subsidies) 47,459
Targets Target 19 (Finance mobilisation) 89,981
Targets Target 20 (Capacity building, technology & cooperation) 520,077
Targets Target 21 (Data, knowledge & monitoring) 1,268,873
Targets Target 22 (Participation & inclusion) 169,822
Targets Target 23 (Gender equality) 74,306
Related to spatial planning process Set Related 131,751
Nexus Water 497,888
Nexus Food 399,274
Nexus Health 416,813
Nexus Climate 627,545
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 = 383,482)"]
        GBF_Rural["GBF-1 Rural<br/>(n = 556,382)"]
        GBF_Fresh["GBF-1 Freshwater<br/>(n = 799,095)"]
        GBF_Marine["GBF-1 Marine<br/>(n = 423,677)"]
        GBF_Restore["GBF-2 Ecosystem restoration<br/>(n = 1,046,971)"]
    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 = 530,567)"]
        T4["Target 4<br/>(n = 44,671)"]
        T5["Target 5<br/>(n = 87,692)"]
        T6["Target 6<br/>(n = 15,151)"]
        T7["Target 7<br/>(n = 214,601)"]
        T8["Target 8<br/>(n = 239,276)"]
        T9["Target 9<br/>(n = 9,583)"]
        T10["Target 10<br/>(n = 286,570)"]
        T11["Target 11<br/>(n = 58,111)"]
        T12["Target 12<br/>(n = 66,948)"]
        T13["Target 13<br/>(n = 10,266)"]
        T14["Target 14<br/>(n = 178,602)"]
        T15["Target 15<br/>(n = 262,899)"]
        T16["Target 16<br/>(n = 98,452)"]
        T17["Target 17<br/>(n = 9,339)"]
        T18["Target 18<br/>(n = 47,459)"]
        T19["Target 19<br/>(n = 89,981)"]
        T20["Target 20<br/>(n = 520,077)"]
        T21["Target 21<br/>(n = 1,268,873)"]
        T22["Target 22<br/>(n = 169,822)"]
        T23["Target 23<br/>(n = 74,306)"]
    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 = 131,751)"]
    end
    Ch2L2 --> REL

    subgraph L1_NexusSets["Nexus"]
        direction TB
        Nexus_Water["Water<br/>(n = 497,888)"]
        Nexus_Food["Food<br/>(n = 399,274)"]
        Nexus_Health["Health<br/>(n = 416,813)"]
        Nexus_Climate["Climate<br/>(n = 627,545)"]
    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 12,766
Set 3 3,598
Set 3.1A 964
Set 3.1BCD 311
Set 3.2CE 366
Set 3.2D 2,121
Set 3.2F 187
Set 3.3 4,065
Set 4 21,951
Set 4.1AB 1,858
Set 4.1CD 12,867
Set 4.2 11,921
Set 5.1 2,223
Set 5.2 1,071
Show the code
render_mermaid(
  file.path("figures", "chapter3.mmd"),
  c(
    C3_1 = format_count(ch3_counts[["Set 1"]]),
    C3_3 = format_count(ch3_counts[["Set 3"]]),
    C3_3.1A = format_count(ch3_counts[["Set 3.1A"]]),
    C3_3.1BCD = format_count(ch3_counts[["Set 3.1BCD"]]),
    C3_3.2D = format_count(ch3_counts[["Set 3.2D"]]),
    C3_3.2F = format_count(ch3_counts[["Set 3.2F"]]),
    C3_3.3 = format_count(ch3_counts[["Set 3.3"]]),
    C3_4 = format_count(ch3_counts[["Set 4"]]),
    C3_4.1AB = format_count(ch3_counts[["Set 4.1AB"]]),
    C3_4.1CD = format_count(ch3_counts[["Set 4.1CD"]]),
    C3_4.2 = format_count(ch3_counts[["Set 4.2"]]),
    C3_5.1 = format_count(ch3_counts[["Set 5.1"]]),
    C3_5.2 = format_count(ch3_counts[["Set 5.2"]])
  )
)

%%{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 = 12,766)"]
        C3_3["Set 3:<br/>Restoration planning + connectivity + resilience<br/>(n = 3,598)"]
        C3_3.1A["Set 3.1 A:<br/>Objective<br/>(n = 964)"]
        C3_3.1BCD["Set 3.1 BCD:<br/>Concept<br/>(n = 311)"]
        C3_3.2D["Set 3.2 D:<br/>???<br/>(n = 2,121)"]
        C3_3.2F["Set 3.2 F:<br/>???<br/>(n = 187)"]
        C3_3.3["Set 3.3:<br/>???<br/>(n = 4,065)"]
        C3_4["Set 4:<br/>Systematic conservation planning / gap analysis<br/>(n = 21,951)"]
        C3_4.1AB["Set 4.1 AB:<br/>???<br/>(n = 1,858)"]
        C3_4.1CD["Set 4.1 CD:<br/>???<br/>(n = 12,867)"]
        C3_4.2["Set 4.2:<br/>???<br/>(n = 11,921)"]

        C3_5.1["Set 5.1:<br/>???<br/>(n = 2,223)"]
        C3_5.2["Set 5.1:<br/>???<br/>(n = 1,071)"]
    end
    Ch3 --> C3_1
    Ch3 --> C3_3
    Ch3 --> C3_3.1A
    Ch3 --> C3_3.1BCD
    Ch3 --> C3_3.2D
    Ch3 --> C3_3.2F
    Ch3 --> C3_3.3
    Ch3 --> C3_4
    Ch3 --> C3_4.1AB
    Ch3 --> C3_4.1CD
    Ch3 --> C3_4.2
    Ch3 --> C3_5.1
    Ch3 --> C3_5.2

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,387
Set 2 241
Set 3 6,290
Set 4 29,809
Set 5 375
Set 6 2,676
Set 7 0
Set 8 89,971
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,387)"]
        C4_2["Set 2:<br/>Connectivity benefits vs risks<br/>+ ecosystem services<br/>(n = 241)"]
        C4_3["Set 3:<br/>Structural vs functional connectivity<br/>(n = 6,290)"]
        C4_4["Set 4:<br/>Connectivity modelling toolkits<br/>(n = 29,809)"]
        C4_5["Set 5:<br/>Connectivity indicators & metrics<br/>(n = 375)"]
        C4_6["Set 6:<br/>Policy & governance integration<br/>(n = 2,676)"]
        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 = 89,971)"]
    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 203,060
Sections 1 and 2 Set 2 62,688
Sections 1 and 2 Set 3 61,473
Sections 1 and 2 Set 4 425,315
Sections 1 and 2 Set 5 267,697
Section 3 Set 1 2,919
Section 3 Set 2 15,626
Section 3 Set 3 117
Section 4 Set 1 63,322
Section 4 Set 2 21,664
Section 4 Set 3 14,256
Section 5 Set 1 15,193
Section 5 Set 2 84,675
Section 5 Set 3 53,802
Section 5 Set 4 29,203
Section 6 Set 1 180
Section 6 Set 2 4,258
Section 6 Set 3 3,121
Section 6 Set 4 2,521
Cross-cutting sets Set 1 45,650
Cross-cutting sets Set 2 232,690
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 = 203,060)"]
        C5_2["Set 2:<br/>Future + pathway*/narrative*/vision*<br/>(n = 62,688)"]
        C5_3["Set 3:<br/>Future-proof*/anticipat*/scenario planning<br/>(n = 61,473)"]
        C5_4["Set 4:<br/>Foresight*/backcasting/simulat*/trend*<br/>(n = 425,315)"]
        C5_5["Set 5:<br/>Model* AND scenario<br/>(n = 267,697)"]
    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,919)"]
        C5_3b["Set 2:<br/>Driver modelling approaches<br/>(n = 15,626)"]
        C5_3c["Set 3:<br/>Driver gaps<br/>(n = 117)"]
    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 = 63,322)"]
        C5_4b["Set 2:<br/>Response options (integrated planning / NbS)<br/>(n = 21,664)"]
        C5_4c["Set 3:<br/>Cross-scale synergy & trade-off terms<br/>(n = 14,256)"]
    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 = 15,193)"]
        C5_5b["Set 2:<br/>Uncertainty quantification<br/>(n = 84,675)"]
        C5_5c["Set 3:<br/>Tipping points & thresholds<br/>(n = 53,802)"]
        C5_5d["Set 4:<br/>Cascading risks & precaution<br/>(n = 29,203)"]
    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 = 180)"]
        C5_6b["Set 2:<br/>ILK integration & community planning<br/>(n = 4,258)"]
        C5_6c["Set 3:<br/>Enabling factors & coordination<br/>(n = 3,121)"]
        C5_6d["Set 4:<br/>Shocks, surprises, uncertainties<br/>(n = 2,521)"]
    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 = 45,650)"]
        CC2["Set 2:<br/>Co-production & inclusion<br/>(n = 232,690)"]
    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,626
Set 2 1,529
Set 3 84,873
Set 4 170,621
Set 5 3,624
Set 6 56,439
Set 7 255,581
Set 8.1 -4,128
Set 8.2 18,683
Set 9 60,445
Set 10 19,044
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,626)"]
        C6_2["Set 2:<br/>Political & strategic leadership<br/>(n = 1,529)"]
        C6_3["Set 3:<br/>Socio-cultural & stakeholder engagement<br/>(n = 84,873)"]
        C6_4["Set 4:<br/>Collaboration, trust & networks<br/>(n = 170,621)"]
        C6_5["Set 5:<br/>Financial & economic mechanisms<br/>(n = 3,624)"]
        C6_6["Set 6:<br/>Legal & policy frameworks<br/>(n = 56,439)"]
        C6_7["Set 7:<br/>Human & institutional capacity<br/>(n = 255,581)"]
        C6_8["Set 8:<br/>Data, knowledge & decision support (8.1 + 8.2)<br/>(n = 14,555)"]
        C6_9["Set 9:<br/>Ecological & spatial planning tools<br/>(n = 60,445)"]
        C6_10["Set 10:<br/>Cross-cutting process enablers<br/>(n = 19,044)"]
    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.