Is OOXML Artifically Complex?
OOXML: не злонамерен, а просто ленив
LibreOffice обвинил Microsoft в «искусственном усложнении» OOXML, чтобы никто не смог повторить формат. На деле всё проще: спецификация громоздка не из-за злого умысла, а потому что Microsoft писала её под себя, не думая о других.
Что внутри .docx
Фраза «To be, or not to be…» превращается в:
<w:p>
<w:r>
<w:rPr><w:b/></w:rPr>
<w:t>To be</w:t>
</w:r>
<w:r>
<w:t>, or not to be…</w:t>
</w:r>
</w:p>
Плюс десяток служебных атрибутов (rsid, paraId и т. д.), нужных только Word для совместного редактирования и отката изменений. Они не несут смысла, но обязательны, иначе файл считается битым.
Почему так вышло
- Наследие. OOXML — прямой XML-перепис старых бинарников. Все костыли перекочевали.
- Своя реализация прежде всего. Упрощать спецификацию никто не стал: главное, чтобы Word сам себя читал.
- Стандартизация «на скорую руку». 6 000+ страниц, куча неоднозначностей, «реализация Microsoft» считается эталоном.
Итог
OOXML — открытый формат де-юре, но закрытый де-факто. Писать совместимый парсер приходится подстраиваться под поведение Word, а не под текст спецификации. Это не саботаж, а обычная инерция монополиста: упростить никому не выгодно, а усложнять — дешево.