Bir dosya biçimi belirtimi nasıl belgelenir [kapalı]


12

Bir proje için, bazı eski oyunlardan ve ilgili yazılımlardan - yapılandırma dosyaları, tasarruflar, kaynak arşivleri vb. Bunların çoğu henüz belgelenmemiştir veya onlarla çalışmak için araçlar yoktur, bu yüzden formatları tersine mühendislik ve bunları işlemek için kendi kütüphanelerimi oluşturmalıyım.

Her ne kadar çoğu için büyük bir talep olduğunu düşünmese de, çabalarımın sonuçlarını yayınlamayı planlıyorum. Dosya formatlarını belgelemek için kabul edilmiş standartlar var mı? Etrafa bakıldığında, kullanımda birkaç stil var: .ZIP Dosya Biçimi Belirtimi gibi bazıları çok garip; XentaxWiki'deki gibi diğerleri çok daha keskindir - bazılarını okumakta zorlanıyorum; Şahsen en çok sevdiğim , PlayStation 2 Hafıza Kartı Dosya Sistemi'nin hem ayrıntılı açıklayıcı metni hem de ofsetlerle çeşitli 'hafıza haritalarını' içeren bu açıklamasıdır - aynı zamanda kullanım durumumla en iyi şekilde eşleşir. Farklı formatlar için biraz değişecektir, ancak izlemeye çalışmam gereken bazı genel ilkeler olmalı gibi görünüyor.

Düzenleme: Ne yapmak istediğimi çok iyi açıklamamıştım. Bir örnek oluşturayım.

Yapılandırmasını bir 'ikili' dosyada saklayan eski bir yazılım parçam olabilir - bir dizi bitfield, tamsayı, dize ve program tarafından birbirine yapıştırılan ve anlaşılmayan, ancak insan tarafından okunamayan bir dizi. Bunu deşifre ediyorum. Bu dosyanın biçimini tam olarak insan tarafından okunabilir bir şekilde, bu dosyayı ayrıştırmak ve değiştirmek üzere bir kitaplık uygulamak için bir belirtim olarak belgelemek istiyorum. Ayrıca, bunun diğer insanlar tarafından kolayca anlaşılmasını istiyorum.

Böyle bir belgenin yazılmasının birkaç yolu vardır. Yukarıdaki PKZIP örneği çok gariptir ve çoğunlukla dosya biçimini serbest metin olarak tanımlar. PS2 örneği, hepsinin ne anlama geldiğine dair kapsamlı yorumlar içeren değer türleri, ofsetler ve boyut tabloları verir. XentaxWiki'deki diğerleri gibi, pek çoğu, çok az yorum içeren veya hiç yorumlamayan değişken türlerini ve boyutlarını listeler.

Bu tür belgelerin nasıl yazılacağı konusunda rehberlik sağlayan bir kodlama stili rehberine benzer herhangi bir standart olup olmadığını soruyorum. Değilse, taklit etmem gereken iyi bilinen mükemmel bir örnek var mı? Değilse, en azından bazı yararlı tavsiyeler özetleyebilir mi?



Ha! Ben o duyguyu biliyorum. Baktığım bir biçim, aslında dosyayı yazan orijinal kaynak koduna sahiptim. Sorun değişkenlerin yapı tanımındakinden farklı bir sırada yazılması ve aralarına bazı ekstra şeyler serpilmesiydi. Ve ofsetler hakkındaki yorumlar yanlıştı. Bu soruya ilham veren şeyin bir parçası - BUNU YAPMAMAK için güçlü bir arzu.
Sopoforic

1
Belgelenmiş tersine mühendislik dosya türleriyle ilgili tek deneyimim wiibrew.org'dan. Doğru hatırlarsam, dosyayı bir struct. Oldukça iyi çalıştı.
MetaFight

1
Soruyu yanlış anlamış olabilirim ama EBNF gibi bir şey arıyorsunuz gibi görünüyor .

@MattFenwick: BNF bir dilin sözdizimini belirtmek içindir; peşindeyim değil. Ne tür bir dosya formatı demek istediğimi daha net olacak şekilde düzenleyeceğim.
Sopoforic

Yanıtlar:


4

İkili dosya, belirli kurallara göre mantıksal birimler halinde düzenlenmiş bir bit dizisidir . Bu kurallara genellikle gramer denir . Gramer dört tip (ayrılabilir Chomsky hiyerarşisi ) ve için bağlam serbest gramerlerin sen kimlerin kullanabileceği Backus Naur Form Genişletilmiş onun yorumunda Matt Fenwick tarafından sivri out gibi. Dosyada saklanan sekansın yorumlanması (veya semantiği), sözlü olarak veya bilgileri serileştiren ve serisini kaldıran iyi açıklamalı örnek programlarla açıklanabilir.

İkili dosya formatlarını belgeleme hakkında daha fazla bilgi için, örneğin ASN.1 standardını okumanızı öneririz .


Teknik olarak , çoğu yapılandırma dosyası sınırlı bir dile sahip oldukları için bağlamsız bir dile sahiptir. Pratik olarak, EBNF'de 'tüm 2 bayt dizelerin kümesini' (örneğin, yalnızca 16 öğeli bit alanı olan bir yapılandırma dosyası için) yazmak kimseye bir şey öğretmez. ASN.1 standardının işaretçisi, aldığım bir cevaba en yakın şeydir, ancak ASN.1'deki bir spesifikasyonun bilgisayarlar tarafından okunması gerektiği gibi görünüyor ve insanlar için belge yazmak için bilgi istedim. Ancak, gereksinimlerimle daha yakından eşleşen hiçbir şey ortaya çıkmazsa, kısaca bu yanıtı kabul edeceğim. Yardımınız için teşekkürler.
Sopoforic

2

Bu garip çünkü hızlı bir dosya formatı araması Wikipedia makalesi getirdi (Dosya formatları listesi) . Ayrıca birkaç Video Oyun Verisi biçimi içerir.

Dosya sistemlerini, çoğunlukla PC oyunlarını destekleyen sistemlerde video oyunları için yaygın olarak kullanılan veri dosyalarının listesi.

Ayrıca çok çeşitli Video Oyun Depolama Ortamı formatları içerir.

Bir oyunun ROM görüntüsü veya depolama ortamı, orijinal bir ROM aygıtından yedekleme amacıyla veya oyunu bir taklitçiyle oynatılabilir hale getirmek için sabit disk gibi harici bir belleğe kopyalandığında kullanılan en yaygın dosya adı uzantılarının listesi. Kartuş tabanlı yazılımlarda, platforma özgü uzantı kullanılmazsa, dosya adı ".rom" veya ".bin" uzantıları genellikle dosyanın bir ROM içeriğinin bir kopyasını içerdiğini açıklığa kavuşturmak için kullanılır. ROM, disk veya teyp görüntüleri genellikle tek bir dosya veya ROM'dan değil, yedekleme ortamındaki tek bir dosyada bulunan tüm dosya veya ROM yapısından oluşur.


Dosya formatlarını belgelemek için kabul edilmiş standartlar var mı?

Hiçbir yerde "resmi" bir standart yoktur. Dosya biçimleri bir şirket tarafından yapıldığından, şirket belgelerin biçimine karar verir.


2
Sanırım sorumu yanlış anladın. Tabii ki belgelenmiş birçok dosya formatı var - ben 1500'den fazla içeren XentaxWiki'yi menioned ettim. Ancak ilgilendiğim dosyalar genellikle belgelenmez - genellikle genel kapsayıcı biçimleri yerine dosyaları kaydetme veya yapılandırma gibi oyuna özgü şeyler. Benim durumum hiçbir belge mevcut değil ve ben biraz yazmak niyetinde - bu nasıl yapılacak?
Sopoforic

Aynı şekilde tüm diğer dosya formatları da belgelenmiştir.
Robert Harvey

4
@RobertHarvey: Kafa karıştırıcı, çatışan, yanlış ve eksik mi? Ciddi olarak, belirttiğim gibi, kullanımda birkaç farklı genel stile dikkat çektim. Belirli bir tarzın tercih edilip edilmeyeceğini bilmek için bu alandaki çalışmalara yeterince aşina değilim. Gördüğüm en büyük tek kaynak olan XentaxWiki'de olanlar neredeyse tamamen kapsayıcı formatları içindir, bu yüzden daha genel durumla eşleşmezler. Taklit etmek için rastgele bir örnek seçmenin yeterince iyi olacağını düşünürsem, tavsiye istemezdim.
Sopoforic

@Sopoforic: O zaman ne istediğini sorusunda daha açık olmalısın. Bize ciddi biçimde "Dosya biçimi için belgeleri nasıl yazarım?" Teknik yazımda bu konuya ayrılmış eğitim müfredatlarının tamamı vardır. Net, iyi yazılmış belgelere (kişisel standartlarınıza göre) sahip bir format bulun ve bu örneği kullanın. Hepsi saçmalık olamaz. İpucu: Kullanım örnekleri kraldır. Açıklamanın netliği ikinci sırada geliyor.
Robert Harvey

1
@RobertHarvey: Evet, kodunuzu nasıl yorumlayacağınız veya bir işlevi nasıl belgeleyeceğinizle ilgili sorular gibi, anlaşılabilir bir format belirtimi yazmak için bir 'stil rehberi' arıyorum. Eğer bir RFC yazma bilmek istiyorum, ben RFC 2223 bakabilirsiniz. Python kodunda kullanmak için hangi stil bilmek istiyorsanız, PEP 8 okuyabilirim. Ben Akıllı Yol Soruları Nasıl Sormak bilmek, ESR beni korudu. Dosya biçimi spesifikasyonları için benzer rehberlik var mı? Ya da iyi bilinen mükemmel bir örnek? Kendi yargılarımı kesinlikle kullanabilirim, ancak bir standart varsa, onu takip etmek mantıklı olur.
Sopoforic
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.