Namespace, perché sono necessari per i prefissi?

1

Quindi ho letto su namespace su w3schools e capisco che identificano un elemento in modo univoco. Ma qual è il punto di avere spazi dei nomi se devi avere prefissi accanto a loro. Sei sempre richiesto di avere prefissi con namespace? Se no, hai sempre bisogno di avere spazi dei nomi con prefissi? Se è così, perché?

Ad esempio:

<root xmlns:h="http://www.w3.org/TR/html4/" xmlns:f="http://www.w3schools.com/furniture">

 <h:table>
   <h:tr>
   <h:td>Apples</h:td>
   <h:td>Bananas</h:td>
 </h:tr>

<f:name>African Coffee Table</f:name>
    <f:width>80</f:width>
    <f:length>120</f:length>
  </f:table>
</root>

Non f e h identificano in modo univoco i diversi tipi di elementi?

Grazie per il tuo aiuto. Sono davvero incapace di capire perché esistono spazi dei nomi.

    
posta Uriel Katz 19.06.2013 - 09:38
fonte

3 risposte

1

Si suppone che uno spazio dei nomi XML abbia una ragionevole possibilità di essere universalmente unico. Un prefisso, in particolare quello a una sola lettera, è quasi certo di non esserlo. Una dichiarazione dello spazio dei nomi crea una mappatura da un prefisso altrimenti privo di significato a un identificatore stabile su cui il software può fare affidamento per identificare gli schemi degli elementi XML.

Hai ragione: all'interno di un singolo documento, un autore può assicurarsi che vengano usati prefissi diversi per diversi gruppi di elementi. Ma senza legare quei prefissi a spazi dei nomi univoci, come si realizza una delle seguenti azioni:

  • L'invio di quel file XML a un'organizzazione che utilizza diversi prefissi per gli stessi gruppi di elementi e si aspetta che venga interpretato correttamente da un software (ipotetico) che utilizza solo prefissi?
  • Qualsiasi elaborazione automatizzata di documenti XML? Anche qualcosa di fondamentale come la convalida dello schema: come fa il parser HTML a sapere di associare il prefisso h alla raccolta di elementi HTML, e quindi sa come renderizzare h:table ?

Non esiste un database centrale di prefissi dove h è per sempre e sempre associato ad elementi HTML - questo è lo scopo della dichiarazione dello spazio dei nomi mappatura del prefisso allo spazio dei nomi nell'ambito del documento .

Aggiornamento: chiarimento terminologico

  • URI dello spazio dei nomi , anche chiamato semplicemente namespace: un nome stabile che identifica in modo univoco una raccolta di elementi e attributi XML.
    • Questo è solo un identificatore , scelto come unico.
    • Anche se spesso è un URL, qualunque documento possa essere disponibile a questo URL è irrilevante e non viene consultato durante l'elaborazione XML . Navigare verso l'URL non deve produrre alcun contenuto valido, sebbene a volte la società che ha prodotto lo schema XML, e ha scelto l'URI dello spazio dei nomi per avere un dominio che controllano, sceglie di pubblicare alcune informazioni sul schema a quell'indirizzo.
    • Nota che questo significa che non puoi aspettarti di scaricare uno schema dato un URI dello spazio dei nomi. Avrai bisogno di ottenere degli schemi usando qualche altro meccanismo, probabilmente documentato da chiunque abbia prodotto lo schema.
  • Prefisso: una rappresentazione document-local di un URI dello spazio dei nomi all'interno di un documento XML. Qualsiasi prefisso arbitrario può essere associato a uno spazio dei nomi utilizzando xmlns . Se lo desideri, potresti avere sia xmlns:f="http://www.w3schools.com/furniture" che xmlns:argos="http://www.w3schools.com/furniture" , quindi utilizzare i prefissi in modo intercambiabile: <f:table> o <argos:table> . Al parser non interessa se il prefisso è f o argos - interessa solo che entrambi questi elementi di table appartengano allo spazio dei nomi http://www.w3schools.com/furniture . Inoltre, l'URL http://www.w3schools.com/furniture non deve essere un documento valido. Quando viene utilizzato come URI dello spazio dei nomi XML, la sua funzione solo deve essere un identificativo univoco. Se il parser aveva a disposizione uno schema il cui targetNamespace era http://www.w3schools.com/furniture , poteva convalidare gli elementi table e il loro contenuto usando quello schema.
risposta data 19.06.2013 - 10:18
fonte
0

Il punto degli spazi dei nomi in XML non è solo per rendere chiaro al lettore umano che <h:table> e <f:table> sono cose diverse, ma anche per dire a un parser XML (di validazione) come dovrebbero essere analizzati (per esempio , quali attributi e sotto-elementi sono validi).

I prefissi sono necessari solo se può esserci confusione su quale spazio dei nomi proviene l'elemento. Ad esempio, questo è valido anche perché tutti gli elementi provengono dallo stesso spazio dei nomi:

<root xmlns="http://www.w3schools.com/furniture">
  <table>
    <name>African Coffee Table</name>
    <width>80</width>
    <length>120</length>
  </table>
</root>

I prefissi sono principalmente una scorciatoia per indicare un particolare spazio dei nomi, ma non hanno alcun significato proprio. È l'URI dello spazio dei nomi che dice al parser XML come interpretare gli elementi XML che fanno parte dello spazio dei nomi.

    
risposta data 19.06.2013 - 10:18
fonte
-2

Nel tuo esempio, h è una scorciatoia per lo spazio dei nomi completo http://www.w3.org/TR/html4 . Ora, immagina che il tuo documento sia elaborato da un foglio di stile XSLT che non hai scritto. In questo foglio di stile, lo stesso spazio dei nomi http://www.w3.org/TR/html4 è associato al prefisso anoter, html . Senza la dichiarazione dello spazio dei nomi, non sapresti che html e h si riferiscono allo stesso spazio dei nomi.

    
risposta data 19.06.2013 - 10:01
fonte

Leggi altre domande sui tag