Domanda

Ho scritto un semplice strumento per generare un set di dati XML DBUnit utilizzando le query immesse dall'utente.Voglio includere ogni query inserita nell'XML come commento, ma l'API DBUnit per generare il file XML non supporta l'inserimento del commento dove vorrei (sopra i dati che genera), quindi sto ricorrendo a inserire il commento commenta con TUTTE le query in alto o in basso.

Quindi la mia domanda:è un XML valido per posizionarlo in una delle due posizioni?Ad esempio, sopra la dichiarazione XML:

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

O sotto il nodo radice:

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

Ho intenzione di provare inizialmente sopra la dichiarazione XML, ma ho dei dubbi sulla validità dell'XML, nonostante l'affermazione di Wikipedia:

I commenti possono essere posizionati ovunque nell'albero, incluso nel testo se il contenuto dell'elemento è testo o #PCDATA.

Ho intenzione di postare se funziona, ma sarebbe bello sapere se è uno standard XML ufficiale.

AGGIORNAMENTO: Vedere la mia risposta qui sotto per il risultato del mio test.

È stato utile?

Soluzione

Secondo il Specifica XML, un documento XML ben formato è:

document ::= prolog element Misc*

Dove prolog È

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

E Misc È

Misc ::= Comment | PI | S

E

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

il che significa che, se vuoi avere i commenti in alto, non puoi avere una dichiarazione di tipo XML.

Puoi, tuttavia, avere commenti dopo la dichiarazione e all'esterno dell'elemento del documento, sia in alto che in fondo al documento, perché Misc* può contenere commenti.

La specifica concorda con Wikipedia sui commenti:

2.5 Commenti

[Definizione:I commenti possono apparire ovunque in un documento al di fuori di altri markup;inoltre, possono comparire all'interno della dichiarazione del tipo di documento nei posti consentiti dalla grammatica.Non fanno parte dei dati carattere del documento;un processore XML PUÒ, ma non necessariamente, rendere possibile per un'applicazione recuperare il testo dei commenti.Per compatibilità, la stringa "--" (doppio trattino) NON DEVE comparire all'interno dei commenti.] I riferimenti alle entità dei parametri NON DEVONO essere riconosciuti all'interno dei commenti.

Tutto questo insieme significa che puoi inserire commenti ovunque che non sia all'interno di altri markup, tranne che tu non può avere una dichiarazione XML se inizi con un commento.

Tuttavia, mentre in teoria la teoria concorda con la pratica, in pratica no, quindi sarei curioso di vedere come funziona il tuo esperimento.

Altri suggerimenti

Il primo esempio non è un XML valido, la dichiarazione deve essere la prima cosa in un documento XML.

Ma oltre a ciò, i commenti possono andare altrove.

Correggere il tuo primo esempio:

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

L'istruzione di elaborazione deve essere la primissima cosa nel contenuto XML (vedi commento XML E istruzioni di elaborazione).Quanto segue dovrebbe funzionare:

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

Grazie per le risposte a tutti!

A quanto pare, il commento prima del file sembrava funzionare, ma quando ho approfondito il sorgente DBUnit, è perché la convalida è disattivata.

Ho provato un semplice caricamento del documento tramite:

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

e questo fallisce con un'eccezione perché la dichiarazione XML non è la prima cosa (come altri hanno indicato sarebbe il caso).

Quindi, anche se DBUnit funzionerebbe, preferisco avere un XML valido, quindi ho spostato il commento alla fine (poiché DBUnit genera la dichiarazione XML, non è un'opzione inserire il commento sotto di essa, anche se preferirei che... .almeno non senza modificare l'XML a posteriori, il che comporterebbe più lavoro di quanto valga).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top