Domanda

Questo è qualcosa che trovo sempre un po 'difficile da spiegare agli altri: Perché esistono spazi dei nomi XML? Quando dovremmo usarli e quando non dovremmo? Quali sono le insidie ??comuni quando si lavora con spazi dei nomi in XML?

Inoltre, come si relazionano agli schemi XML? Gli schemi XSD devono sempre essere associati a uno spazio dei nomi?

È stato utile?

Soluzione

Sono per consentire la combinazione di più linguaggi di markup, senza doversi preoccupare dei conflitti di nomi di elementi e attributi.

Ad esempio, guarda qualsiasi bit di codice XSLT, quindi pensa cosa accadrebbe se non usassi gli spazi dei nomi e provassi a scrivere un XSLT in cui l'output deve contenere " template " ;, " for-each " ;, ecc. elementi. Errori di sintassi, ecco cosa.

Lascerò i consigli e le insidie ??ad altri con più esperienza di me

Altri suggerimenti

Perché esistono gli spazi dei nomi XML?

Perché, nel 1997, alcune persone molto influenti nel W3C le volevano e non avrebbero accettato di rispondere. Anche quando è stato dimostrato, oso dire in modo conclusivo, che c'erano modi migliori per risolvere il "problema". pensavano di avere, esercitavano ancora la loro influenza per avere i loro desideri scritti in una Raccomandazione del W3C.

Il più grande whopper nella mitologia ormai estesa che circonda gli spazi dei nomi XML è che c'è un merito tecnico per loro. (Questo è l'effetto a valle di una Raccomandazione semplicemente esistente e che occupa quindi lo spazio mentale - "accidenti, deve esserci una (buona) ragione!" - al contrario di una nota a piè di pagina dimenticabile da qualche parte.)

Molto dolore, nessun guadagno .

Quando dovremmo usarli e quando non dovremmo?

Non dovresti mai usarli se puoi aiutarlo. Sfortunatamente, la promozione implacabile di questo dispositivo BAD [*] da parte delle parti interessate ha favorito oggi una serie di specifiche che rendono praticamente impossibile non dover fare i conti con gli spazi dei nomi XML in un punto o nell'altro. Quindi, anche se eviti te stesso gli spazi dei nomi XML, troverai crud incrostato nello spazio dei nomi che ti viene da tutte le direzioni, o peggio, set di strumenti che semplicemente si rifiutano di funzionare a meno che tu non li dia da mangiare.

Quali sono le insidie ??più comuni quando si lavora con spazi dei nomi in XML?

Una trappola molto comune è l'uso delle espressioni Xpath con documenti in cui uno spazio dei nomi è stato "predefinito": lo spazio dei nomi dovrà essere esplicito nelle espressioni. Un altro problema è usarli "correttamente". durante la costruzione di documenti: creano problemi dal nulla .

Inoltre, come si relazionano agli schemi XML? Gli schemi XSD devono sempre essere associati a uno spazio dei nomi?

Non esiste alcuna relazione necessaria, tranne per il fatto che le specifiche dello schema XSD sono state sviluppate in un momento in cui quasi tutti i membri del comitato avevano il bit degli spazi dei nomi XML tra i denti. Quindi hanno lavorato nel modo più profondo possibile. È possibile, tuttavia, utilizzare gli schemi XSD senza spazi dei nomi, ma è uno slogan ripido in salita dato che quasi tutti i set di strumenti che supportano gli schemi XSD presumono che tu "desidererai". per usare gli spazi dei nomi.

[*] BAD = Broken As Designed

AGGIORNAMENTO: Un vecchio saggio su questa non soluzione a un non problema .

È quasi lo stesso che chiedere a " perché utilizziamo i pacchetti per Java / C #? " ;:

  • riusabilità : puoi riutilizzare una serie di tag / attributi definiti in diversi tipi di documenti xml.
  • modularità : se è necessario aggiungere un aspetto " " al tuo XML; l'aggiunta di uno spazio dei nomi al documento XML è più semplice della modifica dell'intera definizione dello schema XML.
  • Evita di inquinare " principale " spazio dei nomi : non devi forzare il tuo parser a lavorare con un'enorme definizione dello schema, basta usare lo spazio dei nomi che devi.

Il più grande trabocchetto IMHO è rappresentato dai documenti di interpretazione dell'interazione umana, ad es sviluppare codice per elaborare un documento XML. È troppo facile concentrarsi sull'espressione letterale del documento piuttosto che sul risultato infoset dell'analisi del documento.

es. i seguenti nodi

<a xmlns="uri:foo"/>
<foo:a xmlns:foo="uri:foo"/>
<bar:a xmlns:bar="uri:foo"/>

sono tutti semanticamente identici - ma molto diversi dall'occhio ingenuo.

Il primo esempio produce un errore molto comune nello sviluppo di XPaths - mancando il fatto che "a" è in uno spazio dei nomi - quindi // a non produce corrispondenze. (o peggio ancora abbinando nodi in uno spazio dei nomi diverso!)

Il terzo esempio apre un altro difetto di comprensione: il testo del prefisso è semanticamente significativo. Quando analizzo i documenti con XPATH posso dichiarare qualsiasi prefisso che mi piace per la corrispondenza purché sia ??uri corrispondente a quelli del documento.

Pensa a loro come cognomi per i tipi di elementi. Se hai due amici, entrambi chiamati Bob, e stai parlando di uno di loro, qualcuno potrebbe chiedere di quale Bob stai parlando. Sto solo dicendo " Bob " non è molto utile, quindi dici "Bob Smith", o "Bob Jones".

È lo stesso con i tipi di elementi. A volte un nome breve non è sufficiente, perché persone diverse possono scegliere lo stesso nome. Quindi includi un URI come "cognome", per distinguere tra i diversi Bob là fuori.

XML è un super-linguaggio, il che significa che è la base per qualsiasi linguaggio basato su XML (ha senso, giusto?). Pensa a XML come a una penna in grado di scrivere qualsiasi frase, in qualsiasi lingua. Tutto dipende dallo scrittore e preferibilmente la lingua dovrebbe essere conosciuta dal lettore.

Uno spazio dei nomi XML è fondamentalmente il nome della lingua, molto simile a " inglese " o " & # 1506; & # 1489; & # 1512; & # 1497; & # 1514; " ;. Aiuto il destinatario del documento XML a analizzarlo ed estrarre le informazioni all'interno.

Diciamo che ho una fabbrica di mobili e tu hai un negozio di mobili. l'applicazione di archiviazione e la mia domanda di fornitura non sono completamente correlate, ma quando comunicano tramite messaggi XML, i messaggi dovrebbero essere comprensibili e facilmente analizzabili da entrambe le parti

Pertanto, entrambi i sistemi devono conoscere il Schema , che definisce la sintassi della lingua e le restrizioni concordate. Pensa allo schema come al dizionario e al libro di testo grammaticale. Lo schema è il documento che entrambi i sistemi dovrebbero conoscere, che chiunque scriva il codice di analisi in ciascun sistema deve conoscere e che include la dichiarazione dello spazio dei nomi.

Ogni spazio dei nomi è denominato come URI, che nella maggior parte dei casi è la posizione del documento dello schema che lo definisce.

Naturalmente, non tutti i documenti XML hanno bisogno di uno spazio dei nomi, specialmente quando non vengono utilizzati per trasmettere informazioni a un sistema remoto. Ad esempio, quando si serializzano oggetti in XML per persistere nel database.

Usiamo gli spazi dei nomi perché le persone vogliono continuare a usare le stesse parole per indicare cose diverse nel proprio idaho privato. Di solito, puoi determinare dal contesto cosa significa una persona. In un database del personale, l'XML è il record del personale. In un database del registro dei veicoli, l'XML è il registro dei veicoli.

Entrambi mantengono un tag chiamato " location " ;, ma il tag significa cose diverse per ciascuno e contiene campi diversi.

Ora, è fantastico: ma cosa succede se è necessario o si desidera archiviare XML da entrambi nello stesso database? O, cosa più interessante, cosa succederebbe se entrambi i database volessero archiviare blocchi XML da qualche altro database comune (es. Un database di Account).

Gli spazi dei nomi XML associano a ciascun tag XML un URI, in modo che il nome del tag stesso abbia un URL di fronte ad esso, che fa parte del nome del tag (ovviamente, i documenti XML effettivi usano una scorciatoia per farlo). Scegliendo con cura l'URI, è facile essere sicuri che i nomi dei tag non si scontrino: è come se i due tag di posizione fossero nominati in modo completamente diverso, quindi non c'è confusione. Come bonus, i due tag di posizione completamente diversi possono includere elementi dal database degli account e dichiarare esplicitamente che stanno parlando della stessa cosa.

La cosa che rende tutto ciò utile è XPATH.

Con quanto sopra, puoi iniziare a scrivere espressioni XPATH che dicono cose come: trovami qualsiasi sezione account: account scaduto ovunque in questo XML. Oppure: trovami qualsiasi account : messaggio di avviso ovunque in questo particolare blocco di XML, dove il messaggio di avviso è un nodo figlio (per quanto profondo) di un personale: pagamento nodo o un nodo : status .

Quell'espressione XPATH potrebbe essere utilizzata da qualche parte in un documento XSLT, il cui compito è convertire l'XML in XHTML o XPDF, per la visualizzazione.

Qual è il payoff? Perché farlo Poiché puoi cercare il file di registro XML, estrai tutti gli account in ritardo dai messaggi ovunque compaiano, senza confonderli con " messaggio " tag prodotti da altri sistemi , convertili in xhtml e visualizzali in grassetto rosso tramite un tag css: tutto senza scrivere un frammento di codice procedurale .

Ad esempio: Spazi dei nomi XML per esempio

Nelle mie parole: se devi usare un formato XML per una compagnia esterna (per esempio) e devi fornire nel documento XML alcune informazioni, che hanno lo stesso nome, hai bisogno di uno spazio dei nomi. Esempio:

<sampleDoc>
   <header title="Hello world!">
      <items>
         <item name="Volvo" color="Blue"/>
      </items>
   </header>
</sampleDoc>

e vuoi unire alcuni dati in questo documento, che ha lo stesso nome, ma un altro senso (quindi valorizza), dovresti usare uno spazio dei nomi:

<sampleDoc>
   <header title="Hello world!">
      <items>
         <item name="Volvo" color="White" my_unique_namespace:color="#FFFFFF"/>
      </items>
   </header>
</sampleDoc>

Ofcourse: puoi cambiare un nome di attributo. Ad esempio a " my_unique_color " ;. Bud in un altro documento, può esserci di nuovo un attributo con lo stesso nome. Pertanto, se disponi di uno spazio dei nomi univoco (ad esempio il nostro dominio Web), puoi sempre utilizzare gli stessi nomi di elementi e / o attributi senza problemi.

Dalla raccomandazione W3 ...

  

Gli spazi dei nomi XML forniscono un metodo semplice per qualificare i nomi degli elementi e degli attributi utilizzati nei documenti Extensible Markup Language associandoli agli spazi dei nomi identificati dai riferimenti URI.

Gli spazi dei nomi vengono utilizzati per chiarire i nomi utilizzati nel documento. Ti dà anche la possibilità di associare un nome breve a uno spazio dei nomi che può quindi essere utilizzato per fare riferimento a un elemento o attributo remoto. Lo spazio dei nomi stesso si riferisce alla posizione che definisce gli elementi e gli attributi utilizzati nel documento. C'è molto altro da sapere, ma questo è il cuore. Ci sono molte più informazioni qui .

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