XML jest poza przestrzenia nazw - nie rozuimem co masz na mysli?
Konkretnie to nie XML, ale element ma przestrzeń nazw. Przykładowo każdy może sobie nazwać swój tag
http://www.w3.org/1999/xhtml (i nie jest to żaden adres). Resztę co i jak to można sobie doczytać.
W twoim konkretnym przypadku możesz napisać taki XSD:</p>
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/test" elementFormDefault="qualified">
<xs:element name="Person">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="surname" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Atrybut targetNamespace określa w jakiej przestrzeni nazw będzie element root dokumentu zgodnego z tym schematem. Przykładowy XML będzie taki:
<?xml version="1.0" encoding="UTF-8"?>
<Person xmlns="http://www.example.org/test" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/test namespace.xsd ">
<name>name</name>
<surname>surname</surname>
</Person>
lub taki:
<?xml version="1.0" encoding="UTF-8"?>
<tns:Person xmlns:tns="http://www.example.org/test"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/test namespace.xsd ">
<tns:name>name</tns:name>
<tns:surname>surname</tns:surname>
</tns:Person>
W obu zdefiniowana jest przestrzeń nazw "http://www.example.org/test" przy czym w pierwszym jest domyślna, a w drugim powiązana z prefikem tns (to skrót od targetNamespace i może być dowolny).
Schemat dla dokumentu bez określonej przestrzeni nazw nie ma tego atrybutu:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Person">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="surname" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Ponieważ XSD też jest XMLem można zauważyć, że tagi należące do XSD, tutaj oznaczone prefiksem xs należą do przestrzeni nazw "http://www.w3.org/2001/XMLSchema". Dzięki temu możesz w swoim XML zdefiniować element o nazwie element i parser będzie wiedział, że to twój element, a nie ten z XSD. Ale tu jest akurat Person.
<?xml version="1.0" encoding="UTF-8"?>
<Person>
<name>name</name>
<surname>surname</surname>
</Person>
Tutaj usunąłem atrybuty dotyczące powiązania ze schematem, żeby było jeszcze jaśniej ( xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="nonamespace.xsd").
Przestrzenie nazw są niezbędne, jeżeli w jednym XML znajduje się inny, np. osadzanie svg w xhtml, osadzanie schematu XSD w plikach WSDL, rozszerzenia ws-security w kopertach SOAP i jeszcze wiele innych. XML bez określonej przestrzeni nazw jest prostszy w obsłudze i w wielu zastosowaniach będzie wystarczający.