Shared schema specifications for data exchange (WFS, CSV, etc...)
Schemas are specified according to the Table Schema format from Frictionless Data.
The frictionless Python package provides functionality to describe, extract, and validate tabular data (e.g. CSV files). This can be used from within Python code, or from the command line in a Linux shell.
This project is licensed under the terms of the GNU GPLv3 license.
All you need is Python (3.6 or higher), and
pip install frictionlessSee https://framework.frictionlessdata.io/docs/guides/quick-start/ for more help getting started.
To validate a local copy of a file against a schema, e.g.,
public-schema/imos_bgc_db$ frictionless validate --schema NRS_StationInfo.schema.yaml ../sample_data/NRS_StationInfo.csv
# -----
# valid: ../sample_data/NRS_StationInfo.csv
# -----Remote files accessible via a URL can also be validated directly
public-schema/imos_bgc_db$ frictionless validate --schema NRS_StationInfo.schema.yaml https://github.com/PlanktonTeam/IMOS_Toolbox/master/Plankton/RawData/NRS_StationInfo.csvIf the file is invalid, frictionless provides detailed info on the issues, e.g.,
# -------
# invalid: ../sample_data/NRS_StationInfo.csv
# -------
=== ===== ================= ============================================================================================================================
row field code message
=== ===== ================= ============================================================================================================================
2 7 type-error Type error in the cell "1944-10-01 00:00:00" in row "2" and field "STATIONSTARTDATE" at position "7": type is "date/default"
3 7 type-error Type error in the cell "2009-11-16 00:00:00" in row "3" and field "STATIONSTARTDATE" at position "7": type is "date/default"
4 7 type-error Type error in the cell "2009-05-12 00:00:00" in row "4" and field "STATIONSTARTDATE" at position "7": type is "date/default"
5 8 type-error Type error in the cell "null" in row "5" and field "STATIONDEPTH_M" at position "8": type is "number/default"
8 primary-key-error Row at position "8" violates the primary key: the same as in the row at position 6
=== ===== ================= ============================================================================================================================