Что в имени твоем?
Расширяемый язык разметки (Extensible Markup Language, XML) позволяет вам создавать свои собственные теги, документировать их с помощью определений типов документов (Document Type Definition, DTD) или схемы XML и затем без проблем обмениваться данными с другими источниками. Все это хорошо, но может оказаться, что другие используют те же самые, что и вы, имена для элементов и атрибутов, но при этом опираются на иные DTD.
Обращаясь к популярному примеру с книжным магазином, почти наверняка и Know Knew Books, и Amazon.com будут использовать теги с такими именами, как author (автор), title (название), isdn и price (цена). В то же время маловероятно, что они станут использовать те же самые DTD. Это прямой путь к проблемам.
Во избежание подобных конфликтов W3C разработал концепцию пространств имен и ключевого слова xmlns. Благодаря им в одном документе могут использоваться имена элементов и атрибутов, которые иначе вступили бы в конфликт друг с другом. Теперь же они различаются разными префиксами пространства имен и определяются по различным DTD или схемам.
Вот, например, фрагмент кода XML с использованием пространств имен:
<inventory xmlns:storea= “http://www.knowknew.com/ books.dtd” xmlns:storeb= “http://www.amazon.com/schema”> <storea:magazine> <storea:title>Network Magazine</storea:title> </storea:magazine> <storeb:magazine> <storeb:magazine storeb:title= “Data Communications”> </storeb:magazine> </inventory>
В определении DTD магазина А название книги является подэлементом журнала. В схеме магазина Б название является атрибутом журнала.
Благодаря различению имен с помощью разных префиксов пространств имен они могут применяться вместе. Местонахождение DTD и схемы указывается в данном примере с помощью URL, но оно может также определяться с помощью Uniform Resource Name (URN, см. RFC 2141) или Uniform Resource Identifier (URI, см. RFC 2396).