Вопрос по text, xml, algorithm, zip, compression – Лучший алгоритм сжатия для XML?

29

Я почти ничего не знаю о сжатии, так что терпите меня (это, вероятно, глупый и болезненно очевидный вопрос).

Допустим, у меня есть XML-файл с несколькими тегами.

<verylongtagnumberone>
  <verylongtagnumbertwo>
    text
  </verylongtagnumbertwo>
</verylongtagnumberone>

Теперь предположим, что у меня есть несколько этих очень длинных тегов со многими атрибутами в моих нескольких XML-файлах. Мне нужно сжать их до минимально возможного размера. Лучшим способом было бы использовать специфичный для XML алгоритм, который присваивает отдельные теги псевдонимам, таким как vlt1 или vlt2. Однако это не будет "открытым". пути, как я пытаюсь пойти, и я хочу использовать общий алгоритм, как DEFLATE или LZ. Также помогает, если архив был .zip-файлом.

Поскольку я имею дело с обычным текстом (без двоичных файлов, таких как изображения), мне нравится алгоритм, который подходит для простого текста. Какой из них дает наименьший размер файла (предпочтительны алгоритмы без потерь)?

Кстати, сценарий таков: я создаю стандарт для документов, таких как ODF или MS Office XML, которые содержат файлы XML, упакованные в ZIP-архив.

РЕДАКТИРОВАТЬ: «шифрование»; вещь была опечаткой; он должен иметь «сжатие».

& APOS; пр & APOS; и «бен»; опечатки. & APOS; шифрование & APOS; вместо «сжатия» это ошибка MrFox
Как это связано с шифрованием? И простой ответ заключается в том, чтобы позволить ZIP выполнять сжатие: он широко доступен, хорошо выполняет работу с текстом и не стоит времени, чтобы найти «наименьший возможный размер». kdgregory
Почему бы просто не использовать OpenXML? Это в основном то, что вы хотите :). Не уверен, что это лучшее сжатие, но мне оно пока нравится. И если вы этого еще не знаете, OpenXML - это, по сути, zip-файл, поэтому вы можете переименовать ваши документы Office 2007 в файл .zip (то есть что-то с .docx в нечто .zip) и открыть его как zip-файл. Внутри в основном куча XML. Jimmy Chandra
Вы можете просто использовать несколько файлов XML в zip-файле и любое расширение файла, которое вы хотите. Почему очень длинные цифры ??? Osama Al-Maadeed

Ваш Ответ

8   ответов
2

вы больше заинтересованы в сжатии, чем в шифровании. Это тот случай? Если так,этот может оказаться интересным читать, даже если это не точное решение.

30

EXI (Efficient XML Interchange).

Должен стать форматом данных для сжатия данных XML в будущем (заявлен как последний необходимый двоичный формат). Будучи оптимизированным для XML, он сжимает XML более эффективно, чем любой обычный алгоритм сжатия.

С EXI вы можете работать со сжатыми данными XML на лету (без необходимости распаковывать или повторно сжимать их).

EXI = (XML + XMLSchema) как двоичный файл.

И здесь вы приступаете к реализации с открытым исходным кодом (не знаете, является ли она уже стабильной):
Exificient

Тьфу ... XML был разработан, потому что "двоичные файлы - это зло". И теперь у нас есть эти EXI вещи. Это доказательство XML было просто изобретением колеса. Разве мы не использовали ASN.1?
Некоторые некачественные (или что-то) из ASN.1 были кандидатом на EXI. Двоичные файлыare злой. EXI - это не двоичный файл в здравом смысле. Вам не нужно писать собственную реализацию для чтения / записи этого двоичного файла, а также вам не нужно определять собственную структуру и систему типов. Все сделано для вас с помощью XML + XmlSchema.
С 2011-03-10 EXI теперь является рекомендацией W3C:w3.org/TR/exi
4

XML, хранящийся как FI, будет содержать только каждый тег и атрибутonce, all other occurrences are referencing the first one, thus saving space.

Увидеть:

Very good article on java.sun.comи конечно
the Wikipedia entry

Разница с EXI с точки зрения сжатия заключается в том, что Fast Infoset (будучи структурированным открытым текстом) менее эффективен.

Другое важное отличие является: FI является зрелым стандартом со многими реализациями.
Один из них:Fast Infoset Project @ dev.java.net

Вероятно, мы должны упомянуть, что причина, по которой EXI победил FI, заключается в том, что, когда существует схема, она может содержать теги и атрибуты НУЛЕВЫЕ раз вместо одного раза.
0

Use a webserver that supports gzip compression. It'll auto compress all outgoing html. There's a small CPU penalty though. Use something like JSON. It'll drastically reduce the size of the message There's also a binary XML but I have not tried it myself.
JSON на самом деле не меньше, чем XML
5

эта бумага USENIX показывая, что "оптимально" компрессоры не стоят вычислительных затрат & amp; доменно-специфические компрессоры не бьют zip [в среднем].

Отказ от ответственности: я написал ту статью, которая была процитирована более 60 раз в соответствии с Google.

0

но вы все равно получите хорошие значения, так как существует много повторяемых значений.

Поскольку XML использует много повторов (тегов. & Gt;), вы хотите, чтобы они были меньше, чем бит, поэтому некоторая форма арифметики, а не кодирования Хаффмана. Так что теоретически rar / 7zip должен быть значительно лучше .. эти алгоритмы обеспечивают высокую степень сжатия, поэтому работают медленнее. В идеале вам нужно простое сжатие с арифметическим кодером (которое для XML будет быстрым и даст высокую степень сжатия).

0

Первое, что я хотел бы сказать, это то, что нет хорошего или плохого сжатия алгоритмы для текста - zip, bzip, gzip, rar, 7zip достаточно хороши для сжатия все, что имеет низкую энтропию - то есть большой файл с небольшим набором символов. Если бы мне пришлось их использовать, я бы выбрал 7zip по своему выбору, rar as второй и почтовый индекс как третий. Но разница очень мала, поэтому вы должны попробовать что проще для вас. Второе - я не мог понять, что вы пытаетесь зашифровать. Предположим, что это XML-файл, затем вы должны сначала сжать его, используя ваш любимый алгоритм сжатия, а затем зашифровать его с помощью вашего любимого шифрования алгоритм. В большинстве случаев любой современный алгоритм реализован, например, в PGP будет достаточно безопасным для всего. Надеюсь, это поможет.

Подпись в ответе! Это новое;)
1

I am creating a standard for documents, like ODF or MS Office XML, that contain XML files, packaged in a .zip.

тогда я предлагаю вам использовать сжатие .zip, иначе ваши пользователи запутаются.

Да, плюс сжатие по протоколу XML не приведет к дальнейшему сжатию.

Похожие вопросы