Pregunta

Escribí una herramienta sencilla para generar un conjunto de datos XML DBUnit utilizando consultas que ingresa el usuario.Quiero incluir cada consulta ingresada en el XML como un comentario, pero la API DBUnit para generar el archivo XML no admite insertar el comentario donde me gustaría (arriba de los datos que genera), por lo que estoy recurriendo a poner el comente con TODAS las consultas, ya sea en la parte superior o inferior.

Entonces mi pregunta:¿Es XML válido para colocarlo en cualquier ubicación?Por ejemplo, encima de la Declaración XML:

<!-- Queries used: ... -->
<?xml version='1.0' encoding='UTF-8'?>
<dataset>
  ...
</dataset>

O debajo del nodo raíz:

<?xml version='1.0' encoding='UTF-8'?>
<dataset>
  ...
</dataset>
<!-- Queries used: ... -->

Inicialmente planeo probar la Declaración XML anterior, pero tengo dudas sobre si es XML válido, a pesar de la afirmación de Wikipedia:

Los comentarios se pueden colocar en cualquier parte del árbol, incluso en el texto si el contenido del elemento es texto o #PCDATA.

Planeo volver a publicar si esto funciona, pero sería bueno saber si es un estándar XML oficial.

ACTUALIZAR: Ver mi respuesta a continuación por el resultado de mi prueba.

¿Fue útil?

Solución

De acuerdo con la especificación XML, un documento XML bien formado es:

document ::= prolog element Misc*

dónde prolog es

prolog ::= XMLDecl? Misc* (doctypedecl Misc*)?

y Misc es

Misc ::= Comment | PI | S

y

XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'

lo que significa que, si quieres tener comentarios en la parte superior, no puedes tener una declaración de tipo XML.

Sin embargo, puede tener comentarios después de la declaración y fuera del elemento del documento, ya sea en la parte superior o inferior del documento, porque Misc* puede contener comentarios.

La especificación coincide con Wikipedia en los comentarios:

2.5 Comentarios

[Definición:Los comentarios pueden aparecer en cualquier parte de un documento fuera de otras marcas;además, podrán aparecer dentro de la declaración de tipo de documento en los lugares permitidos por la gramática.No forman parte de los datos de carácter del documento;un procesador XML PUEDE, pero no es necesario, hacer posible que una aplicación recupere el texto de los comentarios.Por compatibilidad, la cadena "--" (guión doble) NO DEBE aparecer dentro de los comentarios.] Las referencias a entidades paramétricas NO DEBEN reconocerse dentro de los comentarios.

Todo esto en conjunto significa que puedes poner comentarios en cualquier lugar que no esté dentro de otro marcado, excepto que tú no puede tener una declaración XML si comienza con un comentario.

Sin embargo, aunque en teoría la teoría concuerda con la práctica, en la práctica no es así, por lo que tendría curiosidad por ver cómo funciona su experimento.

Otros consejos

El primer ejemplo no es XML válido, la declaración tiene que ser lo primero en un documento XML.

Pero además de eso, los comentarios pueden ir a cualquier otro lado.

Corrigiendo su primer ejemplo:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Queries used: ... -->
<dataset>
</dataset>

La instrucción de procesamiento debe ser lo primero en el contenido XML (ver comentario XML y instrucciones de procesamiento).Lo siguiente debería funcionar:

<?xml version='1.0' encoding='UTF-8'?>
<!-- Queries used: ... -->
<dataset>
  ...
</dataset>

¡Gracias por las respuestas a todos!

Resulta que el comentario delante del archivo parecía funcionar, pero cuando profundicé en la fuente de DBUnit, es porque la validación está desactivada.

Intenté cargar un documento simple a través de:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new File("/path/to/file"));

y esto falla con una excepción porque la Declaración XML no es lo primero (como otros indicaron que sería el caso).

Entonces, si bien DBUnit funcionaría, prefiero tener XML válido, así que moví el comentario al final (dado que DBUnit genera la Declaración XML, no es una opción colocar el comentario debajo, aunque preferiría eso... .al menos no sin modificar el XML después del hecho, lo que supondría más trabajo de lo que vale).

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