2010-04-11 9 views
7

Quando si usa un namespace, si dovrebbe anche indicare dove suo XSD associato è situato in, come si può vedere nel seguente esempio:Is xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance" un caso speciale in XML?

<?xml version="1.0"?> 
<Artist BirthYear="1958" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://www.webucator.com/Artist" 
xsi:schemaLocation="http://www.webucator.com/Artist Artist.xsd"> 
<Name> 
    <Title>Mr.</Title> 
    <FirstName>Michael</FirstName> 
    <LastName>Jackson</LastName> 
</Name> 
</Artist> 

Qui, abbiamo indicato che Artist.xsd dovrebbe essere utilizzato per validare lo spazio dei nomi http://www.webucator.com/Artist. Tuttavia, stiamo anche utilizzando lo spazio dei nomi http://www.w3.org/2001/XMLSchema-instance, ma non abbiamo specificato dove si trova il suo XSD. In che modo i parser XML sanno come gestire questo spazio dei nomi?

Update (in risposta al primo commentatore)

Quindi, possiamo invece di usare:

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:ehcache="http://www.springmodules.org/schema/ehcache" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-2.0.xsd 
      http://www.springmodules.org/schema/ehcache 
      http://www.springmodules.org/schema/cache/springmodules-ehcache.xsd"> 
... 
</beans> 

uso

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:ehcache="http://www.springmodules.org/schema/ehcache"> 
... 
</beans> 

?

risposta

2

Non è necessario indicare dove si trova lo schema. Puoi farlo se vuoi, ma non devi.

In questo esempio, tutte le piattaforme sono in grado di capire dove gli schemi per xsi, xml, xsd e soap sono tutti situati.


EDIT: Come ho detto, tutte le piattaforme sono in grado di conoscere dove gli schemi sono per questi spazi dei nomi ben noti. Molto probabilmente, hanno tutti copie degli schemi. Io uso Visual Studio, e mantiene le copie di questi schemi online, e fa riferimento a loro se necessario.

+0

Si prega di dare un'occhiata al post aggiornato. – Behrang

2

Esistono quattro dichiarazioni incorporate per gli schemi Xml; type, nil, schemaLocation e noNamespaceSchemaLocation come "presenti in ogni schema per definizione". Puoi leggere informazioni su di loro nel Xml Schema recommendation.

+0

Il tuo link è rotto. –

+0

oops, errore di copia incolla - risolto – dkackman

+0

Dove si trova il file XSD per lo spazio dei nomi http://www.w3.org/2001/XMLSchema-instance? In che modo i parser XML sanno dove si trova? Dove viene specificato che i parser XML devono conoscere questa posizione per impostazione predefinita? – Behrang

9

In che modo i parser XML sanno come gestire questo spazio dei nomi?

Non lo fanno, tranne quando lo fanno. L'idea di base è che la stringa "http://www.w3.org/2001/XMLSchema-instance" funzioni come un cookie magico. O il software di elaborazione è stato programmato per riconoscerlo, e quindi agire sulla base di ciò che significa, oppure no.

Così, con il semplice fatto di riconoscimento arriva anche la "conoscenza" di ciò che rappresenta: a "namespace" that defines four attributes ('tipo', 'nil', 'schemaLocation' e 'noNamespaceSchemaLocation') con significati predefiniti fissi.

In altre parole, se si "sa" che cosa la stringa 'http://www.w3.org/2001/XMLSchema-instance' "mezzo", allora anche voi sa automaticamente quali an attribute named xsi:schemaLocation "mezzi": che punti ai documenti dello schema codificati in formalismo del 'W3C XML Schema'.

Questo va oltre ciò che lo XML Namespaces Rec prevede in realtà (che è solo un po 'di handwaving su "nomi universali" o whatnot).Una convenzione è al lavoro qui, la sintassi di namespacing (utilizzando nomi colonizzati) è stata implementata per codificare in modo hard-code una comprensione semantica: "dove trovare lo schema, nel formalismo degli schemi XML di W3C, per questa istanza di documento. " Tutto dipende dalla precedente comprensione di quella stringa di cookie magici.

Si può avere l'impressione che uno spazio dei nomi deve avere uno schema e una macchina elaborabile a tale scopo, e solo nel formalismo degli schemi XML W3C da avviare. Nessuno di questi è necessariamente vero. Esistono altri formalismi di schema (DTD SGML/XML, Relax-NG, entrambi, a differenza degli schemi XML W3C, sono international standards); una definizione di spazio dei nomi non deve essere leggibile dalla macchina (potrebbe essere una prosa, come in effetti è per lo spazio dei nomi 'http://www.w3.org/2001/XMLSchema-instance'!); e uno spazio dei nomi non deve necessariamente essere definito formalmente, poiché tutto ciò che una stringa di spazio dei nomi è garantita per fare è funzionare come un indicatore di disambiguazione.

0

Se si guarda al contenuto di: http://www.w3.org/2001/XMLSchema-instance si ritenuto che non v'è il testo:

... 
<xs:schema targetNamespace="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      xmlns="http://www.w3.org/1999/xhtml"> 
    <xs:annotation> 
    <xs:documentation> 
    <h1>XML Schema instance namespace</h1> 
    <p>See <a href="http://www.w3.org/TR/xmlschema-1/">the XML Schema 
     Recommendation</a> for an introduction</p> 
... 

Perché xmlns="http://www.w3.org/1999/xhtml" che vedete qui sopra collegamento come documento HTML.

Secondo http://www.w3.org/TR/xmlschema-1/#schema-loc (Schema Rappresentazione Constraint: schema posizione documenti di strategia) processori schema-aware possono implementare qualsiasi combinazione delle seguenti strategie, in qualsiasi ordine:

  • tentativo di risolvere il nome del namespace a individuare tale risorsa.

Così http://www.w3.org/2001/XMLSchema-instance punto a se stesso (sì, la ricorsione !!).

Vedi risposta simile: Where is the XSD file for "http://www.w3.org/2001/XMLSchema-instance"?

PS. Qualsiasi processore XML specializzato può trattare http://www.w3.org/2001/XMLSchema-instance come cosa nota senza effettivamente scaricare questa definizione (e la maggior parte lo fa).

PPS. Semantica di http://www.w3.org/2001/XMLSchema-instance definita da XML Schema standard http://www.w3.org/TR/xmlschema-1/

Problemi correlati