xml - ¿Utiliza CDATA para almacenar flujos binarios en bruto?
binary base64 (4)
El carácter Nul (''/ 0'' en C) no es válido en ningún lugar de XML, incluso como un escape (& # 0;).
En lugar de la sobrecarga con el guardado binario como Base64 , me preguntaba si podría almacenar directamente secuencias binarias de doble byte en archivos XML, usando CDATA, o comentándolo, o algo así.
Puede almacenarlo como CDATA, pero existe el riesgo de que algunas secuencias de bytes evalúen un XML válido que cierre la sección CDATA. Después de un rápido vistazo a http://www.w3.org/TR/2006/REC-xml-20060816/#sec-cdata-sect , parece que puedes tener cualquier secuencia de caracteres excepto "]]>". Eche un vistazo a lo que es un char XML válido también.
XML es un formato de texto plano, no lo use para almacenar datos binarios. Coloque los blobs binarios en archivos separados y agregue un elemento a su XML que haga referencia a estos archivos. Si desea almacenar todos los blobs binarios en un solo archivo, agregue un atributo de desplazamiento o algo así ...
No, no puede usar CDATA solo para inyectar datos binarios en un archivo XML.
En XML1.0 (porque XML 1.1 es más permisivo, pero no sobre los caracteres de control), las siguientes restricciones se aplican a los caracteres CDATA:
CData ::= (Char* - (Char* '']]>'' Char*))
Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
Eso significa que hay varios personajes ilegales, entre ellos están:
- Caracteres de control XML ilegales 0x00 a 0x20 excepto nuevas líneas, retornos de carro y pestañas
- secuencias ilegales UTF-8 como 0xFF o no canónico 0b1100000x 0b10xxxxxx
Además de eso, en un contenido de entidad estándar sin CDATA:
- El uso de "<" y ">" es ilegal
- "&" el uso está restringido (
é
está bien,&zajdalkdza;
no lo está)
Entonces CDATA es solo una forma de permitir "<", ">" y "&", restringiendo "]]>" en su lugar. No resuelve el problema de los caracteres XML, Unicode y UTF-8 ilegales.
Soluciones:
- Use Base64 con un 33% de gastos generales, pero un gran soporte en todos los lenguajes de programación y el hecho de que es un estándar
- Utilice BaseXML con implementaciones todavía limitadas pero solo un 20% de gastos generales
- No codifique datos binarios dentro de XML si es posible, transfiéralos por separado