यदि आपके पास XML प्रारूप पर नियंत्रण है, तो आपको समस्या को अंदर बाहर करना चाहिए। बाइनरी एक्सएमएल को संलग्न करने के बजाय आपको यह सोचना चाहिए कि एक दस्तावेज़ को कैसे संलग्न करना है जिसमें कई भाग हैं, जिनमें से एक में एक्सएमएल शामिल है।
इसका पारंपरिक समाधान एक संग्रह (जैसे टार) है। लेकिन अगर आप अपने संलग्न दस्तावेज़ को पाठ-आधारित प्रारूप में रखना चाहते हैं या यदि आपके पास फ़ाइल संग्रह पुस्तकालय में प्रवेश नहीं है, तो एक मानकीकृत योजना भी है जो ईमेल और HTTP में बहुत अधिक उपयोग की जाती है जो मल्टीपार्ट / * MIME के साथ है। सामग्री-अंतरण-एन्कोडिंग: बाइनरी ।
उदाहरण के लिए यदि आपके सर्वर HTTP के माध्यम से संवाद करते हैं और आप मल्टीपार्ट डॉक्यूमेंट भेजना चाहते हैं, तो प्राथमिक एक एक्सएमएल दस्तावेज है जो बाइनरी डेटा को संदर्भित करता है, एचटीटीपी संचार कुछ इस तरह दिख सकता है:
POST / HTTP/1.1
Content-Type: multipart/related; boundary="qd43hdi34udh34id344"
... other headers elided ...
--qd43hdi34udh34id344
Content-Type: application/xml
<myxml>
<data href="cid:data.bin"/>
</myxml>
--qd43hdi34udh34id344
Content-Id: <data.bin>
Content-type: application/octet-stream
Content-Transfer-Encoding: binary
... binary data ...
--qd43hdi34udh34id344--
जैसा कि ऊपर उदाहरण में, XML एक cid
यूआरआई योजना का उपयोग करके मल्टीप्लेयर में बाइनरी डेटा को संदर्भित करता है जो सामग्री-आईडी हेडर के लिए एक पहचानकर्ता है। इस योजना का ओवरहेड सिर्फ MIME हेडर होगा। एक समान योजना का उपयोग HTTP प्रतिक्रिया के लिए भी किया जा सकता है। निश्चित रूप से HTTP प्रोटोकॉल में, आपके पास मल्टीपार्ट डॉक्यूमेंट को अलग-अलग अनुरोध / प्रतिक्रिया में भेजने का विकल्प भी है।
यदि आप अपने डेटा को मल्टीपार्ट में लपेटने से बचना चाहते हैं तो डेटा का उपयोग करना होगा URI:
<myxml>
<data href="data:application/something;charset=utf-8;base64,dGVzdGRhdGE="/>
</myxml>
लेकिन इसका बेस 64 ओवरहेड है।