2013-06-25 9 views
15

Ich sehe einige XSD-Schemadokumente, die sowohl ein targetNamespace als auch ein xmlns:tns-Attribut in ihrem oberen schema-Element deklarieren. Z.B. die folgende genommen from here. Sie scheinen auch den gleichen String-Wert zu haben. Ich verstehe die Rolle von targetNamespace aber was macht xmlns:tns obendrein?xmln: tns und 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"> 
... 

Antwort

25

Damit können Sie später im Schema auf den Namespace verweisen. Zum Beispiel, wenn Sie einen benannten Typen deklarieren und will dann auch ein Element der

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

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

Einfach Art erklären sagen type="someType" würde, weil nicht funktionieren, dass auf den (nicht vorhandenen) beziehen würde someType in den http://www.w3.org/2001/XMLSchema Namespace (die xmlns="..." der Schemadatei) und nicht die im Namespace http://www.example.org/Product.

+0

OK, also 'tns' in diesem Sinne ist wie jedes andere Präfix, das an einen Namensraum gebunden ist, es hat keine besondere Bedeutung, genau wie alle anderen Präfixe, richtig? –

+1

@MarcusJuniusBrutus können Sie tatsächlich jedes beliebige Präfix verwenden. Das Präfix 'tns' ist in diesem Kontext üblich als Mnemonik für" target name space ", aber Sie könnten genauso gut' product', 'ns0' oder was auch immer verwenden. –

Verwandte Themen