2009-03-24 5 views
12

डब्ल्यू 3 का EXI (कुशल एक्सएमएल इंटरचेंज) मानकीकृत होने जा रहा है। यह "अंतिम बाइनरी मानक" होने का दावा करता है।EXI (कुशल एक्सएमएल इंटरचेंज) आ रहा है ... क्या एक्सएमएल एपीआई तैयार हैं?

प्रोसेसिंग और स्टोरेज के लिए ऑप्टिमाइज़ किए गए एक्सएमएल डेटा को स्टोर करने का एक मानक है, एक्सएमएल स्कीमा के साथ बंडल किया गया है (डेटा दृढ़ता से टाइप और दृढ़ता से संरचित किया गया है)। खैर, बहुत सारे दावा किए गए फायदे हैं। मैं प्रोसेसिंग और मेमोरी-दक्षता माप से सबसे ज्यादा प्रभावित हुआ था।

मैं खुद से पूछ रहा हूं, सभी स्थापित एक्सएमएल एपीआई के साथ क्या होने जा रहा है?

मेरे सवाल से संबंधित इस पैरा है:

4,2 मौजूदा XML प्रसंस्करण एपीआई

EXI XML इन्फोसेट का एक एन्कोडिंग है के रूप में, एक EXI कार्यान्वयन सामान्य रूप से प्रयुक्त एक्सएमएल के किसी भी समर्थन कर सकते हैं एक्सएमएल प्रोसेसिंग के लिए एपीआई, इसलिए मौजूदा एक्सएमएल एपीआई पर EXI का कोई तत्काल प्रभाव नहीं है। हालांकि, मौजूदा एक्सएमएल एपीआई का उपयोग करने के लिए यह भी आवश्यक है कि EXI दस्तावेज़ में दिखाई देने वाले सभी नाम और टेक्स्ट तारों में परिवर्तित हो जाएं। भविष्य में, अधिक दक्षता प्राप्त हो सकती है यदि उच्च परतें सीधे इन डेटा का उपयोग EXI दस्तावेज़ में दिखाई देने वाले टाइप किए गए मानों के रूप में कर सकती हैं। उदाहरण के लिए, यदि उच्च परत को टाइप किए गए डेटा की आवश्यकता होती है, तो इसके स्ट्रिंग फॉर्म के माध्यम से प्रदर्शन प्रदर्शन जुर्माना उत्पन्न हो सकता है, इसलिए टाइप किए गए डेटा का समर्थन करने वाला एक विस्तारित एपीआई EXI के साथ उपयोग किए जाने पर सीधे प्रदर्शन में सुधार कर सकता है।

से: http://www.w3.org/TR/exi-impacts/

मैं निम्नलिखित के रूप में यह समझ में: "! मौजूदा API के साथ EXI का उपयोग कोई प्रदर्शन लाभ (जब तक आप उन सब को फिर से लिखने)"

के जावा पारिस्थितिकी तंत्र लेते हैं एक उदाहरण के रूप में:

हमारे पास नवीनतम जेडीके 6 (प्रत्येक प्रमुख जेडीके रिलीज के साथ, उनमें से अधिक से अधिक जोड़े गए थे) के साथ बहुत सारे एक्सएमएल एपीआई हैं। जहां तक ​​मैं निर्णय ले सकता हूं, उनमें से अधिकतर (यदि नहीं सभी) मेमोरी डीओएम पेड़, या धारावाहिक ("टेक्स्टुअल") प्रतिनिधित्व को बदलने/प्रक्रिया/सत्यापन/एक्सएमएल डेटा का उपयोग कर रहे हैं।

आप क्या सोचते हैं, इन एपीआई के साथ एपीआई के साथ क्या होने जा रहा है?

आपकी राय के लिए सभी को धन्यवाद।

जो लोग EXI पता नहीं है के लिए: http://www.w3.org/XML/EXI/

+0

यह वास्तव में "राय" प्रश्नों के लिए जगह नहीं है, क्षमा करें। –

उत्तर

5

आप EXI का निष्पादन लाभ प्राप्त करने के लिए किसी भी नए एपीआई जरूरत नहीं है। डब्ल्यू 3 सी के सभी EXI परीक्षण और प्रदर्शन माप ने जेडीके में बनाए गए मानक SAX एपीआई का उपयोग किया है। नवीनतम परीक्षणों के लिए, http://www.w3.org/TR/exi-evaluation/#processing-results देखें। किसी भी विशेष एपीआई के बिना इन परीक्षणों में एक्सएम पार्सिंग एक्सएमएल की तुलना में औसतन 14.5 गुना तेजी से थी।

एक दिन, अगर लोगों को अपने सार्थक लगता है, हम कुछ टाइप किया एक्सएमएल एपीआई उभरने देख सकते हैं। यदि और जब ऐसा होता है, तो आपको EXI से बेहतर प्रदर्शन भी मिल जाएगा। हालांकि, डब्ल्यू 3 सी द्वारा रिपोर्ट किए गए उत्कृष्ट प्रदर्शन की आवश्यकता नहीं है।

2

मैं व्यक्तिगत रूप से नहीं बल्कि EXI बिल्कुल का उपयोग नहीं चाहते हैं। ऐसा लगता है कि यह एक्सएमएल के बारे में सभी घबराहट, बुरी चीजें ले रहा है, और उन्हें बाइनरी प्रारूप में क्रैम कर रहा है, जो मूल रूप से एक्सएमएल (सादा पाठ प्रारूप) की बचत अनुग्रह को हटा देता है।

ऐसा लगता है कि उद्योग की सामान्य प्रवृत्ति अधिक हल्के डेटा ट्रांसफर मॉडल (उदाहरण के लिए HTTP आरईएसटी) की ओर बढ़ रही है, और एसओएपी जैसे भारी वजन वाले मॉडल से दूर जा रही है। व्यक्तिगत रूप से, मैं बाइनरी एक्सएमएल के विचार के बारे में बहुत उत्साहित नहीं हूं।

कुछ भी जो "अंतिम बाइनरी मानक" होने का दावा करता है शायद गलत है।

+2

हाँ, मैं भी EXI के बिंदु को समझ नहीं पा रहा हूं। XML का उपयोग क्यों किया जाता है, भले ही यह फूला हुआ हो क्योंकि यह मानव पठनीय है। यदि आप इसे दूर लेते हैं तो एक्सएमएल के पास किसी अन्य मानक पर कुछ भी नहीं है। –

+3

डाउनवोट नहीं जा रहा है, लेकिन यह भी सहमत नहीं होगा। एक्सएमएल एक्सचेंज करने के लिए यह एक और अधिक प्रभावी तरीका है, जो मौजूदा प्रारूप की सभी लचीलापन को ओवर-द-वायर ब्लोट के बिना अनुमति देता है। –

+5

असल में, एक्सआई एक्सएमएल डेटा का प्रतिनिधित्व करने का एक वैकल्पिक तरीका है, जहां सादा पाठ एक्सएमएल पुराना संस्करण है। थोड़ा सा कोड बनाना आसान होगा जो EXI के माध्यम से एक एक्सएमएल दस्तावेज़ को एक सादे टेक्स्ट एक्सएमएल दस्तावेज़ में स्थानांतरित कर देता है, क्योंकि उसमें सटीक उसी डेटा को निहित किया गया है। जैसा कि मैंने इसे देखा, EXI एक्सएमएल - आकार और प्रसंस्करण गति के दो प्रमुख डाउनसाइड्स को हटा देता है - केवल अच्छे हिस्सों को छोड़ देता है। – fwielstra

4

आइए EXI को "XML के लिए बेहतर GZIP" के रूप में देखें। एफवाईआई, इसका एपीआई पर कोई प्रभाव नहीं पड़ता है क्योंकि आप अभी भी उन सभी का उपयोग कर सकते हैं (डोम, सैक्स, स्टैक्स, जेएक्सबी ...)। केवल EXI प्राप्त करने के लिए आपको एक स्ट्रीमराइटर प्राप्त करना होगा जो इसे लिखता है या स्ट्रीमर जो इसे पढ़ता है।

EXI निष्पादित करने का सबसे प्रभावी तरीका StAX है। लेकिन यह सच है कि EXI की वजह से नया एपीआई उत्पन्न हो सकता है। लेकिन किसने कहा कि डीओएम आधुनिक भाषाओं के लिए कुशल और अच्छी तरह से डिज़ाइन किया गया है ;-)

यदि आप बड़ी एक्सएमएल फाइलें प्रबंधित कर रहे हैं (मुझे उनमें से कुछ मिल गए हैं जो कुछ सैकड़ों एमबी हैं), तो आप निश्चित रूप से जानते हैं कि आपको EXI क्यों चाहिए: टन बचाने अंतरिक्ष की, बड़ी मात्रा में स्मृति और प्रसंस्करण समय की बचत।

यह कुछ भी नहीं HTTP सामग्री-एन्कोडिंग उद्देश्य से अलग है: आप इसे उपयोग करने के लिए आवश्यक नहीं हैं, बस यह है कि अगर दोनों दलों के यह समझ, यह विनिमय प्रदर्शन करने के लिए एक बहुत प्रभावी तरीका है।

वैसे, EXI एसओएपी ब्लोट के कारण HTTP आईएमएचओ पर किसी भी एक्सएमएल को सामग्री-एन्कोयर करने का पसंदीदा तरीका बन जाएगा ;-) जैसे ही एक्सआई ब्राउज़र पर बसता है, यह किसी भी एंडुसर को भी लाभ पहुंचा सकता है: तेज़ ट्रांसफर्ट, तेज़ विश्लेषण = एक ही मशीन के लिए कभी भी बेहतरीन अनुभव!

EXI स्ट्रिंग प्रतिनिधित्व विरोध नहीं करता है, केवल यह थोड़ा अलग बनाता है। ओह और वैसे, यूटीएफ करते समय (उदाहरण के लिए डिफ़ॉल्ट यूटीएफ 8 सोचें), आप पहले से ही 32 बिट्स यूनिकोड कोड पॉइंट के लिए "संपीड़न एन्कोडिंग" का उपयोग कर रहे हैं ... इसका मतलब है कि तार डेटा पर वास्तविक डेटा के समान नहीं है पहले से ही ;-)

2

EXI के साथ समस्या यह है कि यह अपने आवेदन कोड से निकाला किए जाने की आवश्यकता है। मैं एक मिडलवेयर उत्पाद पर काम करता हूं जहां एक्सएमएल की मानव पठनीय प्रकृति कुछ पहलुओं (लॉगिंग, गलती खोज आदि) में महत्वपूर्ण है लेकिन अन्य क्षेत्रों में बलिदान किया जा सकता है (आंतरिक अनुप्रयोगों के बीच संचार I/O लोड को सीमित करने के लिए)।

वर्तमान में हम आपूर्तिकर्ता वेब अनुप्रयोगों के बीच संचार या अपने ग्राहक, मिडलवेयर और के लिए करने के लिए साबुन का उपयोग करें। मैं इसे अन्य क्षेत्रों में मानव पठनीय एक्सएमएल बनाए रखने के दौरान, EXI के साथ प्रतिस्थापित करना चाहता हूं। EXI तक

  1. प्रतीक्षा मौजूदा सोप ढेर (एक्सिस/Saaj) में शामिल किया गया है, या
  2. अपने मौजूदा एक्सिस/Saaj सोप ग्राहक/आपूर्तिकर्ता कार्यान्वयन बदलें: आदेश EXI साथ सोप संचार को बदलने के लिए मैं या तो करने की जरूरत है मेरे अपने साबुन-ish EXI

के शीर्ष पर प्रोटोकॉल के साथ JSON और EXI के बीच तुलना उचित है, लेकिन दो के लिए उपयोग-मामले अलग हैं। जेएसओएन के लिए मेटा-डेटा के लिए कोई मानक नहीं है, जबकि एक्सएमएल के लिए एक्सएमएल-स्कीमा है। एक्सएमएल के साथ कई मानक निकाय हैं जो विशिष्ट उद्योगों के लिए डेटा एक्सचेंज के लिए स्कीमा को परिभाषित करते हैं। एसएमएपी, एक्सएमएल-हस्ताक्षर, एक्सएमएल-एन्क्रिप्शन, डब्ल्यूएस-सिक्योरिटी, एसएएमएल इत्यादि जैसे एक्सएमएल के शीर्ष पर बनाए गए प्रोटोकॉल/मानकों की एक श्रृंखला भी है जो यह JSON के लिए मौजूद नहीं है।

इसलिए, एक्सएमएल बी 2 बी संदेश एक्सचेंज और अन्य मामलों के लिए बेहतर विकल्प है जहां आपको उद्योग मानकों का उपयोग करके बाहरी सिस्टम के साथ एकीकृत करने की आवश्यकता है। EXI इस दुनिया में जेएसओएन के कुछ लाभ ला सकता है, लेकिन इसे व्यापक रूप से गोद लेने से पहले मौजूदा एक्सएमएल एपीआई में शामिल करने की आवश्यकता है।

2

मैं अभी EXI से निपट रहा हूं।

EXI को संसाधित करने के लिए कोई अच्छा सार्वभौमिक उपकरण नहीं है। एक बार जब आप EXI की गड़बड़ी में आ जाएंगे, तो आपको पता चलेगा कि बाइनरी स्ट्रीम में अनावश्यक डिलीमीटरों का एक गुच्छा है जो एक स्कीमा के साथ पूरी तरह से और पूरी तरह से अनावश्यक हैं। इसमें से कुछ विनोदी है।

यदि आप दोनों मान निर्दिष्ट किए गए हैं तो निम्नलिखित को EXI में एन्कोड किया जाएगा?

<xs:complexType name="example"> 
    <xs:sequence> 
    <xs:element name="bool1" type="xs:boolean" minOccurs="0" /> 
    <xs:element name="bool2" type="xs:boolean" minOccurs="0" /> 
    </xs:sequence> 
</xs:complexType> 

क्या आपको लगता है कि यह अधिकतम 4 बिट हो सकता है? इंगित करने के लिए 1 बिट इंगित करता है कि क्या बूल 1 परिभाषित किया गया है, और यह कि बूल 1 का मान, एक और बिट के बाद इंगित करता है कि क्या bool2 परिभाषित किया गया है, तो bool2 का मान?

अच्छा गॉली नहीं!

अच्छी तरह से मैं आपको लड़कों और लड़कियों को बताना चाहता हूं! यह कैसे यह वास्तव में आदेश या तो परिभाषित करने के लिए नहीं में

+---- A value of 0 means this element (bool1) is not specified, 
|  1 indicates it is specified 
|+--- A value of x means this element is undefined, 
||  0 means the bool is set to false, 1 is set to true 
||+-- A value of 0 means this element (bool2) is not specified, 
|||  1 indicates it is specified 
|||+- A value of x means this element is undefined 
|||| 0 means the bool is set to false, 1 is set to true 
|||| 
0x0x 4 0100   # neither bools are specified 
0x10 8 00100000  # bool1 is not specified, bool2 is set to false 
0x11 8 00101000  # bool1 is not specified, bool2 is set to true 
100x 9 000000010  # bool1 is set to false, bool2 is not specified 
110x 9 000010010  # bool1 is set to true, bool2 is not specified 

1010 13 0000000000000 # bool1 is set to false, bool2 is set to false 
1011 13 0000000001000 # bool1 is set to false, bool2 is set to true 
1110 13 0000100000000 # bool1 is set to true, bool2 is set to false 
1111 13 0000100001000 # bool1 is set to true, bool2 is set to true 
     ^  ^
     +-encoding--+ 

Which can be represented with this tree 

    0-0-0-0-0-0-0-0-0-0-0-0-0 (1010) 
    \ \ \  \ \ 
    | | |  | 1-0-0-0 (1011) 
    | | |  | 
    | | |  1-0 (100x) 
    | | | 
    | | 1-0-0-0-0-0-0-0-0 (1110) 
    | |  \ \ 
    | |   | 1-0-0-0 (1111) 
    | |   | 
    | |   1-0 (110x) 
    | | 
    | 1-0-0-0-0-0 (0x10) 
    | \ 
    |  1-0-0-0 (0x11) 
    | 
    1-0-0 (0x0x) 

4 बिट्स की एक न्यूनतम, न्यूनतम एन्कोड किया है। अब मैं थोड़ा अनुचित हूं, क्योंकि मैं delimiters समेत हूँ - delimiters जो पूरी तरह से अनावश्यक हैं।

मैं समझता हूं कि यह अब कैसे काम करता है। यहाँ कल्पना है:

https://www.w3.org/TR/exi/

मज़ा कि पढ़ने! यह मेरे लिए मज़ा का एक बड़ा सौदा था !!!! @@ ##! @

अब यह सिर्फ एक स्कीमा के साथ है, और EXI spec विशेष रूप से कहता है कि आप अभी भी XML को एन्कोड कर सकते हैं जो स्कीमा के अनुरूप नहीं है । जो उल्लसित है क्योंकि यह छोटे छोटे वेब उपकरणों के लिए माना जाता है। अप्रत्याशित डेटा के साथ आप क्या करते हैं कि आपके पास एम्बेडेड डिवाइस में हैंडलिंग के लिए कोई प्रावधान नहीं है?

क्यों, आप बस निश्चित रूप से मर जाते हैं। ऐसी किसी चीज के लिए कोई वसूली नहीं है जिसकी आप अपेक्षा नहीं करते हैं। ऐसा नहीं है कि इन चीजों में एक स्क्रीन है, मैं भाग्यशाली हूं अगर मैं इसे सीरियल पोर्ट के माध्यम से लॉग इन कर सकता हूं।

मैंने 4 अलग-अलग एक्सएसडी जेनरेटर/पार्सर्स/एक्सएमएल जनरेटर का उपयोग किया है। उनमें से 3 स्कीमा पर चकित हैं मुझे उपयोग करना है। सी और सी ++ के लिए डेटा मार्शलिंग (याद रखें कि यह बहुत कम स्मृति और सीपीयू पावर के साथ EMBEDDED सिस्टम के लिए है) भयानक हैं।

एक्सएसडी मूल रूप से एक संरचना या वर्ग वास्तुकला का वर्णन करता है और ऐसा कोई भी उपकरण नहीं है जिसे मैं कक्षाएं बनाउंगा। ऊपर दिए गए एक्सएसडी उदाहरण को 4 बूल के साथ एक संरचना बनाना चाहिए, 2 बूल मूल्य हैं, और 2 बूल इंगित करते हैं कि उन्हें परिभाषित किया गया है।

लेकिन क्या यह अस्तित्व में है? खैर बिल्ली नहीं

मुझे दस्तावेज़ों का वर्णन करने के लिए एक्सएमएल पसंद है। वास्तव में मैं करता हूं - लेकिन यहां मैं एक्सएमएल के बारे में नफरत करता हूं - व्यापक रूप से अपनाए गए मानक के लिए, इसके लिए उपलब्ध टूल्स बिल्कुल भयानक हैं। स्कीमा को पढ़ना मुश्किल है जब यह कई नामस्थानों और दस्तावेजों में फैलता है।

शेख़ी शेख़ी, आवेश HUF

केवल कारण है कि हम इस का उपयोग कर रहे कुछ मानक समिति यह पर जोर दिया है। यह क्या किया गया है उन कंपनियों के एक छोटे समूह के लिए एक एकाधिकार बनाया गया है जो पहले ही इसे लागू कर चुका है, यही एकमात्र उद्देश्य है।

EXI व्यापक रूप से अपनाया जाने वाला मानक नहीं है, एक्सएमएल संख्यात्मक डेटा के लिए एक खराब encapsulator है, और यह इसे लागू करने के लिए एक दर्द है और इसके लिए कोई सभ्य उपकरण नहीं हैं। EXIP संस्करण 5.0 पर है - जो भी काम करता है वह खुला स्रोत है जावा में है - कम से कम मेरे पास यह है।

मेरे काम के क्षेत्र के लिए, EXI सिर्फ एक खराब डिजाइन निर्णय है। मैंने विभिन्न एम्बेडेड सिस्टम पर संचार संचार प्रोटोकॉल पर काम किया है। मैंने डॉक्सिस पर काम किया, जो सभी आधुनिक केबल मोडेम का उपयोग करते हैं - वे एक सरल, और एक्स्टेंसिबल, टाइप/लम्बाई/वैल्यू प्रोटोकॉल का उपयोग अपरिचित प्रकार से निपटने के प्रावधानों के साथ करते हैं - यही कारण है कि लंबाई हमेशा शामिल होती है। यह आसान है, पूरे ढेर को लागू करने में सचमुच दिन लगते हैं।

EXI कोड कोड करना बहुत मुश्किल है, इसके लिए कोई सभ्य प्रोसेसर नहीं है, और सबसे बुरी बात यह है कि सभी प्रोसेसर जो मैंने पाया है कि वास्तव में इसके साथ अच्छी तरह से काम करते हैं, बस इसे EXI < -> XML से बदलें पूरी तरह से बेकार।

मैंने अपना स्वयं का एक्सएसडी पार्सर लिखने का सहारा लिया है, जिसका अर्थ है कि मुझे इस डिजाइन के उन हिस्सों के लिए कम से कम संपूर्ण एक्सएमएल विनिर्देश समझना है जो इसका उपयोग करते हैं - और यह व्यापक है। किसी भी उचित कल्पना के साथ मुझे 2 सप्ताह तक क्या लेना पड़ा, मुझे 10 ले गए। मेरी दुनिया में कोई भी इसका उपयोग नहीं करेगा जब तक कि यह उनके गले को फेंक नहीं देता है और उन्हें नहीं करना चाहिए, यह एक गोल छेद के लिए एक वर्ग चरम है।