framework icon indicating copy to clipboard operation
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

Open amelie-rondot opened this issue 1 year ago • 1 comments

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.

amelie-rondot avatar Nov 28 '23 16:11 amelie-rondot

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.

amelie-rondot avatar Nov 29 '23 09:11 amelie-rondot