2009-10-19 14 views
21

"vuoto" è un valore valido per lo spazio dei nomi XML? Se sì, cosa significa?xmlns = "" è uno spazio dei nomi xml valido?

Ho il seguente codice XML ma non sono sicuro di quale sia lo spazio dei nomi Field1 e Field2.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Header /> 
    <soap:Body> 
    <Root xmlns="uri"> 
     <Field1 xmlns="">147079737</Field1> 
     <Field2 xmlns="">POL</Field2> 
    </Root> 
    </soap:Body> 
</soapenv:Envelope> 
+0

Una domanda interessante. Se non è legale, come si specifica "nessun spazio dei nomi" per un elemento il cui genitore * è * in un namespace? – skaffman

+9

@skaffman: È legale, e questo è il modo per portare un elemento nello spazio dei nomi globale. –

+3

Concordo con @Frerich Raabe: Senza questo, non avresti modo di liberarti di uno spazio dei nomi ereditato in un nodo discendente. – Tomalak

risposta

23

Sì, è valido. Section 6.2 nel Namespaces in XML 1.0 Recommendation dice espressamente:

Il valore di attributo in una dichiarazione dello spazio dei nomi predefinito potrebbe essere vuoto. Ciò ha lo stesso effetto, nell'ambito della dichiarazione, che non esiste uno spazio dei nomi predefinito.

Citato da commentare:

E 'legale, e questo è il modo per portare un elemento in namespace globale.

+0

Ma la dichiarazione di namespace * default * è sopra? –

+0

@Brian: Sì; vedere Definizione 3 nella Sezione 3 nella "Namespace in XML 1.0 Recommendation" che ho collegato nella mia risposta. Dice '[Definizione: se il nome dell'attributo corrisponde a DefaultAttName, il nome dello spazio dei nomi nel valore dell'attributo è quello dello spazio dei nomi predefinito nell'ambito dell'elemento a cui è allegata la dichiarazione.]'. DefaultAttName è definito come 'xmlns'. –

+0

Nel mio caso se è lo stesso di non avere spazio dei nomi, allora che spazio dei nomi è? XML ha uno spazio dei nomi predefinito predefinito, quello che viene utilizzato, quindi non esiste uno spazio dei nomi predefinito fornito dall'utente come nel mio caso? –

3

Non è un NS XML valido. Non è una dichiarazione XML NS valida. Si prega di verificare section 2.2 di Namespace in XML 1.0:

La stringa vuota, anche se si tratta di un riferimento giuridico URI, non può essere usato come un nome del namespace.

È tuttavia l'unico modo per annullare una dichiarazione NS predefinita se ce n'è una in vigore o non ha alcun effetto. Vedere. Namespace in XML 1.0 e 1.1, section 6.2. Tuttavia, il rec NS 1.1 ha aggiunto un modo per dichiarare una dichiarazione NS con un prefisso.

Quindi è valido, ma non è "uno spazio dei nomi XML valido" come l'OP lo ha scritto.

+0

Sembra che si confondano i prefissi dello spazio dei nomi con gli spazi dei nomi effettivi (URI dello spazio dei nomi). La stringa vuota non è un prefisso spazio dei nomi valido, ma un URI dello spazio dei nomi valido. – vog

+0

Non credo di confondere nulla. Conosco la differenza A proposito, non riesco a vedere dove la mia risposta possa suggerirlo. – lkuty

+0

E la risposta accettata è sbagliata. – lkuty

Problemi correlati