I wrote a simple tool to generate a DBUnit XML dataset using queries that the user enters. I want to include each query entered in the XML as a comment, but the DBUnit API to generate the XML file doesn't support inserting the comment where I would like it (above the data it generates), so I am resorting to putting the comment with ALL queries either at the top or bottom.
So my question: is it valid XML to place it at either location? For example, above the XML Declaration:
<!-- Queries used: ... -->
<?xml version='1.0' encoding='UTF-8'?>
<dataset>
...
</dataset>
Or below the root node:
<?xml version='1.0' encoding='UTF-8'?>
<dataset>
...
</dataset>
<!-- Queries used: ... -->
I plan to initially try above the XML Declaration, but I have doubts on if that is valid XML, despite the claim from wikipedia:
Comments can be placed anywhere in the tree, including in the text if the content of the element is text or #PCDATA.
I plan to post back if this works, but it would be nice to know if it is an official XML standard.
UPDATE: See my response below for the result of my test.
According to the XML specification, a well-formed XML document is:
where
prolog
isand
Misc
isand
which means that, if you want to have comments at the top, you cannot have an XML type declaration.
You can, however, have comments after the declaration and outside the document element, either at the top or the bottom of the document, because
Misc*
can contain comments.The specification agrees with Wikipedia on comments:
All of this together means that you can put comments anywhere that's not inside other markup, except that you cannot have an XML declaration if you lead with a comment.
However, while in theory theory agrees with practice, in practice it doesn't, so I'd be curious to see how your experiment works out.
The processing instruction must be the very first thing in the XML content (see XML comment and processing instructions). The following should work:
The first example is not valid XML, the declaration has to be the first thing in a XML document.
But besides that, comments can go anywhere else.
Correcting your first example:
Thanks for the answers everyone!
As it turns out, the comment ahead of the file seemed to work, but when I delved into the DBUnit source, it is because validation is turned off.
I did try a simple document load via:
and this fails with an exception because the XML Declaration is not the first thing (as others indicated would be the case).
So, while DBUnit would work, I prefer to have valid XML, so I moved the comment to the end (since DBUnit generates the XML Declaration, it is not an option to place the comment below it, even though I would prefer that... at least not without modifying the XML after the fact, which would be more work than it is worth).