Skip to content

Version History


  • ADD - Lists and Values section
  • ADD - Conditions Tutorial
  • ADD - Rules Tutorial
  • ADD - Reduce Tutorial


  • ADD - Suggested Tutorial


  • ADD - Tutorials section
  • ADD - Minimal Tutorial


  • CHANGE - Remove the "Hyphen-Minus" and "Full Stop" characters from Base.[Schema Field Delimiter] and Base.[Schema Key-Value Separator] allowed values
  • ADD - Explicitly define the numeral system to be used for the "Number" Data Type
  • ADD - Explicitly define the allowed decimal separator for the "Number" Data Type
  • ADD - Set a maximum length to the "String" Data Type


  • CHANGE - Rename Field.12: EndOfLine to "EndOfLine" from "EndOfLineCharacter"
  • CHANGE - Rename Field.13: FieldIDMethod to "FieldIDMethod" from "FieldIDByHeaderOrPosition"
  • CHANGE - Rename Field.36: ListID to "ListID" from "List"
  • CHANGE - Rename Field.50: HypothesisListID to "HypothesisListID" from "HypothesisList"
  • CHANGE - Rename Field.54: ConclusionListID to "ConclusionListID" from "ConclusionList"
  • CHANGE - Rename Field.64: TotalCount to "TotalCount" from "LineCount"
  • CHANGE - Convert all references to UTF-8 decimal codes to Unicode code points expressed in hexadecimal
  • DELETE - Field.5: Name from Summary Record
  • DELETE - Field.6: Annotation from Summary Record
  • ADD - "Key Case Sensitivity" to the Base Definition
  • ADD - "Hexadecimal" to the Base Definition Data Types
  • ADD - "Hexadecimal List" to the Base Definition Data Types


  • CHANGE - Clarifications made to the Examples descriptions


  • CHANGE - Rename project to Text File Schema
  • CHANGE - Definition is migrated from a MS Word document to the HTML/PHP website ""
  • CHANGE - Multiple minor text corrections and clarifications
  • CHANGE - EndOfLineCharacter String List is changed from "EOL" to "NEWLINE"
  • CHANGE - Field 11: CharacterEncoding is changed to "String" from "String List"


  • CHANGE - Move schema definition to new format
  • CHANGE - All multiple word String List members now include spaces. i.e. - "NOTEMPTY" becomes "NOT EMPTY"
  • ADD - TrailingDelimiter=MULTIPLE
  • CHANGE - Values no longer have to be enclosed when it is human entered data
  • DELETE - CONTROL.CompositeValueSeparator due to lack of utility now that Lists are available
  • CHANGE - The FFSD Record is now an FFSD Field
  • CHANGE - Delete rules that were where a dependent field having data forced a parent field to be set. For example just because a DateFormat field has data no longer forces the DataType to be equal to "DATE TIME"
  • ADD - VALUE record is now defined in order to allow LIST and CONDITION to be true parent records
  • DELETE - CONDITION.ID1-ID10 fields as these are now in a LIST
  • CHANGE - META.CharacterSet is changed to CharacterEncoding
  • CHANGE - Schema is now to be UTF-8 Character Encoding


  • CHANGE - Complete defining Conditions and Rules


  • CHANGE - ConditionLevel to Level
  • CHANGE - RuleLevel to Level
  • ADD - Level=BOTH for when a condition or rule is to be applied to both records and fields
  • CHANGE - convert several fields from regex to Lists to allow for better explanations of what they are for
  • CHANGE - Complete defining Lists


  • ADD - HypothesisOperator=EXISTS
  • ADD - ConclusionOperator=EXISTS


  • ADD - Type=RULE. This will be rules for when a field has a specified value
  • CHANGE - The primer has been updated to properly enclose fields when needed undoing partially the change from


  • ADD - Type=SUMMARY. This will allow for verification of the number of records in the file as well as serve as proof that the file has been received completely
  • CHANGE - The ID field has been changed to be a 1 based counter


  • ADD - Record.Required, this will have similar function as Field.Required
  • ADD - Record.HasData, this will have similar function as Field.HasData
  • MOVE - Record.KeyField
  • MOVE - Record.ParentKeyField
  • ADD - Type=CONDITION. This will be conditions between records or fields


  • ADD - RECORD.TrailingDelimiter. This is either "YES" or "NO" and indicates if the record is to have a delimiter after the final field


  • ADD - Type=List. This will be a list of values a field is allowed to have
  • CHANGE - FIELD.StringAllowedValues is replaced by FIELD.List. This will allow better control over allowed values allow a single List to be reused and will allow for numbers to have specified values as well
  • CHANGE - Swap the layout locations of FIELD.ParentID and FIELD.Position. This will allow consistency with keeping common fields among the record types together and towards the beginning of the record


  • ADD - RECORD.KeyField and RECORD.ParentKeyField. These will allow the records to be out of strict order. If they are empty then parent/child record linking will be strictly based on row order


  • CHANGE - FIELD.AllowEmpty to FIELD.HasData
  • CHANGE - FIELD.HasData allowed values are now - "ALWAYS", "NEVER" or "OPTIONAL"
  • CHANGE - All human entered text values are to be enclosed in the CONTROL.SchemaEnclosureCharacter. This will allow the ability to have both human entered text or a schema code as the field value. This also changes the use of the CONTROL.SchemaEnclosureCharacter to only be used to enclose the value of the key-value pair not the entire field. In addition the key-value separator does not to be double escaped any longer when it is in the value
  • CHANGE - META.RecordIDPosition moved back to RECORD. This will allow a record type to be determined by inspecting different fields when a header row is used
  • CHANGE - RECORD.RecordIDValue now allowed to also have "EMPTY" or "NOTEMPTY" schema codes


  • ADD - META.EndOfLineCharacter, this is either "EOL" or decimal values
  • ADD - FIELD.AllowEmpty, this is either "YES" or "NO"


  • CHANGE - CONTROL.CompositeValueSeperator is now to be a decimal value
  • DELETE - META.HeaderLineRow
  • DELETE - META.HasHeaderLine
  • ADD - RECORD.IsHeader
  • ADD - CONTROL.SchemaEnclosureCharacter
  • CHANGE - META.FileType options are now "DELIMITED" or "FIXEDWIDTH"
  • CHANGE - META.SeparatorCharacter is renamed to DelimiterCharacter


  • CHANGE - Move ID column to column 2, Type column is back to column 1
  • CHANGE - Control becomes "Type=CONTROL"
  • CHANGE - Composite element separator moved to it's own column in the CONTROL record
  • CHANGE - added Keys to the CONTROL record


  • ADD - META.HeaderLineRow. Allows for edge case where the header isn't the first line of the file
  • ADD - META.FieldIDByHeaderOrPosition. Allows for edge case where fields may not be present in file. Allows for edge case where field order is not fixed
  • ADD - RECORD.RecordRow. Allows for edge case where the record does not have an ID but does have a fixed row CHANGE - META.HasHeaderLine. Three options are now - "REQUIRED", "OPTIONAL" and "NO"


  • CHANGE - "Type=FFSD" to "Type=META". This will help keep the record whose name is "FFSD" unique
  • CHANGE - Reorganized so that the fields are under their parent record I think any software needs to be able accept any order since they are uniquely identified, but the output should be in this order when saved
  • CHANGE - position of "RecordIDPositon" to be in the META record I believe this is a more appropriate place and will prevent the case where different records could end up with different ID positions
  • ADD - StringRegex, NumericMinimumValue and NumericMaximumValue. This will help further define allowed values for these data types


  • CHANGE - Move the ID column to the first column
  • ADD - an ID column for the Control record


  • DELETE - Remove the Verbosity field from the Control record


  • CHANGE - Replace ":" with "=" as default key-value separator


  • Initial specification written
Back to top