How to create a new file format? - json

I have to create a file format which holds some data, and it is to be opened by a particular application (college project).I have an empty grid. When a file is opened, it should contain the number of cells to be displayed on the grid, and in what shape, and other details. After that it should load specific numbers into some specific cells, which will also be present in the file. How do I create a file format for this? Or is it better to just not to create a special file format and rather move on with existing ones?

A file format is nothing but a previously agreed data structure. You can use any data structure, including plain text, as a data format.
You typically want your format to handle future extensions, so extensible formats such as JSON, YAML, or XML would be ideal. You can also use existing libraries to read and write in those formats.
If you allow users to add binary media into your file format (such adding images in a Microsoft Word document), you need to bundle your configuration (e.g., a JSON file), media (e.g., JPGs, PNGs, MOV, etc.), and other external sources (e.g., scripts) in a folder structure, and compress them (e.g., zip, gz, tar). Most modern file formats, including Microsoft Word Docx, are essentially zip files.
You may want to use a file extension. It is not mandatory but customary (typically 3 letters) and has usability benefits (e.g., icons and default applications).
If your custom file format is only a JSON file, simply using .json extension would be your best choice.
It's ill-advised to use a reuse an established file extension for a new file format. Here's a good list of filename extensions that you don't want to use: https://en.wikipedia.org/wiki/List_of_filename_extensions
Consider versioning your file format by adding a version attribute to your configuration.

Related

MIME-type of files queries

I'm doing a computing assignment, and I read this passage and had no clue. I don't get the full picture behind what MIME-type are...
"Note that filelename extensions are not the same as file types. Some filesles may end in .html or .htm but
the header indicates that the MIME-type is text/plain. On the other hand, a file may have an extension
.txt - or no extension - but have a MIME-type of text/html. The MIME-type defines the true type
of the file."
What do you mean by the MIME-type defines the true type of file?
Thank you so much!
I can give a self-learning experience
in windows open Registry Editor
Start -> Run -> regedit
Expand HKEY_CLASSES_ROOT
choose any extension you want say (.pdf)
you can understand how is it related and how it is treated
Again expand .pdf, you can see through which application it is usually processed
this makes a perfect learning experience of various MIME types and its content type and which application it is as default processed
MIME type is not only determined by the ending of a file, it also refers to the content in the file i.e. a python script s.py has MIME type text/x-python, while an empty file named s.py has inode/x-empty on a linux system
In linux use file --mime-type FILE_NAME command
How can I find out a file's MIME type (Content-Type)?
MIME types are just a way to identify the type of a file. Typically, there are two ways to figure out what the type of a file is:
Look at the file extension. For example, a pdf is usually saved as file.pdf ending with the extension pdf. This is a hint that the type of the file is pdf file. However, you can change the name of the file and simply change its extension to something else. So, the name of a file does not necessarily have to indicate its type
Look at the contents of the file and try to guess based on how its arranged in binary.
Most binary files have very specific representation inside a file. For example, if you open a pdf file in a notepad (or any text editing program), you will find that it starts with %PDF-. Followed by some numbers and potentially weird characters. This tells you that this is a pdf type.
Why is this useful? Files are simply saved as blocks of binary data. However, certain files can only be opened by certain programs (for example, music files can't be "opened" by text editors, it can only be played with a music player). By figuring out the MIME type of a file, you can understand how to interpret the data in the file (for example, text, image, video, audio are common mime types). Then, you can use the correct software to use the file.

Download dotfile using html5 download preserving name

I have a directory structure, containing a list of directories and files.
I want to give user an option of downloading a file. For downloading, I'm using HTML5 download attribute. It works perfectly.
But the directory structure i have can have dotfiles too, examples: .babelrc, .gitignore, .eslintrc, etc.
When I use the same technique to download such files, file is being downloaded with the same content but the file is no longer a dotfile. After downloading, let's say .gitignore, the file becomes gitignore.txt.
I'm using this for my project github-plus - Chrome extension to display size of each file, download link and an option of copying it's contents.
Any help would be highly appreciated.
I'm using this format:
Download
JSFIDDLE DEMO
Quoting HTML5 specification on downloading resources with the download attribute, about file type/extension :
If the claimed type is known, then alter filename to add an extension corresponding to claimed type.
Otherwise, if named type is known to be potentially dangerous (e.g. it will be treated by the platform conventions as a native executable, shell script, HTML application, or executable-macro-capable document) then optionally alter filename to add a known-safe extension (e.g. ".txt").
It seems that:
the part of the algorithm that finally choses the filename is platform-dependent
if the extension is not recognised, as in the case of dotfiles, the browser will try to determine it by using the file MIME type
dotfiles might be considered anyway as potentially harmful as they are hidden files on various platforms. This seems to be what happens in your case, with the initial dot being removed and the .txt extension appended.

Provide a description for a file dialog

In HTML5, I can get an open file dialog with the following code:
<input id="fileOpenDialog" type="file" accept=".proj" />
(note, .abc is my own project format)
When Google Chrome opens the dialog, it shows it like this:
Is there a way to provide an additional description for the file type? I would like it to show something like "ABC Project File (.proj)".
Although I like the suggestion, there is no attribute in the input type=file that supports this.
File extensions are kept on the client, and those values are shown in the dropdown.
You can find all supported attributes in the specification.
No this isn't possible.
That said, however, your upload form itself should clearly specify which type of file is being requested from the user; the user should know what file they are expected to load before selecting to chose a file.
Whilst on this subject, it's also worth noting that the HTML5 Candidate Recommendation specifies the following warning:
Warning: Extensions tend to be ambiguous (e.g. there are an untold number of formats that use the ".dat" extension, and users can typically quite easily rename their files to have a ".doc" extension even if they are not Microsoft Word documents), and MIME types tend to be unreliable (e.g. many formats have no formally registered types, and many formats are in practice labeled using a number of different MIME types). Authors are reminded that, as usual, data received from a client should be treated with caution, as it may not be in an expected format even if the user is not hostile and the user agent fully obeyed the accept attribute's requirements.
Even if you were somehow able to rename your desired file type to "ABC Project File (.proj)", the user would still be able to upload any other file with the .proj extension.

does as3xls library handles hyperlink in excel file..?

Is "as3xls library" capable of handling a hyper link in excel file, is there any other library which i can use for importing data from .xlsx file. as3xls is limited to .xls only.
.xlsx files are basically just XML files that are mapped to each other and zipped up into a zip archive. The way I have dealt with them is to use something like nochump's zip library to unpack them, and then traverse the contained XML yourself. Other than that, I don't know of any libraries set up to deal with xlsx files directly (you are correct that as3xls only deals with the older, more difficult binary xls format). You may find some resources such as the OOXML spec helpful as well.

Saving several images (and metadata for each) in a single file using Adobe Air

Is it possible, via Adobe Air, to save multiple types of data in a single file? For example, an application would allow the user to load in external images, position them on stage and label them. This data would be then be stored in a ByteArray (I guess) using BitmapData for the images and probably XML for the metadata.
I would then like to write this to a single file, with a bespoke file extension that could be associated with said Air app.
I've asked this on various forums and never received a single reply.
You can add everything to a byte array and write it to file - but defining boundaries and extracting individual entities back from the file would take some effort. How about writing them to normal files, zipping them to a single file and deleting the originals? This way you can still have a single file and deal with the individual items more easily.
This article describes some ActionScript zip libraries. I've used nochump in the past and it was easy - this page has some sample code
If you want some individuality for your files, you can rename the zipped file to whatever extension you want - that's what Firefox extensions do, they have .xpi extension, but they're plain zip files renamed.