Як документувати специфікацію формату файлу [закрито]


12

Для проекту мені потрібно працювати з різними типами файлів деяких старих ігор та відповідного програмного забезпечення - файли конфігурації, збереження, архіви ресурсів тощо. Більшість з них ще не задокументовані, а також не існує інструментів для роботи з ними, тому я повинен інженерно розробити формати та створити власні бібліотеки для їх обробки.

Хоча я не думаю, що на більшу частину цього попиту є великий попит, я маю намір опублікувати результати своїх зусиль. Чи є прийняті стандарти документування форматів файлів? Оглянувшись, використовується декілька стилів: деякі, як-от специфікація формату файлу .ZIP , дуже виразні; інші, як, наприклад, на XentaxWiki, набагато більш стислі - мені деякі з них важко читати; той, який мені особисто найбільше подобається, - це опис файлової системи пам'яті PlayStation 2 , що включає в себе як детальний описовий текст, так і декілька «карт пам'яті» із зрушеннями і таке - воно також найбільш відповідає моєму використанню. Це буде трохи відрізнятися для різних форматів, але, схоже, повинні бути деякі загальні принципи, яких я повинен намагатися дотримуватися.

Редагувати: Я, здається, не дуже добре пояснив, що хочу зробити. Дозвольте побудувати приклад.

У мене може бути якийсь старий фрагмент програмного забезпечення, який зберігає його конфігурацію у «двійковому» файлі - це ряд біт-полів, цілих чисел, рядків і того, що все не склеєне і зрозуміле програмою, але не читабельне для людини. Я розшифровую це. Я хочу задокументувати, який саме формат цього файлу, легко читається як специфікацію для впровадження бібліотеки для розбору та зміни цього файлу. Крім того, я хотів би, щоб це легко зрозуміли інші люди.

Існує кілька способів написання такого документа. Наведений вище приклад PKZIP є дуже багатомовним і в основному описує формат файлу у вільному тексті. У прикладі PS2 наведено таблиці типів значень, компенсацій та розмірів із широкими коментарями до того, що вони означають. Багато інших, як, наприклад, на XentaxWiki, лише перелічують типи та розміри змінних, мало коментарів або взагалі не мають.

Я запитую, чи є якийсь стандартний, подібний до посібника зі стилю кодування, який дає вказівки щодо написання такого роду документації. Якщо ні, чи є відомий чудовий приклад, який я повинен наслідувати? Якщо ні, чи може хтось хоча б узагальнити якусь корисну пораду?



Га! Я знаю це відчуття. Один формат, на який я дивився, насправді мав оригінальний вихідний код, який написав файл. Проблема полягала в тому, що змінні писалися в іншому порядку, ніж у визначенні структури, з деякими додатковими матеріалами, посипаними між ними. І коментарі були помилковими щодо компенсацій. Це частина того, що надихнуло це питання - сильне бажання НЕ РОБИТИ ЦЕ.
Сопофорик

1
Мій єдиний досвід документованих файлів зворотного проектування - це wiibrew.org. Якщо я добре пам'ятаю, вони задокументували файл як struct. Це спрацювало досить добре.
MetaFight

1
Можливо, я неправильно розумію це питання, але здається, ви шукаєте щось на зразок EBNF .

@MattFenwick: BNF призначений для визначення синтаксису мови; не зовсім те, що я після. Я відредагую, щоб було зрозуміліше, який саме формат файлу я маю на увазі.
Сопофорик

Відповіді:


4

Бінарний файл - це лише послідовність бітів, розташованих у логічні одиниці за певними правилами . Ці правила зазвичай називають граматикою . Граматика можна розділити на чотири типи ( ієрархії Хомського ), і для контекстно-вільних граматик ви повинні використовувати розширений Бекуса-Наура як зазначив Метт Фенвік в своєму коментарі. Інтерпретація (або семантика) послідовності, що зберігається у файлі, може бути описана усно чи за допомогою анотованих зразків програм, серіалізуючи та десеріалізуючи інформацію.

Щоб дізнатися більше про документування бінарних форматів файлів, запропонуйте прочитати, наприклад, стандарт ASN.1 .


Технічно більшість файлів конфігурацій мають безконтекстну мову, оскільки вони мають обмежену мову. Практично, написання «набору всіх 2-байтних рядків» (наприклад, для конфігураційного файлу, що є лише 16-ти пунктовим бітфілдом) в EBNF нікому нічого не навчить. Вказівник на стандарт ASN.1 є найбільш близьким до відповіді, яку я отримав, хоча, здається, специфікація в ASN.1 призначена для читання комп’ютерами, і я хотів отримати інформацію для написання документації для людей. Однак якщо незабаром не з’явиться нічого, що більше відповідає моїм вимогам, я прийму цю відповідь. Дякуємо за вашу допомогу.
Сопофорик

2

Це дивно, тому що швидкий пошук форматів файлів вивів статтю у Вікіпедії (Список форматів файлів) . Вона також включає декілька форматів даних відеоігор .

Список загальних форматів файлів даних для відеоігор у системах, що підтримують файлові системи, найчастіше на ПК.

Він також включає великий вибір форматів носіїв для зберігання відеоігор .

Список найпоширеніших розширень назви файлів, які використовуються, коли зображення ROM чи носій пам’яті гри копіюється з оригінального пристрою ПЗУ на зовнішню пам’ять, наприклад, на жорсткий диск для цілей резервного копіювання або для того, щоб гра була відтворена емулятором. У випадку з програмним забезпеченням на базі картриджів, якщо розширення для певної платформи не використовується, тоді розширення назви файлів ".rom" або ".bin" зазвичай використовуються для уточнення, що файл містить копію вмісту ПЗУ. Зображення ПЗУ, диска чи стрічки зазвичай не складаються з одного файлу чи ПЗУ, а всього цілого файлу або структури ПЗУ, що містяться в одному файлі на резервному носії.


Чи є прийняті стандарти документування форматів файлів?

"Офіційного" стандарту ніде немає. Оскільки формати файлів виготовлені компанією, компанія приймає рішення про формат документації.


2
Я думаю, ви неправильно зрозуміли моє запитання. Звичайно, є будь-які багато формати файлів, які були задокументовані - я згадав XentaxWiki, який включає понад 1500 над ними. Але файли, які мене цікавлять, часто не документально підтверджені - звичайно такі ігри, як збереження файлів чи конфігурація, а не загальні формати контейнерів. Моя ситуація полягає в тому, що жодної документації не існує, і я маю намір написати її - то як це робити?
Сопофорик

Так само були задокументовані всі ці інші формати файлів.
Роберт Харві

4
@RobertHarvey: Заплутаний, конфліктний, неточний та неповний? Серйозно, хоча, як я вже згадував, я зазначив кілька різних загальних стилів у використанні. Я недостатньо знайомий з роботою в цій галузі, щоб знати, чи варто віддати перевагу якомусь певному стилю. Отримані на XentaxWiki, єдиний найбільший ресурс, який я бачив, майже виключно для контейнерних форматів, тому вони не зовсім відображають більш загальний випадок. Якби я думав, що достатньо добре підібрати випадковий приклад для наслідування, я б не просила поради.
Сопофорик

@Sopoforic: Тоді вам потрібно бути чіткішим у своєму питанні, що ви хочете. Ви серйозно запитуєте нас "Як мені написати документацію для формату файлу?" Існують цілі навчальні програми з технічного написання, які присвячені цьому предмету. Знайдіть формат, який має чітку, добре написану документацію (відповідно до ваших особистих стандартів) та емулюйте її. Всі вони не можуть бути лайно. Підказка: приклади використання - це король. Чіткість пояснення наближається до другого.
Роберт Харві

1
@RobertHarvey: Так, так само, як питання про те, як коментувати свій код або як документувати функцію, я шукаю «посібник зі стилів» для написання зрозумілої специфікації формату. Якщо я хочу знати, як написати RFC, я можу подивитися на RFC 2223. Якщо я хочу знати, який стиль використовувати в коді Python, я можу прочитати PEP 8. Якщо я хочу знати, як задавати питання Розумний шлях, ШОЕ мене охоплює. Чи є подібні вказівки щодо специфікацій формату файлів? Або відомий відмінний приклад одного? Я, безумовно, можу використовувати власне судження, але якщо існує стандарт, було б розумно його виконувати.
Сопофорик
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.