2013-06-25 9 views
15

Widzę niektóre dokumenty schematu XSD, które deklarują atrybut targetNamespace i xmlns:tns w ich najwyższym schema elemencie. Na przykład. następna została pobrana from here. Wydają się również mieć tę samą wartość ciągu. Rozumiem rolę targetNamespace, ale co robi na tym xmlns:tns?xmln: tns i 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"> 
... 

Odpowiedz

25

Umożliwia odwoływanie się do przestrzeni nazw w późniejszym schemacie. Na przykład, jeśli zadeklarować nazwie typ, a następnie chcą również zadeklarować element tego typu

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

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

po prostu, type="someType" nie będzie działać, bo to się odnosić do (nieistniejąca) someType w http://www.w3.org/2001/XMLSchema przestrzeń nazw (xmlns="..." pliku schematu) zamiast tej w przestrzeni nazw http://www.example.org/Product.

+0

OK, więc "tns" w tym sensie jest jak każdy inny prefiks związany z przestrzenią nazw, nie ma żadnego specjalnego znaczenia, tak jak wszystkie inne prefiksy, prawda? –

+1

@MarcusJuniusBrutus, możesz użyć dowolnego prefiksu, który ci się podoba. Przedrostek 'tns' jest powszechny w tym kontekście jako mnemonik dla" docelowej przestrzeni nazw ", ale równie dobrze można użyć' produktu', 'ns0' lub czegoś podobnego. –