Newsgroup: it.comp.lang.visual-basic
Titolo: Riflessione XML

Salve a tutti,
ho dovuto aggiornare una procedura VB6 che produceva un file XML da inviare
ad un altro ente.
Il file, tanto per capirci, è fatto con Print # a mano, ma questa è
un'altra storia.
Insomma nel nuovo XML ci sono da aggiungere alcuni campi in alcune sezioni,
io vado tranquillo e aggiungo i campi in fondo, non seguendo l'ordine di
esempio.
Oggi proviamo la validazione che si incavola, proprio dove si aspetta una
voce diversa.
Ora mi domando, a che serve in un XML avere:
<NOMECAMPO>Valore</NOMECAMPO>
Se devono avere poi un ordine preciso?
Devo appurare che l'errore sia effettivamente quello, ma a parte la
leggilità, pensavo che il nome del campo servisse a qualcosa di meglio.
Avete qualche idea di come lavorano in tal senso gli XML?

 Avete qualche idea di come lavorano in tal senso gli XML?
Qui si potrebbe scrivere qualche capitolo :-)
Scrivo due righe ma poi ti rimando a qualche lettura di approfondimento 
(più giù i link).
L'XML per essere valido deve rispondere a 2 precise caratteristiche e cioè:
1) deve essere WELL-FORMED, non deve quindi contenere errori di 
sintassi, ad ogni tag aperto deve corrispondere il rispettivo tag di 
chiusura (bilanciato) e deve esistere un unico nodo root;
Attenzione che l'XML è case-sensitive, <nodo> non è uguale a <Nodo>
2) ogni XML ha un suo schema associato, la sua struttura, se il tuo XML 
rispetta la struttura del suo XML Schema (o XSD) allora è valido (se il 
punto 1 è rispettato).
L'XSD ti dice quali campi deve contenere l'XML, quali sono obbligatori, 
quali facoltativi, quali ripetitivi etc.
Il tuo "errore" è sicuramente dovuto al non rispetto del punto 2.
Tu chiedi
 > Ora mi domando, a che serve in un XML avere:
 > <NOMECAMPO>Valore</NOMECAMPO>
 > Se devono avere poi un ordine preciso?
Perchè l'XML è nato come formato di scambio CROSS-PLATFORM, 
CROSS-SOFTWARE, CROSS-TUTTO,
e per questo deve essere guidato da uno standard.
Se tutti avessero la libertà di mettere i propri tag nell'ordine che 
desiderano (magari ci sarà qualche XSD che permetterà anche questo) 
l'interscambio dei dati diventerbbe sicuramente molto più difficoltoso e 
foriero di errori/incomprensioni e chi più ne ha più ne metta.
ciao
stefano
http://it.wikipedia.org/wiki/XML
http://www.w3.org/XML/
http://www.webmasterpoint.org/xml_pratica/home.asp

 Se devono avere poi un ordine preciso?
La butto li'. I dati, nel file XML, sono organizzati in maniera gerarchica. 
Cio' significa che <NOMECAMPO> potrebbe esistere su diversi livelli della 
gerarchia.
Il fatto di avere i dati organizzati in un determinato modo consente, 
quindi, di verificare il fatto che il file sia conforme allo schema.
Ci ho preso? :-)
Ciao!
    Alex

 Ci ho preso? :-)
Bhe piů o meno č cosě (semplificato)
<TESTATA>	
	<Record>
		<Voce1>
		<Voce2>
		<Voce3>
		<Voce4>
	</Record>
	<Record>
		<Voce1>
		<Voce2>
		<Voce3>
		<Voce4>
	</Record>
	ecc.
</TESTATA>
Ora i segmenti sono ripetuti piů volte, ma č la stessa struttura.
Comunque vabbč, alla fine a me si riduce nel cambiare gli index di un array
secondo il nuovo ordine. Poi tutta l'assegnazione la faccio tramite chiave
(nome).

 foriero di errori/incomprensioni e chi più ne ha più ne metta.
Bhe sicuramente, ripensandoci effettivamente, pur non sapendo come funziona
internamente, non è semplicissimo riordinare i campi.
Però su una INSERT/UPDATE di una tabella, non devo rispettare un ordine dei
campi, e speravo avessero preso questa flessibilità (anche se non c'entra
nulla con le tabelle).

 abbastanza complesso.
In effetti ho scritto un'inesattezza, l'XSD non è obbligatorio, quindi 
se il tuo XML non ha associato un suo XSD, dovrà essere solo well-formed.
Se però il tuo XML ha associato un XSD allora per forza di cose dovrai 
seguire le sue indicazioni e se ti dice che <nome> è obbligatorio (e non 
opzionale) e viene prima di <cognome> allora tu dovrai scriverlo così 
altrimenti sarà well-formed ma NON sarà valido.
Il perchè nel tuo caso debba fare così è da ricercare in chi ha scritto 
il protocollo di comunicazione, evidentemente era una sua esigenza.
Se può esserti utile on-line trovi diversi validatori di XML/XSD, basta 
che faccia una ricerca con google e trovi un oceano.
ciao
stefano

 che faccia una ricerca con google e trovi un oceano.
Capito.
In ogni caso l'XSD ce l'ha la procedura loro di validazione, quando
caricano il file XML.
In ogni caso riaggiustando gli index, col validatore ora passa :)