XML, пространства имен и E4X

#xml #actionscript-3 #namespaces #e4x

#xml #actionscript-3 #пространства имен #e4x

Вопрос:

Может ли кто-нибудь объяснить мне, для чего именно предназначены пространства имен (xmlns = «…») в XML и как они должны использоваться при навигации по XML с использованием E4X (.. предпочтительно в ActionScript 3)?

Я не могу полностью понять их назначение и использование.

Ответ №1:

Теоретически пространства имен XML используются для того, чтобы избежать конфликта с именами тегов. Таким образом, я могу создать пространство имен, содержащее тег с именем «mytag», а кто-то другой создаст другое пространство имен с тем же тегом «mytag», и не будет никакого конфликта. Каждый тег «mytag» будет четко дифференцирован.

На практике я обнаружил, что пространства имен XML в значительной степени бесполезны (как часто у вас есть два разработчика, создающих тег для одного и того же XML-файла?) и просто делают синтаксический анализ раздражающе сложным.

В EX4 вам нужно будет получить пространство имен, затем добавить к каждому тегу это пространство имен с префиксом. Так, например, если вы хотите получить доступ к тегу <somenamespace::somename> , вы напишете:

 var somenamespace:Namespace = xml.namespace("somenamespace");
var sometag:XML = somenamespace::somename[0];
  

Если вы выполните поиск в Google, вы найдете несколько классов AS3, которые удаляют эти бесполезные пространства имен из XML, чтобы упростить синтаксический анализ.

Комментарии:

1. хорошо — теперь это объясняет, почему я не смог получить доступ к данным в своих узлах! Спасибо!

2. Имейте в виду, что у каждого XML-документа есть пространство имен по умолчанию, которое не имеет префикса. Если вы работаете с четко определенной структурой XML, которую можно проверить с помощью XSD-файла, и вы не можете изменить XSD-файл (например, для MathML), единственный способ «расширить» XML — это ввести ваши собственные элементы в отдельное пространство имен, которым вы владеете. (Каждый XSD может определять, где разрешены такие расширения, например, XML-файлы приложений, используемые в AIR SDK, не позволяют этого.)

Ответ №2:

Многие люди указывают на объяснение Джеймса Кларка как на одно из самых ясных:

http://www.jclark.com/xml/xmlns.htm