Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

review and provide recommendation on future of WCMP #11

Closed
tomkralidis opened this issue Apr 9, 2021 · 30 comments
Closed

review and provide recommendation on future of WCMP #11

tomkralidis opened this issue Apr 9, 2021 · 30 comments
Labels
enhancement New feature or request wcmp

Comments

@tomkralidis
Copy link
Contributor

Summary and Purpose

WCMP Status

  • WCMP has been in existence since the creation of WIS (~2012)
  • WCMP provides:
    • a profile based on ISO 19115/19139 (i.e. not a new model or schema)
    • an abstract test suite to help determine compliance
    • a dedicated set of custom codelists (some extending ISO 19115, some new/dedicated to WMO)
  • KPIs have been implemented in support of WCMP quality assessment for GISCs

WIS

  • WIS 1.0 has been operational since ~2012
  • WIS 2.0 principles (summary as part of initial WIS 2.0 search pilot project)
    • lower the barrier to entry
    • FAIR data principles
    • Web architecture/hypermedia
    • webby/of the web
    • search engine friendly
    • the browser is the search engine
    • schema.org

Current landscape

  • XML is slowly being replaced by JSON (of the web, tight coupling with programming language)
  • mass market integration is a priority
  • cross pollination with another information communities (extending the reach)
  • Service-oriented architecture (SOA) -> Resource-oriented architecture (ROA)
  • other organizations such as OGC are undergoing efforts to move to modernized approaches (i.e OGC API)

Proposal

@wmo-im/tt-wismd to assess and evaluate options for the future of WCMP against established criteria of requirements, e.g.:

  • do nothing, use existing WCMP 1.3
  • move to ISO 19115-3
  • consider other metadata standards (DCAT2, OGC API - Records, etc.)

Criteria

  • WIS 2.0 alignment
  • content
  • migration
  • backwards compatibility
  • change management
  • interoperability
  • cross pollination with other communities
  • timelines for WMO endorsement

Reason

As TT-WISMD, we need to put forth next steps in realizing discovery in alignment with WIS 2.0 and current state.

cc @6a6d74 @joergklausen

@chris-little
Copy link

@tomkralidis Maybe you need to add to the excellent outline above something around measures of success (some of which could be applied to the earlier WCMPs). Or at least describe what success would loook like. HTH

@efucile
Copy link
Member

efucile commented Apr 15, 2021

@tomkralidis Maybe you need to add to the excellent outline above something around measures of success (some of which could be applied to the earlier WCMPs). Or at least describe what success would look like. HTH

I agree with @chris-little. I would say that we need to clarify objectives and benefits for the user.

@amilan17
Copy link
Member

amilan17 commented May 7, 2021

I think it will be valuable to create an inventory of existing discovery portals including the standards and formats supported.

@amilan17
Copy link
Member

amilan17 commented May 7, 2021

Most recent documentation on https://community.wmo.int/wis/wis2-implementation

@tomkralidis
Copy link
Contributor Author

As part of this work, we must also keep in mind the W3C Spatial Data on the Web Best Practices. @wmo-im/tt-wismd please review as part of our WCMP 2.0 efforts. Thanks again.

@chris-little
Copy link

And do not forget the underlying W3C Data on the Web Best Practices .

@tomkralidis
Copy link
Contributor Author

I originally included this, but then removed it given lineage. Nevertheless good to articulate explicitly, thanks @chris-little!

@efucile
Copy link
Member

efucile commented May 12, 2021

.. and don't forget that generic best practices need to be tailored for our needs.
By the way do we know our needs?

@tomkralidis
Copy link
Contributor Author

By the way do we know our needs?

IMHO our needs are rooted in lowering the barrier to our data. We need to satisfy discovery of WIS resources for both power users and mass market.

@tomkralidis
Copy link
Contributor Author

2021-06-04 TT-WISMD meeting : @wmo-im/tt-wismd please review the W3C DCAT standard as a possible candidate for WCMP 2.0 for discussion at our next meeting.

@gaubert gaubert pinned this issue Jun 10, 2021
@tomkralidis
Copy link
Contributor Author

@wmo-im/tt-wismd please also review the OGC API - Records core metadata record model. This is based on DCAT and is based on GeoJSON which provides robust/broad interoperability.

@josusky
Copy link
Contributor

josusky commented Jun 18, 2021

Thanks for the interesting information about OGC API - Records, Tom.
To familiarize me with it, I have tried the load the example document and validate it using the schema. Apparently, that was too big a task for the start :-)
First of all, my JSON parser complains when loading the example ("record.json"), it does not like the extra comma on line 140.
Secondly, I have tried to load the yaml ("recordGeoJSON.yaml"), and then use it as the schema argument for validation, like this:
jsonschema.validate(instance=record, schema=schema)
that failed terribly. Most probably the problem is that the schema refers to other documents.
Would it be possible to provide an example (python code) on how to use the schema for actual validation?

@tomkralidis
Copy link
Contributor Author

@josusky thanks for testing. The OGC API - Records schemas are currently in development. You are correct that the validation issues are rooted in the $ref objects, which themselves are YAML (not JSON).

Having said this (if you want to dig deeper), the following jsonschema PR, along with the below, works as expected:

import json
import os
import sys 

from jsonschema import RefResolver, validate
import yaml


def validate_json(instance: dict, schema: dict, schema_dir: str) -> bool:

    resolver = RefResolver(base_uri=f'file://{schema_dir}/', referrer=schema)

    validate(instance, schema, resolver=resolver)

    return True


if __name__ == '__main__':
    if len(sys.argv) < 3:
        print(f'Usage: {sys.argv[0]} <instance> <schema>')
        sys.exit(1)

    schema_dir = os.path.dirname(os.path.abspath(sys.argv[2]))

    with open(sys.argv[1]) as fh1, open(sys.argv[2]) as fh2:
        instance = json.load(fh1)
        schema = yaml.load(fh2, Loader=yaml.SafeLoader)

        try:
            validate_json(instance, schema, schema_dir)
        except Exception as err:
            msg = f'ERROR: {err}'
            print(msg)

and then assuming you cloned https://github.com/opengeospatial/ogcapi-records:

python foo.py core/examples/json/record.json core/openapi/schemas/recordGeoJSON.yaml

@josusky
Copy link
Contributor

josusky commented Jun 21, 2021

Thanks, @tomkralidis ,
I am not sure I wanted to dig as deep as to patch the jsonschema module. I am just a humble C++ developer who occasionally moonlights in Python :-)
Perhaps, until the PR in jsonschema is accepted, we could have the JSON schema exported into, er, JSON, as the reference version that could be used directly?

PS: I did try your code, with the tools I have, and it ended with "ERROR: Expecting value: line 1 column 1 (char 0)
" and I further tracked it into the loading of "geometryGeoJSON.yaml" where line 1 starts with " - $ref: ...".

@tomkralidis
Copy link
Contributor Author

@josusky once we have a 1.0 schema, then we will have published a single/all in one YAML (see the OGC API - Features example: http://schemas.opengis.net/ogcapi/features/part1/1.0/openapi/ogcapi-features-1.yaml), which we can use without worrying about external references.

Having said this, validating would need an extra step to tie to a given shared component in the schema (vs. a single file of a building block) to ensure proper validation.

@jsieland
Copy link
Contributor

As said in out last meeting, we tried to play around with the OGC API Records (OARec). Below I added first our first try and after that the original XML we wanted to translate. Thanks to my lovely colleague Antje Schremmer for her help and contribution.

Here are some points we found while working :

  • which schema version is the document based on? -> version management!
  • how about multilingualism? in one document or better several?
  • is there a possibility to indicate "continuous" for updating?
  • publisher vs. originator -> originator part missing (?)
  • is it possible to indicate a priority like now with GTSPriority?

And other questions regarding the further WMO context (coming from discussions with other colleagues):

  • impact for transmitting/harvesting other metadata? -> ISO? OAI? INSPIRE? etc?
  • what is the minimum necessary set of mandatory elements for good metadata?
  • will there be a translator?

JSON: OGC
{
    "id": "urn:x-wmo:md:int.wmo.wis::SADL35EDZO",
    "type": "Feature",
    "geometry": {
        "type": "Polygon",
        "coordinates": [ [47.2747, 5.8650], [47.2747, 15.0338], [55.0565, 15.0338], [55.0565, 5.8650], [47.2747, 5.8650] ]
    },
    "properties": {
        "recordCreated": "2017-05-26T06:44:07Z",
        "recordUpdated": "2021-08-23T12:30:00Z",
        "type": "dataset (http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/codelist/gmxCodelists.xml#MD_ScopeCode)",
        "title": "GTS Bulletin: Meteorological Aviation Routine Weather Report (METAR) Germany, surface observation airport",
        "description": "(Should be changed to human description)...The SADL35 TTAAii Data Designators decode as: T1 (S): Surface data T1T2 (SA): Aviation routine reports A1A2 (DL): Germany (The bulletin collects reports from stations: EDHA;EDHI;HAMBURG-FINKENWERDER ;EDHK;KIEL-HOLTENAU ;EDJA;MEMMINGEN ALLGAU ;EDMO;OBERPFAFFENHOFEN ;EDOP;SCHWERIN PARCHIM ;EDTD;DONAUESCHINGEN-VILLINGEN ;EDTL;LAHR ;EDTY;SCHWAEBISCH HALL ;EDVE;BRAUNSCHWEIG WOLFSBURG ;EDXW;WESTERLAND SYLT ;EDZO;)",
        "keywords": [
            "ceiling", "cloud", "dewpoint", "pressure", "temperature", "visibility", "weather", "wind"
        ],
		"keywordsCodespace": "http://codes.wmo.int/306/4678",
        "language": "en",
        "externalID": "urn:x-wmo:md:int.wmo.wis::SADL35EDZO",
        "created": "2013-07-01T00:00:00Z",
        "updated": "2017-05-26T00:00:00Z",
        "publisher": [
            {
                "individial-name": "Kai-Thorsten Wirt",
                "organizationName": "Deutscher Wetterdienst",
                "positionName": "RTH FOCAL POINT",
                "contactInfo": [
                    {
                        "phone": "+49 (0) 69 8062-2546"
                    }
                ],
                "address": [
                    {
                        "delivery-point": "Frankfurter Straße 135",
                        "city": "Offenbach",
                        "postal-code": "63067",
                        "country": "Germany"
                    }
                ],
                "onlineResource": "http://www.dwd.de"
            }
        ],
        "themes": [
            {
                "concepts": ["meteorology", "weatherObservations"],
                "scheme": "https://wis.wmo.int/2012/codelists/WMOCodeLists.xml#WMO_CategoryCode#MD_KeywordTypeCode_theme"
            },
			{
				"concepts": ["EDHA", "EDHI", "EDHK", "EDJA", "EDMO", "EDOP", "EDTD", "EDTL", "EDTY", "EDVE", "EDXW", "EDZO"],
				"scheme": "https://wis.wmo.int/2012/codelists/WMOCodeLists.xml#WMO_CategoryCode#MD_KeywordTypeCode_place"
			},
			{
				"concepts": ["GlobalExchange"],
				"scheme": "https://wis.wmo.int/2012/codelists/WMOCodeLists.xml#WMO_CategoryCode#MD_KeywordTypeCode_dataCentre"
			}
        ],
        "formats": [
            "http://codes.wmo.int/wmdr/DataFormat/_FM-15-metar"
        ],
        "contactPoint": "gisc@dwd.de",
        "license": "http://codes.wmo.int/wmdr/DataPolicy/_WMOOther",
        "rights": "access",
        "extent": [
            {
                "spatial": {
                    "bbox": [5.8650, 47.2747, 15.0338, 55.0565],
                    "crs": "http://www.opengis.net/def/crs/OGC/1.3/CRS84"
                },
                "temporal": {
                    "interval": [["2013-07-01Z", null]],
                    "trs": "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian"
                }
            }
        ],
        "association": [
            {
                "protocol": "https",
				"directDownloadURL": "false",
                "title": "WMO Information System Metadata Catalogue GISC Offenbach, view Metadata and download data",
                "href": "https://gisc.dwd.de/wisportal/#SearchPlace:q?pid=urn:x-wmo:md:int.wmo.wis::SADL35EDZO"
            },
			{
				"protocol": "amqps",
				"title": "WIS Message System GISC Offenbach",
				"broker": "https://oflkd013.dwd.de",
				"exchange": "wisof",
				"topic/routing_key": "v03/wis/de/offenbach/surface/aviation/metar/de"
			}
        ]
    }
}

XML
<?xml version="1.0" encoding="UTF-8"?>
<gmd:MD_Metadata xmlns:gmd="http://www.isotc211.org/2005/gmd" xmlns:gco="http://www.isotc211.org/2005/gco" xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:gmx="http://www.isotc211.org/2005/gmx" xmlns:gts="http://www.isotc211.org/2005/gts" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.isotc211.org/2005/gmd http://schemas.opengis.net/iso/19139/20070417/gmd/gmd.xsd  http://www.isotc211.org/2005/gmx http://schemas.opengis.net/iso/19139/20070417/gmx/gmx.xsd">
  <gmd:fileIdentifier>
    <gco:CharacterString>urn:x-wmo:md:int.wmo.wis::SADL35EDZO</gco:CharacterString>
  </gmd:fileIdentifier>
  <gmd:language>
    <gmd:LanguageCode codeList="http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/codelist/gmxCodelists.xml#LanguageCode" codeListValue="eng">eng</gmd:LanguageCode>
  </gmd:language>
  <gmd:characterSet>
    <gmd:MD_CharacterSetCode codeList="http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/codelist/gmxCodelists.xml#MD_CharacterSetCode" codeListValue="utf8">utf8</gmd:MD_CharacterSetCode>
  </gmd:characterSet>
  <gmd:hierarchyLevel>
    <gmd:MD_ScopeCode codeList="http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/codelist/gmxCodelists.xml#MD_ScopeCode" codeListValue="dataset">dataset</gmd:MD_ScopeCode>
  </gmd:hierarchyLevel>
  <gmd:hierarchyLevelName>
    <gco:CharacterString>Series of WMO GTS Bulletins;;</gco:CharacterString>
  </gmd:hierarchyLevelName>
  <gmd:contact>
    <gmd:CI_ResponsibleParty>
      <gmd:individualName>
        <gco:CharacterString>Kai-Thorsten Wirt</gco:CharacterString>
      </gmd:individualName>
      <gmd:organisationName>
        <gco:CharacterString>Deutscher Wetterdienst</gco:CharacterString>
      </gmd:organisationName>
      <gmd:positionName>
        <gco:CharacterString>RTH FOCAL POINT</gco:CharacterString>
      </gmd:positionName>
      <gmd:contactInfo>
        <gmd:CI_Contact>
          <gmd:phone>
            <gmd:CI_Telephone>
              <gmd:voice>
                <gco:CharacterString>+49 (0) 69 8062-2546</gco:CharacterString>
              </gmd:voice>
            </gmd:CI_Telephone>
          </gmd:phone>
          <gmd:address>
            <gmd:CI_Address>
              <gmd:deliveryPoint>
                <gco:CharacterString>Frankfurter Straße 135</gco:CharacterString>
              </gmd:deliveryPoint>
              <gmd:city>
                <gco:CharacterString>Offenbach</gco:CharacterString>
              </gmd:city>
              <gmd:postalCode>
                <gco:CharacterString>63067</gco:CharacterString>
              </gmd:postalCode>
              <gmd:country>
                <gco:CharacterString>Germany</gco:CharacterString>
              </gmd:country>
              <gmd:electronicMailAddress>
                <gco:CharacterString>gisc@dwd.de</gco:CharacterString>
              </gmd:electronicMailAddress>
            </gmd:CI_Address>
          </gmd:address>
          <gmd:onlineResource>
            <gmd:CI_OnlineResource>
              <gmd:linkage>
                <gmd:URL>http://www.dwd.de</gmd:URL>
              </gmd:linkage>
            </gmd:CI_OnlineResource>
          </gmd:onlineResource>
        </gmd:CI_Contact>
      </gmd:contactInfo>
      <gmd:role>
        <gmd:CI_RoleCode codeList="http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/codelist/gmxCodelists.xml#CI_RoleCode" codeListValue="pointOfContact">pointOfContact</gmd:CI_RoleCode>
      </gmd:role>
    </gmd:CI_ResponsibleParty>
  </gmd:contact>
  <gmd:dateStamp>
    <gco:DateTime>2017-05-26T06:44:07Z</gco:DateTime>
  </gmd:dateStamp>
  <gmd:metadataStandardName>
    <gco:CharacterString>WMO Core Metadata Profile of ISO 19115 (WMO Core), 2003/Cor.1:2006 (ISO 19115), 2007 (ISO/TS 19139)</gco:CharacterString>
  </gmd:metadataStandardName>
  <gmd:metadataStandardVersion>
    <gco:CharacterString>1.3</gco:CharacterString>
  </gmd:metadataStandardVersion>
  <gmd:referenceSystemInfo>
    <gmd:MD_ReferenceSystem>
      <gmd:referenceSystemIdentifier>
        <gmd:RS_Identifier>
          <gmd:code>
            <gco:CharacterString>WGS 84</gco:CharacterString>
          </gmd:code>
          <gmd:codeSpace>
            <gco:CharacterString>World Geodetic System</gco:CharacterString>
          </gmd:codeSpace>
        </gmd:RS_Identifier>
      </gmd:referenceSystemIdentifier>
    </gmd:MD_ReferenceSystem>
  </gmd:referenceSystemInfo>
  <gmd:metadataExtensionInfo>
    <gmd:MD_MetadataExtensionInformation>
      <gmd:extensionOnLineResource>
        <gmd:CI_OnlineResource>
          <gmd:linkage>
            <gmd:URL>http://www.wmo.int/pages/prog/wis/2012/metadata/version_1-3/</gmd:URL>
          </gmd:linkage>
          <gmd:name>
            <gco:CharacterString>WMO Core Profile version 1.3</gco:CharacterString>
          </gmd:name>
        </gmd:CI_OnlineResource>
      </gmd:extensionOnLineResource>
    </gmd:MD_MetadataExtensionInformation>
  </gmd:metadataExtensionInfo>
  <gmd:identificationInfo>
    <gmd:MD_DataIdentification id="identInfo">
      <gmd:citation>
        <gmd:CI_Citation>
          <gmd:title>
            <gco:CharacterString>GTS Bulletin: SADL35 EDZO - Surface data (details are described in the abstract)</gco:CharacterString>
          </gmd:title>
          <gmd:date>
            <gmd:CI_Date>
              <gmd:date>
                <gco:Date>2013-07-01Z</gco:Date>
              </gmd:date>
              <gmd:dateType>
                <gmd:CI_DateTypeCode codeList="http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/codelist/gmxCodelists.xml#CI_DateTypeCode" codeListValue="publication">publication</gmd:CI_DateTypeCode>
              </gmd:dateType>
            </gmd:CI_Date>
          </gmd:date>
          <gmd:date>
            <gmd:CI_Date>
              <gmd:date>
                <gco:Date>2017-05-26Z</gco:Date>
              </gmd:date>
              <gmd:dateType>
                <gmd:CI_DateTypeCode codeList="http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/codelist/gmxCodelists.xml#CI_DateTypeCode" codeListValue="revision">revision</gmd:CI_DateTypeCode>
              </gmd:dateType>
            </gmd:CI_Date>
          </gmd:date>
          <gmd:identifier>
            <gmd:RS_Identifier id="fileIdentifier">
              <gmd:code>
                <gco:CharacterString>urn:x-wmo:md:int.wmo.wis::SADL35EDZO</gco:CharacterString>
              </gmd:code>
              <gmd:codeSpace>
                <gco:CharacterString>http://wis.wmo.int</gco:CharacterString>
              </gmd:codeSpace>
            </gmd:RS_Identifier>
          </gmd:identifier>
          <gmd:citedResponsibleParty>
            <gmd:CI_ResponsibleParty>
              <gmd:individualName>
                <gco:CharacterString>Kai-Thorsten Wirt</gco:CharacterString>
              </gmd:individualName>
              <gmd:organisationName>
                <gco:CharacterString>Deutscher Wetterdienst</gco:CharacterString>
              </gmd:organisationName>
              <gmd:positionName>
                <gco:CharacterString>RTH FOCAL POINT</gco:CharacterString>
              </gmd:positionName>
              <gmd:contactInfo>
                <gmd:CI_Contact>
                  <gmd:phone>
                    <gmd:CI_Telephone>
                      <gmd:voice>
                        <gco:CharacterString>+49 (0) 69 8062-2546</gco:CharacterString>
                      </gmd:voice>
                    </gmd:CI_Telephone>
                  </gmd:phone>
                  <gmd:address>
                    <gmd:CI_Address>
                      <gmd:deliveryPoint>
                        <gco:CharacterString>Frankfurter Straße 135</gco:CharacterString>
                      </gmd:deliveryPoint>
                      <gmd:city>
                        <gco:CharacterString>Offenbach</gco:CharacterString>
                      </gmd:city>
                      <gmd:postalCode>
                        <gco:CharacterString>63067</gco:CharacterString>
                      </gmd:postalCode>
                      <gmd:country>
                        <gco:CharacterString>Germany</gco:CharacterString>
                      </gmd:country>
                      <gmd:electronicMailAddress>
                        <gco:CharacterString>gisc@dwd.de</gco:CharacterString>
                      </gmd:electronicMailAddress>
                    </gmd:CI_Address>
                  </gmd:address>
                  <gmd:onlineResource>
                    <gmd:CI_OnlineResource>
                      <gmd:linkage>
                        <gmd:URL>http://www.dwd.de</gmd:URL>
                      </gmd:linkage>
                    </gmd:CI_OnlineResource>
                  </gmd:onlineResource>
                </gmd:CI_Contact>
              </gmd:contactInfo>
              <gmd:role>
                <gmd:CI_RoleCode codeList="http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/codelist/gmxCodelists.xml#CI_RoleCode" codeListValue="distributor">distributor</gmd:CI_RoleCode>
              </gmd:role>
            </gmd:CI_ResponsibleParty>
          </gmd:citedResponsibleParty>
          <gmd:presentationForm>
            <gmd:CI_PresentationFormCode codeList="http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/codelist/gmxCodelists.xml#CI_PresentationFormCode" codeListValue="documentDigital">documentDigital</gmd:CI_PresentationFormCode>
          </gmd:presentationForm>
          <gmd:otherCitationDetails>
            <gco:CharacterString>The dot notation recommended by WMO-CBS IPET-MDRD is used to build the code identifier</gco:CharacterString>
          </gmd:otherCitationDetails>
        </gmd:CI_Citation>
      </gmd:citation>
      <gmd:abstract>
        <gco:CharacterString>The SADL35 TTAAii Data Designators decode as: T1 (S): Surface data T1T2 (SA): Aviation routine reports A1A2 (DL): Germany (The bulletin collects reports from stations: EDHA;EDHI;HAMBURG-FINKENWERDER ;EDHK;KIEL-HOLTENAU ;EDJA;MEMMINGEN ALLGAU ;EDMO;OBERPFAFFENHOFEN ;EDOP;SCHWERIN PARCHIM ;EDTD;DONAUESCHINGEN-VILLINGEN ;EDTL;LAHR ;EDTY;SCHWAEBISCH HALL ;EDVE;BRAUNSCHWEIG WOLFSBURG ;EDXW;WESTERLAND SYLT ;EDZO;)</gco:CharacterString>
      </gmd:abstract>
      <gmd:purpose>
        <gco:CharacterString>WMO GTS Bulletin - Intended for global Exchange</gco:CharacterString>
      </gmd:purpose>
      <gmd:pointOfContact>
        <gmd:CI_ResponsibleParty>
          <gmd:individualName>
            <gco:CharacterString>Kai-Thorsten Wirt</gco:CharacterString>
          </gmd:individualName>
          <gmd:organisationName>
            <gco:CharacterString>Deutscher Wetterdienst</gco:CharacterString>
          </gmd:organisationName>
          <gmd:positionName>
            <gco:CharacterString>Focal Point</gco:CharacterString>
          </gmd:positionName>
          <gmd:contactInfo>
            <gmd:CI_Contact>
              <gmd:phone>
                <gmd:CI_Telephone>
                  <gmd:voice>
                    <gco:CharacterString>T+49 69 8062 2546</gco:CharacterString>
                  </gmd:voice>
                </gmd:CI_Telephone>
              </gmd:phone>
              <gmd:address>
                <gmd:CI_Address>
                  <gmd:deliveryPoint>
                    <gco:CharacterString>Frankfurter Straße 135</gco:CharacterString>
                  </gmd:deliveryPoint>
                  <gmd:city>
                    <gco:CharacterString>OFFENBACH</gco:CharacterString>
                  </gmd:city>
                  <gmd:postalCode>
                    <gco:CharacterString>63067</gco:CharacterString>
                  </gmd:postalCode>
                  <gmd:country>
                    <gco:CharacterString>Germany</gco:CharacterString>
                  </gmd:country>
                  <gmd:electronicMailAddress>
                    <gco:CharacterString>gisc@dwd.de</gco:CharacterString>
                  </gmd:electronicMailAddress>
                </gmd:CI_Address>
              </gmd:address>
            </gmd:CI_Contact>
          </gmd:contactInfo>
          <gmd:role>
            <gmd:CI_RoleCode codeList="http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/codelist/gmxCodelists.xml#CI_RoleCode" codeListValue="originator">originator</gmd:CI_RoleCode>
          </gmd:role>
        </gmd:CI_ResponsibleParty>
      </gmd:pointOfContact>
      <gmd:resourceMaintenance>
        <gmd:MD_MaintenanceInformation>
          <gmd:maintenanceAndUpdateFrequency>
            <gmd:MD_MaintenanceFrequencyCode codeList="http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/codelist/gmxCodelists.xml#MD_FrequencyCode" codeListValue="continual">continual</gmd:MD_MaintenanceFrequencyCode>
          </gmd:maintenanceAndUpdateFrequency>
          <gmd:updateScope>
            <gmd:MD_ScopeCode codeList="http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/codelist/gmxCodelists.xml#MD_ScopeCode" codeListValue="dataset">dataset</gmd:MD_ScopeCode>
          </gmd:updateScope>
          <gmd:updateScopeDescription>
            <gmd:MD_ScopeDescription>
              <gmd:dataset gco:nilReason="missing" />
            </gmd:MD_ScopeDescription>
          </gmd:updateScopeDescription>
          <gmd:maintenanceNote>
            <gco:CharacterString>The details of the update frequence are described in the temporalElement</gco:CharacterString>
          </gmd:maintenanceNote>
        </gmd:MD_MaintenanceInformation>
      </gmd:resourceMaintenance>
      <gmd:descriptiveKeywords>
        <gmd:MD_Keywords>
          <gmd:keyword>
            <gco:CharacterString>H+20 H+50</gco:CharacterString>
          </gmd:keyword>
          <gmd:type>
            <gmd:MD_KeywordTypeCode codeList="http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/codelist/gmxCodelists.xml#MD_KeywordTypeCode" codeListValue="temporal">temporal</gmd:MD_KeywordTypeCode>
          </gmd:type>
          <gmd:thesaurusName gco:nilReason="missing" />
        </gmd:MD_Keywords>
      </gmd:descriptiveKeywords>
      <gmd:descriptiveKeywords>
        <gmd:MD_Keywords>
          <gmd:keyword>
            <gco:CharacterString>Aviation routine reports</gco:CharacterString>
          </gmd:keyword>
          <gmd:keyword>
            <gco:CharacterString>METAR</gco:CharacterString>
          </gmd:keyword>
          <gmd:keyword>
            <gco:CharacterString>aerodrome</gco:CharacterString>
          </gmd:keyword>
          <gmd:keyword>
            <gco:CharacterString>airport</gco:CharacterString>
          </gmd:keyword>
          <gmd:keyword>
            <gco:CharacterString>ceiling</gco:CharacterString>
          </gmd:keyword>
          <gmd:keyword>
            <gco:CharacterString>cloud</gco:CharacterString>
          </gmd:keyword>
          <gmd:keyword>
            <gco:CharacterString>dewpoint</gco:CharacterString>
          </gmd:keyword>
          <gmd:keyword>
            <gco:CharacterString>meteorological</gco:CharacterString>
          </gmd:keyword>
          <gmd:keyword>
            <gco:CharacterString>pressure</gco:CharacterString>
          </gmd:keyword>
          <gmd:keyword>
            <gco:CharacterString>temperature</gco:CharacterString>
          </gmd:keyword>
          <gmd:keyword>
            <gco:CharacterString>visibility</gco:CharacterString>
          </gmd:keyword>
          <gmd:keyword>
            <gco:CharacterString>weather</gco:CharacterString>
          </gmd:keyword>
          <gmd:keyword>
            <gco:CharacterString>weatherForecast</gco:CharacterString>
          </gmd:keyword>
          <gmd:keyword>
            <gco:CharacterString>wind</gco:CharacterString>
          </gmd:keyword>
          <gmd:type>
            <gmd:MD_KeywordTypeCode codeList="http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/codelist/gmxCodelists.xml#MD_KeywordTypeCode" codeListValue="theme">theme</gmd:MD_KeywordTypeCode>
          </gmd:type>
          <gmd:thesaurusName gco:nilReason="missing" />
        </gmd:MD_Keywords>
      </gmd:descriptiveKeywords>
      <gmd:descriptiveKeywords uuidref="theme">
        <gmd:MD_Keywords>
          <gmd:keyword>
            <gco:CharacterString>meteorology</gco:CharacterString>
          </gmd:keyword>
          <gmd:keyword>
            <gco:CharacterString>weatherObservations</gco:CharacterString>
          </gmd:keyword>
          <gmd:type>
            <gmd:MD_KeywordTypeCode codeList="http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/codelist/gmxCodelists.xml#MD_KeywordTypeCode" codeListValue="theme">theme</gmd:MD_KeywordTypeCode>
          </gmd:type>
          <gmd:thesaurusName>
            <gmd:CI_Citation>
              <gmd:title>
                <gco:CharacterString>WMO_CategoryCode</gco:CharacterString>
              </gmd:title>
              <gmd:date>
                <gmd:CI_Date>
                  <gmd:date>
                    <gco:Date>2012-06-27</gco:Date>
                  </gmd:date>
                  <gmd:dateType>
                    <gmd:CI_DateTypeCode codeList="http://wis.wmo.int/2013/codelists/WMOCodeLists.xml#CI_DateTypeCode" codeListValue="revision">revision</gmd:CI_DateTypeCode>
                  </gmd:dateType>
                </gmd:CI_Date>
              </gmd:date>
              <gmd:identifier>
                <gmd:MD_Identifier>
                  <gmd:authority>
                    <gmd:CI_Citation>
                      <gmd:title>
                        <gco:CharacterString>Codelists for description of metadata datasets compliant with the WMO Core
                          Metadata Profile version 1.3 [http://wis.wmo.int/2013/codelists/WMOCodeLists.xml]</gco:CharacterString>
                      </gmd:title>
                      <gmd:date>
                        <gmd:CI_Date>
                          <gmd:date>
                            <gco:Date>2012-06-27</gco:Date>
                          </gmd:date>
                          <gmd:dateType>
                            <gmd:CI_DateTypeCode codeList="http://wis.wmo.int/2013/codelists/WMOCodeLists.xml#CI_DateTypeCode" codeListValue="revision">revision</gmd:CI_DateTypeCode>
                          </gmd:dateType>
                        </gmd:CI_Date>
                      </gmd:date>
                    </gmd:CI_Citation>
                  </gmd:authority>
                  <gmd:code>
                    <gco:CharacterString>WMO_CategoryCode</gco:CharacterString>
                  </gmd:code>
                </gmd:MD_Identifier>
              </gmd:identifier>
              <gmd:citedResponsibleParty>
                <gmd:CI_ResponsibleParty>
                  <gmd:organisationName>
                    <gco:CharacterString>WMO Secretariat</gco:CharacterString>
                  </gmd:organisationName>
                  <gmd:role>
                    <gmd:CI_RoleCode codeList="http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/codelist/gmxCodelists.xml#CI_RoleCode" codeListValue="publisher">publisher</gmd:CI_RoleCode>
                  </gmd:role>
                </gmd:CI_ResponsibleParty>
              </gmd:citedResponsibleParty>
            </gmd:CI_Citation>
          </gmd:thesaurusName>
        </gmd:MD_Keywords>
      </gmd:descriptiveKeywords>
      <gmd:descriptiveKeywords uuidref="place">
        <gmd:MD_Keywords>
          <gmd:keyword>
            <gco:CharacterString>BRAUNSCHWEIG WOLFSBURG</gco:CharacterString>
          </gmd:keyword>
          <gmd:keyword>
            <gco:CharacterString>DONAUESCHINGEN-VILLINGEN</gco:CharacterString>
          </gmd:keyword>
          <gmd:keyword>
            <gco:CharacterString>EDHA</gco:CharacterString>
          </gmd:keyword>
          <gmd:keyword>
            <gco:CharacterString>EDHI</gco:CharacterString>
          </gmd:keyword>
          <gmd:keyword>
            <gco:CharacterString>EDHK</gco:CharacterString>
          </gmd:keyword>
          <gmd:keyword>
            <gco:CharacterString>EDJA</gco:CharacterString>
          </gmd:keyword>
          <gmd:keyword>
            <gco:CharacterString>EDMO</gco:CharacterString>
          </gmd:keyword>
          <gmd:keyword>
            <gco:CharacterString>EDOP</gco:CharacterString>
          </gmd:keyword>
          <gmd:keyword>
            <gco:CharacterString>EDTD</gco:CharacterString>
          </gmd:keyword>
          <gmd:keyword>
            <gco:CharacterString>EDTL</gco:CharacterString>
          </gmd:keyword>
          <gmd:keyword>
            <gco:CharacterString>EDTY</gco:CharacterString>
          </gmd:keyword>
          <gmd:keyword>
            <gco:CharacterString>EDVE</gco:CharacterString>
          </gmd:keyword>
          <gmd:keyword>
            <gco:CharacterString>EDXW</gco:CharacterString>
          </gmd:keyword>
          <gmd:keyword>
            <gco:CharacterString>EDZO</gco:CharacterString>
          </gmd:keyword>
          <gmd:keyword>
            <gco:CharacterString>HAMBURG-FINKENWERDER</gco:CharacterString>
          </gmd:keyword>
          <gmd:keyword>
            <gco:CharacterString>KIEL-HOLTENAU</gco:CharacterString>
          </gmd:keyword>
          <gmd:keyword>
            <gco:CharacterString>LAHR</gco:CharacterString>
          </gmd:keyword>
          <gmd:keyword>
            <gco:CharacterString>MEMMINGEN ALLGAU</gco:CharacterString>
          </gmd:keyword>
          <gmd:keyword>
            <gco:CharacterString>OBERPFAFFENHOFEN</gco:CharacterString>
          </gmd:keyword>
          <gmd:keyword>
            <gco:CharacterString>SCHWAEBISCH HALL</gco:CharacterString>
          </gmd:keyword>
          <gmd:keyword>
            <gco:CharacterString>SCHWERIN PARCHIM</gco:CharacterString>
          </gmd:keyword>
          <gmd:keyword>
            <gco:CharacterString>WESTERLAND SYLT</gco:CharacterString>
          </gmd:keyword>
          <gmd:type>
            <gmd:MD_KeywordTypeCode codeList="http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/codelist/gmxCodelists.xml#MD_KeywordTypeCode" codeListValue="place">place</gmd:MD_KeywordTypeCode>
          </gmd:type>
          <gmd:thesaurusName gco:nilReason="missing" />
        </gmd:MD_Keywords>
      </gmd:descriptiveKeywords>
      <gmd:descriptiveKeywords uuidref="GEMET">
        <gmd:MD_Keywords>
          <gmd:keyword>
            <gco:CharacterString>Meteorological geographical features</gco:CharacterString>
          </gmd:keyword>
          <gmd:thesaurusName>
            <gmd:CI_Citation>
              <gmd:title>
                <gco:CharacterString>GEMET - INSPIRE themes, version
                  1.0</gco:CharacterString>
              </gmd:title>
              <gmd:date>
                <gmd:CI_Date>
                  <gmd:date>
                    <gco:Date>2008-06-01</gco:Date>
                  </gmd:date>
                  <gmd:dateType>
                    <gmd:CI_DateTypeCode codeList="http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/codelist/gmxCodelists.xml#CI_DateTypeCode" codeListValue="publication">publication</gmd:CI_DateTypeCode>
                  </gmd:dateType>
                </gmd:CI_Date>
              </gmd:date>
            </gmd:CI_Citation>
          </gmd:thesaurusName>
        </gmd:MD_Keywords>
      </gmd:descriptiveKeywords>
      <gmd:descriptiveKeywords uuidref="globalexchange">
        <gmd:MD_Keywords>
          <gmd:keyword>
            <gco:CharacterString>GlobalExchange</gco:CharacterString>
          </gmd:keyword>
          <gmd:type>
            <gmd:MD_KeywordTypeCode codeList="http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/codelist/gmxCodelists.xml#MD_KeywordTypeCode" codeListValue="dataCentre">dataCentre</gmd:MD_KeywordTypeCode>
          </gmd:type>
          <gmd:thesaurusName>
            <gmd:CI_Citation>
              <gmd:title>
                <gco:CharacterString>WMO_DistributionScopeCode</gco:CharacterString>
              </gmd:title>
              <gmd:date>
                <gmd:CI_Date>
                  <gmd:date>
                    <gco:Date>2012-06-27</gco:Date>
                  </gmd:date>
                  <gmd:dateType>
                    <gmd:CI_DateTypeCode codeList="http://wis.wmo.int/2013/codelists/WMOCodeLists.xml#CI_DateTypeCode" codeListValue="revision">revision</gmd:CI_DateTypeCode>
                  </gmd:dateType>
                </gmd:CI_Date>
              </gmd:date>
            </gmd:CI_Citation>
          </gmd:thesaurusName>
        </gmd:MD_Keywords>
      </gmd:descriptiveKeywords>
      <gmd:resourceConstraints>
        <gmd:MD_Constraints>
          <gmd:useLimitation>
            <gco:CharacterString>WMOOther</gco:CharacterString>
          </gmd:useLimitation>
        </gmd:MD_Constraints>
      </gmd:resourceConstraints>
      <gmd:resourceConstraints>
        <gmd:MD_LegalConstraints>
          <gmd:accessConstraints>
            <gmd:MD_RestrictionCode codeList="http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/codelist/gmxCodelists.xml#MD_RestrictionCode" codeListValue="otherRestrictions">otherRestrictions</gmd:MD_RestrictionCode>
          </gmd:accessConstraints>
          <gmd:useConstraints>
            <gmd:MD_RestrictionCode codeList="http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/codelist/gmxCodelists.xml#MD_RestrictionCode" codeListValue="otherRestrictions">otherRestrictions</gmd:MD_RestrictionCode>
          </gmd:useConstraints>
          <gmd:otherConstraints>
            <gco:CharacterString>WMOOther</gco:CharacterString>
          </gmd:otherConstraints>
          <gmd:otherConstraints>
            <gco:CharacterString>GTSPriority2</gco:CharacterString>
          </gmd:otherConstraints>
        </gmd:MD_LegalConstraints>
      </gmd:resourceConstraints>
      <gmd:language>
        <gmd:LanguageCode codeList="http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/codelist/gmxCodelists.xml#LanguageCode" codeListValue="eng">eng</gmd:LanguageCode>
      </gmd:language>
      <gmd:characterSet>
        <gmd:MD_CharacterSetCode codeList="http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/codelist/gmxCodelists.xml#MD_CharacterSetCode" codeListValue="utf8">utf8</gmd:MD_CharacterSetCode>
      </gmd:characterSet>
      <gmd:topicCategory>
        <gmd:MD_TopicCategoryCode>climatologyMeteorologyAtmosphere</gmd:MD_TopicCategoryCode>
      </gmd:topicCategory>
      <gmd:extent>
        <gmd:EX_Extent id="boundingExtent">
          <gmd:description>
            <gco:CharacterString>The product/data covers the following region/bounding box: Germany</gco:CharacterString>
          </gmd:description>
          <gmd:geographicElement>
            <gmd:EX_GeographicBoundingBox>
              <gmd:westBoundLongitude>
                <gco:Decimal>5.865</gco:Decimal>
              </gmd:westBoundLongitude>
              <gmd:eastBoundLongitude>
                <gco:Decimal>15.03382</gco:Decimal>
              </gmd:eastBoundLongitude>
              <gmd:southBoundLatitude>
                <gco:Decimal>47.27472</gco:Decimal>
              </gmd:southBoundLatitude>
              <gmd:northBoundLatitude>
                <gco:Decimal>55.05653</gco:Decimal>
              </gmd:northBoundLatitude>
            </gmd:EX_GeographicBoundingBox>
          </gmd:geographicElement>
          <gmd:temporalElement uuidref="BEGIN_END">
            <gmd:EX_TemporalExtent>
              <gmd:extent>
                <gml:TimePeriod gml:id="timeperiod.2013-07-01Z">
                  <gml:beginPosition>2013-07-01Z</gml:beginPosition>
                  <gml:endPosition indeterminatePosition="unknown" />
                </gml:TimePeriod>
              </gmd:extent>
            </gmd:EX_TemporalExtent>
          </gmd:temporalElement>
        </gmd:EX_Extent>
      </gmd:extent>
    </gmd:MD_DataIdentification>
  </gmd:identificationInfo>
  <gmd:contentInfo>
    <gmd:MD_CoverageDescription>
      <gmd:attributeDescription>
        <gco:RecordType>SADL35 : GTS Bulletin: SADL35 EDZO - Surface data (details are described in the abstract)</gco:RecordType>
      </gmd:attributeDescription>
      <gmd:contentType>
        <gmd:MD_CoverageContentTypeCode codeList="http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/codelist/gmxCodelists.xml#MD_CoverageContentTypeCode" codeListValue="thematicClassification">thematicClassification</gmd:MD_CoverageContentTypeCode>
      </gmd:contentType>
    </gmd:MD_CoverageDescription>
  </gmd:contentInfo>
  <gmd:distributionInfo>
    <gmd:MD_Distribution>
      <gmd:distributionFormat>
        <gmd:MD_Format>
          <gmd:name>
            <gco:CharacterString>FM 15</gco:CharacterString>
          </gmd:name>
          <gmd:version gco:nilReason="missing" />
          <gmd:specification>
            <gco:CharacterString>http://www.wmo.int/pages/prog/www/WMOCodes.html</gco:CharacterString>
          </gmd:specification>
        </gmd:MD_Format>
      </gmd:distributionFormat>
      <gmd:transferOptions>
        <gmd:MD_DigitalTransferOptions>
          <gmd:onLine>
            <gmd:CI_OnlineResource>
              <gmd:linkage>
                <gmd:URL>https://gisc.dwd.de/wisportal/#SearchPlace:q?pid=urn:x-wmo:md:int.wmo.wis::SADL35EDZO</gmd:URL>
              </gmd:linkage>
              <gmd:protocol>
                <gco:CharacterString>http</gco:CharacterString>
              </gmd:protocol>
              <gmd:name>
                <gco:CharacterString>GISC Offenbach, Deutscher Wetterdienst</gco:CharacterString>
              </gmd:name>
              <gmd:description>
                <gco:CharacterString>WMO Information System, download products/data through GISC Offenbach, Deutscher Wetterdienst</gco:CharacterString>
              </gmd:description>
            </gmd:CI_OnlineResource>
          </gmd:onLine>
        </gmd:MD_DigitalTransferOptions>
      </gmd:transferOptions>
    </gmd:MD_Distribution>
  </gmd:distributionInfo>
  <gmd:dataQualityInfo>
    <gmd:DQ_DataQuality>
      <gmd:scope>
        <gmd:DQ_Scope>
          <gmd:level>
            <gmd:MD_ScopeCode codeList="http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/codelist/gmxCodelists.xml#MD_ScopeCode" codeListValue="dataset">dataset</gmd:MD_ScopeCode>
          </gmd:level>
        </gmd:DQ_Scope>
      </gmd:scope>
      <gmd:report>
        <gmd:DQ_DomainConsistency xsi:type="gmd:DQ_DomainConsistency_Type">
          <gmd:result>
            <gmd:DQ_ConformanceResult xsi:type="gmd:DQ_ConformanceResult_Type">
              <gmd:specification>
                <gmd:CI_Citation>
                  <gmd:title>
                    <gco:CharacterString>INSPIRE Data Specification on Meteorological geographical features</gco:CharacterString>
                  </gmd:title>
                  <gmd:date>
                    <gmd:CI_Date>
                      <gmd:date>
                        <gco:Date>2010-12-08</gco:Date>
                      </gmd:date>
                      <gmd:dateType>
                        <gmd:CI_DateTypeCode codeList="http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/codelist/gmxCodelists.xml#CI_DateTypeCode" codeListValue="publication">publication</gmd:CI_DateTypeCode>
                      </gmd:dateType>
                    </gmd:CI_Date>
                  </gmd:date>
                </gmd:CI_Citation>
              </gmd:specification>
              <gmd:explanation>
                <gco:CharacterString>See the referenced specification</gco:CharacterString>
              </gmd:explanation>
              <gmd:pass>
                <gco:Boolean>true</gco:Boolean>
              </gmd:pass>
            </gmd:DQ_ConformanceResult>
          </gmd:result>
        </gmd:DQ_DomainConsistency>
      </gmd:report>
      <gmd:lineage>
        <gmd:LI_Lineage>
          <gmd:statement>
            <gco:CharacterString>High data quality controlled according to the procedures of the WIS</gco:CharacterString>
          </gmd:statement>
          <gmd:processStep>
            <gmd:LI_ProcessStep>
              <gmd:description>
                <gco:CharacterString>This metadata record was created automatically as a representation of the bulletin
                  declaration found in WMO # 9 Volume C1. Other references were used in the process, including WMO
                  References such as WMO # 9 Volume A, WMO # 386 Manual on the GTS and WMO # 306 Manual on Codes. Other
                  elements of information were also collected or created for the purpose of the GTS Metadata Generation.
                  This work, as well as the creation of the representation of the WMO references was done by Deutscher
                  Wetterdienst (DWD) on a "best effort" basis.</gco:CharacterString>
              </gmd:description>
            </gmd:LI_ProcessStep>
          </gmd:processStep>
        </gmd:LI_Lineage>
      </gmd:lineage>
    </gmd:DQ_DataQuality>
  </gmd:dataQualityInfo>
</gmd:MD_Metadata>

@tomkralidis
Copy link
Contributor Author

Excellent job @jsieland and Antje! Thanks for the valuable feedback.

which schema version is the document based on? -> version management!

This was raised in the OGC API - Records working group in opengeospatial/ogcapi-records#138, and a resulting schema update proposal in opengeospatial/ogcapi-records#144, which basically means adding the following to the root of the JSON:

    "conformsTo": [
        "http://www.opengis.net/spec/ogcapi-records-1/1.0/req/record-core",
        "http://www.wmo.int/spec/wmo-core-metadata-profile-1/1.0/req/discovery-metadata-record"
    ]

how about multilingualism? in one document or better several?

Let's start with using alternate representations. For example, from your English JSON:

{
  "id": 123,
  "geometry": ...
  "links" [
        {
            "rel": "alternate",
            "type": "application/json",
            "title": "This document in German",
            "href": "https://example.org/foo.de.json",
            "hreflang": "de"
        },
 }

is there a possibility to indicate "continuous" for updating?

Let's try adding the following to properties:

"wmo:maintenanceFrequency": "continual"

publisher vs. originator -> originator part missing (?)

"wmo:originator": "foo"

is it possible to indicate a priority like now with GTSPriority?

"wmo:priority": "foo"

And other questions regarding the further WMO context (coming from discussions with other colleagues):

impact for transmitting/harvesting other metadata? -> ISO? OAI? INSPIRE? etc?

In the context of WIS 2.0, the harvesting workflow would support OGC API - Records, and our resulting "profile/extension" of the metadata model. Is this what you mean?

what is the minimum necessary set of mandatory elements for good metadata?

The goal is that WCMP 2.0 will have a JSON schema (which is based off the OGC API - Records record JSON schema), and will enforce cardinality accordingly.

will there be a translator?

We will need migration tools to go from WCMP 1.0 -> 2.0, is this what you mean?

Any overall feedback on experiences with working with the metadata in a JSON format (compared to XML)? Is this easier from a user or programmer experience? How hard was it to make the above translation? Any feedback on this front is valuable.

Thanks again Julia and Antje!

@jsieland
Copy link
Contributor

which schema version is the document based on? -> version management!

This was raised in the OGC API - Records working group in opengeospatial/ogcapi-records#138, and a resulting schema update proposal in opengeospatial/ogcapi-records#144, which basically means adding the following to the root of the JSON:

    "conformsTo": [
        "http://www.opengis.net/spec/ogcapi-records-1/1.0/req/record-core",
        "http://www.wmo.int/spec/wmo-core-metadata-profile-1/1.0/req/discovery-metadata-record"
    ]

Looks good, especially the possibility to add more than just one.

how about multilingualism? in one document or better several?

Let's start with using alternate representations. For example, from your English JSON:

{
  "id": 123,
  "geometry": ...
  "links" [
        {
            "rel": "alternate",
            "type": "application/json",
            "title": "This document in German",
            "href": "https://example.org/foo.de.json",
            "hreflang": "de"
        },
 }

I like this approach because it allows to add/remove local versions.

is there a possibility to indicate "continuous" for updating?

Let's try adding the following to properties:

"wmo:maintenanceFrequency": "continual"

publisher vs. originator -> originator part missing (?)

"wmo:originator": "foo"

is it possible to indicate a priority like now with GTSPriority?

"wmo:priority": "foo"

Looks good, I will try to add this to the example! Not sure if I'm able to do this until our next meeting....

And other questions regarding the further WMO context (coming from discussions with other colleagues):
impact for transmitting/harvesting other metadata? -> ISO? OAI? INSPIRE? etc?

In the context of WIS 2.0, the harvesting workflow would support OGC API - Records, and our resulting "profile/extension" of the metadata model. Is this what you mean?

what is the minimum necessary set of mandatory elements for good metadata?

The goal is that WCMP 2.0 will have a JSON schema (which is based off the OGC API - Records record JSON schema), and will enforce cardinality accordingly.

will there be a translator?

We will need migration tools to go from WCMP 1.0 -> 2.0, is this what you mean?

Both questions go in the same direction somehow... I hope I can explain this so it makes more sense: We use OAI-PMH for making our own metadata available to other parts of the Federal Government (like the Spatial Data Infrastructure Germany (SDI Germany) which has to be in ISO-XML and/or INSPIRE. So it would be nice to either have a tranlator which can convert XML to JSON and vice versa. Otherwise we might have to find our own solution for that.
Not sure if this is a "German Thing" or if others have the same regulations. If not it would make things easier if elements would have similar names. And a translator for XML to JSON would be helpful in general (at least for the beginning)

Any overall feedback on experiences with working with the metadata in a JSON format (compared to XML)? Is this easier from a user or programmer experience? How hard was it to make the above translation? Any feedback on this front is valuable.

Just a disclaimer: We did that all by hand. So no programming involved, just a simple editor ;)
But overall it was quite easy. It took me longer to find the necessary information in the original XML to copy it into the JSON. After my first mockup Antje was quick to add some further information. The examples in the OGC Github were very helpful although it seemed they are not complete yet (?).
A shortage was that I could not use the YAML schema files on the fly - for that I would have needed to write a program. It would have been nice if that would have been possible. Also I just used the recordGeoJSON.yaml - I wasn't sure if a collection might be more fitting.
And just as a side note: The JSON file was definitely smaller than the XML file - like 5 KB vs. 34 KB. And as a human the JSON is way better to read.

@gaubert
Copy link
Contributor

gaubert commented Sep 20, 2021

Hi all,

Thanks to @jsieland for the great analysis (with a lot of very relevant points) and kick starting things.

We also have started to have a deeper looker in EUMETSAT at the OGC API Records metadata standard and below are our comments. We definitely think that it is a already great improvements but would like to fix additional things while we are working on a new standard. In particular, we would like to avoid if possible the work of translating our internal OGC API Records to have a WMO OGC API Records. With ISO we had to downgrade our internal version to export a WMCP records by striping and re-formating some information. This increases the maintenance work and create different version of information in different places.

First we would like to explain why we are making metadata records. It looks trivial but important to remind us about it. In EUMETSAT regarding the metadata business we're trying to focus on one aspect: providing enough information regarding a dataset to allow the user accessing the data by selecting the best access method or accessing information to best use the dataset. It can be some technical information regarding the dataset or associated dataset that will help the user do his job.

To best guide the user, we have a web catalogue (https://navigator.eumetsat.int) which provides discovery services on the EUMETSAT datasets entirely based on the information defined in the ISO metadata. A lot of additional information has been added to allow us building the best possible discovery experience. We had in some case to massage a bit the ISO standard and it is not allowing us to do anything we would like to. A metadata record should self descriptive and self contained for allowing EUMETSAT but also any discovery provider presenting in the best possible way our datasets.

So, to sum up, it is all about our users and the creation of a searchable / browsable catalogue and API information to give access to the datasets.

We have the following necessary categories of information in the metadata to describe EUMETSAT products:

- Descriptive/editorial information:
    - Descriptive information (title, abstract) 
    - A representative image of the data set (convention needed to represent it)
    - Responsible parties: originator (data producer, ultimately responsible for the data quality), publisher (data provider, carrier)
    - Contact information
- External associated resources (technical information, external datasets)
    - Technical information guides (referenced)
    - Associated collections, sibling datasets, ....
- Classification
    - Themes (used to create the facets/filters) => Browse/Filter
    - Keywords (Filters/Tags)  
- Licensing: should be resumed to a link containing the data policy information. Conditions required and user's responsibilities when access is given to the datasets.
- Access (how to get access to the data):
    - Services information (service end point): real time access services (EUMETCast distribution service relying on a private guaranteed network), internet near real time access service: API based web service, visualization services where the products are displayed, ....
    - Formats proposed by the service
    - Links to examples of API requests (possibly active) and examples of expected files, static samples
    - Additional information regarding number of files produced per day)
    - What about associated services like more and more having access to quality monitoring services or calibration services ?
- Citation
    - How to reference the datasets in scientific or other publication. This is valid for Climate records and a lot of other datasets
        - DOI (Digital Object Identifier),
        - Citation information.

Below is a first set of comments/questions and improvements we would like to see/discuss with the team and are applicable to OARec.

-  Design without the GTS and plan to retire it:

The WIS 2.0 should be design in isolation from the GTS. The GTS now represents the tip of the iceberg in the ocean of available data (model data, satellite mission data, climate and reanalysis data) which is now daily accessed. The GTS is still very useful and servicable but for the benefit of WIS 2.0 it should be considered as an external service to the WIS 2.0 Catalogue, ie the metadata should not contain any specific GTS information (keywords like global exchange) outside of the "GTS access part" in the association property or in a given extension. Still with that architecture, the GTS data could be very efficiently retrieved and accessed in a dedicated data access service advertised in the metadata.

Opinions, thoughts ?

-  Collection/Records granularity:

In the WIS catalogues, some datasets are describing almost individual records (in situ observations) and others 30 years of data. Some of the individual records datasets are transforming the search experience in a bad experience because when doing a given search, the results are polluted by very similar records repeated n times. Should we would propose to define one granularity (the collection level) for avoiding recreating the same problems in the future WIS 2.0 catalogues ?
Looking at the OGC API Records most of the examples are describing individual records and not collections. Most of the WIS catalogue contents are collections. You can also describe collections with the OGC API Records. The collection part is discussed in the standard but it is seems more of a catalogue part regrouping records ?
What is the status about that part in the OGC instances and what should be the intention for the WIS metadata team ?

Opinions, thoughts ?

- Extendability and customisation.

There are a lot of specific information related to satellite datasets that are only interested for our community and we would like to take advantage of JSON and its extendability principles. We might want to have a section in the OGC API records where it is possible to describe the instrument infromation for instance or products specifics when necessary. How is the extendability forseen ? Can we imagine to have a "satellite" part that is provided without having to reformat to strip it from the produced metadata records to avoid extra work for managing the interface towards WMO ? We believe this should also apply to other communities. In that case the record should be extended. It would be good to define where and how it can be extended (can extra properties being added anywhere, should they re-grouped in top property, etc ? )

Opinions, thoughts ?

Then going through each of the defined categories above, here are some comments relative to our OGC API records analysis:

- Descriptive/editorial information 
    - Descriptive information (title, abstract)

The metadata is used to build discovery services (indexed information) but also to display the information in the best possible ways to our users. Big limitations with the current standards have been to have the ability to structure the textual information mainly in the abstract to best present it to users for instance using paragraphs and making use of editorial technics (bold, underlined, headers) as well as creating links. Could we imagine to have an optional edited abstract containing markdown information ? It would be in addition to the existing abstract and would greatly help in the representation of the information.

Opinions, thoughts ?

    - Representative image of the data set (convention needed to represent it)

This is also extremelly important to have some images to present in a graphical way the dataset to the user. This can be optional. Information regarding the image resolution (width/height) would be preferable to best display. Portait or Landscape should be recommended in a guide to make best use of the available space.

Opinions, thoughts ?

    - Responsible parties: originator (data producer, ultimately responsible for the data quality), publisher (data provider, carrier)

Like @jsieland and DWD, EUMETSAT is providing access to a lot of 3rd party datasets so a publisher (the one providing access to the data) and an originator (the one creating the data and responsible for the data quality) are needed.

    - Contact information

An additional contactPoint referencing a link providing all the information to contact the first line of support related to the dataset is really welcomed. This should be what is presented to the user to ask questions about the dataset. It already exist in API Records.

- External associated resources (technical information, external datasets)
    - technical information guides (referenced)
    - associated collections, sibling datasets, linked data. This becomes really important with Climate records.

This can be provided using the links part of API records using the "rel" property to define the type of associated resource. We like it as it is really open but we recommend the definition of a set of existing relationships. We've seen some but could not find a definitive source for it. Where can it be found ?

Opinions, thoughts ?

   - classification
       - Themes (used to create the facets/filters) => Browse/Filter
       - Keywords (Filters/Tags)  

The current search experience in our catalog is based on keyword search and facets in a classical user interface with facets, keywords on the left and search results on the right, eg: https://navigator.eumetsat.int/search?query=SAF . However recent user consultations/surveys has demonstrated the need to have a hierachical brows-able presentation of the information with intermediate level if possible to explain to beginner, new comers the complexity of our datasets and our field. Starting from very high level thematics like Ocean, Weather, Climate and guiding the user to the datasets and or services (for instance here is an intermediate level about Ocean :https://www.eumetsat.int/what-we-monitor/ocean) . Can the themes used to create the thematic hierarchy in the catalogue ? We miss that information to know how they are related.

Opinions, thoughts ?

   -licensing: should be resumed to a link containing the data policy information. Conditions required and responsibilities when access is given to the datasets.

The licensing information provision is a very complex topic with a lot of diversity and differences between the different license schemes. The responsibility of explaining and insuring that the user has been complying to the necessary conditions for having access to the data should be left to the data access service. We recommend simply providing a link to the data access license information (eg, https://www.eumetsat.int/eumetsat-data-licensing) . It seems that this is what has been done so far in the examples with the license field and rights field. The task force should recommend what is expected in the second one as most of the providers will want to retain their copyrights and depending on the datasets prevent re-distribution or not.

Opinions, thoughts ?

   - Access (how to get access to the data):
       - services information (service end point): real time access services (EUMETCast distribution service relying on a private guaranteed network), internet near real time access service: API based web service, visualization services where the products are displayed, ....
       - formats proposed by the service 
       - links to examples of API requests (possibly active) and examples of expected files, static samples
       - additional information regarding number of files produced per day)

This part is really essential as it gives to the user a lot of information regarding which service provides access to the found dataset and how. In EUMETSAT our catalogue defines using the ISO metadata record the list of format provided by each service. This is a really important part for the service. It seems that OGC API records doesn't provide that kind of linkage. Is it true and if yes is it possible to extend the access to link the format with the services. See here https://navigator.eumetsat.int/product/EO:EUM:DAT:MSG:HRSEVIRI for instance how our product navigator represents in the Access part the services and additional information related to the formats available for each services. It is also really key to provide some information related to service itself (link to build a service preview, number of files produced, links to example datasets not requiring registration). Is it possible to define a minimum set of mandatory properties and optional ones plus the ones that you can freely add without becoming uncompliant when validated ?

Opinions, thoughts ?

   - citation 
       - How to reference the datasets in scientific or other publication. This is valid for Climate records and a lot of other datasets
           - DOI
           - Citation information.

More and more datasets like the re-analysises, climate records even now real-time ongoing datasets have citation information attached to them to allow any publications referencing them (mainly scientific). We provide that kind of information using an extension of the ISO standard and think that it is really important for the new WMO metadata standard to embed it. Here is an example of a dataset with the citation information ( https://navigator.eumetsat.int/product/EO:EUM:DAT:0080). Look at the citation part like DOI, authors, publisher, references. Is it possible to add that information in the OGC API records ?

Opinions, thoughts ?

Below is an example of a EUMETSAT dataset record with some additional more technical questions (they are also inserted with an non-conformat json way using a # comment):

  • id: Can we get rid of the :: in the ID that looks really unatural (both could be supported for a while or auto translated.

For instance urn:x-wmo:md:int.eumetsat::EO:EUM:DAT:MSG:HRSEVIRI can be replaced by urn:x-wmo:md:int.eumetsat:EO:EUM:DAT:MSG:HRSEVIRI

  • What is the difference between created/updated and the time extent in the dataset ? Can updated contain "now" if it qualifies the datasets content itself ?

  • publisher: the yaml schema refers to another imported responsibleParty.yaml. Where is it defined ?

    • publisher.contactInfo:
      • individual-name, positionName: We would propose to get rid of the individual name and instead have the organisationName plus the contact Info to allow user contacting the right person. This will avoid some confusion and issue in the metadata maintenance when person are living the different organisations.
      • contact-info: We would recommend to have a phone number, email and urls for contacting responsible parties (could not check the schema so don't know what is available).
      • organisation-logo. A link to the organisation logo in the contact-info would be a real benefit, allowing the publisher originator controlling the logo that are used by external parties.
      • formats: Is there a recommendation for using a particular format to describe formats ? Mime Types following the web principles (HTTP) would be a real plus here. What about WMO formats that do not have a defined Mime Type ? Having a Mime Type for them would allow democratizing them a bit in the future.
      • license: Is it possible to have more than one license ?
      • temporal extent: we guess that null expressed the on-going datasets (that are producing some records continuously). Can it be replaced by something less ambiguous like on-going, now) ?
JSON: OGC
{
    "id": "urn:x-wmo:md:int.eumetsat::EO:EUM:DAT:MSG:HRSEVIRI", #do we still need the double :: for the ids ?
    "type": "Feature",
    "geometry": {
        "type": "Polygon",
        "coordinates": [ [-81, -79], [-81, 79], [81, 79], [81, -79], [-81, -79] ]
    },
    "properties": {
        "recordCreated": "2011-03-17T10:00:00Z",
        "recordUpdated": "2021-08-19T10:00:00Z",
        "type": "dataset (http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/codelist/gmxCodelists.xml#MD_ScopeCode)",
        "title": "High Rate SEVIRI Level 1.5 Image Data - MSG - 0 degree",
        "description": "Rectified (level 1.5) Meteosat SEVIRI image data. The data is transmitted as High Rate transmissions in 12 spectral channels. Level 1.5 image data corresponds to the geolocated and radiometrically pre-processed image data, ready for further processing, e.g. the extraction of meteorological products. Any spacecraft specific effects have been removed, and in particular, linearisation and equalisation of the image radiometry has been performed for all SEVIRI channels. The on-board blackbody data has been processed. Both radiometric and geometric quality control information is included. Images are made available with different timeliness according to their latency: quarter-hourly images if latency is more than 3 hours and hourly images if latency is less than 3 hours (for a total of 87 images per day). To enhance the perception for areas which are on the night side of the Earth a different mapping with increased contrast is applied for IR3.9 product. The greyscale mapping is based on the EBBT which allows to map the ranges 200 K to 300 K for the night and 250 K to 330 K for the day.",        
        "keywords": [
            "atmosphere", "land", "ocean" #keywords could be much more evolved and informational but they were the only available in ISO
        ],
        "keywordsCodespace": "http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/Codelist/gmxCodelists.xml#MD_KeywordTypeCode",
        "language": "en",
        "externalID": "EO:EUM:DAT:MSG:HRSEVIRI",
        "created": "2009-03-23T00:00:00Z",
        "updated": "now", #continuous update for the on-going collection (can we put now) or is it all about the metadata information (if this is the case then what is recordCreated)
        "publisher": [ # the yaml record schema refers to responsibleParty.yaml (where is the definition file ] The notion of distributor and originator (or responsible party is used) in our catalogue (we distribute lots of datasets from our partners). This is not described here. How can we model something similar
            {
                "individual-name": "European Organisation for the Exploitation of Meteorological Satellites", #if this is the definition I would not encourage the use of an individual name here. We are organisations and adding a name is confusing. We use EUMETSAT here.
                "organizationName": "EUMETSAT",
                "positionName": "RTH FOCAL POINT", #no need for us
                "contactInfo": [
                    {
                        "phone": "+49(0)6151-807 3660/3770",   #more than one contact resources here
                        "email": "ops@eumetsat.int",
                        "url"  : "https://www.eumetsat.int/contact-us"
                    }
                ],
                "address": [
                    {
                        "delivery-point": "EUMETSAT Allee 1",
                        "city": "Darmstadt",
                        "postal-code": "64295",
                        "country": "Germany"
                    }
                ],

                "organizationLogo": "https://www.eumetsat.int/eum_logo", #optional provision of a logo
                "onlineResource": "https://www.eumetsat.int",
        ],
        "themes": [ # if there a possibility to create a thematic hierarchical view with the Themes. Is it just a bunch of keywords with the controlled vocab reference
            {
                "concepts": ["meteorology", "weatherObservations"],
                "scheme": "https://wis.wmo.int/2012/codelists/WMOCodeLists.xml#WMO_CategoryCode#MD_KeywordTypeCode_theme"
            },
            {
                "concepts": ["EDHA", "EDHI", "EDHK", "EDJA", "EDMO", "EDOP", "EDTD", "EDTL", "EDTY", "EDVE", "EDXW", "EDZO"],
                "scheme": "https://wis.wmo.int/2012/codelists/WMOCodeLists.xml#WMO_CategoryCode#MD_KeywordTypeCode_place"
            },
            {
                "concepts": ["GlobalExchange"],  # all references to GTS are going to disappear
                "scheme": "https://wis.wmo.int/2012/codelists/WMOCodeLists.xml#WMO_CategoryCode#MD_KeywordTypeCode_dataCentre"
            }
        ],
        "formats": [ #for a collection we have multiple formats and want to relate formats with access points (associations). Ideally you want to show in your catalogue what formats are available for each access point.
            "application/x-geotiff", #should we recommend to use the MIME TYPE when it exists. What about non existing mime types
            "application/x-jpeg",
            "application/x-png",
            "application/zip",
            "application/x-eum-msg-native",
            "application/x-eum-hrit",
            "application/netcdf",
            "application/x-hdf",

        ],
        "contactPoint": "https://www.eumetsat.int/contact-us",
        "license": "https://www.eumetsat.int/eumetsat-data-licensing", #can you have more than one license advertised here ?
        "rights": "access", #copyright
        "extent": [
            {
                "spatial": {
                    "bbox": [  -79, -81, 79, 81 ],
                    "crs": "http://www.opengis.net/def/crs/OGC/1.3/CRS84"
                },
                "temporal": {                             # what is the difference between the temportal extent and created, updated information.
                    "interval": [["2009-03-23Z", null]], # null means now ? Is it possible to have an explicit now ?
                    "trs": "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian"
                }
            }
        ],
        "association": [ # access points are defined as associations but how do you relate the formats that can be accessed through that service
            {
                "protocol": "https",
                "directDownloadURL": "true",
                "title": "EUMETView, the EUMETSAT near real time visualization service",
                "href": "https://eumetview.eumetsat.int/geoserv/wms?styles=raster&format=image%2Fgeotiff&height=3712&bbox=-77%2C-77%2C77%2C77&transparent=true&layers=meteosat%3Amsg_ir108&crs=EPSG%3A4326&service=WMS&request=GetMap&width=3712&version=1.3.0&exceptions=inimage"
            },
            {
                "protocol": "amqps",
                "title": "WIS Message System GISC Offenbach",
                "broker": "https://oflkd013.dwd.de",
                "exchange": "wisof",
                "topic/routing_key": "v03/wis/de/offenbach/surface/aviation/metar/de"
            }
        ],
        "links" : [ # you would like to express different things here: related information such as associated technical information, associated datasets (linked datasets),
                    #software
            {
                "rel": "resources",
                "type": "text/html",
                "title": "MSG Level 1.5 Image Data Format Description",
                "href": "https://www.eumetsat.int/media/45126"
            },
            {
                "rel": "resources",
                "type": "application/vnd.ms-powerpoint",
                "title": "Meteorological Use Of The Seviri Ir3.9 Channel",
                "href": "http://eumetrain.org/IntGuide/PowerPoints/Channels/Channel_IR39.ppt"
            },
            {
                "rel": "dataset",
                "type": "collection",
                "title": "High Rate SEVIRI Level 1.5 Image Data - MSG - Indian Ocean 41.5 degrees E",
                "href": "https://navigator.eumetsat.int/product/EO:EUM:DAT:MSG:HRSEVIRI-IODC"
            },
        ]
    }
}

@tomkralidis
Copy link
Contributor Author

tomkralidis commented Sep 27, 2021

Thanks for the extensive comments @gaubert. Notes from our discussion today (feel free to update as desired)

{
    "formatted": {
        "abstract": "`foo`, **bar**",
        "markup_language": "markdown"
    }
}

Access links should be extended to be able to express supported formats:

        {
            "rel": "self",
            "title": "This document as JSON",
            "href": "https://example.org/api",
            "wmo:formats": [
                "application/json",
                "application/xml",
                "text/plain"
            ]
        }
  • we need to support DOIs. The OARec record model allows for 1..n qualified identifiers which we can reuse. Example:
"externalId": [
    {
        "scheme": "wmo-wis",
        "value": "urn:x-wmo:md:int.wmo.wis::https://geo.woudc.org/def/data/ozone/total-column-ozone/totalozone"
    },
    {
        "scheme": "doi",
        "value": "doi:10.14287/10000004"
    }
]
  • licenses: consider using/registering licences with SPDX which is recommended by OARec and used by STAC.

@jsieland
Copy link
Contributor

Thanks @gaubert, this is a very comprehensive and valuable analysis. And it reminded me of some additional points I forgot:

  • publisher: the yaml schema refers to another imported responsibleParty.yaml. Where is it defined ?

I found it here: https://github.com/opengeospatial/ogcapi-records/tree/master/core/openapi/schemas
But I'm a bit confused about why or when is something added in the schemas/common or just in /schemas? Same with the geometryGeoJSON.yaml and related files.
Is this just "historically grown" or is there a reason I might have overlooked?

  • temporal extent: we guess that null expressed the on-going datasets (that are producing some records continuously). Can it be replaced by something less ambiguous like on-going, now) ?

I agree.
Interesting in this context might be an issue which was raised recently by DCAT-AT.de: w3c/dxwg#1403

@tomkralidis
Copy link
Contributor Author

tomkralidis commented Oct 3, 2021

Thanks @gaubert, this is a very comprehensive and valuable analysis. And it reminded me of some additional points I forgot:

  • publisher: the yaml schema refers to another imported responsibleParty.yaml. Where is it defined ?

I found it here: https://github.com/opengeospatial/ogcapi-records/tree/master/core/openapi/schemas But I'm a bit confused about why or when is something added in the schemas/common or just in /schemas? Same with the geometryGeoJSON.yaml and related files. Is this just "historically grown" or is there a reason I might have overlooked?

Anything in schemas/common is supposed to be moved to/replaced by the OGC API - Common (which is the building block specification on top of which OGC API standards are to be developed against. As "common" reusable constructs are found while developing the standards, which can be reused by other OGC API standards, these are then proposed/move into OGC API - Common.

The benefit here is:

  • reuse by more standards
  • streamlined implementations/code (read maintenance/support)
  • smaller specifications with specialization in their specific area (metadata, coverage data access, etc.)
  • temporal extent: we guess that null expressed the on-going datasets (that are producing some records continuously). Can it be replaced by something less ambiguous like on-going, now) ?

I agree. Interesting in this context might be an issue which was raised recently by DCAT-AT.de: w3c/dxwg#1403

From the schema definition:

The value `null` is supported and indicates an open time interval..

Note that this is also derived from schema.org. We should consider any interoperability issues around having something specific for such a key primitive in our domain, as well as issues around "now" representing "not quite now" data (from a day ago, say).

We should definitely include temporal resolution (issued here with the OARec SWG).

For the moving window of data use case, should we consider this for only the data access perspective or beyond?

An example use case is an organization that has been producing hourly observations since 2009-07-11, with a rolling window of 90 days. From the discovery metadata perspective, I would still see the temporal extent as 2009-07-11/... It's the data access mechanism that provides the last 90 days (data beyond 90 days could be archived or made available through some other arrangement).

In this view, it would be valuable to to express temporal resolution in extent.temporal, and add a retention property of sorts in a link object, like:

        {
            "rel": "download",
            "type": "application/json",
            "title": "the last 90 days of data",
            "href": "https://example.org/api",
            "retention": "P90D"
        }

Thoughts?

@amilan17
Copy link
Member

We also need to consider coordination with the WIGOS metadata model. In particular, we need to coordinate on the following types of information.

  1. WMO Data Policy Code List: Core, Recommended, Other (currently known as WMOEssential, WMOAdditional, WMOOther)
  2. License
  3. Attribution (to support things like DOI citation)
  4. Owner
  5. Publisher

@amilan17
Copy link
Member

amilan17 commented Oct 13, 2021

I'd like to have a summary of the standards we are evaluating.

  1. W3C DCAT
  2. OGC API - Records (based on DCAT)
  3. ISO 19115-1
    Are we looking at other standards too?

@jsieland
Copy link
Contributor

This is the example I mentioned in our last meeting:
(Soil moisture monitoring with a rolling 15-day time window, with temporal coverage of the last 10 past days and the next 5 upcoming days.)

<gmd:temporalElement>
	<gmd:EX_TemporalExtent>
		<gmd:extent>
			<gml:TimePeriod gml:id="timeperiod" >
				<gml:beginPosition indeterminatePosition="now" >-P10D</gml:beginPosition>
				<gml:endPosition indeterminatePosition="now" >+P5D</gml:endPosition>
			</gml:TimePeriod>
		</gmd:extent>
	</gmd:EX_TemporalExtent>
</gmd:temporalElement>

This example can not be realized with DCAT (and so OARec). The W3C issue mentioned in #11 has another example for rolling time windows.

@efucile
Copy link
Member

efucile commented Nov 8, 2021

@gaubert thanks for your comprehensive answer. I am going to comment on this only

  • Design without the GTS and plan to retire it:
    The WIS 2.0 should be design in isolation from the GTS. The GTS now represents the tip of the iceberg in the ocean > of available data (model data, satellite mission data, climate and reanalysis data) which is now daily accessed. The
    GTS is still very useful and servicable but for the benefit of WIS 2.0 it should be considered as an external service to > the WIS 2.0 Catalogue, ie the metadata should not contain any specific GTS information (keywords like global
    exchange) outside of the "GTS access part" in the association property or in a given extension. Still with that
    architecture, the GTS data could be very efficiently retrieved and accessed in a dedicated data access service
    advertised in the metadata.

I absolutely agree that we need to design without GTS and plan to retire it. However, we need to realise that GTS will be retired very slowly over many years or decades. The transition plan is not ready yet. However, I think that we are going to expose all GTS through WIS2 pub/sub protocols and therefore I can imagine that the new metadata will be simply linked to a WIS2 style source. It will be new-style metadata with a new style pub/sub protocols. I think that very little of the current catalogue will remain as is.

@tomkralidis
Copy link
Contributor Author

Thanks @efucile. Here's the current thinking around GTS links via pub/sub: MetPX/wmo_mesh#16 (comment), which would make its way into WCMP2 links.

@gaubert
Copy link
Contributor

gaubert commented Nov 18, 2021

@efucile @tomkralidis Thanks for the answer. Ok so if I understand correctly, the GTS will be seen as one of the services providing access to some data (the GTS Observations) and the specific GTS information will only be in the access part of the metadata (like another service). That's good and simple to integrate.

@tomkralidis tomkralidis unpinned this issue Apr 14, 2022
@tomkralidis tomkralidis transferred this issue from wmo-im/wcmp Apr 14, 2022
@amilan17
Copy link
Member

@tomkralidis I think we can close this

@tomkralidis
Copy link
Contributor Author

Related #10 (comment), OGC API - Records has been used as the baseline for WCMP2, and the Global Discovery Catalogue (GDC).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request wcmp
Projects
Status: Done
Development

No branches or pull requests

10 participants