2013-03-24 9 views
7

Per definizione:Che effetto ha l'attributo noNamespaceSchemaLocation sull'analisi XML?

L'attributo noNamespaceSchemaLocation fa riferimento a un documento XML Schema che non dispone di uno spazio dei nomi di destinazione.

In che modo questo attributo modifica il risultato dell'analisi?

Per esempio, prendete questo XML:

<?xml version="1.0"?> 
<name 
    xmlns="http://www.example.com/name" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.example.com/name schema/schema.xsd" 
    title="Mr."> 
    <first>John</first> 
    <middle>M</middle> 
    <last>Doe</last> 
</name> 

riferimento a questo schema:

<?xml version="1.0"?> 
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
xmlns:target="http://www.example.com/name" 
targetNamespace="http://www.example.com/name" elementFormDefault="qualified"> 
    <element name="name"> 
    <complexType> 
     <sequence> 
     <element name="first" type="string"/> 
     <element name="middle" type="string"/> 
     <element name="last" type="string"/> 
     </sequence> 
     <attribute name="title" type="string"/> 
    </complexType> 
    </element> 
</schema> 

ho tolto queste dichiarazioni di namespace dallo schema:

xmlns:target="http://www.example.com/name" 
targetNamespace="http://www.example.com/name" 

senza nemmeno utilizzare il attributo noNamespaceSchemaLocation nel riferimento XML, nessun errore è stato generato. Perché abbiamo persino bisogno di questo attributo in primo luogo?

risposta

8

L'attributo non ha alcun effetto su un parser XML. può influenzare il comportamento di un processore di schema XML se sono impostate le opzioni appropriate; ed è può influenzare analogamente il comportamento di un programma che combina le funzioni di analisi XML e convalida dello schema XML. Indica a un processore dello schema dove cercare uno schema che descriva il documento.

Tuttavia, anche con un processore schema, l'attributo noNamespaceSchemaLocation non influisce sulla convalida di un documento come il tuo in cui gli elementi si trovano tutti in uno spazio dei nomi.

+0

Grazie per la risposta Michael. Suppongo che la mia domanda avrebbe dovuto essere "Quale effetto ha l'attributo noNamespaceSchemaLocation su XML * validation *?". Se una parte del mio documento non ha uno spazio dei nomi, vuoi dire che è l'ora in cui l'effetto noNamespaceSchemaLocation potrebbe dare il via e rimediare ai "spazi dei nomi" non sovrapposti dei dati e dello schema? – Jops

+3

L'attributo indica al processore dello schema dove cercare uno schema che può essere utilizzato per convalidare elementi che non si trovano nello spazio dei nomi. Nel tuo esempio, non ci sono tali elementi. –

+0

Ah, fantastico. Grazie per il chiarimento Michael. Completamente capito ora. – Jops