---
# System prepended metadata

title: CSW Intorudction

---

---
title: CSW Intorudction
slideOptions:
  backgroundTransition: 'fade'
  spotlight:
    enabled: false
---

## :spiral_note_pad: CSW Intorudction

:::success
:dart: **Goals**
- What is `CSW`
- How does the retrieved metadata look like
- Problems of retreving metadata from CSW.
- Alternative: GeoNetwork database access 
:::

---

## :building_construction: Recap

```mermaid
graph LR


N --Api--> Havester((Havester))
E --Api--> Havester((Havester))
R --Api--> Havester((Havester))
C --Api--> Havester((Havester))

Havester --metadata*.xml--> Parser{XmlParser/XmlSerializer}--ETL-->Database[(Database)]

Database -.-> EF{EFCore} -.-> SearchBar
EF -.-> Database
SearchBar -.-> EF
```

---

## :mag: What is CSW 

1. Every Data Center has their own way to provide metadata.
2. ...**But** they all provide their metadata through an API: **Catalogue Service for Web** (`CSW`)

> CSW is a standard for exposing a catalogue of geospatial records in XML on the Internet (over HTTP) -- [csw@wiki]

[csw@wiki]: https://en.wikipedia.org/wiki/Catalogue_Service_for_the_Web

---

## Example: `requests.get(CSW_API_URL_WITH_PARAMS)`

```
https://metadata.bgs.ac.uk/geonetwork/srv/eng/csw?
service=CSW&
version=2.0.2&
REQUEST=GetRecords&
resultType=results&
outputFormat=application/xml&
outputSchema=http://www.isotc211.org/2005/gmd&maxRecords=100&
typeNames=csw:Record&
ElementSetName=full
```

---

In short, `CSW` is just a regular API with **a lot of** parameters, see [csw@ogc] for details.


[csw@ogc]: https://docs.ogc.org/is/12-176r7/12-176r7.html

---

## Demo: Retreiving NERC Metadata

- [bas] - own document store, providing`CSW`
- [bgs]  - GeoNetwork: providing`CSW` 
- [ceda] - GeoNetwork: providing`CSW`
- [ceh] - own document store, **not** providing `CSW`, `WAF` instead.
- [nerc data catalogue] - GeoNetwork: providing`CSW` 
  - it is our source of metadata, currently.
  - it is the overall metadata, namely.
    - it havests/sync nerc metadata throught csw, regularly.
      - not sure how does it do with ceh
    - there is inconsistency, actually. 
  


[bas]: https://api.bas.ac.uk/data/metadata/csw/v2/published?service=CSW&version=2.0.2&REQUEST=GetRecords&resultType=results&outputFormat=application/xml&outputSchema=http://gcmd.gsfc.nasa.gov/Aboutus/xml/dif/&maxRecords=100&typeNames=gmd:MD_Metadata&ElementSetName=full
[bgs]: https://metadata.bgs.ac.uk/geonetwork/srv/eng/csw?service=CSW&version=2.0.2&REQUEST=GetRecords&resultType=results&outputFormat=application/xml&outputSchema=http://www.isotc211.org/2005/gmd&maxRecords=100&typeNames=csw:Record&ElementSetName=full
[ceda]: https://csw.ceda.ac.uk/geonetwork/srv/eng/csw?service=CSW&version=2.0.2&REQUEST=GetRecords&resultType=results&outputFormat=application/xml&outputSchema=http://www.isotc211.org/2005/gmd&maxRecords=100&typeNames=gmd:MD_Metadata&ElementSetName=full
[ceh]: https://catalogue.ceh.ac.uk/eidc/documents
[nerc data catalogue]: https://data-search.nerc.ac.uk/geonetwork/srv/eng/csw?service=CSW&version=2.0.2&REQUEST=GetRecords&resultType=results&outputFormat=application/xml&http://www.isotc211.org/2005/gmd

---

You can find all these in the [github-repo]. 

- they are powershell script (`.ps`)
  - ... *i.e.* runs on window powershell only.

[github-repo]: https://github.com/UoMResearchIT/nerc-digital-solutions-hub/blob/develop/nerc-data-centres/Metadata/download-nerc.ps1

---

## Problems of retrieving metadata from CSW

- not all of metadata have the same structure.
  - see [bgs] example
  - e.g. `identificationInfo` content could be `MD_DataIdentification` or `SV_ServiceIdentification`
- to extract the info from the metadata, you either
    1. find all XPath of each info you need.
    2. build a respective class/data binder
      - use `XML deserialisation program` to load the info to the class.

---

## GeoNetwork Database Access?

[GeoNetwork offical docker image]

[geoNetwork offical docker image]: https://hub.docker.com/_/geonetwork

https://github.com/geonetwork/docker-geonetwork/blob/main/4.2.3/docker-compose.yml

---

GeoNetwork PostgresDB :arrow_right: structured metadata :arrow_right: Reverse engineering the classes, see [efcore- scaffolding](https://learn.microsoft.com/en-us/ef/core/managing-schemas/scaffolding/?tabs=dotnet-core-cli) 

---