2009-05-15 9 views
8

Per quanto ne so, i nomi dei tipi di elementi XML e i nomi degli attributi sono case sensitive.Come ottenere elementi senza distinzione tra maiuscole e minuscole in XML

Esiste un modo o qualsiasi trucco per ottenere caso elementi insensibili?

Chiarimento: Una grammatica è stato definito tramite XSD che viene utilizzato per alcuni clienti di caricare i dati . Gli utenti, i generatori di contenuti, stanno creando file XML utilizzando diversi strumenti , ma molti di loro utilizzano editor di testo normale o altro. A volte quando queste persone cercano di caricare i loro file ottengono errori di incompatibilità. È un errore comune che mischiano i tag lowerCase e upperCase sebbene sia sia sempre chiaro che i tag SONO case sensitive.

Ho accesso al file XSD che definisce questa grammatica e posso cambiarlo. La domanda è come evitare questo problema con tag in lettere maiuscole o minuscole.

Qualche idea?

Grazie in anticipo!

+1

Grazie per le risposte. In questo caso UNFORTUNATELY XML NON è generato dalla macchina. È scritto a mano :-) – Luixv

+0

La conversione dell'ingresso in minuscolo non è un'opzione? –

+0

No, non lo è. Gli utenti hanno una GUI da cui caricano i loro file direttamente. – Luixv

risposta

0

L'XML è normalmente generato dalla macchina. Pertanto, non si dovrebbe avere alcun problema reale qui larghezza <RANdOm /> caso.

Se il vero problema è che due sistemi diversi stanno generando due diversi tipi di tag (<Widget /> vs. <widget />), penso che si potrebbe definire semplicemente entrambi i casi nel vostro XSD.

1

I processori XPath/Xslt fanno distinzione tra maiuscole e minuscole. Non è possibile selezionare un nodo/attributo se si specifica il caso errato.

Nel caso in cui si desidera emettere il nome del nodo e vuole che sia in maiuscolo, si può fare:

upper-case(local-name()) 
5

Se ho ben capito il problema in modo corretto, allora gli errori di casi possono essere corretti solo tra la creazione e il caricamento da uno strumento di analisi di terze parti.

cioè XML File> analizzati contro XSD e corretto> Carica approvato

Si potrebbe fare questo a run-time attraverso lo sviluppo di un'applicazione contenitore per i vostri clienti di creare il file XML in. In alternativa si potrebbe scrivere un'applicazione su il lato server che prende il file caricato e controlla la sintassi. In entrambi i casi dovrai prendere una decisione e poi lavorare!

Molto dipende dalla dimensione del problema. Se hai tag simili in diversi casi nel tuo XSD, ad es. e, in questo caso, avrai bisogno di una soluzione complicata basata sul conteggio dei nodi, ecc.

Se sei semplicemente bloccato con i client che utilizzano casi casuali contro un XSD contenente solo tag in lettere minuscole, dovresti essere in grado di analizzare i file e converti tutti i tag in minuscolo in una volta sola. Questo presuppone che il contenuto tra i tag sia multi-caso e non puoi semplicemente convertire il documento completo.

Come si esegue questa operazione dipende la meccanica della vostra situazione. Ovviamente sarà più facile convincere i clienti a verificare le proprie richieste.Se questo non è pratico, dovrai identificare una finestra di opportunità nel processo che ti consenta di convertire il file nel formato corretto prima che si verifichino degli errori.

Ci sono molti modi per andare su questo argomento per discutere qui. Dipende principalmente dalle competenze o dalle finanze disponibili.

+0

quello che stai dicendo è corretto. Quello che sto cercando è qualcosa al livello XSD. Voglio dire, preferirei evitare di cambiare i metodi sul lato server se riuscirò a far fronte a questo problema a livello di XSD. – Luixv

+0

Comunque, grazie per il commento. Sembra che a livello di XSD non ci sia modo. +1 – Luixv

+0

Ottima risposta, molto di quello che avrei detto! +1 – Cerebrus

1

Come ha detto @Melkisadek, esiste la convalida XSD per uno scopo. Se si consente agli utenti di caricare file con XML non valido, l'applicazione è destinata a fallire a un certo punto quando si accede ai dati contenuti in tali file. Inoltre, l'intero scopo di avere un XSD convalidare lo schema XML di input è stato sconfitto. Se si è disposti a rinunciare all'intera funzione di convalida dello schema, sarà necessario utilizzare un XSLT per convertire tutti i tag in maiuscolo o minuscolo come si desidera (consultare la risposta di @Rashmi).

Sarebbe analogo consentire a un utente di immettere caratteri speciali in un campo di immissione del codice fiscale, solo perché l'utente è più comodo nell'immettere caratteri speciali (Sì, questo esempio è sciocco, non si può pensare a uno migliore !)

Pertanto, nella mia mente, la soluzione sta nel mantenere la convalida dello schema così com'è, ma che fornisce agli utenti un modo per convalidare lo schema prima di caricare. Ad esempio, se si tratta di un'app Web, è possibile fornire un pulsante nella pagina che utilizza Javascript per convalidare il file rispetto allo schema. In alternativa, convalidare sul server solo quando il file viene caricato. In entrambi i casi, fornire un feedback appropriato come il numero di riga su cui giacciono le entità erranti, la posizione del carattere e la ragione per contrassegnare un errore.

0

Dopo il caricamento, a piedi, il file XML (tramite DOM o SAX) e fissare il corpo prima di convalidare?

1

In teoria, si potrebbe tentare di incidere lo schema XML per convalidare nomi degli elementi in modo non corretto capitalizzati.

Questo può essere fatto utilizzando il meccanismo gruppo di sostituzione nello schema XML. Ad esempio, se lo schema aveva definito:

<xsd:element name="foobar" type="xsd:string"/> 

allora si potrebbe aggiungere il seguente al XML Schema:

<xsd:element name="Foobar" type="xsd:string" substitutionGroup="foobar"/> 
    <xsd:element name="FooBar" type="xsd:string" substitutionGroup="foobar"/> 
    <xsd:element name="fooBar" type="xsd:string" substitutionGroup="foobar"/> 
    <xsd:element name="FOOBAR" type="xsd:string" substitutionGroup="foobar"/> 

ecc

per cercare di anticipare i possibili errori che potrebbero fare . Per ogni elemento, potrebbe esserci la 2^n combinazione possibile di casi, dove n è la lunghezza del nome (assumendo che ogni carattere del nome sia una lettera).

In pratica, questo è troppo disturbo, ritarda solo il problema invece di risolverlo, e probabilmente non funzionerà. Se gli utenti non si rendono conto che l'XML fa distinzione tra maiuscole e minuscole, potrebbero non avere etichette finali che corrispondono al caso del tag di inizio e non riuscirà ancora a convalidare.

Come altri hanno già detto, sia pre-processo l'ingresso presentato per risolvere il caso o per arrivare agli utenti di produrre corretto ingresso prima della presentazione esso.

0

La simples soluzione è inviare in minuscolo tutti i tag/attributi quando si carica XML da utente e solo allora controllare sopra XSD progettato per tutti i tag minuscole/attributi

Problemi correlati