Pregunta

En lugar de la sobrecarga con guardando el binario como Base64 , me preguntaba si usted ¿podría almacenar directamente secuencias binarias de doble byte en archivos XML, utilizando CDATA, o comentando, o algo así?

¿Fue útil?

Solución

Puede almacenarlo como CDATA, pero existe el riesgo de que algunas secuencias de bytes se evalúen como 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 puede tener cualquier secuencia de caracteres excepto "]] > " ;. Eche un vistazo a qué es un carácter XML válido también.

Otros consejos

El carácter Nul ('\ 0' en C) no es válido en ninguna parte de XML, incluso como un escape (& amp; # 0;).

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 se trata de 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 caracteres 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 el no canónico 0b1100000x 0b10xxxxxx

Además de eso, en un contenido de entidad estándar sin CDATA:

  • " < " y " > " su uso es ilegal
  • " & amp; " el uso está restringido (&eacute; está bien, &zajdalkdza; no lo está)

Entonces CDATA es solo una forma de permitir " < " ;, " > " y " & amp; " ;, restringiendo "]] > " en lugar. No resuelve el problema ilegal de caracteres XML, Unicode y UTF-8, que es el problema principal.

Soluciones:

  1. 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
  2. Use BaseXML con implementaciones aún limitadas pero solo un 20% de gastos generales
  3. No codifique datos binarios dentro de XML si es posible, transfiéralos por separado

XML es un formato de texto sin formato; 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í ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top