Pracuję nad narzędziem do edycji poziomu, które zapisuje dane w formacie XML.
Jest to idealne rozwiązanie podczas programowania, ponieważ wprowadzanie drobnych zmian w formacie danych jest bezbolesne i działa dobrze z danymi drzewiastymi.
Minusem jest jednak to, że pliki XML są raczej rozdęte, głównie z powodu powielania nazw znaczników i atrybutów. Również z powodu danych numerycznych zajmujących znacznie więcej miejsca niż przy użyciu rodzimych typów danych. Mały poziom może łatwo skończyć jako 1Mb +. Chcę znacznie zmniejszyć te rozmiary, zwłaszcza jeśli system ma być używany do gry na iPhonie lub innych urządzeniach o stosunkowo ograniczonej pamięci.
Optymalnym rozwiązaniem dla pamięci i wydajności byłoby przekonwertowanie XML na format binarny. Ale nie chcę tego robić. Chcę, aby format był dość elastyczny. XML bardzo ułatwia dodawanie nowych atrybutów do obiektów i nadawanie im wartości domyślnej, jeśli załadowana jest stara wersja danych. Chcę więc zachować hierarchię węzłów, z atrybutami jako parami nazwa-wartość.
Ale muszę przechowywać to w bardziej zwartym formacie - aby usunąć masowe powielanie nazw znaczników / atrybutów. Może także nadać atrybutom typy rodzime, więc na przykład dane zmiennoprzecinkowe są przechowywane jako 4 bajty na zmiennoprzecinkowe, a nie jako ciąg tekstowy.
Google / Wikipedia ujawniają, że „binarny XML” nie jest nowym problemem - został już rozwiązany wiele razy. Czy ktoś tu ma doświadczenie w zakresie istniejących systemów / standardów? - czy są idealne do użytku w grach - z bezpłatną, lekką i wieloplatformową biblioteką parsera / modułu ładującego (C / C ++)?
Czy powinienem sam odkryć to koło?
A może lepiej zapomnieć o ideale i po prostu kompresować swoje nieprzetworzone dane .xml (powinno się dobrze spakować z kompresją typu zip) i po prostu wziąć obciążenie pamięci / wydajność po załadowaniu?