{"id":50646577,"url":"https://github.com/ISAITB/csv-validator","last_synced_at":"2026-07-12T14:00:38.801Z","repository":{"id":38534019,"uuid":"388714940","full_name":"ISAITB/csv-validator","owner":"ISAITB","description":"Web and command-line application supported by the European Commission’s DIGIT for the validation of CSV data.","archived":false,"fork":false,"pushed_at":"2026-07-06T09:57:24.000Z","size":879,"stargazers_count":6,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2026-07-06T10:21:30.300Z","etag":null,"topics":["conformance","csv","interoperability","tableschema","testing","validator"],"latest_commit_sha":null,"homepage":"https://www.itb.ec.europa.eu","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"eupl-1.2","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ISAITB.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":"publiccode.yml","codemeta":null,"zenodo":null,"notice":"NOTICE.md","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-07-23T07:26:42.000Z","updated_at":"2026-07-06T09:57:28.000Z","dependencies_parsed_at":"2024-07-30T18:01:39.160Z","dependency_job_id":"44d1bb89-4f57-41b5-861c-0ce5625afa70","html_url":"https://github.com/ISAITB/csv-validator","commit_stats":null,"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/ISAITB/csv-validator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ISAITB%2Fcsv-validator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ISAITB%2Fcsv-validator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ISAITB%2Fcsv-validator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ISAITB%2Fcsv-validator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ISAITB","download_url":"https://codeload.github.com/ISAITB/csv-validator/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ISAITB%2Fcsv-validator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35393398,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-12T02:00:06.386Z","response_time":87,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["conformance","csv","interoperability","tableschema","testing","validator"],"created_at":"2026-06-07T13:00:30.180Z","updated_at":"2026-07-12T14:00:38.795Z","avatar_url":"https://github.com/ISAITB.png","language":"Java","funding_links":[],"categories":["Interoperability and Digital Infrastructure"],"sub_categories":[],"readme":"![Banner](https://www.itb.ec.europa.eu/files/banners/itb_banner.png?v=1)\n\n# CSV validator\n\n![BuildStatus](https://github.com/ISAITB/csv-validator/actions/workflows/main.yml/badge.svg)\n[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=ISAITB_csv-validator\u0026metric=security_rating)](https://sonarcloud.io/summary/new_code?id=ISAITB_csv-validator)\n[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=ISAITB_csv-validator\u0026metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=ISAITB_csv-validator)\n[![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=ISAITB_csv-validator\u0026metric=reliability_rating)](https://sonarcloud.io/summary/new_code?id=ISAITB_csv-validator)\n[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=ISAITB_csv-validator\u0026metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=ISAITB_csv-validator)\n[![Bugs](https://sonarcloud.io/api/project_badges/measure?project=ISAITB_csv-validator\u0026metric=bugs)](https://sonarcloud.io/summary/new_code?id=ISAITB_csv-validator)\n[![licence](https://img.shields.io/github/license/ISAITB/csv-validator.svg?color=blue)](https://github.com/ISAITB/csv-validator/blob/master/LICENCE.txt)\n[![docs](https://img.shields.io/static/v1?label=docs\u0026message=Test%20Bed%20guides\u0026color=blue)](https://www.itb.ec.europa.eu/docs/guides/latest/validatingCSV/)\n[![Gurubase](https://img.shields.io/badge/Gurubase-Ask%20ITB%20Guru-006BFF?color=blue)](https://gurubase.io/g/itb)\n[![docker](https://img.shields.io/docker/pulls/isaitb/csv-validator?color=blue\u0026logo=docker\u0026logoColor=white)](https://hub.docker.com/r/isaitb/csv-validator)\n\nThe **CSV validator** is a web application to validate CSV data against [Table Schema](https://specs.frictionlessdata.io/table-schema/).\nThe application provides a fully reusable core that requires only configuration to determine the supported specifications,\nconfigured validation types and other validator customisations. The web application allows validation via:\n\n* A SOAP web service API for contract-based machine-machine integrations.\n* A REST web service API for machine-machine integrations.\n* A web form for validation via user interface.\n\nThe SOAP web service API conforms to the [GITB validation service API](https://www.itb.ec.europa.eu/docs/services/latest/validation/)\nwhich makes it usable as a building block in [GITB Test Description Language (TDL)](https://www.itb.ec.europa.eu/docs/tdl/latest/)\nconformance test cases for the verification of content (as a [verify step](https://www.itb.ec.europa.eu/docs/tdl/latest/constructs/index.html#verify)\nhandler). Note additionally that the validator can also be used to build a command-line tool as an executable JAR with\npre-packaged or provided configuration.\n\nThis validator is maintained by the **European Commission's DIGIT** and specifically the **Interoperability Test Bed**,\na conformance testing service for projects involved in the delivery of cross-border public services. Find out more\n[here](https://joinup.ec.europa.eu/collection/interoperability-test-bed-repository/solution/interoperability-test-bed).\n\n# Usage\n\nUsage and configuration of this validator is documented as a step-by-step tutorial in the Test Bed's\n[CSV validation guide](https://www.itb.ec.europa.eu/docs/guides/latest/validatingCSV/).\n\nThe validator's key principle is that the software is built as a generic core that can be configured to validate any\nsupported specifications. Configuration is organised in **domains** which represent logically separate setups supported\nby the same application instance. Each such domain defines the offered **validation types** and their **options** along\nwith the validation artefacts needed to carry out validation (local, remote or user-provided). A domain's configuration\nis grouped in a folder that contains a [configuration property file](https://www.itb.ec.europa.eu/docs/guides/latest/validatingCSV/index.html#step-3-prepare-validator-configuration)\nalong with any other necessary resources.\n\nWhen built from source, the simplest way to get started using the validator is to use the **all-in-one executable JAR**\nbuilt from the `csvvalidator-war` module. You can use and configure this as described in the\n[validator installation guide](https://www.itb.ec.europa.eu/docs/guides/latest/installingValidatorProduction/index.html#approach-1-using-jar-file).\n\nIf you do not plan on modifying the validator's source you can reuse the Test Bed's provided packages. Specifically:\n\n* Via **Docker**, using the [isaitb/csv-validator](https://hub.docker.com/r/isaitb/csv-validator) image from the Docker Hub.\n* Via **JAR file**, using the [generic web application package](https://www.itb.ec.europa.eu/csv-jar/any/validator.zip).\n* Via **command line tool**, using the [generic command line tool package](https://www.itb.ec.europa.eu/csv-offline/any/validator.zip).\n\nIt is interesting to note that the second option (executable web application JAR) matches what you would build from this\nrepository. The command line package is produced from the `csvvalidator-jar` although this requires an additional step\nof JAR post-processing to configure the validator's domain(s).\n\nOnce the validator's web application is up you can use it as follows:\n\n* SOAP API: http://localhost:8080/csv/soap/DOMAIN/validation?wsdl\n* REST API: http://localhost:8080/csv/DOMAIN/api/validate (Swagger docs at http://localhost:8080/csv/swagger-ui/index.html)\n* Web form: http://localhost:8080/csv/DOMAIN/upload\n\nNote that the `DOMAIN` placeholder in the above URLs is the name of a domain configuration folder beneath your configured `validator.resourceRoot`.\nThis can be adapted by providing `validator.domainName.DOMAIN` mapping(s) for your domain(s). These are [application-level configuration properties](https://www.itb.ec.europa.eu/docs/guides/latest/validatingCSV/index.html#application-level-configuration)\nthat can be set in the default [application.properties](csvvalidator-common/src/main/resources/application.properties)\nor via environment variables and system properties.\n\n# Building\n\nThe validator is a multi-module Maven project from which the artefact to use is the web application package, produced\nfrom module `csvvalidator-war`. This is an all-in-one Spring Boot web application. To build issue `mvn clean install`.\n\n## Prerequisites\n\nTo build this project's libraries you require:\n* A JDK installation (17+).\n* Maven (3+)\n* Locally installed [itb-commons](https://github.com/ISAITB/itb-commons) dependencies (see below).\n\nBuilding this validator from source depends on libraries that are available on public repositories. The exception is\ncurrently the set of [itb-commons](https://github.com/ISAITB/itb-commons) dependencies, common libraries that are shared\nby all Test Bed validators. To be able to build you need to first clone [itb-commons](https://github.com/ISAITB/itb-commons)\nand install its artefacts in your local Maven repository.\n\n## Configuration for development\n\nWhen building for development you should provide the validator's basic configuration to allow it to bootstrap.\nThe simplest approach to do this is to use environment variables that set the validator's\n[configuration properties](https://www.itb.ec.europa.eu/docs/guides/latest/validatingCSV/index.html#validator-configuration-properties).\n\nThe minimum properties you should define this way are:\n\n* `validator.resourceRoot`: The root folder from which all domain configurations will be loaded.\n* `logging.file.path`: The validator’s log output folder.\n* `validator.tmpFolder`: The validator’s temporary work folder.\n\nIn addition, you should include within the `validator.resourceRoot` folder additional folder(s) for your configuration domains,\neach with its configuration property file and any other needed resources. A simple example of such configuration that you\ncan also download and reuse, is provided in the CSV validation guide's [configuration step](https://www.itb.ec.europa.eu/docs/guides/latest/validatingCSV/index.html#step-3-prepare-validator-configuration).\n\nIf you decide not to load any configurations, the generic CSV validator configuration will be loaded instead. \nThis generic configuration does not contain any validation artefacts and will instead allow you to upload your own validation schemas from the validator's UI and APIs.\nThe domain of this generic validator is called **any**. you can access it like any other domain, from http://localhost:8080/csv/any/upload.\n\n## Using Docker\n\nIf you choose Docker to run your validator you can use the [sample Dockerfile](etc/docker/csv-validator/Dockerfile)\nas a starting point. To use this:\n1. Create a folder and copy within it the Dockerfile and JAR produced from the `csvvalidator-war` module.\n2. (Optional) Create a sub-folder (e.g. `resources`) as your resource root within which you place your domain configuration folder(s).\n3. (Optional) Adapt the Dockerfile to also copy the `resources` folder and set its path within the image as the `validator.resourceRoot`:\n\n```\n...\nCOPY resources /validator/resources/\nENV validator.resourceRoot /validator/resources/\n...\n```  \n\nNote: If you skip step 2 and 3, only the generic validator will be available under the `any` domain.\n\n# Plugin development\n\nThe CSV validator supports custom plugins to extend the validation report. Plugins are implementations of the\n[GITB validation service API](https://www.itb.ec.europa.eu/docs/services/latest/validation/) for which the following\napplies. Note that plugin JAR files need to be built as \"all-in-one\" JARs.\n\n## Input to plugins\n\nThe CSV validator calls plugins in sequence passing in the following input:\n\n| Input name          | Type     | Description                                                                                                                             |\n|---------------------|----------|-----------------------------------------------------------------------------------------------------------------------------------------|\n| `contentToValidate` | `String` | The absolute and full path to the input provided to the validator.                                                                      |\n| `domain`            | `String` | The validation domain relevant to the specific validation call.                                                                         |\n| `validationType`    | `String` | The validation type of the domain that is selected for the specific validation call.                                                    |\n| `tempFolder`        | `String` | The absolute and full path to a temporary folder for plugins. This will be automatically deleted after all plugins complete validation. |\n| `hasHeaders`        | `String` | `true` or `false` depending on whether the input should be considered as having a header row.                                           |\n| `delimiter`         | `String` | The character to use as the field delimiter.                                                                                            |\n| `quote`             | `String` | The character to use for the quote character.                                                                                           |\n| `locale`            | `String` | The locale (language code) to use for reporting of results (e.g. \"fr\", \"fr_FR\").                                                        |\n\n## Output from plugins\n\nThe output of plugins is essentially a GITB `ValidationResponse` that wraps a `TAR` instance. The report items within this `TAR` instance are merged\nwith any reports produced by Table Schema validation.\n\n## Plugin configuration\n\nPlugin configuration for a validator instance is part of its [domain configuration](https://www.itb.ec.europa.eu/docs/guides/latest/validatingCSV/index.html#domain-level-configuration).\nOnce you have your plugins implemented you can configure them using the `validator.defaultPlugins`\nand `validator.plugins` properties where you list each plugin by providing:\n\n* The path to its JAR file.\n* The fully qualified class name of the plugin entry point.\n\n# Licence\n\nThis software is shared using the [European Union Public Licence (EUPL) version 1.2](https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12).\n\nThird-party library licences and attributions are listed in [NOTICE.md](NOTICE.md).\n\n# Legal notice\n\nThe authors of this library waive any and all liability linked to its usage or the interpretation of results produced\nby its downstream validators.\n\n# Contact\n\nFor feedback or questions regarding this library you are invited to post issues in the current repository. In addition,\nfeel free to contact the Test Bed team via email at [DIGIT-ITB@ec.europa.eu](mailto:DIGIT-ITB@ec.europa.eu).\n\n# See also\n\nThe Test Bed provides similar validators for other content types. Check these out for more information:\n* The **RDF validator**: see [overview](https://joinup.ec.europa.eu/collection/interoperability-test-bed-repository/solution/rdf-validator), [source](https://github.com/ISAITB/shacl-validator), [detailed guide](https://www.itb.ec.europa.eu/docs/guides/latest/validatingRDF/) and [Docker Hub image](https://hub.docker.com/r/isaitb/shacl-validator).\n* The **XML validator**: see [overview](https://joinup.ec.europa.eu/collection/interoperability-test-bed-repository/solution/xml-validator), [source](https://github.com/ISAITB/xml-validator), [detailed guide](https://www.itb.ec.europa.eu/docs/guides/latest/validatingXML/) and [Docker Hub image](https://hub.docker.com/r/isaitb/xml-validator).\n* The **JSON validator**: see [overview](https://joinup.ec.europa.eu/collection/interoperability-test-bed-repository/solution/json-validator), [source](https://github.com/ISAITB/json-validator), [detailed guide](https://www.itb.ec.europa.eu/docs/guides/latest/validatingJSON/) and [Docker Hub image](https://hub.docker.com/r/isaitb/json-validator).","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FISAITB%2Fcsv-validator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FISAITB%2Fcsv-validator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FISAITB%2Fcsv-validator/lists"}