XML 형식을 제어 할 수 있다면 문제를 완전히 해결해야합니다. 바이너리 XML을 첨부하는 대신 여러 부분이 포함 된 문서를 묶는 방법에 대해 생각해야합니다. 그중 하나에는 XML이 포함되어 있습니다.
이에 대한 전통적인 해결책은 아카이브 (예 : tar)입니다. 그러나 포함하는 문서를 텍스트 기반 형식으로 유지하고 싶거나 파일 보관 라이브러리에 액세스 할 수없는 경우에는 multipart / * MIME 와 함께 이메일 및 HTTP에서 많이 사용되는 표준화 된 체계도 있습니다. 콘텐츠 전송 인코딩 : 바이너리 .
예를 들어 서버가 HTTP를 통해 통신하고 멀티 파트 문서를 보내려는 경우 기본이 이진 데이터를 참조하는 XML 문서 인 경우 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
은 Content-Id 헤더에 대한 식별자 인 URI 스킴을 사용하여 엔 클로징 멀티 파트의 이진 데이터를 참조합니다 . 이 체계의 오버 헤드는 MIME 헤더뿐입니다. HTTP 응답에도 유사한 체계를 사용할 수 있습니다. 물론 HTTP 프로토콜에서는 멀티 파트 문서를 별도의 요청 / 응답으로 보내는 옵션도 있습니다.
다중 부분에서 데이터를 래핑하지 않으려면 데이터 URI를 사용하는 것입니다.
<myxml>
<data href="data:application/something;charset=utf-8;base64,dGVzdGRhdGE="/>
</myxml>
그러나 이것은 base64 오버 헤드가 있습니다.