framework
framework copied to clipboard
Schema boolean field: Unexpected field-error related to a well-formatted value example of a schema's boolean field using frictionless validate
Overview
Using frictionless validate I got this unvalid report of validation:
frictionless validate data.csv --schema schema.json
──────────────────────────────────────────────────────────────────────────────────────────────────────────── Dataset ─────────────────────────────────────────────────────────────────────────────────────────────────────────────
dataset
┏━━━━━━┳━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━┓
┃ name ┃ type ┃ path ┃ status ┃
┡━━━━━━╇━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━┩
│ data │ table │ data.csv │ INVALID │
└──────┴───────┴──────────┴─────────┘
───────────────────────────────────────────────────────────────────────────────────────────────────────────── Tables ─────────────────────────────────────────────────────────────────────────────────────────────────────────────
data
┏━━━━━━┳━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Row ┃ Field ┃ Type ┃ Message ┃
┡━━━━━━╇━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ None │ None │ field-error │ Field is not valid: example value "no" for field "IsTrue" is not valid │
└──────┴───────┴─────────────┴────────────────────────────────────────────────────────────────────────┘
The error is related to the value given in the example
property of the field 'IsTrue' of type boolean
in the schema used for the validation, which is not valid.
I was expected a valid report of validation: I was not expected an field-error on this value example
which matches with the falseValues
property value, as mentionned in the boolean
type of TableSchema documentation.
Resources used to reproduce the problem
- schema.json:
{ "$schema": "https://frictionlessdata.io/schemas/table-schema.json", "fields": [ { "name": "IsTrue", "type": "boolean", "trueValues": ["yes"], "falseValues": ["no"], "example": "no" }] }
- data.csv:
IsTrue no yes
Note
Replacing in the schema field 'IsTrue' the optionnal property example
with 'false' instead of 'no' solves the problem. The validation report is now valid with this new schema:
- schema.json:
{ "$schema": "https://frictionlessdata.io/schemas/table-schema.json", "fields": [ { "name": "IsTrue", "type": "boolean", "trueValues": ["yes"], "falseValues": ["no"], "example": "false" }] }
- data.csv:
IsTrue no yes
frictionless validate data.csv --schema schema.json
──────────────────────────────────────────────────────────────────────────────────────────────────────────── Dataset ─────────────────────────────────────────────────────────────────────────────────────────────────────────────
dataset
┏━━━━━━┳━━━━━━━┳━━━━━━━━━━┳━━━━━━━━┓
┃ name ┃ type ┃ path ┃ status ┃
┡━━━━━━╇━━━━━━━╇━━━━━━━━━━╇━━━━━━━━┩
│ data │ table │ data.csv │ VALID │
└──────┴───────┴──────────┴────────┘
As specified in the TableSchema boolean type documentation :
"The boolean field can be customised with these additional properties:
trueValues: [ "true", "True", "TRUE", "1" ] falseValues: [ "false", "False", "FALSE", "0" ]
format
: no options (other than the default)."
But, in this case the falseValues
property seems to not be applied on the example
property by frictionless and retruns an unexpected field-error in the validation report.
For more context, frictionless validate
is used in Validata.fr project. We want to upgrade frictionless-py
to v5 in this project. But if we do that now, the field-error
exposed in this issue will block many schemas used in this project.