2013-06-25 13 views
15

Visualizzo alcuni documenti dello schema XSD che dichiarano sia un attributo targetNamespace sia un attributo xmlns:tns nell'elemento superiore schema. Per esempio. il seguente è preso from here. Inoltre sembrano avere lo stesso valore di stringa. Capisco il ruolo di targetNamespace ma cosa fa in più lo xmlns:tns?xmln: tns e targetNamespace

<?xml version="1.0" encoding="UTF-8"?> 
<schema 
    xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.example.org/Product" 
    xmlns:tns="http://www.example.org/Product" 
    elementFormDefault="qualified"> 
... 

risposta

25

Consente di fare riferimento allo spazio dei nomi più avanti nello schema. Ad esempio, se si dichiara un tipo di nome e poi si desidera dichiarare anche un elemento di quel tipo

<complexType name="someType"> 
    <!-- ... --> 
</complexType> 

<element name="someElement" type="tns:someType" /> 

Semplicemente dicendo type="someType" non avrebbe funzionato perché sarebbe riferirsi alla (inesistente) someType nel http://www.w3.org/2001/XMLSchema namespace (lo xmlns="..." del file dello schema) anziché quello nello spazio dei nomi http://www.example.org/Product.

+0

OK, quindi "tns" in questo senso è come qualsiasi altro prefisso associato a un namespace, non ha alcun significato speciale, proprio come tutti gli altri prefissi, giusto? –

+1

@MarcusJuniusBrutus infatti, puoi usare qualsiasi prefisso che ti piace. Il prefisso 'tns' è comune in questo contesto come mnemonico per" lo spazio dei nomi di destinazione ", ma si potrebbe anche usare' product', 'ns0' o qualsiasi altra cosa. –