it-swarm.com.ru

Лучший алгоритм сжатия для XML?

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

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

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

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

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

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

Правка: «Шифрование» вещь была опечатка; это должно быть «сжатие».

29
Aethex

Существует стандарт W3 (еще не выпущенный) с именем EXI (эффективный обмен XML) .

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

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

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

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

30
ivan_ivanovich_ivanoff

Да, * .Zip лучший на практике. Gory deets, содержащийся в этой статье USENIX, показывает, что «оптимальные» компрессоры не стоят вычислительных затрат и специфичные для области компрессоры не побеждают Zip [в среднем].

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

5
sendbits

Другой альтернативой «сжатию» XML будет FI (Fast Infoset).

XML, хранящийся как FI, будет содержать каждый тег и атрибут только Once, Все остальные вхождения ссылаются на первый, Таким образом, экономия места.

Увидеть:

Очень хорошая статья на Java.Sun.com и, конечно,
запись в Википедии

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

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

4
ivan_ivanovich_ivanoff

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

2
Mizipzor

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

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

1
Pete Kirkham

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

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

0
user1496062

Ваши альтернативы:

  • Используйте веб-сервер, который поддерживает сжатие GZIP. Это будет автоматически сжимать все исходящие HTML. Есть небольшой штраф процессора.
  • Используйте что-то вроде JSON. Это резко уменьшит размер сообщения
  • Есть также двоичный XML, но я сам не пробовал.
0
Zepplock

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

0
Jack David