2009-07-04 14 views
26

मुझे मुश्किल से संपीड़न के बारे में कुछ पता है, इसलिए मेरे साथ भालू (यह शायद एक बेवकूफ और दर्दनाक स्पष्ट सवाल है)।एक्सएमएल के लिए सर्वश्रेष्ठ संपीड़न एल्गोरिदम?

तो मान लें कि मेरे पास कुछ टैग के साथ एक एक्सएमएल फ़ाइल है।

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

अब कहें कि मेरे पास कई एक्सएमएल फाइलों में कई विशेषताओं के साथ इन बहुत लंबे टैग का एक गुच्छा है। मुझे उन्हें सबसे छोटे आकार में संपीड़ित करने की आवश्यकता है। सबसे अच्छा तरीका एक्सएमएल-विशिष्ट एल्गोरिदम का उपयोग करना होगा जो व्यक्तिगत टैग छद्म शब्द जैसे vlt1 या vlt2 असाइन करता है। हालांकि, यह एक तरह से 'खुला' नहीं होगा जैसा कि मैं जाने की कोशिश कर रहा हूं, और मैं डेफलेट या एलजेड जैसे एक सामान्य एल्गोरिदम का उपयोग करना चाहता हूं। यह भी मदद करता है अगर संग्रह एक .zip फ़ाइल था।

चूंकि मैं सादे पाठ (छवियों जैसी कोई बाइनरी फाइल) से निपट रहा हूं, मुझे एक एल्गोरिदम चाहिए जो सादा पाठ के अनुरूप हो। कौन सा सबसे छोटा फ़ाइल आकार उत्पन्न करता है (लापरवाह एल्गोरिदम को प्राथमिकता दी जाती है)?

वैसे, परिदृश्य यह है: मैं दस्तावेजों के लिए मानक बना रहा हूं, जैसे ओडीएफ या एमएस ऑफिस एक्सएमएल, जिसमें एक .zip में पैक की गई एक्सएमएल फाइलें होती हैं।

संपादित करें: 'एन्क्रिप्शन' चीज एक टाइपो थी; यह अवे बेन 'संपीड़न' होना चाहिए।

+4

यह एन्क्रिप्शन से कैसे संबंधित है? और सरल जवाब ज़िप को संपीड़न करने देना है: यह व्यापक रूप से उपलब्ध है, पाठ पर एक सभ्य नौकरी करता है, और "सबसे छोटा आकार संभव" खोजने के लिए समय के लायक नहीं है। – kdgregory

+0

क्यों ओपनएक्सएमएल का उपयोग न करें? यह मूल रूप से आप चाहते हैं :)। सुनिश्चित नहीं है कि यह सबसे अच्छा संपीड़न है, लेकिन मुझे अब तक यह पसंद है। और यदि आप इसे पहले से नहीं जानते हैं, तो OpenXML मूल रूप से एक ज़िप फ़ाइल है, इसलिए आप अपने Office 2007 दस्तावेज़ों को .zip फ़ाइल (यानी some.docx को something.zip) के रूप में नामित कर सकते हैं और इसे ज़िप फ़ाइल के रूप में खोल सकते हैं। अंदर मूल रूप से एक्सएमएल का गुच्छा है। –

+0

आप बस ज़िप फ़ाइल में एक्सएमएल फाइलों का एक गुच्छा का उपयोग कर सकते हैं, और जो भी फाइल एक्सटेंशन आप चाहते हैं।क्यों llongtagnumbers ??? –

उत्तर

29

EXI (Efficient XML Interchange) नामक एक डब्ल्यू 3 (अभी तक जारी नहीं) मानक है।

भविष्य में XML डेटा को संपीड़ित करने के लिए डेटा प्रारूप बनना चाहिए (अंतिम आवश्यक बाइनरी प्रारूप होने का दावा किया गया है)। एक्सएमएल के लिए अनुकूलित किया जा रहा है, यह एक्सएमएल को किसी भी पारंपरिक संपीड़न एल्गोरिदम की तुलना में अधिक प्रभावी तरीके से संपीड़ित करता है।

EXI के साथ, आप फ्लाई पर संपीड़ित XML डेटा पर काम कर सकते हैं (इसे असम्पीडित करने या इसे फिर से संपीड़ित करने की आवश्यकता के बिना)।

EXI = (XML + XMLSchema) बाइनरी के रूप में।

और यहाँ आप मुक्त स्रोत कार्यान्वयन के साथ जाना (यदि वह पहले स्थिर है पता नहीं है):
Exificient

+4

उह .. एक्सएमएल डिजाइन किया गया था क्योंकि "बाइनरी फाइलें बुरी हैं"। और अब हमारे पास इन EXI सामान हैं। यह सबूत एक्सएमएल सिर्फ पहिया को पुनर्निर्मित कर रहा था। क्या हमें एएसएन .1 का उपयोग नहीं करना चाहिए? –

+6

एएसएन.1 के कुछ घटिया (या कुछ) EXI के लिए एक उम्मीदवार थे। बाइनरी फाइल ** ** बुराई हैं। EXI सामान्य ज्ञान में एक बाइनरी फ़ाइल नहीं है। आपको इस बाइनरी फ़ाइल को पढ़ने/लिखने के लिए अपने कार्यान्वयन को लिखने की आवश्यकता नहीं है, न ही आपको अपनी संरचना और प्रकार प्रणाली को परिभाषित करना होगा। एक्सएमएल + एक्सएमएलशेमा द्वारा आपके लिए किया गया सभी। –

+3

2011-03-10 के बाद से, EXI अब एक डब्ल्यू 3 सी सिफारिश है: http://www.w3.org/TR/exi/ –

2

ऐसा लगता है कि आप एन्क्रिप्शन के बजाय संपीड़न में अधिक रुचि रखते हैं। क्या यह मामला है? यदि ऐसा है, तो this एक दिलचस्प पढ़ा सकता है भले ही एक सटीक समाधान न हो। ज़िप, bzip, gzip, RAR, 7zip अच्छे हैं -

0

मुझे आशा है कि मैं सही ढंग से समझ में आ आप क्या करने की जरूरत ... पहली बात मैं कहना चाहते हैं कोई अच्छा या बुरा संपीड़न पाठ के लिए algorithmss देखते हैं कि है को कम करने के लिए पर्याप्त है जो कम एन्टीपी है - यानी छोटे चरित्र सेट वाली बड़ी फ़ाइल। यदि मुझे उनका उपयोग करना होगा तो मैं अपनी पहली पसंद पर 7zip का चयन करूंगा, रार एक सेकंड और तीसरे के रूप में ज़िप। लेकिन अंतर बहुत छोटा है इसलिए आपको आपके लिए जो भी आसान हो, कोशिश करनी चाहिए। दूसरा - मैं समझ नहीं पाया कि आप एन्क्रिप्ट करने की कोशिश कर रहे हैं। मान लीजिए कि यह एक एक्सएमएल फ़ाइल है तो आपको इसे अपने पसंदीदा संपीड़न एल्गोरिदम का उपयोग करके इसे संपीड़ित करना चाहिए और फिर इसे अपने पसंदीदा एन्क्रिप्शन एल्गोरिदम का उपयोग करके एन्क्रिप्ट करना चाहिए। ज्यादातर मामलों में पीजीपी में उदाहरण के लिए लागू कोई भी आधुनिक एल्गोरिदम कुछ भी के लिए पर्याप्त सुरक्षित होगा। उम्मीद है कि मदद करता है।

+0

एक उत्तर में एक हस्ताक्षर! यह नया है;) –

0

आपका विकल्प हैं:

  • एक वेबसर्वर gzip संपीड़न का समर्थन करता है कि का उपयोग करें। यह सभी आउटगोइंग एचटीएमएल ऑटो संपीड़ित करेगा। हालांकि एक छोटा सी सीपीयू जुर्माना है।
  • JSON की तरह कुछ उपयोग करें। यह संदेश
  • के आकार को बहुत कम कर देगा। एक बाइनरी एक्सएमएल भी है लेकिन मैंने इसे स्वयं नहीं किया है।
+0

JSON वास्तव में xml से छोटा नहीं है हालांकि –

1

वैसे, परिदृश्य यह है: मैं दस्तावेज़ों के लिए एक मानक, ODF या एमएस ऑफ़िस एक्सएमएल की तरह, कि एक्सएमएल फाइल होते हैं, एक ज़िप में पैक बनाने रहा हूँ।

तो मैं सुझाव दूंगा कि आप .zip संपीड़न का उपयोग करें, या आपके उपयोगकर्ता भ्रमित हो जाएंगे।

+0

हां, साथ ही ज़िप को संपीड़ित करने वाला कोई भी संपीड़न नहीं देगा। –

4

एक अन्य विकल्प "सेक" करने के लिए XML FI (फास्ट इन्फोसेट) होगा।

एक्सएमएल, FI के रूप में जमा है, हर टैग होते हैं और विशेषता केवल एक बार, सभी अन्य घटनाओं पहले एक संदर्भित कर रहे हैं, इस प्रकार अंतरिक्ष की बचत होगी।

देखें:

Very good article on java.sun.com, और निश्चित रूप
the Wikipedia entry

अंतर देखने के संपीड़न बिंदु से EXI करने की है कि फास्ट इन्फोसेट (संरचित प्लेन जा रहा है) कम कुशल है।

अन्य महत्वपूर्ण अंतर है: एफआई कई कार्यान्वयन के साथ परिपक्व मानक है।
उनमें से एक: Fast Infoset Project @ dev.java.net

+0

हमें शायद उल्लेख करना चाहिए कि एफआई पर जीईआई जीतने का कारण यह है कि, जब एक स्कीमा होती है, इसमें एक बार के बजाय टैग और गुण शून्य बार हो सकते हैं। –

4

हाँ, * .zip अभ्यास में सबसे अच्छा है। this USENIX paper में शामिल गोरी डीट्स दर्शाते हैं कि "इष्टतम" कंप्रेसर कम्प्यूटेशनल लागत के लायक नहीं हैं & डोमेन-विशिष्ट कंप्रेसर ज़िप [औसत पर] को हरा नहीं देते हैं।

अस्वीकरण: मैंने उस पेपर को लिखा है, जिसे Google के अनुसार 60+ बार उद्धृत किया गया है।

0

डिफ़ॉल्ट में से कोई भी डिफ़ॉल्ट एक्सएमएल के लिए आदर्श नहीं है लेकिन आपको अभी भी अच्छे मूल्य मिलेंगे क्योंकि बहुत सारे दोहराने योग्य हैं।

क्योंकि एक्सएमएल बहुत सारे दोहराने (टैग्स>>) का उपयोग करता है, तो आप चाहते हैं कि ये कुछ हद तक कम हों, इसलिए हफमैन एन्कोडिंग के बजाय अंकगणित के कुछ रूप। तो सिद्धांत में रार/7zip काफी बेहतर होना चाहिए .. ये एल्गोरिदम उच्च संपीड़न प्रदान करते हैं, इसलिए धीमे होते हैं। आदर्श रूप से आप एक अंकगणितीय एन्कोडर के साथ एक सरल संपीड़न चाहते हैं (जो एक्सएमएल के लिए तेज़ होगा और उच्च संपीड़न देगा)।

संबंधित मुद्दे