Skip to content

Reducing A Text File Schema Definition Tutorial

This tutorial will show you how to reduce a Text File Schema Definition to make the Schema File size smaller after having completed all the previous tutorials.

Tutorial Text File

last_name,first_name,state,zip_code,price,date,notes
Craig,Kai,OK,73755,15499,12/26/2019,"friendly, prompt and good tipper"
Wilcox,Jack,,,12458,7/14/2017,very nice
O'Neil,Kasper,WY,82937,15499,3/7/2011,paid by certified check
Marks,Sopoline,CT,06778,4859,8/21/2014,"never paid, do not do any further business"
Kelly,Colorado,,,9899,6/3/2018,

Built Rules Text File Schema Definition

Type=CONTROL,ID=1,SchemaEnclosureCharacter=22,Version=1.0.1.22,,,,,,,,,,,,,,,,,
Type=META,ID=2,Name=Smythee Estuary Importers - Sales Summary Text File Schema Definition,Annotation=This file had been prepared by Doug Jones to match the records given 12/30/2019,Version=1.0.0.1,FileType=DELIMITED,DelimiterCharacter=2C,EnclosureCharacter=22,EncloseWhen=NEEDED,CharacterEncoding=UTF-8,EndOfLine=NEWLINE,FieldIDMethod=HEADER,SchemaURL=https://www.smytheeestuaryimporters.com/schemas.html,OwnerName=James Smythee,OwnerEmail=james.smythee@smytheeestuaryimporters.com,OwnerPhone=123-555-1234,,,,,
Type=RECORD,ID=3,Name=Header Record,Annotation=This defines the header record,Position=1,ParentID=2,Required=YES,HasData=ALWAYS,MinimumAllowed=1,MaximumAllowed=1,KeyField=,ParentKeyField=,RecordIDPosition=,RecordIDValue=,RecordRow=1,Width=,IsHeader=YES,TrailingDelimiter=NO,,,
Type=RECORD,ID=4,Name=Data Record,Annotation=This defines the data records,Position=2,ParentID=2,Required=YES,HasData=ALWAYS,MinimumAllowed=1,MaximumAllowed=,KeyField=,ParentKeyField=,RecordIDPosition=,RecordIDValue=,RecordRow=,Width=,IsHeader=NO,TrailingDelimiter=NO,,,
Type=FIELD,ID=5,Name=Last Name Header,Annotation=,Position=1,ParentID=3,Required=YES,HasData=ALWAYS,MinimumLength=9,MaximumLength=9,DataType=STRING,DateTimeFormat=,ListID=,StringRegex=^last_name$,NumericMinimumValue=,NumericMaximumValue=,Start=,Width=,Alignment=,FillCharacter=,Sample=last_name
Type=FIELD,ID=6,Name=First Name Header,Annotation=,Position=2,ParentID=3,Required=YES,HasData=ALWAYS,MinimumLength=10,MaximumLength=10,DataType=STRING,DateTimeFormat=,ListID=,StringRegex=^first_name$,NumericMinimumValue=,NumericMaximumValue=,Start=,Width=,Alignment=,FillCharacter=,Sample=first_name
Type=FIELD,ID=7,Name=State Header,Annotation=,Position=3,ParentID=3,Required=YES,HasData=ALWAYS,MinimumLength=5,MaximumLength=5,DataType=STRING,DateTimeFormat=,ListID=,StringRegex=^state$,NumericMinimumValue=,NumericMaximumValue=,Start=,Width=,Alignment=,FillCharacter=,Sample=state
Type=FIELD,ID=8,Name=ZIP Code Header,Annotation=,Position=4,ParentID=3,Required=YES,HasData=ALWAYS,MinimumLength=8,MaximumLength=8,DataType=STRING,DateTimeFormat=,ListID=,StringRegex=^zip_code$,NumericMinimumValue=,NumericMaximumValue=,Start=,Width=,Alignment=,FillCharacter=,Sample=zip_code
Type=FIELD,ID=9,Name=Price Header,Annotation=,Position=5,ParentID=3,Required=YES,HasData=ALWAYS,MinimumLength=5,MaximumLength=5,DataType=STRING,DateTimeFormat=,ListID=,StringRegex=^price$,NumericMinimumValue=,NumericMaximumValue=,Start=,Width=,Alignment=,FillCharacter=,Sample=price
Type=FIELD,ID=10,Name=Date Header,Annotation=,Position=6,ParentID=3,Required=YES,HasData=ALWAYS,MinimumLength=4,MaximumLength=4,DataType=STRING,DateTimeFormat=,ListID=,StringRegex=^date$,NumericMinimumValue=,NumericMaximumValue=,Start=,Width=,Alignment=,FillCharacter=,Sample=date
Type=FIELD,ID=11,Name=Notes Header,Annotation=,Position=7,ParentID=3,Required=YES,HasData=ALWAYS,MinimumLength=5,MaximumLength=5,DataType=STRING,DateTimeFormat=,ListID=,StringRegex=^notes$,NumericMinimumValue=,NumericMaximumValue=,Start=,Width=,Alignment=,FillCharacter=,Sample=notes
Type=FIELD,ID=12,Name=Last Name,Annotation=,Position=1,ParentID=4,Required=YES,HasData=ALWAYS,MinimumLength=1,MaximumLength=50,DataType=STRING,DateTimeFormat=,ListID=,StringRegex=,NumericMinimumValue=,NumericMaximumValue=,Start=,Width=,Alignment=,FillCharacter=,Sample=O'Neil
Type=FIELD,ID=13,Name=First Name,Annotation=,Position=2,ParentID=4,Required=YES,HasData=ALWAYS,MinimumLength=1,MaximumLength=50,DataType=STRING,DateTimeFormat=,ListID=,StringRegex=,NumericMinimumValue=,NumericMaximumValue=,Start=,Width=,Alignment=,FillCharacter=,Sample=Kasper
Type=FIELD,ID=14,Name=State,Annotation=,Position=3,ParentID=4,Required=YES,HasData=OPTIONAL,MinimumLength=2,MaximumLength=2,DataType=STRING,DateTimeFormat=,ListID=19,StringRegex=,NumericMinimumValue=,NumericMaximumValue=,Start=,Width=,Alignment=,FillCharacter=,Sample=WY
Type=FIELD,ID=15,Name=ZIP Code,Annotation=,Position=4,ParentID=4,Required=YES,HasData=OPTIONAL,MinimumLength=5,MaximumLength=5,DataType=STRING,DateTimeFormat=,ListID=,StringRegex=^[0-9]{5}$,NumericMinimumValue=,NumericMaximumValue=,Start=,Width=,Alignment=,FillCharacter=,Sample=82937
Type=FIELD,ID=16,Name=Price,Annotation=,Position=5,ParentID=4,Required=YES,HasData=ALWAYS,MinimumLength=,MaximumLength=,DataType=NUMBER,DateTimeFormat=,ListID=,StringRegex=,NumericMinimumValue=1,NumericMaximumValue=99999999,Start=,Width=,Alignment=,FillCharacter=,Sample=15499
Type=FIELD,ID=17,Name=Date,Annotation=,Position=6,ParentID=4,Required=YES,HasData=ALWAYS,MinimumLength=,MaximumLength=,DataType=DATE TIME,DateTimeFormat=M/d/yyyy,ListID=,StringRegex=,NumericMinimumValue=,NumericMaximumValue=,Start=,Width=,Alignment=,FillCharacter=,Sample=3/7/2011
Type=FIELD,ID=18,Name=Notes,Annotation=,Position=7,ParentID=4,Required=YES,HasData=OPTIONAL,MinimumLength=1,MaximumLength=255,DataType=STRING,DateTimeFormat=,ListID=,StringRegex=,NumericMinimumValue=,NumericMaximumValue=,Start=,Width=,Alignment=,FillCharacter=,Sample=paid by certified check
Type=LIST,ID=19,Name=Allowed States,Annotation=,Position=3,,,,,,,,,,,,,,,,
Type=VALUE,ID=20,Name=Connecticut,Annotation=,Position=1,ParentID=19,Value=CT,,,,,,,,,,,,,,
Type=VALUE,ID=21,Name=Georgia,Annotation=,Position=2,ParentID=19,Value=GA,,,,,,,,,,,,,,
Type=VALUE,ID=22,Name=Montana,Annotation=,Position=3,ParentID=19,Value=MT,,,,,,,,,,,,,,
Type=VALUE,ID=23,Name=Oklahoma,Annotation=,Position=4,ParentID=19,Value=OK,,,,,,,,,,,,,,
Type=VALUE,ID=24,Name=Vermont,Annotation=,Position=5,ParentID=19,Value=VT,,,,,,,,,,,,,,
Type=VALUE,ID=25,Name=Wyoming,Annotation=,Position=6,ParentID=19,Value=WY,,,,,,,,,,,,,,
Type=CONDITION,ID=26,Name=States and ZIP Codes Condition,Annotation=,Position=4,Level=FIELD,ConditionType=PAIRED,ListID=27,,,,,,,,,,,,,
Type=LIST,ID=27,Name=States and ZIP Codes List,Annotation=,Position=5,,,,,,,,,,,,,,,,
Type=VALUE,ID=28,Name=State FieldID,Annotation=,Position=1,ParentID=27,Value=14,,,,,,,,,,,,,,
Type=VALUE,ID=29,Name=ZIP Code FieldID,Annotation=,Position=2,ParentID=27,Value=15,,,,,,,,,,,,,,
Type=RULE,ID=30,Name=Georgia ZIP Codes Rule,Annotation=,Position=6,Level=FIELD,HypothesisID=14,HypothesisOperator=EQUALS,HypothesisNegation=FALSE,HypothesisListID=31,ConclusionID=15,ConclusionOperator=BEGINS WITH,ConclusionNegation=FALSE,ConclusionListID=32,,,,,,,
Type=LIST,ID=31,Name=Georgia ZIP Codes Rule Hypothesis List,Annotation=,Position=7,,,,,,,,,,,,,,,,
Type=LIST,ID=32,Name=Georgia ZIP Codes Rule Conclusion List,Annotation=,Position=8,,,,,,,,,,,,,,,,
Type=VALUE,ID=33,Name=Georgia Abbreviation,Annotation=,Position=1,ParentID=31,Value=GA,,,,,,,,,,,,,,
Type=VALUE,ID=34,Name=Allowed ZIP Code #1,Annotation=,Position=1,ParentID=32,Value=30,,,,,,,,,,,,,,
Type=VALUE,ID=35,Name=Allowed ZIP Code #2,Annotation=,Position=2,ParentID=32,Value=31,,,,,,,,,,,,,,
Type=VALUE,ID=36,Name=Allowed ZIP Code #3,Annotation=,Position=3,ParentID=32,Value=39,,,,,,,,,,,,,,
Type=SUMMARY,ID=37,ControlCount=1,MetaCount=1,RecordCount=2,FieldCount=14,ListCount=4,ValueCount=12,ConditionCount=1,RuleCount=1,SummaryCount=1,TotalCount=37,,,,,,,,,

Steps To Reduce the Text File Schema Definition

  1. Open the Rules Text File Schema Definition file in a text editor
    1. https://textfileschema.omegatower.net/schemas/tutorial_rules.tfsd
    2. Save it with a new file name
    3. Don't forget to save it frequently and often as you build the Text File Schema Definition
  2. Update each Record, using its definition as a guide, to delete all fields that have an undefined value
    Since undefined values do not have to included in the Schema Definition, and all required and conditional fields has been appropriately handled in the earlier tutorials, they can be deleted.
  3. Update each Record, deleting all trailing delimiters
    Since trailing deliniters are always optional, they can be removed from this Schema Definition.

Built Rules Text File Schema Definition

Type=CONTROL,ID=1,SchemaEnclosureCharacter=22,Version=1.0.1.22
Type=META,ID=2,Name=Smythee Estuary Importers - Sales Summary Text File Schema Definition,Annotation=This file had been prepared by Doug Jones to match the records given 12/30/2019,Version=1.0.0.1,FileType=DELIMITED,DelimiterCharacter=2C,EnclosureCharacter=22,EncloseWhen=NEEDED,CharacterEncoding=UTF-8,EndOfLine=NEWLINE,FieldIDMethod=HEADER,SchemaURL=https://www.smytheeestuaryimporters.com/schemas.html,OwnerName=James Smythee,OwnerEmail=james.smythee@smytheeestuaryimporters.com,OwnerPhone=123-555-1234
Type=RECORD,ID=3,Name=Header Record,Annotation=This defines the header record,Position=1,ParentID=2,Required=YES,HasData=ALWAYS,MinimumAllowed=1,MaximumAllowed=1,RecordRow=1,IsHeader=YES,TrailingDelimiter=NO
Type=RECORD,ID=4,Name=Data Record,Annotation=This defines the data records,Position=2,ParentID=2,Required=YES,HasData=ALWAYS,MinimumAllowed=1,IsHeader=NO,TrailingDelimiter=NO
Type=FIELD,ID=5,Name=Last Name Header,Position=1,ParentID=3,Required=YES,HasData=ALWAYS,MinimumLength=9,MaximumLength=9,DataType=STRING,StringRegex=^last_name$,Sample=last_name
Type=FIELD,ID=6,Name=First Name Header,Position=2,ParentID=3,Required=YES,HasData=ALWAYS,MinimumLength=10,MaximumLength=10,DataType=STRING,StringRegex=^first_name$,Sample=first_name
Type=FIELD,ID=7,Name=State Header,Position=3,ParentID=3,Required=YES,HasData=ALWAYS,MinimumLength=5,MaximumLength=5,DataType=STRING,StringRegex=^state$,Sample=state
Type=FIELD,ID=8,Name=ZIP Code Header,Position=4,ParentID=3,Required=YES,HasData=ALWAYS,MinimumLength=8,MaximumLength=8,DataType=STRING,StringRegex=^zip_code$,Sample=zip_code
Type=FIELD,ID=9,Name=Price Header,Position=5,ParentID=3,Required=YES,HasData=ALWAYS,MinimumLength=5,MaximumLength=5,DataType=STRING,StringRegex=^price$,Sample=price
Type=FIELD,ID=10,Name=Date Header,Position=6,ParentID=3,Required=YES,HasData=ALWAYS,MinimumLength=4,MaximumLength=4,DataType=STRING,StringRegex=^date$,Sample=date
Type=FIELD,ID=11,Name=Notes Header,Position=7,ParentID=3,Required=YES,HasData=ALWAYS,MinimumLength=5,MaximumLength=5,DataType=STRING,StringRegex=^notes$,Sample=notes
Type=FIELD,ID=12,Name=Last Name,Position=1,ParentID=4,Required=YES,HasData=ALWAYS,MinimumLength=1,MaximumLength=50,DataType=STRING,StringRegex=,Sample=O'Neil
Type=FIELD,ID=13,Name=First Name,Position=2,ParentID=4,Required=YES,HasData=ALWAYS,MinimumLength=1,MaximumLength=50,DataType=STRING,StringRegex=,Sample=Kasper
Type=FIELD,ID=14,Name=State,Position=3,ParentID=4,Required=YES,HasData=OPTIONAL,MinimumLength=2,MaximumLength=2,DataType=STRING,ListID=19,Sample=WY
Type=FIELD,ID=15,Name=ZIP Code,Position=4,ParentID=4,Required=YES,HasData=OPTIONAL,MinimumLength=5,MaximumLength=5,DataType=STRING,StringRegex=^[0-9]{5}$,Sample=82937
Type=FIELD,ID=16,Name=Price,Position=5,ParentID=4,Required=YES,HasData=ALWAYS,MinimumLength=,MaximumLength=,DataType=NUMBER,NumericMinimumValue=1,NumericMaximumValue=99999999,Sample=15499
Type=FIELD,ID=17,Name=Date,Position=6,ParentID=4,Required=YES,HasData=ALWAYS,MinimumLength=,MaximumLength=,DataType=DATE TIME,DateTimeFormat=M/d/yyyy,,Sample=3/7/2011
Type=FIELD,ID=18,Name=Notes,Position=7,ParentID=4,Required=YES,HasData=OPTIONAL,MinimumLength=1,MaximumLength=255,DataType=STRING,Sample=paid by certified check
Type=LIST,ID=19,Name=Allowed States,Position=3
Type=VALUE,ID=20,Name=Connecticut,Position=1,ParentID=19,Value=CT
Type=VALUE,ID=21,Name=Georgia,Position=2,ParentID=19,Value=GA
Type=VALUE,ID=22,Name=Montana,Position=3,ParentID=19,Value=MT
Type=VALUE,ID=23,Name=Oklahoma,Position=4,ParentID=19,Value=OK
Type=VALUE,ID=24,Name=Vermont,Position=5,ParentID=19,Value=VT
Type=VALUE,ID=25,Name=Wyoming,Position=6,ParentID=19,Value=WY
Type=CONDITION,ID=26,Name=States and ZIP Codes Condition,Position=4,Level=FIELD,ConditionType=PAIRED,ListID=27
Type=LIST,ID=27,Name=States and ZIP Codes List,Position=5
Type=VALUE,ID=28,Name=State FieldID,Position=1,ParentID=27,Value=14
Type=VALUE,ID=29,Name=ZIP Code FieldID,Position=2,ParentID=27,Value=15
Type=RULE,ID=30,Name=Georgia ZIP Codes Rule,Position=6,Level=FIELD,HypothesisID=14,HypothesisOperator=EQUALS,HypothesisNegation=FALSE,HypothesisListID=31,ConclusionID=15,ConclusionOperator=BEGINS WITH,ConclusionNegation=FALSE,ConclusionListID=32
Type=LIST,ID=31,Name=Georgia ZIP Codes Rule Hypothesis List,Position=7
Type=LIST,ID=32,Name=Georgia ZIP Codes Rule Conclusion List,Position=8
Type=VALUE,ID=33,Name=Georgia Abbreviation,Position=1,ParentID=31,Value=GA
Type=VALUE,ID=34,Name=Allowed ZIP Code #1,Position=1,ParentID=32,Value=30
Type=VALUE,ID=35,Name=Allowed ZIP Code #2,Position=2,ParentID=32,Value=31
Type=VALUE,ID=36,Name=Allowed ZIP Code #3,Position=3,ParentID=32,Value=39
Type=SUMMARY,ID=37,ControlCount=1,MetaCount=1,RecordCount=2,FieldCount=14,ListCount=4,ValueCount=12,ConditionCount=1,RuleCount=1,SummaryCount=1,TotalCount=37
Back to top