You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The naive approach of simply putting the text content of the schema and data boxes in the URL's query parameters fails for sufficiently large schemas. We should consider converting the data to Ion binary to take advantage of the symbol table to reduce the size, adding some sort of general purpose compression, or both.
As a partial mitigation, we could trim whitespace for really large payloads and we can warn the user if their code snippet is going to be too large to share.
The naive approach of simply putting the text content of the schema and data boxes in the URL's query parameters fails for sufficiently large schemas. We should consider converting the data to Ion binary to take advantage of the symbol table to reduce the size, adding some sort of general purpose compression, or both.
As a partial mitigation, we could trim whitespace for really large payloads and we can warn the user if their code snippet is going to be too large to share.
Example link:
https://amazon-ion.github.io/ion-schema/sandbox?schema=%24ion_schema_2_0%0Atype%3A%3A%7B%0A%20%20name%3A%20conformance_test_file%2C%0A%20%20type%3A%20document%2C%0A%20%20element%3A%20test%2C%0A%7D%0A%0Atype%3A%3A%7B%0A%20%20name%3A%20test%2C%0A%20%20ordered_elements%3A%20%5B%0A%20%20%20%20%7B%20valid_values%3A%20%5B%20in10%2C%20in11%2C%20in1x%20%5D%20%7D%2C%0A%20%20%20%20%7B%20type%3A%20fragment%2C%20occurs%3A%20range%3A%3A%5B0%2C%20max%5D%20%7D%2C%0A%20%20%20%20%7B%20type%3A%20any%2C%20occurs%3A%20range%3A%3A%5B1%2C%20max%5D%7D%2C%0A%20%20%5D%2C%0A%20%20one_of%3A%20%5B%0A%20%20%20%20%7B%0A%20%20%20%20%20%20ordered_elements%3A%5B%0A%20%20%20%20%20%20%20%20%7B%20type%3A%20any%2C%20occurs%3A%20range%3A%3A%5B0%2C%20max%5D%20%7D%2C%0A%20%20%20%20%20%20%20%20expectation%2C%0A%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%7D%2C%0A%20%20%20%20%7B%0A%20%20%20%20%20%20ordered_elements%3A%5B%0A%20%20%20%20%20%20%20%20%7B%20type%3A%20any%2C%20occurs%3A%20range%3A%3A%5B0%2C%20max%5D%20%7D%2C%0A%20%20%20%20%20%20%20%20%7B%20type%3A%20extension%2C%20occurs%3A%20range%3A%3A%5B1%2C%20max%5D%20%7D%2C%0A%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%7D%2C%0A%20%20%5D%0A%7D%0A%0A%2F*%0Afragment%20%3A%3A%3D%20%20%22(%22%20%20%22text%22%20%20%20%20%20%20string*%20%20%22)%22%0A%20%20%20%20%20%20%20%20%20%20%20%7C%20%20%22(%22%20%20%22binary%22%20%20%20%20bytes*%20%20%20%22)%22%0A%20%20%20%20%20%20%20%20%20%20%20%7C%20%20%22(%22%20%20%22toplevel%22%20%20ast*%20%20%20%20%20%22)%22%0A%20%20%20%20%20%20%20%20%20%20%20%7C%20%20%22(%22%20%20%22encoding%22%20%20ast*%20%20%20%20%20%22)%22%0A%20%20%20%20%20%20%20%20%20%20%20%7C%20%20%22(%22%20%20%22mactab%22%20%20%20%20ast*%20%20%20%20%20%22)%22%0A*%2F%0Atype%3A%3A%7B%0A%20%20name%3A%20fragment%2C%0A%20%20one_of%3A%20%5B%0A%20%20%20%20text_fragment%2C%20binary_fragment%2C%0A%20%20%20%20toplevel_fragment%2C%20encoding_fragment%2C%0A%20%20%20%20mactab_fragment%2C%0A%20%20%5D%0A%7D%0Atype%3A%3A%7B%0A%20%20name%3A%20text_fragment%2C%0A%20%20ordered_elements%3A%5B%0A%20%20%20%20%7B%20valid_values%3A%20%5Btext%5D%20%7D%2C%0A%20%20%20%20%7B%20type%3A%20string%2C%20occurs%3A%20range%3A%3A%5B0%2C%20max%5D%20%7D%2C%0A%20%20%5D%0A%7D%0Atype%3A%3A%7B%0A%20%20name%3A%20binary_fragment%2C%0A%20%20ordered_elements%3A%5B%0A%20%20%20%20%7B%20valid_values%3A%20%5Bbinary%5D%20%7D%2C%0A%20%20%20%20%7B%20type%3A%20bytes%2C%20occurs%3A%20range%3A%3A%5B0%2C%20max%5D%20%7D%2C%0A%20%20%5D%0A%7D%0Atype%3A%3A%7B%0A%20%20name%3A%20toplevel_fragment%2C%0A%20%20ordered_elements%3A%5B%0A%20%20%20%20%7B%20valid_values%3A%20%5Btoplevel%5D%20%7D%2C%0A%20%20%20%20%7B%20type%3A%20ast%2C%20occurs%3A%20range%3A%3A%5B0%2C%20max%5D%20%7D%2C%0A%20%20%5D%0A%7D%0Atype%3A%3A%7B%0A%20%20name%3A%20encoding_fragment%2C%0A%20%20ordered_elements%3A%5B%0A%20%20%20%20%7B%20valid_values%3A%20%5Bencoding%5D%20%7D%2C%0A%20%20%20%20%7B%20type%3A%20ast%2C%20occurs%3A%20range%3A%3A%5B0%2C%20max%5D%20%7D%2C%0A%20%20%5D%0A%7D%0Atype%3A%3A%7B%0A%20%20name%3A%20mactab_fragment%2C%0A%20%20ordered_elements%3A%5B%0A%20%20%20%20%7B%20valid_values%3A%20%5Bmactab%5D%20%7D%2C%0A%20%20%20%20%7B%20type%3A%20ast%2C%20occurs%3A%20range%3A%3A%5B0%2C%20max%5D%20%7D%2C%0A%20%20%5D%0A%7D%0A%0Atype%3A%3A%7B%0A%20%20name%3A%20bytes%2C%0A%20%20one_of%3A%20%5B%0A%20%20%20%20%7B%20type%3A%20string%2C%20regex%3A%20%22%5E(%5B0-9a-fA-F%5D%7B2%7D%5B%20%5Cn%5D*)%2B%24%22%20%7D%2C%0A%20%20%20%20%7B%20type%3A%20int%2C%20valid_values%3A%20range%3A%3A%5B0%2C255%5D%20%7D%2C%0A%20%20%5D%0A%7D%0A%0Atype%3A%3A%7B%0A%20%20name%3A%20expectation%2C%0A%20%20one_of%3A%20%5B%0A%20%20%20%20%7B%20ordered_elements%3A%5B%0A%20%20%20%20%20%20%7Bvalid_values%3A%5Bproduces%5D%7D%2C%0A%20%20%20%20%20%20%7Btype%3Adatum%2Coccurs%3Arange%3A%3A%5B0%2Cmax%5D%7D%2C%0A%20%20%20%20%20%20%5D%20%7D%2C%0A%20%20%20%20%7B%20ordered_elements%3A%5B%0A%20%20%20%20%20%20%7Bvalid_values%3A%5Bdenotes%5D%7D%2C%0A%20%20%20%20%20%20%7Btype%3Amodel_value%2Coccurs%3Arange%3A%3A%5B0%2Cmax%5D%7D%2C%0A%20%20%20%20%20%20%5D%20%7D%2C%0A%20%20%20%20%7Bordered_elements%3A%5B%7Bvalid_values%3A%5Bsignals%5D%7D%2Cstring%5D%7D%2C%0A%20%20%20%20%7B%20ordered_elements%3A%5B%0A%20%20%20%20%20%20%7Bvalid_values%3A%5Band%5D%7D%2C%0A%20%20%20%20%20%20%2F%2F%20TODO%3A%20the%20min%20of%20this%20range%20should%20probably%20be%202.%0A%20%20%20%20%20%20%7Btype%3Aexpectation%2Coccurs%3Arange%3A%3A%5B1%2Cmax%5D%7D%2C%0A%20%20%20%20%20%20%5D%20%7D%2C%0A%20%20%20%20%7Bordered_elements%3A%5B%7Bvalid_values%3A%5Bnot%5D%7D%2Cexpectation%5D%7D%2C%0A%20%20%5D%2C%0A%7D%0A%0Atype%3A%3A%7B%0A%20%20name%3A%20extension%2C%0A%20%20%2F%2F%20continuation%20%3A%3A%3D%20%20expectation%20%20%7C%20%20extension%2B%0A%20%20one_of%3A%20%5B%0A%20%20%20%20%7B%0A%20%20%20%20%20%20ordered_elements%3A%5B%0A%20%20%20%20%20%20%20%20%7B%20valid_values%3A%20%5Bthen%2C%20each%5D%20%7D%2C%0A%20%20%20%20%20%20%20%20%7B%20type%3A%20fragment%2C%20occurs%3A%20range%3A%3A%5B1%2C%20max%5D%20%7D%2C%0A%20%20%20%20%20%20%20%20expectation%2C%0A%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%7D%2C%0A%20%20%20%20%7B%0A%20%20%20%20%20%20ordered_elements%3A%5B%0A%20%20%20%20%20%20%20%20%7B%20valid_values%3A%20%5Bthen%2C%20each%5D%20%7D%2C%0A%20%20%20%20%20%20%20%20%7B%20type%3A%20fragment%2C%20occurs%3A%20range%3A%3A%5B1%2C%20max%5D%20%7D%2C%0A%20%20%20%20%20%20%20%20%7B%20type%3A%20extension%2C%20occurs%3A%20range%3A%3A%5B1%2C%20max%5D%20%7D%2C%0A%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%7D%2C%0A%20%20%5D%0A%7D%0A%0A%2F%2F%20Any%20Ion%20Value%0Atype%3A%3A%7B%20name%3Adatum%20%7D%0A%0Atype%3A%3A%7B%0A%20%20name%3A%20model_value%2C%0A%20%20one_of%3A%20%5B%0A%20%20%20%20model_content%2C%0A%20%20%20%20%7B%20ordered_elements%3A%5B%0A%20%20%20%20%20%20%7Bvalid_values%3A%5Bannot%5D%7D%2C%0A%20%20%20%20%20%20model_content%2C%0A%20%20%20%20%20%20%2F%2F%20TODO%3A%20Annotations%20should%20probably%20be%20model_symtok%0A%20%20%20%20%20%20%7Btype%3Astring%2Coccurs%3Arange%3A%3A%5B1%2Cmax%5D%7D%0A%20%20%20%20%20%20%5D%20%7D%0A%20%20%5D%0A%7D%0A%0Atype%3A%3A%7B%0A%20%20name%3A%20model_content%2C%0A%20%20annotations%3A%20closed%3A%3A%5B%5D%2C%0A%20%20one_of%3A%5B%0A%20%20%20%20%24null%2C%0A%20%20%20%20bool%2C%0A%20%20%20%20int%2C%0A%20%20%20%20string%2C%0A%20%20%20%20%7Bordered_elements%3A%5B%7Bvalid_values%3A%5Bnull%2C'null'%2C%22null%22%5D%7D%2Cmodel_type%5D%7D%2C%0A%20%20%20%20%7Bordered_elements%3A%5B%7Bvalid_values%3A%5Bint%5D%7D%2Cint%5D%7D%2C%0A%20%20%20%20%2F%2F%20TODO%3A%20how%20do%20we%20denote%20floats%3F%0A%20%20%20%20%7Bordered_elements%3A%5B%7Bvalid_values%3A%5Bfloat%5D%7D%2Cfloat%5D%7D%2C%0A%20%20%20%20model_decimal%2C%0A%20%20%20%20model_timestamp%2C%0A%20%20%20%20%7Bordered_elements%3A%5B%7Bvalid_values%3A%5Bstring%5D%7D%2C%7Btype%3Acodepoint%2Coccurs%3Arange%3A%3A%5B0%2Cmax%5D%7D%5D%7D%2C%0A%20%20%20%20%7Bordered_elements%3A%5B%7Bvalid_values%3A%5Bsymbol%5D%7D%2Cmodel_symtok%5D%7D%2C%0A%20%20%20%20%7Bordered_elements%3A%5B%7Bvalid_values%3A%5Bblob%2Cclob%5D%7D%2C%7Btype%3Abytes%2Coccurs%3Arange%3A%3A%5B0%2Cmax%5D%7D%5D%7D%2C%0A%20%20%20%20%7Bordered_elements%3A%5B%7Bvalid_values%3A%5Blist%2Csexp%5D%7D%2C%7Btype%3Amodel_value%2Coccurs%3Arange%3A%3A%5B0%2Cmax%5D%7D%5D%7D%2C%0A%20%20%20%20%7Bordered_elements%3A%5B%7Bvalid_values%3A%5Bstruct%5D%7D%2C%7Btype%3Amodel_field%2Coccurs%3Arange%3A%3A%5B0%2Cmax%5D%7D%5D%7D%2C%0A%20%20%20%20%7Bordered_elements%3A%5B%7Bvalid_values%3A%5B'null'%5D%7D%2Cmodel_type%5D%7D%2C%0A%20%20%5D%0A%7D%0Atype%3A%3A%7B%0A%20%20name%3A%20model_decimal%2C%0A%20%20ordered_elements%3A%5B%0A%20%20%20%20%7Bvalid_values%3A%5Bdecimal%5D%7D%2C%0A%20%20%20%20int%2C%20%2F%2F%20coefficient%0A%20%20%20%20int%2C%20%2F%2F%20exponent%0A%20%20%5D%2C%0A%7D%0A%0Atype%3A%3A%7B%0A%20%20name%3A%20model_timestamp%2C%0A%20%20one_of%3A%5B%0A%20%20%20%20%7Bordered_elements%3A%5Byear%5D%7D%2C%0A%20%20%20%20%7Bordered_elements%3A%5Byear%2Cmonth%5D%7D%2C%0A%20%20%20%20%7Bordered_elements%3A%5Byear%2Cmonth%2Cday%5D%7D%2C%0A%20%20%20%20%7Bordered_elements%3A%5Byear%2Cmonth%2Cday%2Chour%2Cminute%2C%7Btype%3Aoffset%2Coccurs%3Aoptional%7D%5D%7D%2C%0A%20%20%20%20%7Bordered_elements%3A%5Byear%2Cmonth%2Cday%2Chour%2Cminute%2Csecond%2C%7Btype%3Aoffset%2Coccurs%3Aoptional%7D%5D%7D%2C%0A%20%20%20%20%2F%2F%20Last%20int%2Cint%20are%20coefficient%20and%20exponent%20for%20fractional%20seconds.%0A%20%20%20%20%7Bordered_elements%3A%5Byear%2Cmonth%2Cday%2Chour%2Cminute%2Csecond%2Cint%2Cint%2C%7Btype%3Aoffset%2Coccurs%3Aoptional%7D%5D%7D%2C%0A%20%20%5D%0A%7D%0A%0Atype%3A%3A%7Bname%3Ayear%2C%20type%3Aint%2C%20valid_values%3Arange%3A%3A%5B0%2C9999%5D%7D%0Atype%3A%3A%7Bname%3Amonth%2C%20type%3Aint%2C%20valid_values%3Arange%3A%3A%5B1%2C12%5D%7D%0Atype%3A%3A%7Bname%3Aday%2C%20type%3Aint%2C%20valid_values%3Arange%3A%3A%5B1%2C31%5D%7D%0Atype%3A%3A%7Bname%3Ahour%2C%20type%3Aint%2C%20valid_values%3Arange%3A%3A%5B0%2C23%5D%7D%0Atype%3A%3A%7Bname%3Aminute%2C%20type%3Aint%2C%20valid_values%3Arange%3A%3A%5B0%2C59%5D%7D%0Atype%3A%3A%7Bname%3Asecond%2C%20type%3Aint%2C%20valid_values%3Arange%3A%3A%5B0%2C59%5D%7D%0Atype%3A%3A%7B%0A%20%20name%3Aoffset%2C%0A%20%20regex%3A%20%22%5EZ%7C%5B%2B-%5D%5B012%5D%5B0-9%5D%3A%5B0-5%5D%5B0-9%5D%24%22%2C%0A%7D%0A%0Atype%3A%3A%7B%0A%20%20name%3A%20model_type%2C%0A%20%20annotations%3A%20closed%3A%3A%5B%5D%2C%0A%20%20valid_values%3A%20%5Bbool%2Cint%2Cfloat%2Cdecimal%2Ctimestamp%2Cstring%2Csymbol%2Cclob%2Cblob%2Clist%2Csexp%2Cstruct%5D%0A%7D%0A%0Atype%3A%3A%7B%0A%20%20name%3A%20codepoint%2C%0A%20%20type%3A%20int%2C%0A%20%20valid_values%3A%20range%3A%3A%5B0%2C%200x10FFFF%5D%2C%0A%7D%0A%0Atype%3A%3A%7B%0A%20%20name%3A%20model_symtok%2C%0A%20%20one_of%3A%5B%0A%20%20%20%20string%2C%0A%20%20%20%20int%2C%0A%20%20%20%20%7Bordered_elements%3A%5B%7Bvalid_values%3A%5Btext%5D%7D%2C%7Btype%3Acodepoint%2Coccurs%3Arange%3A%3A%5B1%2Cmax%5D%7D%5D%7D%2C%0A%20%20%20%20%2F%2F%20string%2Cint%20%3D%3D%20symtab%20name%20%2B%20offset%0A%20%20%20%20%7Bordered_elements%3A%5B%7Bvalid_values%3A%5Babsent%5D%7D%2Cstring%2Cint%5D%7D%0A%20%20%5D%0A%7D%0A%0Atype%3A%3A%7B%0A%20%20name%3A%20model_field%2C%0A%20%20ordered_elements%3A%5Bmodel_symtok%2Cmodel_value%5D%2C%0A%7D%0A%0A%2F%2F%20Ast%20has%20special%20semantics%2C%20but%20it%20can%20be%20any%20Ion%20value%0Atype%3A%3A%7B%20name%3A%20ast%20%7D%0A&value=(in10%20(text%20'''%20%7Ba%3A1%2C%20b%3A2%7D%20%22two%22%20''')%0A%20%20%20%20%20%20(produces%20%7Bb%3A2%2C%20a%3A1%7D%20%22two%22))%0A%20%20%20%20%20%20%0A(in11%20(text%20'''%24ion_encoding%3A%3A((module%20M%20(macro_table%20(macro%20mac%20%5B%5D%201)))%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20(macro_table%20M))'''%0A%20%20%20%20%20%20(then%20(text%20%22(%3AM%3Amac)%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20(produces%201))%0A%20%20%20%20%20%20(then%20(text%20%22(%3AM%3A0)%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20(produces%201)))%0A%20%20%20%20%20%20(then%20(text%20%22(%3Amac)%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20(produces%201))%0A%20%20%20%20%20%20(then%20(text%20%22(%3A0)%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20(produces%201)))&type=conformance_test_file
The text was updated successfully, but these errors were encountered: